초기커밋

This commit is contained in:
2025-05-01 07:20:41 +09:00
commit 98bb2e3c5c
2747 changed files with 646947 additions and 0 deletions

View File

@@ -0,0 +1,158 @@
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
using static ClientToGameReq.Types;
using static ClientToGameRes.Types;
namespace GameServer.PacketHandler;
[PacketHandler(typeof(ClientToGameReq), typeof(UseRandomBoxItemReq), typeof(UseRandomBoxItemPacketHandler), typeof(GameLoginListener))]
internal class UseRandomBoxItemPacketHandler : PacketRecvHandler
{
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
{
var player = session as Player;
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var req_msg = recvMessage as ClientToGame;
ArgumentNullReferenceCheckHelper.throwIfNull(req_msg, () => $"req_msg is null !!! - {player.toBasicString()}");
var request = req_msg.Request.UseRandomBoxItemReq;
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
var result = new Result();
var item_guid = request.ItemGuid;
#pragma warning disable CS0219 // 변수가 할당되었지만 해당 값이 사용되지 않았습니다.
ushort num = 1;
#pragma warning restore CS0219 // 변수가 할당되었지만 해당 값이 사용되지 않았습니다.
var server_logic = GameServerApp.getServerLogic();
ArgumentNullException.ThrowIfNull(server_logic);
var random_box_action = player.getEntityAction<RandomBoxItemUseAction>();
NullReferenceCheckHelper.throwIfNull(random_box_action, () => $"random_box_action is null !!! - {player.toBasicString()}");
RandomBoxItemReference random_box_item_ref = new();
random_box_item_ref.m_item_guid = item_guid;
result = random_box_action.conditionCheck(ref random_box_item_ref);
if (result.isFail())
{
send_S2C_ACK_RANDOM_BOX_ITEM_FAIL(player, result);
return result;
}
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "RandomBoxItemUse", delegateRandomBoxItemUse);
if (result.isFail())
{
var err_msg = $"Failed to runTransactionRunnerSafely() !!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
send_S2C_ACK_RANDOM_BOX_ITEM_FAIL(player, result);
return result;
}
send_S2C_ACK_RANDOM_BOX_ITEM(player, result, random_box_item_ref);
return result;
async Task<Result> delegateRandomBoxItemUse() => await randomBoxItemUse(player, random_box_item_ref);
}
private async Task<Result> randomBoxItemUse(Player player, RandomBoxItemReference randomBoxItemRef)
{
var result = new Result();
var random_box_action = player.getEntityAction<RandomBoxItemUseAction>();
NullReferenceCheckHelper.throwIfNull(random_box_action, () => $"random_box_action is null !!! - {player.toBasicString()}");
result = await random_box_action.deleteRandomBox(randomBoxItemRef);
if (result.isFail()) return result;
var gacha_data = randomBoxItemRef.m_gacha_data;
ArgumentNullReferenceCheckHelper.throwIfNull(gacha_data, () => $"gacha_data is null !!! - {player.toBasicString()}");
var gacha = gacha_data.getRandomReward();
randomBoxItemRef.m_rewards.Add(gacha.Reward);
result = await random_box_action.getGachaReward(randomBoxItemRef);
if (result.isFail()) return result;
var server_logic = GameServerApp.getServerLogic();
var batch = new QueryBatchEx<QueryRunnerWithDocument>(player, LogActionType.ItemRandomBoxUse, server_logic.getDynamoDbClient());
{
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
}
var deleted_item = randomBoxItemRef.m_deleted_item_nullable;
ArgumentNullReferenceCheckHelper.throwIfNull(deleted_item, () => $"deleted_item is null !!! - {player.toBasicString()}");
var item_meta = deleted_item.getItemMeta();
ArgumentNullReferenceCheckHelper.throwIfNull(item_meta, () => $"item_meta is null !!! - {player.toBasicString()}");
var info = new RandomBoxItemUseInfo(randomBoxItemRef.m_item_guid, item_meta.ItemId, 1, gacha);
var invoker = new RandomBoxItemUseBusinessLog(info);
batch.appendBusinessLog(invoker);
result = await QueryHelper.sendQueryAndBusinessLog(batch);
var found_transaction_runner = player.findTransactionRunner(TransactionIdType.PrivateContents);
NullReferenceCheckHelper.throwIfNull(found_transaction_runner, () => $"found_transaction_runner is null !!! - {player.toBasicString()}");
var common_result = found_transaction_runner.getCommonResult();
randomBoxItemRef.m_common_result = common_result;
return result;
}
public static bool send_S2C_ACK_RANDOM_BOX_ITEM_FAIL(Player owner, Result result)
{
var ack_packet = new ClientToGame();
ack_packet.Response = new ClientToGameRes();
ack_packet.Response.ErrorCode = result.ErrorCode;
ack_packet.Response.UseRandomBoxItemRes = new();
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
return true;
}
public static bool send_S2C_ACK_RANDOM_BOX_ITEM(Player owner, Result result, RandomBoxItemReference random_box_item_ref)
{
var ack_packet = new ClientToGame();
ack_packet.Response = new ClientToGameRes();
ack_packet.Response.ErrorCode = result.ErrorCode;
ack_packet.Response.UseRandomBoxItemRes = new();
ack_packet.Response.UseRandomBoxItemRes.CommonResult = random_box_item_ref.m_common_result;
//var rewarded_items = random_box_item_ref.m_rewarded_items;
//var rewarded_money = random_box_item_ref.m_rewarded_money;
//var items = RewardManager.Instance.convertItemAndMoneyToItem(rewarded_items, rewarded_money);
//ack_packet.Response.UseRandomBoxItemRes.Items.AddRange(items);
//var deleted_refactoring_items = new List<Item>();
//if (null != random_box_item_ref.m_deleted_item_nullable)
//{
// deleted_refactoring_items.Add(random_box_item_ref.m_deleted_item_nullable);
//}
//var deleted_items = RewardManager.Instance.convertItemAndMoneyToItem(deleted_refactoring_items, new());
//ack_packet.Response.UseRandomBoxItemRes.Items.AddRange(deleted_items);
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
return true;
}
}