159 lines
6.6 KiB
C#
159 lines
6.6 KiB
C#
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;
|
|
}
|
|
}
|
|
|