초기커밋

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,147 @@
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(ClientToGameReq.Types.BuyItemReq), typeof(BuyItemPacketHandler), typeof(GameLoginListener))]
public class BuyItemPacketHandler : PacketRecvHandler
{
private static void send_S2C_ACK_BUY_ITEM(Player player, Result result)
{
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => $"result is null !!! - {player.toBasicString()}");
var ack_packet = new ClientToGame
{
Response = new ClientToGameRes
{
ErrorCode = result.ErrorCode,
BuyItemRes = new ClientToGameRes.Types.BuyItemRes()
}
};
var item_buy_action = player.getEntityAction<ItemBuyAction>();
NullReferenceCheckHelper.throwIfNull(item_buy_action, () => $"item_buy_action is null !!! - {player.toBasicString()}");
if (result.isSuccess())
{
// 구매 아이템 리스트 획득
var buy_items = item_buy_action.BuyItems;
if (null != buy_items)
{
foreach (var item in buy_items.Select(info => info.toItemData4Client()))
{
ack_packet.Response.BuyItemRes.Item.Add(item);
}
}
// char info 획득
var account_attribute = player.getOriginEntityAttribute<AccountAttribute>();
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
var level_attribute = player.getOriginEntityAttribute<LevelAttribute>();
NullReferenceCheckHelper.throwIfNull(level_attribute, () => $"level_attribute is null !!! - {player.toBasicString()}");
var money_attribute = player.getOriginEntityAttribute<MoneyAttribute>();
NullReferenceCheckHelper.throwIfNull(money_attribute, () => $"money_attribute is null !!! - {player.toBasicString()}");
var nickname_attribute = player.getOriginEntityAttribute<NicknameAttribute>();
NullReferenceCheckHelper.throwIfNull(nickname_attribute, () => $"nickname_attribute is null !!! - {player.toBasicString()}");
var char_info = new CharInfo
{
Level = (int)level_attribute.Level,
Exp = (int)level_attribute.Exp,
Gold = money_attribute.Gold,
Sapphire = money_attribute.Sapphire,
Calium = money_attribute.Calium,
Ruby = money_attribute.Ruby,
Usergroup = account_attribute.AuthAdminLevelType.ToString(),
Operator = (int)account_attribute.AuthAdminLevelType,
DisplayName = nickname_attribute.Nickname,
LanguageInfo = (int)account_attribute.LanguageType,
IsIntroComplete = 1
};
ack_packet.Response.BuyItemRes.CurrencyInfo = char_info;
}
GameServerApp.getServerLogic().onSendPacket(player, ack_packet);
}
public override async Task<Result> onProcessPacket(ISession entityWithSession, IMessage recvMessage)
{
var result = new Result();
string err_msg;
var player = entityWithSession as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var recv_msg = recvMessage as ClientToGame;
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!! - {player.toBasicString()}");
var request = recv_msg.Request.BuyItemReq;
NullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
var server_logic = GameServerApp.getServerLogic();
NullReferenceCheckHelper.throwIfNull(server_logic, () => $"server_logic is null !!! - {player.toBasicString()}");
var fn_item_buy = async delegate ()
{
var result = new Result();
var item_buy_action = player.getEntityAction<ItemBuyAction>();
NullReferenceCheckHelper.throwIfNull(item_buy_action, () => $"item_buy_action is null !!! - {player.toBasicString()}");
result = await item_buy_action.tryBuyItem((uint)request.ItemId, request.Count);
if (result.isFail())
{
err_msg = $"Failed to tryBuyItem() !!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
send_S2C_ACK_BUY_ITEM(player, result);
return result;
}
// 3. DB 갱신
var batch = new QueryBatchEx<QueryRunnerWithDocument>( player, LogActionType.ItemBuy
, GameServerApp.getServerLogic().getDynamoDbClient()
, true);
{
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
}
result = await QueryHelper.sendQueryAndBusinessLog(batch);
send_S2C_ACK_BUY_ITEM(player, result);
return result;
};
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "ItemBuy", fn_item_buy);
if (result.isFail())
{
err_msg = $"Failed to runTransactionRunnerSafely()!!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
await QuestManager.It.QuestCheck(player, new QuestItem(EQuestEventTargetType.ITEM, EQuestEventNameType.BOUGHT, request.ItemId));
return result;
}
}

View File

@@ -0,0 +1,156 @@
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;
using ITEM_GUID = System.String;
namespace GameServer.PacketHandler;
[PacketHandler(typeof(ClientToGameReq), typeof(RemoveItemReq), typeof(ItemDeletePacketHandler), typeof(GameLoginListener))]
public class ItemDeletePacketHandler : PacketRecvHandler
{
public override async Task onProcessPacketException( ISession entityWithSession, IMessage recvMessage
, Result errorResult)
{
await Task.CompletedTask;
var player = entityWithSession as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!! - {entityWithSession.toBasicString()}");
send_S2C_ACK_ITEM_DELETE(player, errorResult);
}
public static bool send_S2C_ACK_ITEM_DELETE(Player owner, Result result, Item? removedItem = null)
{
var ack_packet = new ClientToGame();
ack_packet.Response = new ClientToGameRes();
ack_packet.Response.ErrorCode = result.ErrorCode;
ack_packet.Response.RemoveItemRes = new RemoveItemRes();
if(result.isSuccess())
{
ArgumentNullReferenceCheckHelper.throwIfNull(removedItem, () => $"removedItem is null !!! - {owner.toBasicString()}");
var item_attribute = removedItem.getOriginEntityAttribute<ItemAttributeBase>();
NullReferenceCheckHelper.throwIfNull(item_attribute, () => $"item_attribute is null !!! - {owner.toBasicString()}");
ack_packet.Response.RemoveItemRes.ItemGuid = item_attribute.ItemGuid;
ack_packet.Response.RemoveItemRes.Count = item_attribute.ItemStackCount;
}
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet))
{
return false;
}
return true;
}
public override async Task<Result> onProcessPacket(ISession entityWithSession, Google.Protobuf.IMessage recvMessage)
{
var result = new Result();
var err_msg = string.Empty;
var player = entityWithSession as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var recv_msg = recvMessage as ClientToGame;
ArgumentNullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!! - {player.toBasicString()}");
var request = recv_msg.Request.RemoveItemReq;
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
(result, Item? removed_item) = await tryDeleteItemWithTransactionRunner( player, request.ItemGuid, (ushort)request.Count
, LogActionType.ItemDestroyByUser );
if(result.isFail())
{
send_S2C_ACK_ITEM_DELETE(player, result);
return result;
}
NullReferenceCheckHelper.throwIfNull(removed_item, () => $"removed_item is null !!! - {player.toBasicString()}");
send_S2C_ACK_ITEM_DELETE(player, result, removed_item);
return result;
}
public static async Task<(Result, Item?)> tryDeleteItemWithTransactionRunner( Player player
, ITEM_GUID toDeleteItemGuid, ushort toDeletedCount
, LogActionType logActionType )
{
var result = new Result();
var err_msg = string.Empty;
var server_logic = GameServerApp.getServerLogic();
Item? removed_item = null;
var fn_item_delete = async delegate ()
{
var result = new Result();
var inventory_action = player.getEntityAction<InventoryActionBase>();
NullReferenceCheckHelper.throwIfNull(inventory_action, () => $"inventory action is null !!! - {player.toBasicString()}");
(result, removed_item) = await inventory_action.tryDeleteItemByGuid(toDeleteItemGuid, toDeletedCount);
if (result.isFail())
{
err_msg = $"Failed to tryDeleteItemByGuid() !!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
var batch = new QueryBatchEx<QueryRunnerWithDocument>( player, logActionType
, server_logic.getDynamoDbClient()
, true );
{
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
}
result = await QueryHelper.sendQueryAndBusinessLog(batch);
if (result.isFail())
{
return result;
}
return result;
};
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "ItemDelete", fn_item_delete);
if (result.isFail())
{
err_msg = $"Failed to runTransactionRunnerSafely()!!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return (result, null);
}
if (removed_item != null)
{
var item_meta = removed_item.getItemMeta();
if(null == item_meta)
{
err_msg = $"Not found ItemMeta !!!, in tryDeleteItemWithTransactionRunner() !!! : ItemGuid:{toDeleteItemGuid}, count:{toDeletedCount} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
}
else
{
await QuestManager.It.QuestCheck(player, new QuestItem(EQuestEventTargetType.ITEM, EQuestEventNameType.DELETED, item_meta.ItemId));
}
}
return (result, removed_item);
}
}

View File

@@ -0,0 +1,165 @@
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(UseItemReq), typeof(ItemUsePacketHandler), typeof(GameLoginListener))]
public class ItemUsePacketHandler : PacketRecvHandler
{
public static bool send_S2C_ACK_ITEM_USE(Player owner, Result result, Item? updatedItem = null)
{
var ack_packet = new ClientToGame();
ack_packet.Response = new ClientToGameRes();
ack_packet.Response.ErrorCode = result.ErrorCode;
ack_packet.Response.UseItemRes = new UseItemRes();
if (result.isSuccess())
{
ArgumentNullReferenceCheckHelper.throwIfNull(updatedItem, () => $"updatedItem is null !!! - {owner.toBasicString()}");
var item_attribute_base = updatedItem.getEntityAttribute<ItemAttributeBase>();
NullReferenceCheckHelper.throwIfNull(item_attribute_base, () => $"item_attribute_base is null !!! - {owner.toBasicString()}");
ack_packet.Response.UseItemRes.ItemGuid = item_attribute_base.ItemGuid;
ack_packet.Response.UseItemRes.Count = item_attribute_base.ItemStackCount;
var found_transaction_runner = owner.findTransactionRunner(TransactionIdType.PrivateContents);
if (null == found_transaction_runner)
{
var err_msg = $"Not found TransactionRunner !!! : {owner.toBasicString()}";
Log.getLogger().error(err_msg);
}
else
{
ack_packet.Response.UseItemRes.CommonResult = found_transaction_runner.getCommonResult();
}
}
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet))
{
return false;
}
return true;
}
public override async Task<Result> onProcessPacket(ISession entityWithSession, Google.Protobuf.IMessage recvMessage)
{
var result = new Result();
var err_msg = string.Empty;
var player = entityWithSession as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var recv_msg = recvMessage as ClientToGame;
ArgumentNullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!! - {player.toBasicString()}");
var request = recv_msg.Request.UseItemReq;
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
var server_logic = GameServerApp.getServerLogic();
var inventory_action = player.getEntityAction<InventoryActionBase>();
NullReferenceCheckHelper.throwIfNull(inventory_action, () => $"inventory_action is null !!! - {player.toBasicString()} ");
MetaAssets.ItemMetaData? item_meta = null;
var fn_item_use = async delegate ()
{
var result = new Result();
(result, var used_item) = await inventory_action.tryUseItemByGuid(request.ItemGuid, (ushort)request.Count);
if (result.isFail() || null == used_item)
{
err_msg = $"Failed to tryUseItemByGuid() !!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
send_S2C_ACK_ITEM_USE(player, result);
return result;
}
item_meta = used_item.getItemMeta();
NullReferenceCheckHelper.throwIfNull(item_meta, () => $"item_meta is null !!! - {player.toBasicString()} ");
var batch = new QueryBatchEx<QueryRunnerWithDocument>( player, LogActionType.ItemUse
, server_logic.getDynamoDbClient()
, true );
{
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
}
var invokers = MakeItemUseIogInvoker(item_meta, request.Count);
batch.appendBusinessLogs(invokers);
result = await QueryHelper.sendQueryAndBusinessLog(batch);
if (result.isFail())
{
return result;
}
player.sendNotifyMessage();
send_S2C_ACK_ITEM_USE(player, result, used_item);
return result;
};
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "ItemUse", fn_item_use);
if (result.isFail())
{
err_msg = $"Failed to runTransactionRunnerSafely() !!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
NullReferenceCheckHelper.throwIfNull(item_meta, () => $"item_meta is null !!! - {player.toBasicString()} ");
if (item_meta.TypeLarge == EItemLargeType.EXPENDABLE)
{
if (item_meta.TypeSmall == EItemSmallType.REGISTER_ITEM_SOCIAL_ACTION || item_meta.TypeSmall == EItemSmallType.REGISTER_ITEM_INTERIOR)
{
await QuestManager.It.QuestCheck(player, new QuestItem(EQuestEventTargetType.ITEM, EQuestEventNameType.REGISTERED, item_meta.ItemId));
}
}
return result;
}
public List<ILogInvoker> MakeItemUseIogInvoker(ItemMetaData item_meta_data, int count)
{
var result = new Result();
var err_msg = string.Empty;
var invokers = new List<ILogInvoker>();
switch(item_meta_data.TypeSmall)
{
case EItemSmallType.REGISTER_ITEM_SOCIAL_ACTION:
{
var social_action_log_info = SocialActionBusinessLogHelper.toSocialActionLogInfo(item_meta_data.Register_id);
var social_action_business_log = new SocialActionBusinessLog(social_action_log_info);
invokers.Add(social_action_business_log);
}
break;
case EItemSmallType.RECIPE:
var task_log_data = CraftBusinessLogHelper.toCraftRecipeLogInfo(item_meta_data.Register_id);
invokers.Add(new CraftRecipeBusinessLog(task_log_data));
break;
default:
return invokers;
}
return invokers;
}
}

View File

@@ -0,0 +1,139 @@
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;
using ITEM_GUID = System.String;
namespace GameServer.PacketHandler;
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.UseMegaPhoneItemReq), typeof(UseMegaPhoneItemPacketHandler), typeof(GameLoginListener))]
public class UseMegaPhoneItemPacketHandler : PacketRecvHandler
{
public static bool send_S2C_ACK_USE_MEGAPHONE_ITEM(Player player, Result result, ITEM_GUID used_item_guid, Int32 left_count)
{
var ack_packet = new ClientToGame();
ack_packet.Response = new ClientToGameRes();
ack_packet.Response.ErrorCode = result.ErrorCode;
ack_packet.Response.UseMegaPhoneItemRes = new();
ack_packet.Response.UseMegaPhoneItemRes.ItemGuid = used_item_guid;
ack_packet.Response.UseMegaPhoneItemRes.Count = left_count;
if (false == GameServerApp.getServerLogic().onSendPacket(player, ack_packet))
{
return false;
}
return true;
}
public override async Task<Result> onProcessPacket(ISession entityWithSession, IMessage recvMessage)
{
var player = entityWithSession 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.UseMegaPhoneItemReq;
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
var result = new Result();
var err_msg = string.Empty;
var server_logic = GameServerApp.getServerLogic();
var inventory_action = player.getEntityAction<InventoryActionBase>();
NullReferenceCheckHelper.throwIfNull(inventory_action, () => $"inventory_action is null !!! - {player.toBasicString()}");
var item = inventory_action.tryGetItemByItemGuid(request.ItemGuid);
if(item == null)
{
err_msg = $"Failed to find item : {request.ItemGuid}";
result.setFail(ServerErrorCode.ItemNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
var item_data = item.getItemMeta();
if (item_data == null)
{
err_msg = $"Failed to find item meta : {request.ItemGuid}";
result.setFail(ServerErrorCode.ItemMetaDataNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
if (item_data.TypeLarge != MetaAssets.EItemLargeType.EXPENDABLE || item_data.TypeSmall != MetaAssets.EItemSmallType.MEGAPHONE)
{
err_msg = $"Invalid ItemType. TypeLarge : {item_data.TypeLarge}, TypeSmall : {item_data.TypeSmall} {request.ItemGuid}";
result.setFail(ServerErrorCode.ItemInvalidItemType, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
var fn_use_mega_phone = async delegate ()
{
var result = new Result();
(result, Item? removed_item) = await inventory_action.tryDeleteItemByGuid(request.ItemGuid, 1);
if (result.isFail())
{
err_msg = $"Failed to tryDeleteItemByGuid() !!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
send_S2C_ACK_USE_MEGAPHONE_ITEM(player, result, "", 0);
return result;
}
NullReferenceCheckHelper.throwIfNull(removed_item, () => $"removed_item is null !!! - {player.toBasicString()}");
var batch = new QueryBatchEx<QueryRunnerWithDocument>( player, LogActionType.ItemUse
, server_logic.getDynamoDbClient()
, true );
{
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
}
result = await QueryHelper.sendQueryAndBusinessLog(batch);
if (result.isFail())
{
return result;
}
var removed_item_attribute = removed_item.getEntityAttribute<ItemAttributeBase>();
NullReferenceCheckHelper.throwIfNull(removed_item_attribute, () => $"removed_item_attribute is null !!! - {player.toBasicString()}");
send_S2C_ACK_USE_MEGAPHONE_ITEM(player, result, removed_item_attribute.ItemGuid, removed_item_attribute.ItemStackCount);
var receivers = server_logic.getPlayerManager().getUsers();
foreach (var receiver in receivers)
{
ChatNotifyHelper.send_S2C_NTF_CHAT(receiver.Value, ChatType.Channel, player.getUserNickname(), receiver.Value.getUserNickname(), PlayerStateType.None, request.Message);
}
return result;
};
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "UseMegaPhone", fn_use_mega_phone);
if (result.isFail())
{
err_msg = $"Failed to runTransactionRunnerSafely()!!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
return result;
}
}

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;
}
}