초기커밋

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,131 @@
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
namespace GameServer.PacketHandler;
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.ClaimRewardReq), typeof(ClaimRewardPacketHandler), typeof(GameLoginListener))]
public class ClaimRewardPacketHandler : PacketRecvHandler
{
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
{
var owner = session as Player;
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
var recv_msg = recvMessage as ClientToGame;
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!!");
var request = recv_msg.Request.ClaimRewardReq;
var claim_type = request.ClaimType;
var claim_id = request.ClaimId;
ClaimRewardReference claim_reward_ref = new();
claim_reward_ref.m_claim_id = claim_id;
System.Enum.TryParse(claim_type.ToString(), out MetaAssets.ClaimType parsedType);
claim_reward_ref.m_claim_type = parsedType;
claim_reward_ref.m_user_guid = owner.getUserGuid();
var result = await claimReward(owner, claim_reward_ref);
if (result.isFail())
{
send_GS2C_ACK_CLAIM_REWARD_FAIL(owner, result);
return result;
}
send_GS2C_ACK_CLAIM_REWARD(owner, result, claim_reward_ref);
NullReferenceCheckHelper.throwIfNull(claim_reward_ref.m_meta_data, () => $"claim_reward_ref.m_meta_data is null !!!");
var rewards = claim_reward_ref.m_meta_data.DetailInfo.Values.ToList();
foreach (var reward in rewards)
{
await QuestManager.It.QuestCheck(owner, new QuestReward(EQuestEventTargetType.REWARD, EQuestEventNameType.RECEIVED, reward.RewardGroupId));
}
return result;
}
private async Task<Result> claimReward(Player owner, ClaimRewardReference claimRewardRef)
{
var claim_reward_action = owner.getEntityAction<ClaimRewardAction>();
var result = claim_reward_action.claimRewardConditionCheck(ref claimRewardRef);
if (result.isFail()) return result;
result = await owner.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "RewardClaim", delegateRewardClaim);
if (result.isFail())
{
string err_msg = $"Failed to runTransactionRunnerSafely()!!! : {result.toBasicString()} - {owner.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
return result;
async Task<Result> delegateRewardClaim() => await rewardClaim(owner, claimRewardRef);
}
private async Task<Result> rewardClaim(Player owner, ClaimRewardReference claimRewardRef)
{
var claim_reward_action = owner.getEntityAction<ClaimRewardAction>();
var result = await claim_reward_action.rewardClaim(claimRewardRef);
var server_logic = GameServerApp.getServerLogic();
var batch = new QueryBatchEx<QueryRunnerWithDocument>(owner, LogActionType.ClaimReward, server_logic.getDynamoDbClient());
{
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
}
var log_invoker = new ClaimRewardBusinessLog(claimRewardRef.m_claim_id, (int)claimRewardRef.m_claim_type, claimRewardRef.m_reward_group_id);
batch.appendBusinessLog(log_invoker);
result = await QueryHelper.sendQueryAndBusinessLog(batch);
if (result.isFail()) return result;
var found_transaction_runner = owner.findTransactionRunner(TransactionIdType.PrivateContents);
NullReferenceCheckHelper.throwIfNull(found_transaction_runner, () => $"found_transaction_runner is null !!! - {owner.toBasicString()}");
var common_result = found_transaction_runner.getCommonResult();
claimRewardRef.m_common_result = common_result;
return result;
}
private static bool send_GS2C_ACK_CLAIM_REWARD_FAIL(Player owner, Result result)
{
var ack_packet = new ClientToGame();
ack_packet.Response = new ClientToGameRes();
ack_packet.Response.ErrorCode = result.ErrorCode;
ack_packet.Response.ClaimRewardRes = new();
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
return true;
}
private static bool send_GS2C_ACK_CLAIM_REWARD(Player owner, Result result, ClaimRewardReference claimRewardRef)
{
var ack_packet = new ClientToGame();
ack_packet.Response = new ClientToGameRes();
ack_packet.Response.ErrorCode = result.ErrorCode;
ack_packet.Response.ClaimRewardRes = new();
ack_packet.Response.ClaimRewardRes.ClaimId = claimRewardRef.m_claim_id;
ack_packet.Response.ClaimRewardRes.CommonResult = claimRewardRef.m_common_result;
//var rewarded_items = claimRewardRef.m_rewarded_items;
//var rewarded_money = claimRewardRef.m_rewared_money;
//var items = RewardManager.Instance.convertItemAndMoneyToItem(rewarded_items, rewarded_money);
//ack_packet.Response.ClaimRewardRes.RewardItems.AddRange(items);
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
return true;
}
}