초기커밋
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.QuestAcceptReq), typeof(QuestAcceptPacketHandler), typeof(GameLoginListener))]
|
||||
public class QuestAcceptPacketHandler : 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.QuestAcceptReq;
|
||||
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(request.ComposedQuestId);
|
||||
|
||||
var accept_quest_action = owner.getEntityAction<QuestAcceptAction>();
|
||||
var quest_mail_action = owner.getEntityAction<QuestMailAction>();
|
||||
|
||||
AcceptQuestVariable accept_quest_var = new();
|
||||
|
||||
var result = await accept_quest_action.acceptQuestConditionCheck(quest_id, accept_quest_var);
|
||||
if(result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_QUEST_ACCEPT(owner, result, 0, 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = await owner.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "AcceptQuest", delegateAcceptQuest);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_QUEST_ACCEPT(owner, result, 0, 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(accept_quest_var.m_new_quest_nullable, () => $"accept_quest_var.m_new_quest_nullable is null !!!");
|
||||
|
||||
var new_quest_attribute = accept_quest_var.m_new_quest_nullable.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(new_quest_attribute);
|
||||
var taskNum = new_quest_attribute.CurrentTaskNum;
|
||||
var quest_meta_infos = QuestNotifyHelper.makeQuestMetaInfoData(new List<UInt32>() { quest_id });
|
||||
send_GS2C_ACK_QUEST_ACCEPT(owner, result, quest_id, quest_revision, taskNum, quest_meta_infos);
|
||||
|
||||
//Send 해주고 체크해야 될것듯
|
||||
if (true == accept_quest_var.m_is_mail_quest)
|
||||
{
|
||||
quest_mail_action.GS2C_NTF_DELETE_QUEST_MAIL_NOTI(quest_id);
|
||||
}
|
||||
|
||||
await QuestNotifyHelper.send_GS2C_NTF_QUEST_UPDATE(owner, quest_id, quest_revision, new(), false);
|
||||
|
||||
await QuestManager.It.QuestCheck(owner, new QuestActiveQuest(EQuestEventTargetType.QUEST, EQuestEventNameType.ACTIVED, quest_id));
|
||||
await quest_mail_action.normalMailActiveCheck();
|
||||
|
||||
return result;
|
||||
|
||||
async Task<Result> delegateAcceptQuest() => await acceptQuest(owner, quest_id, quest_revision, accept_quest_var);
|
||||
|
||||
}
|
||||
|
||||
private async Task<Result> acceptQuest(Player owner, UInt32 questId, UInt32 questRevision, AcceptQuestVariable acceptQuestVar)
|
||||
{
|
||||
var accept_quest_action = owner.getEntityAction<QuestAcceptAction>();
|
||||
var quest_action = owner.getEntityAction<QuestAction>();
|
||||
var quest_mail_action = owner.getEntityAction<QuestMailAction>();
|
||||
|
||||
accept_quest_action.makeNewQuestAssignInfo(ref acceptQuestVar);
|
||||
|
||||
if (acceptQuestVar.m_is_mail_quest)
|
||||
{
|
||||
NullReferenceCheckHelper.throwIfNull(acceptQuestVar.m_quest_base_info_nullable, () => $"acceptQuestVar.m_quest_base_info_nullable is null !!!");
|
||||
|
||||
var quest_type = EnumHelper.convertEnumValueStringToEnum(acceptQuestVar.m_quest_base_info_nullable.QuestType, MetaAssets.EQuestType.NORMAL);
|
||||
(var mail_result, var quest_mail) = quest_mail_action.getQuestMail(quest_type, questId);
|
||||
if (mail_result.isFail()) return mail_result;
|
||||
|
||||
var quest_mail_attribute = quest_mail.getEntityAttribute<QuestMailAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_mail_attribute, () => $"quest_mail_attribute is null !!!");
|
||||
quest_mail_attribute.deleteEntityAttribute();
|
||||
}
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(owner, LogActionType.QuestMainAssign, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
|
||||
var log_invoker = new QuestAcceptBusinessLog(questId, questRevision, acceptQuestVar.m_quest_type);
|
||||
batch.appendBusinessLog(log_invoker);
|
||||
|
||||
var result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(acceptQuestVar.m_new_quest_nullable, () => $"acceptQuestVar.m_new_quest_nullable is null !!!");
|
||||
quest_action.addNewQuest(questId, acceptQuestVar.m_new_quest_nullable);
|
||||
if (true == acceptQuestVar.m_is_mail_quest)
|
||||
{
|
||||
await quest_mail_action.deleteQuestMail(questId, questRevision);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_QUEST_ACCEPT(Player owner, Result result, UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.QuestAcceptRes = new();
|
||||
ack_packet.Response.QuestAcceptRes.ComposedQuestId = QuestHelper.convertQuestIdAndRevisionToUgqQuestId(questId, questRevision);
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_QUEST_ACCEPT(Player owner, Result result, UInt32 questId, UInt32 questRevision, Int32 taskNum, List<QuestMetaInfo> questMetaInfos)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.QuestAcceptRes = new();
|
||||
ack_packet.Response.QuestAcceptRes.ComposedQuestId = QuestHelper.convertQuestIdAndRevisionToUgqQuestId(questId, questRevision);
|
||||
ack_packet.Response.QuestAcceptRes.TaskNum = taskNum;
|
||||
ack_packet.Response.QuestAcceptRes.QuestMetaInfos.AddRange(questMetaInfos);
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user