초기커밋
This commit is contained in:
240
GameServer/Contents/QuestUGQ/Action/UgqAbortAction.cs
Normal file
240
GameServer/Contents/QuestUGQ/Action/UgqAbortAction.cs
Normal file
@@ -0,0 +1,240 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using UGQDatabase.Models;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqAbortAction : EntityActionBase
|
||||
{
|
||||
public UgqAbortAction(EntityBase owner)
|
||||
: base(owner)
|
||||
{
|
||||
}
|
||||
|
||||
public override async Task<Result> onInit()
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
|
||||
var result = new Result();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public override void onClear()
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<Result> ugqAbort(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var quest_action = player.getEntityAction<QuestAction>();
|
||||
|
||||
var result = quest_action.getQuest(EQuestType.UGQ, questId, out var quest);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
NullReferenceCheckHelper.throwIfNull(quest, () => $"quest is null !!!");
|
||||
|
||||
//내가 들고 있는 퀘스트 리비전기준으로 apiserver 에서 정보를 가져와서 shutdown 상태가 아니면 환불 취소를 할수없다.
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
var owned_quest_revision = quest_attribute.UgqInfo.QuestRevision;
|
||||
|
||||
var ugq_info_action = player.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_info_action, () => $"ugq_info_action is null !!! - {player.toBasicString()}");
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
var language_type = account_attribute.LanguageType;
|
||||
|
||||
(result, var state, _) = await ugq_info_action.makeUgqCurrentState(questId, owned_quest_revision, language_type);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
NullReferenceCheckHelper.throwIfNull(state, () => $"state is null !!! - {player.toBasicString()}");
|
||||
|
||||
//리비전 변경된 상태도 아니고, 셧다운 상태도 아니, 스탠바이 상태도 아니면 포기할수 없다.
|
||||
if (state.UgqState != UgqStateType.Shutdown && state.UgqState != UgqStateType.RevisionChanged && state.UgqState != UgqStateType.Standby)
|
||||
{
|
||||
var err_msg = $"can't abort ugq, cause ugqState Invalid () !!! questId : {questId}, revision : {owned_quest_revision}, state : {state.UgqState} - {player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.UgqAbortCannotCauseInvalidState, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var fn_transaction_runner = async delegate ()
|
||||
{
|
||||
var result = new Result();
|
||||
quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
quest_attribute.deleteEntityAttribute();
|
||||
|
||||
(result, var quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(player, questId, questRevision);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(quest_meta_all_base_info, () => $"quest_meta_all_base_info is null !!! - {player.toBasicString()}");
|
||||
NullReferenceCheckHelper.throwIfNull(quest_meta_all_base_info.m_quest_data_entity, () => $"quest_meta_all_base_info.m_quest_data_entity is null !!! - {player.toBasicString()}");
|
||||
|
||||
var cost = UgqMetaHelper.getUgqCost(quest_meta_all_base_info.m_quest_data_entity.GradeType);
|
||||
var end_quest_action = player.getEntityAction<EndQuestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(end_quest_action, () => $"end_quest_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var has_end_quest = end_quest_action.hasEndQuest(questId, questRevision);
|
||||
|
||||
//이미 깬 이력이 있으면 환불할 것도 없다.
|
||||
if (cost > 0 && has_end_quest == false)
|
||||
{
|
||||
var currency_type = UgqMetaHelper.getUgqUsageFeeType(quest_meta_all_base_info.m_quest_data_entity.GradeType);
|
||||
var money_action = player.getEntityAction<MoneyAction>();
|
||||
result = await money_action.changeMoney(currency_type, cost);
|
||||
if (result.isFail()) return result;
|
||||
}
|
||||
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(player, LogActionType.UgqAbort, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
|
||||
var log_invoker = new UgqAbortBusinessLog(questId, questRevision, UgqAbortType.Revision_Changed);
|
||||
batch.appendBusinessLog(log_invoker);
|
||||
|
||||
result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
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();
|
||||
QuestNotifyHelper.send_GS2C_NTF_QUEST_REWARD(player, common_result);
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
|
||||
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "UgqAbort", fn_transaction_runner);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to runTransactionRunnerSafely() !!! : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = quest_action.deleteQuest(EQuestType.UGQ, questId);
|
||||
|
||||
UGQAbortReason reason = state.UgqState.convertUGQAbortReason();
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
var api_result = await ugq_api_manager.setUgqQuestAborted(player.getUserGuid(), questId, owned_quest_revision, reason, language_type);
|
||||
if (api_result.isFail())
|
||||
{
|
||||
//로그만 남긴다.
|
||||
Log.getLogger().error($"Failed to setUgqQuestAborted : {api_result.toBasicString()} - {player.toBasicString()}");
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> ugqAbortBySelf(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
//셀프 포기는 재화를 환불해 주지 않는다.
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var quest_action = player.getEntityAction<QuestAction>();
|
||||
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
|
||||
(var result, var latest_quest_data) = await ugq_api_manager.getUgqLatestQuestData(questId, language_type);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(latest_quest_data, () => $"latest_quest_data is null !!! - {player.toBasicString()}");
|
||||
var latest_revision = latest_quest_data.Revision;
|
||||
|
||||
result = quest_action.getQuest(EQuestType.UGQ, questId, out var quest);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
NullReferenceCheckHelper.throwIfNull(quest, () => $"quest is null !!!");
|
||||
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
if (quest_attribute.UgqInfo.QuestRevision != latest_revision || latest_quest_data.State != QuestContentState.Live)
|
||||
{
|
||||
var err_msg = $"can't abort ugq by self, cause quest revision changed !!! questId : {questId}, revision : {quest_attribute.UgqInfo.QuestRevision}, latest_revision : {latest_revision} - {player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.UgqAbortCannotCauseInvalidState, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var fn_transaction_runner = async delegate ()
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
quest_attribute.deleteEntityAttribute();
|
||||
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(player, LogActionType.None, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
|
||||
var log_invoker = new UgqAbortBusinessLog(questId, questRevision, UgqAbortType.Self);
|
||||
batch.appendBusinessLog(log_invoker);
|
||||
|
||||
result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
|
||||
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "UgqAbortBySelf", fn_transaction_runner);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to runTransactionRunnerSafely() !!! : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
result = quest_action.deleteQuest(EQuestType.UGQ, questId);
|
||||
|
||||
|
||||
var api_result = await ugq_api_manager.setUgqQuestAborted(player.getUserGuid(), questId, questRevision, UGQAbortReason.Player, language_type);
|
||||
if (api_result.isFail())
|
||||
{
|
||||
//로그만 남긴다.
|
||||
Log.getLogger().error($"Failed to setUgqQuestAborted by self : {api_result.toBasicString()} - {player.toBasicString()}");
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
293
GameServer/Contents/QuestUGQ/Action/UgqAssignAction.cs
Normal file
293
GameServer/Contents/QuestUGQ/Action/UgqAssignAction.cs
Normal file
@@ -0,0 +1,293 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
|
||||
using ServerCore; using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
using MetaAssets;
|
||||
using UGQDatabase.Models;
|
||||
|
||||
|
||||
using static ClientToGameRes.Types;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
|
||||
public class UgqAssignAction : EntityActionBase
|
||||
{
|
||||
public UgqAssignAction(EntityBase owner)
|
||||
: base(owner)
|
||||
{ }
|
||||
public override void onClear()
|
||||
{
|
||||
return;
|
||||
}
|
||||
public override async Task<Result> onInit()
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
var result = new Result();
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<(Result, ClientToGameRes.Types.GS2C_ACK_UGQ_ASSIGN)> ugqAssign(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
//Ugq 정보 호출해서 가져온다. questID로만 가져와서 처리
|
||||
var player = getOwner() as Player;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
|
||||
var ack = new ClientToGameRes.Types.GS2C_ACK_UGQ_ASSIGN();
|
||||
|
||||
//해당 퀘스트에 대한 정보를 가지고 있는지 체크
|
||||
var quest_action = player!.getEntityAction<QuestAction>();
|
||||
var owned_ugq_quests = quest_action.getUgqQuests();
|
||||
var result = new Result();
|
||||
foreach (var owned_quest in owned_ugq_quests)
|
||||
{
|
||||
var owned_quest_attribute = owned_quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(owned_quest_attribute, () => $"owned_quest_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
if (owned_quest_attribute.QuestId == questId && owned_quest_attribute.UgqInfo.QuestRevision > 0)
|
||||
{
|
||||
result.setFail(ServerErrorCode.UgqAlreadyOwnedOldRevisionQuest, $"Ugq already owned, requestQuest : {questId}, {questRevision}, ownedQuest : {owned_quest_attribute.QuestId}, {owned_quest_attribute.UgqInfo.QuestRevision}");
|
||||
return (result, ack);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//호출했는데 Revision 에 해당하는 퀘스트가 사라졌을 수도 있다. (오너가 비활성화 처리 ) 이때 에러 처리
|
||||
var ugq_info_action = player!.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_info_action, () => $"ugq_info_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
result = await ugq_info_action.ugqLatestRevisionCheck(questId, questRevision);
|
||||
if (result.isFail()) return (result, ack);
|
||||
|
||||
(result, var quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(player, questId, questRevision, QuestContentState.Live);
|
||||
if (result.isFail()) return (result, ack);
|
||||
|
||||
var game_quest_data = quest_meta_all_base_info.m_quest_data_entity;
|
||||
NullReferenceCheckHelper.throwIfNull(game_quest_data, () => $"game_quest_data is null !!! - {player.toBasicString()}");
|
||||
var quest_base_info = quest_meta_all_base_info.m_quest_base_info;
|
||||
NullReferenceCheckHelper.throwIfNull(quest_base_info, () => $"quest_base_info is null !!! - {player.toBasicString()}");
|
||||
|
||||
if (true == game_quest_data.Shutdown)
|
||||
{
|
||||
result.setFail(ServerErrorCode.UgqQuestShutdowned, $"Quest is shutdowned : {questId}, {questRevision}");
|
||||
return (result, ack);
|
||||
}
|
||||
|
||||
if (player.getUserGuid().Equals(game_quest_data.UserGuid))
|
||||
{
|
||||
result.setFail(ServerErrorCode.UgqAssignCannotOwnedQuest, $"owned Ugq cannot assign : {questId}, {questRevision}");
|
||||
return (result, ack);
|
||||
}
|
||||
|
||||
var new_quest = new ServerCommon.Quest(player, player.getUserGuid());
|
||||
var accept_quest_var = new AcceptQuestVariable(quest_base_info, false, new_quest);
|
||||
|
||||
var fn_ugc_quest_assign = async delegate ()
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var grade = game_quest_data.GradeType;
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(player, LogActionType.UgqAssign, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
batch.addQuery(new QueryFinal());
|
||||
}
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
var cost = UgqMetaHelper.getUgqCost(grade);
|
||||
|
||||
var end_quest_action = player.getEntityAction<EndQuestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(end_quest_action, () => $"end_quest_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var has_end_quest = end_quest_action.hasEndQuest(questId, questRevision);
|
||||
if (cost > 0 && has_end_quest == false)
|
||||
{
|
||||
//등급별 UgqUsageFeeType 가져온다.
|
||||
var currency_type = UgqMetaHelper.getUgqUsageFeeType(grade);
|
||||
|
||||
var money_action = player.getEntityAction<MoneyAction>();
|
||||
var change_result = await money_action.changeMoney(currency_type, -cost);
|
||||
if (change_result.isFail()) return change_result;
|
||||
|
||||
accept_quest_var.m_quest_cost = cost;
|
||||
}
|
||||
|
||||
//퀘스트 정보 만들어서 저장
|
||||
var quest_accept_action = player.getEntityAction<QuestAcceptAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(end_quest_action, () => $"quest_accept_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = quest_accept_action.newQuestAssign(ref accept_quest_var);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(accept_quest_var, () => $"accept_quest_var is null !!! - {player.toBasicString()}");
|
||||
|
||||
batch.appendBusinessLog(new UgqAssignBusinessLog(questId, questRevision));
|
||||
result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(accept_quest_var.m_new_quest_nullable, () => $"accept_quest_var.m_new_quest_nullable is null !!! - {player.toBasicString()}");
|
||||
|
||||
var quest_action = player.getEntityAction<QuestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_action, () => $"quest_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
quest_action.addNewQuest(questId, accept_quest_var.m_new_quest_nullable);
|
||||
|
||||
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();
|
||||
|
||||
//여기서 데이터 만든다
|
||||
ack.QuestMetaInfos.AddRange(game_quest_data.QuestScriptMetas);
|
||||
ack.Quests.AddRange(await QuestMetaHelper.makeQuestInfoData(new List<ServerCommon.Quest> { accept_quest_var.m_new_quest_nullable }));
|
||||
ack.UgqGameQuestDataForClients.AddRange(new List<UgqGameQuestDataForClient>() { game_quest_data.UgqGameQuestDataForClient });
|
||||
ack.CommonResult = common_result;
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "UgqQuestAssign", fn_ugc_quest_assign);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to runTransactionRunnerSafely : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
|
||||
return (result, ack);
|
||||
}
|
||||
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
|
||||
//퀘스트 assign 후 api 서버 쪽으로 set-quest-accepted 전달
|
||||
var api_result = await ugq_api_manager.setUgqQuestAccepted(user_guid, questId, questRevision, language_type); //임시 테스트 를 위해서 TestQeustData를 가져온다.
|
||||
if(api_result.isFail())
|
||||
{
|
||||
//로그만 남긴다.
|
||||
Log.getLogger().error($"Failed to setUgqQuestAccepted : {api_result.toBasicString()} - {player.toBasicString()}");
|
||||
}
|
||||
|
||||
return (result, ack);
|
||||
}
|
||||
|
||||
public async Task<(Result, GS2C_ACK_UGQ_REASSIGN?, UInt32 newQuestRevision)> ugqReAssign(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var ack = new GS2C_ACK_UGQ_REASSIGN();
|
||||
|
||||
//api server에서 최신 정보를 가져온다.
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
|
||||
var quest_action = player.getEntityAction<QuestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_action, () => $"quest_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
|
||||
var result = quest_action.getQuest(EQuestType.UGQ, questId, out var old_quest);
|
||||
if (result.isFail()) return (result, null, 0);
|
||||
NullReferenceCheckHelper.throwIfNull(old_quest, () => $"old_quest is null !!! - {player.toBasicString()}");
|
||||
|
||||
(result, var new_quest_data) = await ugq_api_manager.getUgqLatestQuestData(questId, language_type);
|
||||
if (result.isFail()) return (result, null, 0);
|
||||
NullReferenceCheckHelper.throwIfNull(new_quest_data, () => $"new_quest_data is null !!! - {player.toBasicString()}");
|
||||
|
||||
(result, var new_quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(player, questId, (UInt32)new_quest_data.Revision, QuestContentState.Live);
|
||||
if (result.isFail()) return (result, ack, 0);
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(new_quest_meta_all_base_info, () => $"new_quest_meta_all_base_info is null !!! - {player.toBasicString()}");
|
||||
var new_game_quest_data = new_quest_meta_all_base_info.m_quest_data_entity;
|
||||
var new_quest_base_info = new_quest_meta_all_base_info.m_quest_base_info;
|
||||
NullReferenceCheckHelper.throwIfNull(new_quest_base_info, () => $"new_quest_base_info is null !!! - {player.toBasicString()}");
|
||||
|
||||
var new_quest = new ServerCommon.Quest(player, player.getUserGuid());
|
||||
|
||||
var fn_transaction_runner = async delegate ()
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var old_quest_attribute = old_quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(old_quest_attribute, () => $"old_quest_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
old_quest_attribute.deleteEntityAttribute();
|
||||
|
||||
var new_accept_quest_var = new AcceptQuestVariable(new_quest_base_info, false, new_quest);
|
||||
new_accept_quest_var.m_quest_cost = 0;
|
||||
new_accept_quest_var.m_quest_type = EQuestType.UGQ;
|
||||
|
||||
var quest_accept_action = player.getEntityAction<QuestAcceptAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_accept_action, () => $"quest_accept_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
result = quest_accept_action.newQuestAssign(ref new_accept_quest_var);
|
||||
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(player, LogActionType.UgqReAssign, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
|
||||
batch.appendBusinessLog(new UgqReAssignBusinessLog(questId, (UInt32)new_quest_data.Revision));
|
||||
|
||||
result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(new_accept_quest_var.m_new_quest_nullable, () => $"new_accept_quest_var.m_new_quest_nullable is null !!! - {player.toBasicString()}");
|
||||
var quest_type = EnumHelper.convertEnumTypeAndValueStringToEnum(new_quest_base_info.QuestType, EQuestType.NORMAL);
|
||||
|
||||
var quest_action = player.getEntityAction<QuestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_action, () => $"quest_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
quest_action.deleteQuest(quest_type, questId);
|
||||
|
||||
quest_action.addNewQuest(questId, new_accept_quest_var.m_new_quest_nullable);
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "UgqReAssign", fn_transaction_runner);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to runTransactionRunnerSafely() !!! : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return (result, null, 0);
|
||||
}
|
||||
|
||||
//여기서 데이터 만든다
|
||||
//ack.QuestMetaInfos.AddRange(new_game_quest_data.QuestScriptMetas);
|
||||
//ack.Quests.AddRange(await QuestMetaHelper.makeQuestInfoData(new List<ServerCommon.Quest> { new_quest }));
|
||||
//ack.UgqGameQuestDataForClients.AddRange(new List<UgqGameQuestDataForClient>() { new_game_quest_data.UgqGameQuestDataForClient });
|
||||
ack.DeletedComposedQuestId = QuestHelper.convertQuestIdAndRevisionToUgqQuestId(questId, questRevision);
|
||||
|
||||
return (result, ack, (UInt32)new_quest_data.Revision);
|
||||
}
|
||||
}
|
||||
531
GameServer/Contents/QuestUGQ/Action/UgqInfoAction.cs
Normal file
531
GameServer/Contents/QuestUGQ/Action/UgqInfoAction.cs
Normal file
@@ -0,0 +1,531 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Net.Http;
|
||||
|
||||
|
||||
using Newtonsoft.Json;
|
||||
using Amazon.Runtime.Internal.Endpoints.StandardLibrary;
|
||||
|
||||
|
||||
using ServerCore; using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using UGQDatabase.Models;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqInfoAction : EntityActionBase
|
||||
{
|
||||
public UgqInfoAction(EntityBase owner)
|
||||
: base(owner)
|
||||
{}
|
||||
public override void onClear()
|
||||
{
|
||||
return;
|
||||
}
|
||||
public override async Task<Result> onInit()
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
var result = new Result();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public async Task<(Result, UgqBoardSearchResult?)> getPagedUgqFromBoard(UgqSearchCategoryType searchCategoryType = UgqSearchCategoryType.GradeAmateur,
|
||||
UgqSortType sortType = UgqSortType.New,
|
||||
Int32 pageNumber = 1,
|
||||
string searchText = "",
|
||||
UgqSearchType searchType = UgqSearchType.Title)
|
||||
{
|
||||
//TODO : 최대 입력 글자수 체크
|
||||
//TODO : paging 된 데이터에 대해서 갱신 시간을 그때 처리 안하는게 좋을것 같긴 한데... 리프레시 타임 Meta로 빼서 처리
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
|
||||
|
||||
var language_type = player.getLanguageType();
|
||||
|
||||
var user_guid = player.getUserGuid();
|
||||
var search_result = new UgqBoardSearchResult();
|
||||
var result = new Result();
|
||||
|
||||
var page_size = MetaHelper.GameConfigMeta.UGQBoardMaxListAmount;
|
||||
switch (searchCategoryType)
|
||||
{
|
||||
case UgqSearchCategoryType.GradeAmateur:
|
||||
case UgqSearchCategoryType.GradeRisingStar:
|
||||
case UgqSearchCategoryType.GradeMaster:
|
||||
UgqUICategoryGradeType grade_type = UgqApiHelper.convertSearchCategoryTypeToUICategoryGradeType(searchCategoryType);
|
||||
var dict = UgqApiHelper.makeDictionaryFromSearchQuestBoard(pageNumber, grade_type, searchType, searchText, sortType, language_type, page_size);
|
||||
(result, search_result) = await ugq_api_manager.getPagedGradeUgqFromBoard(dict, language_type);
|
||||
break;
|
||||
|
||||
case UgqSearchCategoryType.Bookmark:
|
||||
dict = UgqApiHelper.makeDictionaryFromSearchQuestBoard(pageNumber, UgqUICategoryGradeType.None, UgqSearchType.None, string.Empty, sortType, language_type, page_size);
|
||||
(result, search_result) = await ugq_api_manager.getPagedBookmarkUgqFromBoard(dict, user_guid);
|
||||
break;
|
||||
case UgqSearchCategoryType.SpotLight:
|
||||
default:
|
||||
var err_msg = $"getPagedUgqFromBoard Invalid searchCategoryType : {searchCategoryType} !!!";
|
||||
result.setFail(ServerErrorCode.UgqApiServerInvaildSearchCategoryType, err_msg);
|
||||
Log.getLogger().info(result.toBasicString());
|
||||
break;
|
||||
}
|
||||
|
||||
if (result.isFail())
|
||||
{
|
||||
return (result, null);
|
||||
}
|
||||
|
||||
return (result, search_result);
|
||||
}
|
||||
|
||||
public async Task<(Result, UgqBoardSportlightResult?)> getUgqSpotlightFromBoard()
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
|
||||
var dict = UgqApiHelper.makeDictionaryFromLanguageType(language_type);
|
||||
|
||||
var (result, search_result) = await ugq_api_manager.getPagedSpotLightUgqFromBoard(dict);
|
||||
|
||||
return (result, search_result);
|
||||
}
|
||||
|
||||
public async Task<(Result, UgqBoardItemDetail?)> getUgqDetailFromBoard(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
|
||||
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var dict = UgqApiHelper.makeDictionaryForUgqQuestId(questId, questRevision);
|
||||
|
||||
(var result, var board_item_detail) = await ugq_api_manager.getUgqDetailFromBoard(dict, user_guid, language_type);
|
||||
|
||||
return (result, board_item_detail);
|
||||
}
|
||||
|
||||
|
||||
public (Result, List<string>) getUgqFromNpc(string npcGuid)
|
||||
{
|
||||
var result = new Result();
|
||||
var ugqs = new List<string>();
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
|
||||
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
return (result, ugqs);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public async Task<Result> ugqRegisterBookmark(UInt32 questId)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
|
||||
|
||||
var account_attribute = player.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var dict = UgqApiHelper.makeDictionaryFromLanguageTypeWithMediaType(language_type);
|
||||
|
||||
result = await ugq_api_manager.ugqRegisterBookmark(dict, questId, user_guid);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> ugqDeregisterBookmark(UInt32 questId)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var dict = UgqApiHelper.makeDictionaryFromLanguageTypeWithMediaType(language_type);
|
||||
|
||||
result = await ugq_api_manager.ugqDeRegisterBookmark(dict, questId, user_guid);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> ugqRegisterLike(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
|
||||
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var dict = UgqApiHelper.makeDictionaryFromLanguageTypeWithMediaType(language_type);
|
||||
result = await ugq_api_manager.ugqRegisterLike(dict, questId, questRevision, user_guid);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> ugqDeregisterLike(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
|
||||
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var dict = UgqApiHelper.makeDictionaryFromLanguageTypeWithMediaType(language_type);
|
||||
result = await ugq_api_manager.ugqDeregisterLike(dict, questId, questRevision, user_guid);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public async Task<Result> getUgqReport(UInt32 questId, UInt32 questRevision, string reportText)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
//몇자 이상 넘어가면 에러 처리, 빈값이어도 에러 처리
|
||||
if (MetaHelper.GameConfigMeta.MinReportContentNum > reportText.Length
|
||||
|| MetaHelper.GameConfigMeta.MaxReportContentNum < reportText.Length)
|
||||
{
|
||||
var err_msg = $"fail to report ugc !!! : invalid report text length - {reportText.Length}";
|
||||
result.setFail(ServerErrorCode.UgqReportInvalidTextLength, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
return result;
|
||||
}
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
|
||||
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var dict = UgqApiHelper.makeDictionaryFromLanguageTypeWithMediaType(language_type);
|
||||
|
||||
result = await ugq_api_manager.ugqReport(dict, questId, questRevision, user_guid, reportText);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public async Task<(Result, List<UgqCurrentState>)> reloadUgqCurrentState()
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var states = new List<UgqCurrentState>();
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
var quest_action = player.getEntityAction<QuestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_action, () => $"quest_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var quests = quest_action.getQuests();
|
||||
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
|
||||
foreach (var quest in quests)
|
||||
{
|
||||
var quest_attribute = quest.Value.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var quest_revision = quest_attribute.UgqInfo.QuestRevision;
|
||||
if (quest_revision == 0) continue;
|
||||
|
||||
var quest_id = quest.Key.Item2;
|
||||
|
||||
(result, var state, _) = await makeUgqCurrentState(quest_id, quest_revision, language_type);
|
||||
if (result.isFail())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
NullReferenceCheckHelper.throwIfNull(state, () => $"state is null !!! - {player.toBasicString()}");
|
||||
|
||||
states.Add(state);
|
||||
|
||||
}
|
||||
return (result, states);
|
||||
}
|
||||
|
||||
public async Task<(Result, UgqCurrentState?, UgqGradeType)> makeUgqCurrentState(UInt32 questId, UInt32 questRevision, LanguageType languageType)
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var state = new UgqCurrentState();
|
||||
|
||||
state.ComposedQuestId = QuestHelper.convertQuestIdAndRevisionToUgqQuestId(questId, questRevision);
|
||||
//state.UgqQuestId.QuestRevision = questRevision;
|
||||
|
||||
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
|
||||
|
||||
(var result, var latest_game_quest_data) = await ugq_api_manager.getUgqLatestQuestData(questId, languageType);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"fail to getUgqLatestQuestData !!! questId : {questId}, {player.getUserGuid()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return (result, null, UgqGradeType.None);
|
||||
}
|
||||
NullReferenceCheckHelper.throwIfNull(latest_game_quest_data, () => $"latest_game_quest_data is null !!! - {player.toBasicString()}");
|
||||
|
||||
var grade = latest_game_quest_data.GradeType;
|
||||
|
||||
if (questRevision < latest_game_quest_data.Revision)
|
||||
{
|
||||
if (false == latest_game_quest_data.Shutdown)
|
||||
{
|
||||
state.UgqState = UgqStateType.Shutdown;
|
||||
}
|
||||
else
|
||||
{
|
||||
state.UgqState = UgqStateType.RevisionChanged;
|
||||
}
|
||||
}
|
||||
else if (questRevision == latest_game_quest_data.Revision)
|
||||
{
|
||||
if (true == latest_game_quest_data.Shutdown)
|
||||
{
|
||||
state.UgqState = UgqStateType.Shutdown;
|
||||
}
|
||||
else
|
||||
{
|
||||
state.UgqState = UgqStateType.Live;
|
||||
}
|
||||
}
|
||||
else if (latest_game_quest_data.UgqGameQuestDataForClient.UgqStateType == UgqStateType.Standby)
|
||||
{
|
||||
state.UgqState = UgqStateType.Standby;
|
||||
}
|
||||
else
|
||||
{
|
||||
var err_msg = $"UgqQuestData Invalid questId : {questId}, questRevision : {questRevision}, latest_game_quest_data.Revision :{latest_game_quest_data.Revision}, {player.getUserGuid()}";
|
||||
result.setFail(ServerErrorCode.UgqQuestDataInvalidRevision, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
return (result, null, grade);
|
||||
}
|
||||
|
||||
return (result, state, grade);
|
||||
}
|
||||
|
||||
|
||||
public async Task<List<AllUgqInfos>> makeUqgInfosForClient()
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var quest_action = player!.getEntityAction<QuestAction>();
|
||||
var quests = quest_action.getUgqQuests();
|
||||
|
||||
List<AllUgqInfos> all_ugq_infos = new();
|
||||
|
||||
foreach (var quest in quests)
|
||||
{
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
if (quest_attribute.UgqInfo.QuestRevision == 0) continue;
|
||||
|
||||
var quest_id = quest_attribute.QuestId;
|
||||
var quest_revision = quest_attribute.UgqInfo.QuestRevision;
|
||||
|
||||
var ugq_info_action = player!.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_info_action, () => $"ugq_info_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
(var result, var quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(player, quest_id, quest_revision, quest_attribute.UgqInfo.UqgState);
|
||||
if (result.isFail()) continue;
|
||||
NullReferenceCheckHelper.throwIfNull(quest_meta_all_base_info, () => $"quest_meta_all_base_info is null !!! - {player.toBasicString()}");
|
||||
|
||||
var game_quest_data = quest_meta_all_base_info.m_quest_data_entity;
|
||||
NullReferenceCheckHelper.throwIfNull(game_quest_data, () => $"game_quest_data is null !!! - {player.toBasicString()}");
|
||||
var quest_base_info = quest_meta_all_base_info.m_quest_base_info;
|
||||
NullReferenceCheckHelper.throwIfNull(quest_base_info, () => $"quest_base_info is null !!! - {player.toBasicString()}");
|
||||
|
||||
game_quest_data.UgqGameQuestDataForClient.UgqGradeType = game_quest_data.GradeType;
|
||||
|
||||
List<ServerCommon.Quest> ugq_quests = new();
|
||||
List<QuestMetaInfo> meta_infos = new();
|
||||
List<UgqGameQuestDataForClient> ugq_game_quest_data_for_clients = new();
|
||||
|
||||
var quest_infos = await QuestMetaHelper.makeQuestInfoData(new List<ServerCommon.Quest> { quest });
|
||||
meta_infos.AddRange(game_quest_data.QuestScriptMetas);
|
||||
ugq_game_quest_data_for_clients.AddRange(new List<UgqGameQuestDataForClient>() { game_quest_data.UgqGameQuestDataForClient });
|
||||
|
||||
var all_info = new AllUgqInfos();
|
||||
all_info.Quests.AddRange(quest_infos);
|
||||
all_info.QuestMetaInfos.AddRange(meta_infos);
|
||||
all_info.UgqGameQuestDataForClients.AddRange(ugq_game_quest_data_for_clients);
|
||||
|
||||
all_ugq_infos.Add(all_info);
|
||||
}
|
||||
|
||||
return all_ugq_infos;
|
||||
|
||||
}
|
||||
|
||||
public async Task<List<AllUgqInfos>> makeUqgInfoForClient(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var all_ugq_infos = new List<AllUgqInfos>();
|
||||
|
||||
var quest_action = player!.getEntityAction<QuestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_action, () => $"quest_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
(var result, var quest) = await quest_action.getQuest(questId, questRevision);
|
||||
if (result.isFail()) return all_ugq_infos;
|
||||
NullReferenceCheckHelper.throwIfNull(quest, () => $"quest is null !!! - {player.toBasicString()}");
|
||||
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
if (questRevision == 0) return all_ugq_infos;
|
||||
//var quest_id = quest_attribute.QuestId;
|
||||
//var quest_revision = quest_attribute.UgqInfo.QuestRevision;
|
||||
|
||||
var ugq_info_action = player!.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_info_action, () => $"ugq_info_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
(result, var quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(player, questId, questRevision, quest_attribute.UgqInfo.UqgState);
|
||||
if (result.isFail()) return all_ugq_infos;
|
||||
|
||||
var game_quest_data = quest_meta_all_base_info.m_quest_data_entity;
|
||||
NullReferenceCheckHelper.throwIfNull(game_quest_data, () => $"game_quest_data is null !!! - {player.toBasicString()}");
|
||||
var quest_base_info = quest_meta_all_base_info.m_quest_base_info;
|
||||
NullReferenceCheckHelper.throwIfNull(quest_base_info, () => $"quest_base_info is null !!! - {player.toBasicString()}");
|
||||
|
||||
List<ServerCommon.Quest> ugq_quests = new();
|
||||
List<QuestMetaInfo> meta_infos = new();
|
||||
List<UgqGameQuestDataForClient> ugq_game_quest_data_for_clients = new();
|
||||
|
||||
var quest_infos = await QuestMetaHelper.makeQuestInfoData(new List<ServerCommon.Quest> { quest });
|
||||
meta_infos.AddRange(game_quest_data.QuestScriptMetas);
|
||||
ugq_game_quest_data_for_clients.AddRange(new List<UgqGameQuestDataForClient>() { game_quest_data.UgqGameQuestDataForClient });
|
||||
|
||||
var all_info = new AllUgqInfos();
|
||||
all_info.Quests.AddRange(quest_infos);
|
||||
all_info.QuestMetaInfos.AddRange(meta_infos);
|
||||
all_info.UgqGameQuestDataForClients.AddRange(ugq_game_quest_data_for_clients);
|
||||
|
||||
all_ugq_infos.Add(all_info);
|
||||
|
||||
return all_ugq_infos;
|
||||
|
||||
}
|
||||
|
||||
public async Task<Result> ugqLatestRevisionCheck(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
|
||||
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
|
||||
(var result, var latest_quest_data) = await ugq_api_manager.getUgqLatestQuestData(questId, language_type);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(latest_quest_data, () => $"latest_quest_data is null !!! - {player.toBasicString()}");
|
||||
if (latest_quest_data.Revision > questRevision)
|
||||
{
|
||||
var err_msg = $"ugq revision updateed !!! : questId : {questId}, requestedquestRevision : {questRevision}, latest_quest_data.Revision : {latest_quest_data.Revision}";
|
||||
result.setFail(ServerErrorCode.UgqQuestDataRevisionUpdated, err_msg);
|
||||
//Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
if (latest_quest_data.Revision < questRevision)
|
||||
{
|
||||
var err_msg = $"ugq revision updateed !!! : questId : {questId}, requestedquestRevision : {questRevision}, latest_quest_data.Revision : {latest_quest_data.Revision}";
|
||||
result.setFail(ServerErrorCode.UgqRevisionCannotSmallerThanRequestedRevision, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
if (latest_quest_data.State != QuestContentState.Live)
|
||||
{
|
||||
var err_msg = $"ugq state is not live !!! : questId : {questId}, requestedquestRevision : {questRevision}, latest_quest_data.state : {latest_quest_data.State}";
|
||||
result.setFail(ServerErrorCode.UgqRevisionStateNotLive, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
106
GameServer/Contents/QuestUGQ/Action/UgqRewardAction.cs
Normal file
106
GameServer/Contents/QuestUGQ/Action/UgqRewardAction.cs
Normal file
@@ -0,0 +1,106 @@
|
||||
using ServerCore; using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqRewardAction : EntityActionBase
|
||||
{
|
||||
public UgqRewardAction(EntityBase owner)
|
||||
: base(owner)
|
||||
{
|
||||
}
|
||||
public override async Task<Result> onInit()
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
|
||||
var result = new Result();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public override void onClear()
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<Result> uggDailyRewardRefreshWithoutTransaction()
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var result = new Result();
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var ugq_daily_reward_attribute = player.getEntityAttribute<UgqDailyRewardCountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_daily_reward_attribute, () => $"ugq_daily_reward_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var current_time = DateTimeHelper.Current;
|
||||
if (ugq_daily_reward_attribute.m_next_refresh_time > current_time) return result;
|
||||
|
||||
ugq_daily_reward_attribute.m_ugq_daily_reward_count.AddOrUpdate(UgqGradeType.Amature, 0, (key, old) => 0);
|
||||
ugq_daily_reward_attribute.m_ugq_daily_reward_count.AddOrUpdate(UgqGradeType.RisingStar, 0, (key, old) => 0);
|
||||
ugq_daily_reward_attribute.m_ugq_daily_reward_count.AddOrUpdate(UgqGradeType.Master1, 0, (key, old) => 0);
|
||||
ugq_daily_reward_attribute.m_ugq_daily_reward_count.AddOrUpdate(UgqGradeType.Master2, 0, (key, old) => 0);
|
||||
ugq_daily_reward_attribute.m_ugq_daily_reward_count.AddOrUpdate(UgqGradeType.Master3, 0, (key, old) => 0);
|
||||
ugq_daily_reward_attribute.m_next_refresh_time = DateTimeHelper.Current.Date.AddDays(1);
|
||||
ugq_daily_reward_attribute.modifiedEntityAttribute(true);
|
||||
|
||||
return await Task.FromResult(result);
|
||||
}
|
||||
|
||||
public async Task<Result> uggDailyRewardRefresh()
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
|
||||
var fn_transaction_runner = async delegate ()
|
||||
{
|
||||
|
||||
var ugq_daily_reward_attribute = player.getEntityAttribute<UgqDailyRewardCountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_daily_reward_attribute, () => $"ugq_daily_reward_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var fn_result = new Result();
|
||||
var current_time = DateTimeHelper.Current;
|
||||
if (ugq_daily_reward_attribute.m_next_refresh_time > current_time) return fn_result;
|
||||
|
||||
|
||||
ugq_daily_reward_attribute.m_ugq_daily_reward_count.AddOrUpdate(UgqGradeType.Amature, 0, (key, old) => 0);
|
||||
ugq_daily_reward_attribute.m_ugq_daily_reward_count.AddOrUpdate(UgqGradeType.RisingStar, 0, (key, old) => 0);
|
||||
ugq_daily_reward_attribute.m_ugq_daily_reward_count.AddOrUpdate(UgqGradeType.Master1, 0, (key, old) => 0);
|
||||
ugq_daily_reward_attribute.m_ugq_daily_reward_count.AddOrUpdate(UgqGradeType.Master2, 0, (key, old) => 0);
|
||||
ugq_daily_reward_attribute.m_ugq_daily_reward_count.AddOrUpdate(UgqGradeType.Master3, 0, (key, old) => 0);
|
||||
ugq_daily_reward_attribute.m_next_refresh_time = DateTimeHelper.Current.Date.AddDays(1);
|
||||
ugq_daily_reward_attribute.modifiedEntityAttribute(true);
|
||||
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(player, LogActionType.UgqDailyRewardCountRefresh, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
|
||||
var log_invoker = new UgqDailyRewardBusinessLog(ugq_daily_reward_attribute.m_next_refresh_time, ugq_daily_reward_attribute.m_ugq_daily_reward_count);
|
||||
batch.appendBusinessLog(log_invoker);
|
||||
|
||||
fn_result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
if (fn_result.isFail())
|
||||
{
|
||||
return fn_result;
|
||||
}
|
||||
|
||||
return fn_result;
|
||||
};
|
||||
|
||||
var result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "UgqDailyRewardCountRefresh", fn_transaction_runner);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to runTransactionRunnerSafely() !!! : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
465
GameServer/Contents/QuestUGQ/Action/UgqTestAction.cs
Normal file
465
GameServer/Contents/QuestUGQ/Action/UgqTestAction.cs
Normal file
@@ -0,0 +1,465 @@
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
|
||||
using ServerCore; using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using UGQDatabase.Models;
|
||||
|
||||
|
||||
using static ClientToGameRes.Types;
|
||||
using Org.BouncyCastle.Asn1.Ocsp;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqTestAction : EntityActionBase
|
||||
{
|
||||
private Lazy<ConcurrentDictionary<(UInt32, UInt32), QuestMetaAllBaseInfo>> m_ugq_test_quest_data = new Lazy<ConcurrentDictionary<(UInt32, UInt32), QuestMetaAllBaseInfo>>();
|
||||
|
||||
public UgqTestAction(EntityBase owner)
|
||||
: base(owner)
|
||||
{}
|
||||
|
||||
public override void onClear()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
public override async Task<Result> onInit()
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
var result = new Result();
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<(Result, GS2C_ACK_UGQ_TEST_ASSIGN?)> ugqTestAssign(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
//Ugq 정보 호출해서 가져온다. questID로만 가져와서 처리
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
GS2C_ACK_UGQ_TEST_ASSIGN ack = new();
|
||||
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var ugq_info_action = player.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_info_action, () => $"ugq_info_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
(var result, var quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(player, questId, questRevision, QuestContentState.Test);
|
||||
if (result.isFail()) return (result, null);
|
||||
|
||||
|
||||
var game_quest_data = quest_meta_all_base_info.m_quest_data_entity;
|
||||
var quest_base_info = quest_meta_all_base_info.m_quest_base_info;
|
||||
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Test UgqData Not Exist uger_guid : {user_guid}, questId : {questId}, revision : {questRevision}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return (result, null);
|
||||
}
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(game_quest_data, () => $"game_quest_data is null !!! - {player.toBasicString()}");
|
||||
NullReferenceCheckHelper.throwIfNull(quest_base_info, () => $"quest_base_info is null !!! - {player.toBasicString()}");
|
||||
|
||||
var new_quest = new ServerCommon.Quest(player, player.getUserGuid());
|
||||
var accept_quest_var = new AcceptQuestVariable(quest_base_info, false, new_quest);
|
||||
|
||||
result = await ugqTestQuestAssignAsync(game_quest_data, accept_quest_var);
|
||||
if (result.isFail()) return (result, null);
|
||||
|
||||
new_quest = accept_quest_var.m_new_quest_nullable;
|
||||
NullReferenceCheckHelper.throwIfNull(new_quest, () => $"new_quest is null !!! - {player.toBasicString()}");
|
||||
|
||||
var quest_action = player.getEntityAction<QuestAction>();
|
||||
quest_action.addNewQuest(questId, new_quest);
|
||||
|
||||
return (result, ack);
|
||||
}
|
||||
|
||||
public async Task<Result> ugqTestDelete(UInt32 questId)
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var quest_action = player.getEntityAction<QuestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_action, () => $"quest_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = quest_action.getQuest(EQuestType.UGQ, questId, out var quest);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(quest, () => $"quest is null !!! - {player.toBasicString()}");
|
||||
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var quest_doc = new QuestDoc(player.getUserGuid(), quest_attribute.QuestId, quest_attribute.UgqInfo.QuestRevision);
|
||||
(result, var copy_doc) = await quest_doc.onCopyToDocument();
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to onCopyToDocument() !!! : {result.toBasicString()} - {toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var dynamo_db_client = server_logic.getDynamoDbClient();
|
||||
var table = dynamo_db_client.getTableByDoc<QuestDoc>();
|
||||
|
||||
result = await table.simpleDeleteDocumentsWithBatchWrite([copy_doc]);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to ugqTestDelete !!! id = {quest_attribute.QuestId}, revision = {quest_attribute.UgqInfo.QuestRevision} - {toBasicString()}";
|
||||
result.setFail(ServerErrorCode.DynamoDbDocCopyFailedToDocument, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
result = quest_action.deleteQuest(EQuestType.UGQ, questId);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> ugqTestDelete(QuestAttribute attribute)
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var quest_action = player.getEntityAction<QuestAction>();
|
||||
|
||||
var dynamo_db_client = server_logic.getDynamoDbClient();
|
||||
|
||||
var result = new Result();
|
||||
|
||||
//(bool ret, var copy_doc) = await attribute.m_quest_doc_nullable.onCopyToDocument();
|
||||
//attribute.m_quest_doc_nullable.onApplyPKSK();
|
||||
|
||||
var quest_doc = new QuestDoc(player.getUserGuid(), attribute.QuestId, attribute.UgqInfo.QuestRevision);
|
||||
(result, var copy_doc) = await quest_doc.onCopyToDocument();
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to onCopyToDocument() !!! : {result.toBasicString()} - {toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
|
||||
return result;
|
||||
}
|
||||
var table = dynamo_db_client.getTableByDoc<QuestDoc>();
|
||||
|
||||
result = await table.simpleDeleteDocumentsWithBatchWrite([copy_doc]);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to ugqTestDelete !!! : {result.toBasicString()}, id:{attribute.QuestId}, revision:{attribute.UgqInfo.QuestRevision} - {toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private async Task<Result> ugqTestQuestAssignAsync(GameQuestDataEntity gameQuestData, AcceptQuestVariable acceptQuestVar)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var cost = gameQuestData.Cost;
|
||||
var account_attribute = player.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
//퀘스트 정보 만들어서 저장
|
||||
var quest_accept_action = player.getEntityAction<QuestAcceptAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_accept_action, () => $"quest_accept_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
result = quest_accept_action.newQuestAssign(ref acceptQuestVar);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(acceptQuestVar, () => $"acceptQuestVar is null !!! - {player.toBasicString()}");
|
||||
var new_quest = acceptQuestVar.m_new_quest_nullable;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(new_quest, () => $"new_quest is null !!! - {player.toBasicString()}");
|
||||
|
||||
var quest_attribute = new_quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
(result, var new_quest_docbase) = await quest_attribute.toDocBase();
|
||||
if (result.isFail()) return result;
|
||||
NullReferenceCheckHelper.throwIfNull(new_quest_docbase, () => $"new_quest_docbase is null !!! - {player.toBasicString()}");
|
||||
|
||||
var dynamo_db_client = server_logic.getDynamoDbClient();
|
||||
ArgumentNullException.ThrowIfNull(dynamo_db_client, $"dynamo_db_client is null !!!");
|
||||
|
||||
(result, var new_quest_doc) = await new_quest_docbase.onCopyToDocument();
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to onCopyToDocument() !!! : {result.toBasicString()}, id:{quest_attribute.QuestId}, revision:{quest_attribute.UgqInfo.QuestRevision} - {toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var table = dynamo_db_client.getTableByDoc<QuestDoc>();
|
||||
result = await table.simpleUpsertDocumentsWithBatchWrite([new_quest_doc]);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to simpleUpsertDocumentsWithBatchWrite() !!! : {result.toBasicString()}, id:{quest_attribute.QuestId}, revision:{quest_attribute.UgqInfo.QuestRevision} - {toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
//batch.appendBusinessLog(new UgqAssignBusinessLog(acceptQuestVar.m_quest_base_info_nullable.QuestId, acceptQuestVar.m_quest_base_info_nullable.QuestRevision));
|
||||
//result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
//if (result.isFail()) return result;
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> ugqTestAbort(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var quest_action = player.getEntityAction<QuestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_action, () => $"quest_action is null !!!");
|
||||
|
||||
var result = quest_action.getQuest(EQuestType.UGQ, questId, out var quest);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(quest, () => $"quest is null !!! - {player.toBasicString()}");
|
||||
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
if (quest_attribute.IsComplete == 1)
|
||||
{
|
||||
var err_msg = $"can't abort ugq test cause alredy completed player = {player.toBasicString()}, questId = {questId}";
|
||||
result.setFail(ServerErrorCode.UgqTestQuestAlreadyCompleted, err_msg);
|
||||
Log.getLogger().warn(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var fn_transaction_runner = async delegate ()
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
quest_attribute.deleteEntityAttribute();
|
||||
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(player, LogActionType.UgqTestAbort, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
|
||||
batch.appendBusinessLog(new UgqTestAbortBusinessLog(questId, questRevision));
|
||||
|
||||
result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "UgqTestAbort", fn_transaction_runner);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to runTransactionRunnerSafely() !!! : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = quest_action.deleteQuest(EQuestType.UGQ, questId);
|
||||
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
var account_attribute = player.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
|
||||
var api_result = await ugq_api_manager.setTestUgqQuestAborted(player.getUserGuid(), questId, questRevision, language_type);
|
||||
if (api_result.isFail())
|
||||
{
|
||||
Log.getLogger().error($"Failed to setTestUgqQuestAborted() !!! : {api_result.toBasicString()} - {player.toBasicString()}");
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> ugqTestComplete(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var quest_action = player.getEntityAction<QuestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_action, () => $"quest_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = quest_action.getQuest(EQuestType.UGQ, questId, out var quest);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(quest, () => $"quest is null !!! - {player.toBasicString()}");
|
||||
|
||||
var fn_transaction_runner = async delegate ()
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
quest_attribute.deleteEntityAttribute();
|
||||
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(player, LogActionType.None, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
|
||||
batch.appendBusinessLog(new UgqTestCompleteBusinessLog(questId, questRevision));
|
||||
|
||||
result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "UgqTestComplete", fn_transaction_runner);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to runTransactionRunnerSafely() !!! : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
return result;
|
||||
}
|
||||
result = quest_action.deleteQuest(EQuestType.UGQ, questId);
|
||||
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
|
||||
var account_attribute = player.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
|
||||
var api_result = await ugq_api_manager.setTestUgqQuestCompleted(player.getUserGuid(), questId, questRevision, language_type);
|
||||
if(api_result.isFail())
|
||||
{
|
||||
Log.getLogger().error($"Failed to setTestUgqQuestCompleted() !!! : {api_result.toBasicString()} - {player.toBasicString()}");
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> makeQuestFromTestUgq()
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
var user_guid = player.getUserGuid();
|
||||
|
||||
var account_attribute = player.getEntityAttribute<AccountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
var language_type = account_attribute.LanguageType;
|
||||
(var result, var user_quests_in_test_state) = await ugq_api_manager.getTestUgqIds(user_guid, language_type);
|
||||
if (result.isFail()) return result;
|
||||
NullReferenceCheckHelper.throwIfNull(user_quests_in_test_state, () => $"user_quests_in_test_state is null !!! - {player.toBasicString()}");
|
||||
|
||||
var quest_action = player.getEntityAction<QuestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_action, () => $"quest_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var owned_test_ugqs = quest_action.getTestUgqs();
|
||||
|
||||
HashSet<UInt32> contain_checked_ugq_ids = new();
|
||||
foreach (var user_quest_in_test_state in user_quests_in_test_state)
|
||||
{
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(user_quest_in_test_state.ComposedQuestId);
|
||||
if (false == owned_test_ugqs.TryGetValue(quest_id, out var owned_test_ugq))
|
||||
{
|
||||
//없는 테스트 퀘스트니까 만들어줘야된다.
|
||||
(var assing_resul, var ack) = await ugqTestAssign(quest_id, quest_revision);
|
||||
continue;
|
||||
}
|
||||
|
||||
//있는 테스트 퀘스트 리비전 체크
|
||||
var quest_attribute = owned_test_ugq.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
|
||||
|
||||
if (quest_attribute.UgqInfo.QuestRevision != quest_revision)
|
||||
{
|
||||
//다르면 삭제후 생성
|
||||
_= await ugqTestDelete(quest_id);
|
||||
_ = await ugqTestAssign(quest_id, quest_revision);
|
||||
contain_checked_ugq_ids.Add(quest_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
//기존 퀘스트 가지고 있으니까 체크된 항목에 일던 넣어놓는다.
|
||||
contain_checked_ugq_ids.Add(quest_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach (var contain_quest_id in contain_checked_ugq_ids)
|
||||
{
|
||||
owned_test_ugqs.Remove(contain_quest_id, out _);
|
||||
}
|
||||
|
||||
foreach (var delete_quest_id in owned_test_ugqs)
|
||||
{
|
||||
_ = await ugqTestDelete(delete_quest_id.Key);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<(Result, QuestMetaAllBaseInfo)> getUgqGameQuestTestData(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var player = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
(var result, var game_quest_data) = await UgqMetaHelper.loadTestGameQuestGameDataEntity(player, questId, questRevision);
|
||||
if (result.isFail() || game_quest_data is null)
|
||||
{
|
||||
return (result, null!);
|
||||
}
|
||||
|
||||
(result, var generated_quest_base_info) = UgqMetaHelper.generateUgqQuestBaseInfo(game_quest_data);
|
||||
if (result.isFail())
|
||||
{
|
||||
return (result, null!);
|
||||
}
|
||||
NullReferenceCheckHelper.throwIfNull(generated_quest_base_info, () => $"generated_quest_base_info is null !!! - {player.toBasicString()}");
|
||||
|
||||
var info = new QuestMetaAllBaseInfo(UgqStateType.Test, QuestContentState.Test, generated_quest_base_info, game_quest_data);
|
||||
m_ugq_test_quest_data.Value.AddOrUpdate((questId, questRevision), info, (key, oldValue) => info);
|
||||
|
||||
return (result, info);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class DBQUgqDailyRewardCountRead : QueryExecutorBase
|
||||
{
|
||||
private string m_combination_key_for_pk = string.Empty;
|
||||
private string m_pk = string.Empty;
|
||||
|
||||
private readonly List<UgqDailyRewardCountDoc> m_to_read_ugq_daily_reward_count_doc = new();
|
||||
|
||||
public DBQUgqDailyRewardCountRead(string combinationKeyForPK /*onwer_guid*/)
|
||||
: base(typeof(DBQUgqDailyRewardCountRead).Name)
|
||||
{
|
||||
m_combination_key_for_pk = combinationKeyForPK;
|
||||
}
|
||||
|
||||
|
||||
//===================================================================================================
|
||||
// DB 쿼리 직전에 준비해야 할 로직들을 작성한다.
|
||||
//===================================================================================================
|
||||
public override Task<Result> onPrepareQuery()
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var owner = getOwner();
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var doc = new UgqDailyRewardCountDoc(m_combination_key_for_pk);
|
||||
|
||||
var error_code = doc.onApplyPKSK();
|
||||
if (error_code.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to onApplyPKSK() !!! : {error_code.toBasicString()} - {toBasicString()}, {owner.toBasicString()}";
|
||||
result.setFail(error_code, err_msg);
|
||||
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
m_pk = doc.getPK();
|
||||
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
//===================================================================================================
|
||||
// onPrepareQuery()를 성공할 경우 호출된다.
|
||||
//===================================================================================================
|
||||
public override async Task<Result> onQuery()
|
||||
{
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var query_batch = getQueryBatch();
|
||||
NullReferenceCheckHelper.throwIfNull(query_batch, () => $"query_batch is null !!!");
|
||||
|
||||
var db_connector = query_batch.getDynamoDbConnector();
|
||||
var query_config = db_connector.makeQueryConfigForReadByPKSK(m_pk);
|
||||
|
||||
(result, var read_docs) = await db_connector.simpleQueryDocTypesWithQueryOperationConfig<UgqDailyRewardCountDoc>(query_config, eventTid: query_batch.getTransId());
|
||||
if (result.isFail())
|
||||
{
|
||||
//데이터 없으면 여기서 그냥 메모리에만 넣어준다.
|
||||
Log.getLogger().warn($"UgqDailyRewardCountDoc not exitst, so make new Data {result.toBasicString()}");
|
||||
|
||||
|
||||
return new();
|
||||
}
|
||||
m_to_read_ugq_daily_reward_count_doc.AddRange(read_docs);
|
||||
|
||||
var owner = getOwner();
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var quest_reward_action = owner.getEntityAction<QuestRewardAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_reward_action, () => $"quest_reward_action is null !!!");
|
||||
|
||||
foreach (var read_doc in read_docs)
|
||||
{
|
||||
var set_result = quest_reward_action.setUgqDailyRewardCountFromDoc(read_doc);
|
||||
if (set_result.isFail())
|
||||
{
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//===================================================================================================
|
||||
// DB 쿼리를 성공하고, doFnCommit()가 QueryResultType.NotCalledQueryFunc를 반환할 경우 호출된다.
|
||||
//===================================================================================================
|
||||
public override Task onQueryResponseCommit()
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
//===================================================================================================
|
||||
// DB 쿼리를 실패하고, doFnRollback()가 QueryResultType.NotCalledQueryFunc를 반환할 경우 호출된다.
|
||||
//===================================================================================================
|
||||
public override Task onQueryResponseRollback(Result errorResult)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private new Player? getOwner() => getQueryBatch()?.getLogActor() as Player;
|
||||
}
|
||||
333
GameServer/Contents/QuestUGQ/Helper/UgqMetaHelper.cs
Normal file
333
GameServer/Contents/QuestUGQ/Helper/UgqMetaHelper.cs
Normal file
@@ -0,0 +1,333 @@
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
|
||||
using RabbitMQ.Client;
|
||||
using MongoDB.Bson.IO;
|
||||
|
||||
|
||||
using ServerCore; using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using UGQDatabase.Models;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public static class UgqMetaHelper
|
||||
{
|
||||
public static UgqNpcInfo copyToUgcNpc(UgcNpcAttrib npcAttrib)
|
||||
{
|
||||
var ugq_npc = new UgqNpcInfo();
|
||||
ugq_npc.NpcMetaGuid = npcAttrib.UgcNpcMetaGuid;
|
||||
ugq_npc.OwnerGuid = npcAttrib.OwnerGuid;
|
||||
ugq_npc.OwnerEntityType = (int)npcAttrib.OwnerEntityType;
|
||||
ugq_npc.Nickname = npcAttrib.Nickname;
|
||||
ugq_npc.Title = npcAttrib.Title;
|
||||
ugq_npc.Greeting = npcAttrib.Greeting;
|
||||
ugq_npc.Introduction = npcAttrib.Introduction;
|
||||
ugq_npc.Description = npcAttrib.Description;
|
||||
ugq_npc.WorldScenario = npcAttrib.WorldScenario;
|
||||
ugq_npc.DefaultSocialActionMetaId = npcAttrib.DefaultSocialActionMetaId;
|
||||
ugq_npc.HabitSocialActionMetaIds.AddRange(npcAttrib.HabitSocialActionMetaIds);
|
||||
ugq_npc.DialogueSocialActionMetaIds.AddRange(npcAttrib.DialogueSocialActionMetaIds);
|
||||
ugq_npc.BodyItemMetaId = npcAttrib.BodyItemMetaId;
|
||||
ugq_npc.HashTagMetaIds.AddRange(npcAttrib.HashTagMetaIds);
|
||||
ugq_npc.State = npcAttrib.State;
|
||||
ugq_npc.IsRegisteredAiChatServer = npcAttrib.IsRegisteredAiChatServer == true ? BoolType.True : BoolType.False;
|
||||
|
||||
return ugq_npc;
|
||||
|
||||
}
|
||||
|
||||
public static UGQAbortReason convertUGQAbortReason(this UgqStateType ugqStateType)
|
||||
{
|
||||
switch (ugqStateType)
|
||||
{
|
||||
case UgqStateType.Shutdown:
|
||||
return UGQAbortReason.Shutdown;
|
||||
|
||||
case UgqStateType.RevisionChanged:
|
||||
return UGQAbortReason.RevisionUpdated;
|
||||
|
||||
case UgqStateType.None:
|
||||
default:
|
||||
return UGQAbortReason.None;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static (Result, QuestBaseInfo?) generateUgqQuestBaseInfo(GameQuestDataEntity gameQuestData)
|
||||
{
|
||||
var quest_base_info = new QuestBaseInfo();
|
||||
SortedSet<int> setTaskNum = new();
|
||||
SortedSet<int> setTaskIdx = new();
|
||||
|
||||
UgqGradeType grade_type = gameQuestData.GradeType;
|
||||
int beacon_id = gameQuestData.BeaconId;
|
||||
|
||||
var result = new Result();
|
||||
if (gameQuestData.QuestScriptMetas.Count == 0)
|
||||
{
|
||||
var err_msg = $"gameQuestData QuestsScript Metas count zero QuestId : {gameQuestData.QuestId}, revision : {gameQuestData.Revision}";
|
||||
result.setFail(ServerErrorCode.UgqQuestMetaNotExist, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
return (result, null);
|
||||
}
|
||||
|
||||
var quest_script_metas = convertQuestMeta2ScrioptMeta(gameQuestData.QuestScriptMetas);
|
||||
|
||||
var ugq_quest_type = QuestHelper.convertQuestContentStateToUgqStateType(gameQuestData.State);
|
||||
MetaData.Instance.makeQuestBaseInfo(quest_script_metas, ref quest_base_info, ref setTaskIdx,
|
||||
(UInt32)gameQuestData.QuestId,
|
||||
EQuestType.UGQ.ToString(),
|
||||
true,
|
||||
EAssignType.NONE.ToString(),
|
||||
ERequirementQuestType.None.ToString(),
|
||||
0,
|
||||
OncePeriodRangeType.Nolimit,
|
||||
false,
|
||||
true,
|
||||
getUgqRewardGroupIdByGrade(grade_type, beacon_id),
|
||||
string.Empty,
|
||||
string.Empty,
|
||||
ugq_quest_type,
|
||||
(UInt32)gameQuestData.Revision
|
||||
);
|
||||
|
||||
|
||||
//Log.getLogger().info($"base_info : {JsonConvert.SerializeObject(quest_base_info)}");
|
||||
return (new(), quest_base_info);
|
||||
|
||||
}
|
||||
|
||||
private static bool isWorldBeacon(int beaconId)
|
||||
{
|
||||
if (beaconId > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ugq api 서버 테스트 및 디버깅이 어려워 우선 meta 정보 받아오고 나서 groupId셋팅 처리
|
||||
* 추후 다시 리팩토링 필요
|
||||
*/
|
||||
|
||||
private static int getUgqRewardGroupIdByGrade(UgqGradeType gradeType, int beaconId)
|
||||
{
|
||||
|
||||
bool is_world_beacon = isWorldBeacon(beaconId);
|
||||
|
||||
if (is_world_beacon)
|
||||
{
|
||||
switch (gradeType)
|
||||
{
|
||||
case UgqGradeType.Amature:
|
||||
return MetaHelper.GameConfigMeta.WorldBeaconAmateurUGQReward;
|
||||
case UgqGradeType.RisingStar:
|
||||
return MetaHelper.GameConfigMeta.WorldBeaconRisingstarUGQReward;
|
||||
case UgqGradeType.Master1:
|
||||
return MetaHelper.GameConfigMeta.WorldBeaconMasterOneUGQReward;
|
||||
case UgqGradeType.Master2:
|
||||
return MetaHelper.GameConfigMeta.WorldBeaconMasterTwoUGQReward;
|
||||
case UgqGradeType.Master3:
|
||||
return MetaHelper.GameConfigMeta.WorldBeaconMasterThreeUGQReward;
|
||||
default:
|
||||
Log.getLogger().error($"{gradeType} type not exist in getUgqRewardGroupIdByGrade");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (gradeType)
|
||||
{
|
||||
case UgqGradeType.Amature:
|
||||
return MetaHelper.GameConfigMeta.NormalBeaconAmateurUGQReward;
|
||||
case UgqGradeType.RisingStar:
|
||||
return MetaHelper.GameConfigMeta.NormalBeaconRisingstarUGQReward;
|
||||
case UgqGradeType.Master1:
|
||||
return MetaHelper.GameConfigMeta.NormalBeaconMasterOneUGQReward;
|
||||
case UgqGradeType.Master2:
|
||||
return MetaHelper.GameConfigMeta.NormalBeaconMasterTwoUGQReward;
|
||||
case UgqGradeType.Master3:
|
||||
return MetaHelper.GameConfigMeta.NormalBeaconMasterThreeUGQReward;
|
||||
default:
|
||||
Log.getLogger().error($"{gradeType} type not exist in getUgqRewardGroupIdByGrade");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static List<QuestScriptMetaData> convertQuestMeta2ScrioptMeta(List<QuestMetaInfo> questMetaInfos)
|
||||
{
|
||||
List<QuestScriptMetaData> metas = new();
|
||||
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(questMetaInfos[0].ComposedQuestId);
|
||||
|
||||
foreach (var quest_meta in questMetaInfos)
|
||||
{
|
||||
QuestScriptMetaDataMutable script_mutable = new();
|
||||
|
||||
script_mutable.QuestId = quest_id;
|
||||
script_mutable.Index = quest_meta.Index;
|
||||
script_mutable.EventTarget = quest_meta.EventTarget;
|
||||
script_mutable.Event = quest_meta.EventName;
|
||||
script_mutable.EventCondition1 = quest_meta.EventCondition1;
|
||||
script_mutable.EventCondition2 = quest_meta.EventCondition2;
|
||||
script_mutable.EventCondition3 = quest_meta.EventCondition3;
|
||||
script_mutable.FunctionTarget = quest_meta.FunctionTarget;
|
||||
script_mutable.Function = quest_meta.FunctionName;
|
||||
script_mutable.FunctionCondition1 = quest_meta.FunctionCondition1;
|
||||
script_mutable.FunctionCondition2 = quest_meta.FunctionCondition2;
|
||||
script_mutable.FunctionCondition3 = quest_meta.FunctionCondition3;
|
||||
|
||||
|
||||
QuestScriptMetaData script_meta = new(script_mutable);
|
||||
metas.Add(script_meta);
|
||||
}
|
||||
return metas;
|
||||
}
|
||||
|
||||
|
||||
public static async Task<(Result, GameQuestDataEntity?)> loadLiveGameQuestGameDataEntity(Player player, UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_api_manager, () => $"ugq_api_manager is null - {player.toBasicString()}");
|
||||
|
||||
var lang_type = player.getLanguageType();
|
||||
|
||||
var func = new Func<string, UInt32, UInt32, LanguageType, Task<(Result, GameQuestDataEntity?)>>(ugq_api_manager.getUgqQuestData);
|
||||
|
||||
return await loadGameQuestDataEntity(player, questId, questRevision, func);
|
||||
}
|
||||
|
||||
public static async Task<(Result, GameQuestDataEntity?)> loadTestGameQuestGameDataEntity(Player player, UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_api_manager, () => $"ugq_api_manager is null - {player.toBasicString()}");
|
||||
|
||||
var lang_type = player.getLanguageType();
|
||||
|
||||
var func = new Func<string, UInt32, UInt32, LanguageType, Task<(Result, GameQuestDataEntity?)>>(ugq_api_manager.getUgqTestQuestData);
|
||||
|
||||
return await loadGameQuestDataEntity(player, questId, questRevision, func);
|
||||
}
|
||||
|
||||
public static async Task<(Result, GameQuestDataEntity?)> loadGameQuestDataEntity(Player player, UInt32 questId, UInt32 questRevision, Func<string, UInt32, UInt32, LanguageType, Task<(Result, GameQuestDataEntity?)>> func)
|
||||
{
|
||||
// 1. ugq api 서버에서 데이터 호출
|
||||
(var result, var game_quest_data) = await func(player.getUserGuid(), questId, questRevision, player.getLanguageType());
|
||||
if (result.isFail())
|
||||
{
|
||||
return (result, null);
|
||||
}
|
||||
if (game_quest_data == null || game_quest_data.QuestScriptMetas.Count == 0 || game_quest_data.UgqGameQuestDataForClientString == string.Empty)
|
||||
{
|
||||
var err_msg = $"GameQuestDataEntity NotExist questId : {questId} - questRevision L {questRevision}";
|
||||
result.setFail(ServerErrorCode.UgqQuestMetaNotExist, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
return (result, null);
|
||||
}
|
||||
|
||||
// 2. string -> UgqGameQuestDataForClient 로 전환및 gradeType, stateType 적용
|
||||
var ugq_game_quest_data_for_client = Newtonsoft.Json.JsonConvert.DeserializeObject<UgqGameQuestDataForClient>(game_quest_data.UgqGameQuestDataForClientString);
|
||||
if (ugq_game_quest_data_for_client is null)
|
||||
{
|
||||
var err_msg = $"GameQuestDataEntity NotExist questId : {questId} - questRevision L {questRevision}";
|
||||
result.setFail(ServerErrorCode.UgqQuestMetaNotExist, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
return (result, null);
|
||||
}
|
||||
game_quest_data.UgqGameQuestDataForClient = ugq_game_quest_data_for_client;
|
||||
game_quest_data.UgqGameQuestDataForClient.UgqGradeType = game_quest_data.GradeType;
|
||||
game_quest_data.UgqGameQuestDataForClient.UgqStateType = QuestHelper.convertQuestContentStateToUgqStateType(game_quest_data.State);
|
||||
|
||||
// 3. IsShowNpcLocation 값 신규 추가 됐으나, 추가되기전 데이터에는 반영이 안되어 있어서 임시로 반영 처리
|
||||
if (false == game_quest_data.UgqGameQuestDataForClientString.Contains("IsShowNpcLocation"))
|
||||
{
|
||||
foreach (var task in game_quest_data.UgqGameQuestDataForClient.Task)
|
||||
{
|
||||
task.IsShowNpcLocation = BoolType.True;
|
||||
}
|
||||
}
|
||||
|
||||
// 4. shutdown 체크
|
||||
if (game_quest_data.Shutdown == true) game_quest_data.UgqGameQuestDataForClient.UgqStateType = UgqStateType.Shutdown;
|
||||
|
||||
game_quest_data.UgqGameQuestDataForClientString = string.Empty;
|
||||
return (result, game_quest_data);
|
||||
|
||||
}
|
||||
|
||||
public static (Int32, Int32) getUgqDailyRewardMaxCountByGrade(UgqGradeType grade)
|
||||
{
|
||||
switch (grade)
|
||||
{
|
||||
case UgqGradeType.Amature:
|
||||
return (MetaHelper.GameConfigMeta.UgqAmateurBonusCount, MetaHelper.GameConfigMeta.UgqBonusGoldAmateur);
|
||||
case UgqGradeType.RisingStar:
|
||||
return (MetaHelper.GameConfigMeta.UgqRisingStarBonusCount, MetaHelper.GameConfigMeta.UgqBonusGoldRisingStar);
|
||||
case UgqGradeType.Master1:
|
||||
return (MetaHelper.GameConfigMeta.UgqMaster1BonusCount, MetaHelper.GameConfigMeta.UgqBonusGoldMaster1);
|
||||
case UgqGradeType.Master2:
|
||||
return (MetaHelper.GameConfigMeta.UgqMaster2BonusCount, MetaHelper.GameConfigMeta.UgqBonusGoldMaster2);
|
||||
case UgqGradeType.Master3:
|
||||
return (MetaHelper.GameConfigMeta.UgqMaster3BonusCount, MetaHelper.GameConfigMeta.UgqBonusGoldMaster3);
|
||||
default:
|
||||
return (MetaHelper.GameConfigMeta.UgqAmateurBonusCount, MetaHelper.GameConfigMeta.UgqBonusGoldAmateur);
|
||||
}
|
||||
}
|
||||
|
||||
public static CurrencyType getUgqUsageFeeType(UgqGradeType grade)
|
||||
{
|
||||
switch (grade)
|
||||
{
|
||||
case UgqGradeType.Amature:
|
||||
return EnumHelper.convertEnumValueStringToEnum<CurrencyType>(MetaHelper.GameConfigMeta.UgqUsageFeeTypeAmateur, CurrencyType.Sapphire);
|
||||
case UgqGradeType.RisingStar:
|
||||
return EnumHelper.convertEnumValueStringToEnum<CurrencyType>(MetaHelper.GameConfigMeta.UgqUsageFeeTypeRisingStar, CurrencyType.Ruby);
|
||||
case UgqGradeType.Master1:
|
||||
return EnumHelper.convertEnumValueStringToEnum<CurrencyType>(MetaHelper.GameConfigMeta.UgqUsageFeeTypeMaster1, CurrencyType.Sapphire);
|
||||
case UgqGradeType.Master2:
|
||||
return EnumHelper.convertEnumValueStringToEnum<CurrencyType>(MetaHelper.GameConfigMeta.UgqUsageFeeTypeMaster2, CurrencyType.Sapphire);
|
||||
case UgqGradeType.Master3:
|
||||
return EnumHelper.convertEnumValueStringToEnum<CurrencyType>(MetaHelper.GameConfigMeta.UgqUsageFeeTypeMaster3, CurrencyType.Sapphire);
|
||||
default:
|
||||
return CurrencyType.Sapphire;
|
||||
}
|
||||
}
|
||||
|
||||
public static int getUgqCost(UgqGradeType gradeType)
|
||||
{
|
||||
switch (gradeType)
|
||||
{
|
||||
case UgqGradeType.Amature:
|
||||
return MetaHelper.GameConfigMeta.UgqUsageFeeAmateur;
|
||||
case UgqGradeType.RisingStar:
|
||||
return MetaHelper.GameConfigMeta.UgqUsageFeeRisingStar;
|
||||
case UgqGradeType.Master1:
|
||||
return MetaHelper.GameConfigMeta.UgqUsageFeeMaster1;
|
||||
case UgqGradeType.Master2:
|
||||
return MetaHelper.GameConfigMeta.UgqUsageFeeMaster2;
|
||||
case UgqGradeType.Master3:
|
||||
return MetaHelper.GameConfigMeta.UgqUsageFeeMaster3;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
32
GameServer/Contents/QuestUGQ/Log/QuestMailBusinessLog.cs
Normal file
32
GameServer/Contents/QuestUGQ/Log/QuestMailBusinessLog.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class QuestMailBusinessLog : ILogInvokerEx
|
||||
{
|
||||
QuestMailLogInfo m_info;
|
||||
public QuestMailBusinessLog(QuestMailAttribute attribute, QuestMailLogType type)
|
||||
: base(LogDomainType.QuestMail)
|
||||
{
|
||||
m_info = new QuestMailLogInfo(this, attribute, type);
|
||||
}
|
||||
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class QuestTaskUpdateBusinessLog : ILogInvokerEx
|
||||
{
|
||||
QuestTaskUpdateLogInfo m_info;
|
||||
public QuestTaskUpdateBusinessLog(QuestTaskUpdateHandler questTaskUpdateDataRef)
|
||||
: base(LogDomainType.QuestMain)
|
||||
{
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(questTaskUpdateDataRef.m_quest, () => $"questTaskUpdateDataRef.m_quest is null !!!");
|
||||
|
||||
var quest_attribute = questTaskUpdateDataRef.m_quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!!");
|
||||
|
||||
List<ItemBase> delete_items = new();
|
||||
|
||||
foreach (var item in questTaskUpdateDataRef.m_deleted_items)
|
||||
{
|
||||
delete_items.Add(item as ItemBase);
|
||||
}
|
||||
m_info = new QuestTaskUpdateLogInfo(this,
|
||||
questTaskUpdateDataRef.m_quest_id,
|
||||
questTaskUpdateDataRef.m_quest_revision,
|
||||
quest_attribute.CurrentTaskNum,
|
||||
quest_attribute.ActiveEvents,
|
||||
questTaskUpdateDataRef.m_rewards,
|
||||
delete_items
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
|
||||
}
|
||||
34
GameServer/Contents/QuestUGQ/Log/UgqAbortBusinessLog.cs
Normal file
34
GameServer/Contents/QuestUGQ/Log/UgqAbortBusinessLog.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqAbortBusinessLog : ILogInvokerEx
|
||||
{
|
||||
UgqAbortLogInfo m_info;
|
||||
|
||||
public UgqAbortBusinessLog(UInt32 questId, UInt32 questRevision, UgqAbortType abortType)
|
||||
: base(LogDomainType.QuestUgq)
|
||||
{
|
||||
m_info = new UgqAbortLogInfo(this, questId, questRevision, abortType);
|
||||
}
|
||||
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
|
||||
}
|
||||
33
GameServer/Contents/QuestUGQ/Log/UgqAssignBusinessLog.cs
Normal file
33
GameServer/Contents/QuestUGQ/Log/UgqAssignBusinessLog.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqAssignBusinessLog : ILogInvokerEx
|
||||
{
|
||||
QuestIdLogInfo m_info;
|
||||
|
||||
public UgqAssignBusinessLog(UInt32 questId, UInt32 questRevision)
|
||||
: base(LogDomainType.QuestUgq)
|
||||
{
|
||||
m_info = new QuestIdLogInfo(this, questId, questRevision);
|
||||
}
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqDailyRewardBusinessLog : ILogInvokerEx
|
||||
{
|
||||
private UgqDailyRewardLogInfo m_info;
|
||||
|
||||
public UgqDailyRewardBusinessLog(DateTime nextRefreshTime, ConcurrentDictionary<UgqGradeType, Int32> ugqDailyRewardCount)
|
||||
: base(LogDomainType.QuestUgq)
|
||||
{
|
||||
m_info = new();
|
||||
m_info.next_refresh_time = nextRefreshTime;
|
||||
|
||||
foreach (var reward_count in ugqDailyRewardCount)
|
||||
{
|
||||
m_info.ugq_daily_reward_count.Add(reward_count.Key, reward_count.Value);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqDeregisterBookmarkBusinessLog : ILogInvokerEx
|
||||
{
|
||||
QuestIdLogInfo m_info;
|
||||
|
||||
public UgqDeregisterBookmarkBusinessLog(UInt32 questId, UInt32 questRevision)
|
||||
: base(LogDomainType.QuestUgq)
|
||||
{
|
||||
m_info = new QuestIdLogInfo(this, questId, questRevision);
|
||||
}
|
||||
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
|
||||
public class UgqDeregisterLikeBusinessLog : ILogInvokerEx
|
||||
{
|
||||
QuestIdLogInfo m_info;
|
||||
|
||||
public UgqDeregisterLikeBusinessLog(UInt32 questId, UInt32 questRevision)
|
||||
: base(LogDomainType.QuestUgq)
|
||||
{
|
||||
m_info = new QuestIdLogInfo(this, questId, questRevision);
|
||||
}
|
||||
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
}
|
||||
34
GameServer/Contents/QuestUGQ/Log/UgqReAssignBusinessLog.cs
Normal file
34
GameServer/Contents/QuestUGQ/Log/UgqReAssignBusinessLog.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqReAssignBusinessLog : ILogInvokerEx
|
||||
{
|
||||
QuestIdLogInfo m_info;
|
||||
|
||||
public UgqReAssignBusinessLog(UInt32 questId, UInt32 questRevision)
|
||||
: base(LogDomainType.QuestUgq)
|
||||
{
|
||||
m_info = new QuestIdLogInfo(this, questId, questRevision);
|
||||
}
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqRegisterBookmarkBusinessLog : ILogInvokerEx
|
||||
{
|
||||
QuestIdLogInfo m_info;
|
||||
|
||||
public UgqRegisterBookmarkBusinessLog(UInt32 questId, UInt32 questRevision)
|
||||
: base(LogDomainType.QuestUgq)
|
||||
{
|
||||
m_info = new QuestIdLogInfo(this, questId, questRevision);
|
||||
}
|
||||
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqRegisterLikeBusinessLog : ILogInvokerEx
|
||||
{
|
||||
QuestIdLogInfo m_info;
|
||||
|
||||
public UgqRegisterLikeBusinessLog(UInt32 questId, UInt32 questRevision)
|
||||
: base(LogDomainType.QuestUgq)
|
||||
{
|
||||
m_info = new QuestIdLogInfo(this, questId, questRevision);
|
||||
}
|
||||
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
}
|
||||
33
GameServer/Contents/QuestUGQ/Log/UgqReportBusinessLog.cs
Normal file
33
GameServer/Contents/QuestUGQ/Log/UgqReportBusinessLog.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqReportBusinessLog : ILogInvokerEx
|
||||
{
|
||||
UgqReportLogInfo m_info;
|
||||
|
||||
public UgqReportBusinessLog(UInt32 questId, UInt32 questRevision, string report)
|
||||
: base(LogDomainType.QuestUgq)
|
||||
{
|
||||
m_info = new UgqReportLogInfo(this, questId, questRevision, report);
|
||||
}
|
||||
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
}
|
||||
33
GameServer/Contents/QuestUGQ/Log/UgqTestAbortBusinessLog.cs
Normal file
33
GameServer/Contents/QuestUGQ/Log/UgqTestAbortBusinessLog.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqTestAbortBusinessLog : ILogInvokerEx
|
||||
{
|
||||
QuestIdLogInfo m_info;
|
||||
|
||||
public UgqTestAbortBusinessLog(UInt32 questId, UInt32 questRevision)
|
||||
: base(LogDomainType.QuestUgq)
|
||||
{
|
||||
m_info = new QuestIdLogInfo(this, questId, questRevision);
|
||||
}
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqTestCompleteBusinessLog : ILogInvokerEx
|
||||
{
|
||||
QuestIdLogInfo m_info;
|
||||
|
||||
public UgqTestCompleteBusinessLog(UInt32 questId, UInt32 questRevision)
|
||||
: base(LogDomainType.QuestUgq)
|
||||
{
|
||||
m_info = new QuestIdLogInfo(this, questId, questRevision);
|
||||
}
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
|
||||
}
|
||||
34
GameServer/Contents/QuestUGQ/Log/UgqTestDeleteBusinessLog.cs
Normal file
34
GameServer/Contents/QuestUGQ/Log/UgqTestDeleteBusinessLog.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqTestDeleteBusinessLog : ILogInvokerEx
|
||||
{
|
||||
QuestIdLogInfo m_info;
|
||||
|
||||
public UgqTestDeleteBusinessLog(UInt32 questId, UInt32 questRevision)
|
||||
: base(LogDomainType.QuestUgq)
|
||||
{
|
||||
m_info = new QuestIdLogInfo(this, questId, questRevision);
|
||||
}
|
||||
|
||||
public override bool hasLog()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void fillup(ref BusinessLog.LogBody body)
|
||||
{
|
||||
body.append(m_info);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
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.C2GS_REQ_UGQ_FIND_NPC), typeof(FindUgqNpcPacketHandler), typeof(GameLoginListener))]
|
||||
public class FindUgqNpcPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var result = new Result();
|
||||
var player = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var req_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(req_msg, () => $"req_msg is null !!! - {player.toBasicString()}");
|
||||
|
||||
var owner_guid = req_msg.Request.ReqUgqFindNpc.OwnerGuid;
|
||||
var ugq_npc_meta_guid = req_msg.Request.ReqUgqFindNpc.NpcGuid;
|
||||
|
||||
(result, var npc_attrib) = await UgcNpcDoc.findUgcNpc(owner_guid, ugq_npc_meta_guid);
|
||||
send_GS2C_ACK_UGQ_FIND_NPC(player, result, npc_attrib);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_FIND_NPC(Player player, Result result, UgcNpcAttrib? npcAttrib)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqFindNpc= new();
|
||||
if (npcAttrib is not null)
|
||||
{
|
||||
ack_packet.Response.AckUgqFindNpc.UgcNpc = UgqMetaHelper.copyToUgcNpc(npcAttrib);
|
||||
}
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_FIND_NPC Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
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.C2GS_REQ_PAGED_UGQ_FROM_BOARD), typeof(PagedUgqsFromBoardPacketHandler), typeof(GameLoginListener))]
|
||||
public class PagedUgqsFromBoardPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var player = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var req_msg = recvMessage as ClientToGame;
|
||||
ArgumentNullException.ThrowIfNull(req_msg);
|
||||
var request = req_msg.Request.ReqPagedUgqFromBoard;
|
||||
|
||||
var search_category_type = request.SearchCategoryType;
|
||||
var sort_type = request.SortType;
|
||||
var page_number = request.PageNumber;
|
||||
|
||||
var ugq_action = player.getEntityAction<UgqInfoAction>();
|
||||
ArgumentNullException.ThrowIfNull(ugq_action);
|
||||
|
||||
(result, var ugq_board_search_result) = await ugq_action.getPagedUgqFromBoard(search_category_type, sort_type, page_number, searchText:"", searchType:UgqSearchType.Title);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_PAGED_UGQ_FROM_BOARD(player, result);
|
||||
return result;
|
||||
}
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_board_search_result, () => $"ugq_board_search_result is null !!!");
|
||||
|
||||
result = send_GS2C_ACK_PAGED_UGQ_FROM_BOARD(player, result, ugq_board_search_result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_PAGED_UGQ_FROM_BOARD(Player player, Result result, UgqBoardSearchResult? ugqBoardSearchResult = null)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckPagedUGQFromBoard = new();
|
||||
|
||||
if(null != ugqBoardSearchResult)
|
||||
{
|
||||
ack_packet.Response.AckPagedUGQFromBoard.UgqBoardSearchResult = ugqBoardSearchResult;
|
||||
}
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_C2GS_REQ_PAGED_UGQ_FROM_BOARD Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
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.C2GS_REQ_SEARCHED_UGQ_FROM_BOARD), typeof(SearchedUgqsFromBoardPacketHandler), typeof(GameLoginListener))]
|
||||
public class SearchedUgqsFromBoardPacketHandler : PacketRecvHandler
|
||||
{
|
||||
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
|
||||
var player = session as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
|
||||
var req_msg = recvMessage as ClientToGame;
|
||||
NullReferenceCheckHelper.throwIfNull(req_msg, () => $"req_msg is null !!! - {player.toBasicString()}");
|
||||
var request = req_msg.Request.ReqSearchedUgqFromBoard;
|
||||
var search_category_type = request.SearchCategoryType;
|
||||
var sort_type = request.SortType;
|
||||
var page_number = request.PageNumber;
|
||||
var search_text = request.SearchText;
|
||||
var text_search_type = request.SearchType;
|
||||
|
||||
var ugq_action = player.getEntityAction<UgqInfoAction>();
|
||||
|
||||
(var result, var ugqs) = await ugq_action.getPagedUgqFromBoard(search_category_type, sort_type, page_number, search_text, text_search_type);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_SEARCHED_UGQ_FROM_BOARD(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_GS2C_ACK_SEARCHED_UGQ_FROM_BOARD(player, result, ugqs);
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_SEARCHED_UGQ_FROM_BOARD(Player player, Result result, UgqBoardSearchResult? ugqs = null)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckSearchedUGQFromBoard = new();
|
||||
|
||||
if (null != ugqs)
|
||||
{
|
||||
ack_packet.Response.AckSearchedUGQFromBoard.UgqBoardSearchResult = ugqs;
|
||||
}
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_SEARCHED_UGQ_FROM_BOARD Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
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.C2GS_REQ_UGQ_ABORT_BY_SELF), typeof(UgqAbortBySelfPacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqAbortBySelfPacketHandler : 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.ReqUgqAbortBySelf;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(request.ComposedQuestId);
|
||||
|
||||
|
||||
var ugq_abort_action = player.getEntityAction<UgqAbortAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_abort_action, () => $"ugq_abort_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = await ugq_abort_action.ugqAbortBySelf(quest_id, quest_revision);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_ABORT_BY_SELF(player, request.ComposedQuestId, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_GS2C_ACK_UGQ_ABORT_BY_SELF(player, request.ComposedQuestId, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_ABORT_BY_SELF(Player player, long composedQuestId, Result result)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqAbortBySelf = new();
|
||||
ack_packet.Response.AckUgqAbortBySelf.ComposedQuestId = composedQuestId;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_ABORT Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
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.C2GS_REQ_UGQ_ABORT), typeof(UgqAbortPacketHandler), typeof(GameLoginListener))]
|
||||
|
||||
public class UgqAbortPacketHandler : 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.ReqUgqAbort;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(request.ComposedQuestId);
|
||||
|
||||
var ugq_abort_action = player.getEntityAction<UgqAbortAction>();
|
||||
var result = await ugq_abort_action.ugqAbort(quest_id, quest_revision);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_ABORT(player, request.ComposedQuestId, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_GS2C_ACK_UGQ_ABORT(player, request.ComposedQuestId, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_ABORT(Player player, long composeQuestId, Result result)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqAbort = new();
|
||||
ack_packet.Response.AckUgqAbort.ComposedQuestId = composeQuestId;
|
||||
|
||||
//삭제된 퀘스트 정보 보내줘야된다. 여기다가 보내던가 Noti를 보내던가
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_ABORT Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
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.C2GS_REQ_UGQ_ASSIGN), typeof(UgqAssignPacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqAssignPacketHandler : 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.ReqUgqAssign;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(request.ComposedQuestId);
|
||||
|
||||
var ugq_assign_action = player.getEntityAction<UgqAssignAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_assign_action, () => $"ugq_assign_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
(var result, var ack) = await ugq_assign_action.ugqAssign(quest_id, quest_revision);
|
||||
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_ASSIGN(player, result, ack);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_GS2C_ACK_UGQ_ASSIGN(player, result, ack);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_ASSIGN(Player player, Result result, ClientToGameRes.Types.GS2C_ACK_UGQ_ASSIGN ack)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqAssign = ack;
|
||||
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_ASSIGN Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
|
||||
using static ClientToGameRes.Types;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.C2GS_REQ_UGQ_DEREGISTER_BOOKMARK), typeof(UgqDeregisterBookmarkPacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqDeregisterBookmarkPacketHandler : 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.ReqUgqDeregisterBookmark;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(request.ComposedQuestId);
|
||||
|
||||
var ugq_action = player.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_action, () => $"ugq_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = await ugq_action.ugqDeregisterBookmark(quest_id);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_DEREGISTER_BOOKMARK(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_GS2C_ACK_UGQ_DEREGISTER_BOOKMARK(player, result);
|
||||
|
||||
var invokers = new List<ILogInvoker>();
|
||||
invokers.Add(new UgqDeregisterBookmarkBusinessLog(quest_id, quest_revision));
|
||||
|
||||
var log_action = new LogActionEx(LogActionType.UgqDeregisterBookmark);
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_DEREGISTER_BOOKMARK(Player player, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqDeregisterBookmark = new GS2C_ACK_UGQ_DEREGISTER_BOOKMARK();
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_DEREGISTER_BOOKMARK Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
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.C2GS_REQ_UGQ_DEREGISTER_LIKE), typeof(UgqDeregisterLikePacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqDeregisterLikePacketHandler : 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.ReqUgqDeregisterLike;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(request.ComposedQuestId);
|
||||
|
||||
var ugq_action = player.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_action, () => $"ugq_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = await ugq_action.ugqDeregisterLike(quest_id, quest_revision);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_DEREGISTER_LIKE(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_GS2C_ACK_UGQ_DEREGISTER_LIKE(player, result);
|
||||
|
||||
var invokers = new List<ILogInvoker>();
|
||||
invokers.Add(new UgqDeregisterLikeBusinessLog(quest_id, quest_revision));
|
||||
var log_action = new LogActionEx(LogActionType.UgqDeregisterLike);
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_DEREGISTER_LIKE(Player player, Result result)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqDeregisterLike = new();
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_DEREGISTER_LIKE Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
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.C2GS_REQ_UGQ_DETAIL_FROM_BOARD), typeof(UgqDetailFromBoardPacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqDetailFromBoardPacketHandler : 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.ReqUgqDetailFromBoard;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
var ugq_quest_id = request.ComposedQuestId;
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(ugq_quest_id);
|
||||
|
||||
var ugq_action = player.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_action, () => $"ugq_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
(var result, var ugq_board_detail) = await ugq_action.getUgqDetailFromBoard(quest_id, quest_revision);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_DETAIL_FROM_BOARD(player, result);
|
||||
return result;
|
||||
}
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(ugq_board_detail, () => $"ugq_board_detail is null !!! - {player.toBasicString()}");
|
||||
|
||||
result = send_GS2C_ACK_UGQ_DETAIL_FROM_BOARD(player, result, ugq_board_detail);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_DETAIL_FROM_BOARD(Player player, Result result, UgqBoardItemDetail? ugqBoardItemDetail = null)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqDetailFromBoard = new();
|
||||
ack_packet.Response.AckUgqDetailFromBoard.UgqBoardItemDetail = ugqBoardItemDetail;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_C2GS_REQ_PAGED_UGQ_FROM_BOARD Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
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.C2GS_REQ_UGQ_FROM_NPC), typeof(UgqFromNpcPacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqFromNpcPacketHandler : 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.ReqUgqFromNpc;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
var beacon_guid = request.NpcGuid;
|
||||
|
||||
var ugq_action = player.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_action, () => $"ugq_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
//ms5 스펙아웃
|
||||
(var result, _) = ugq_action.getUgqFromNpc(beacon_guid);
|
||||
|
||||
result = send_GS2C_ACK_UGQ_FROM_NPC(player, result);
|
||||
|
||||
return await Task.FromResult(result);
|
||||
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_FROM_NPC(Player player, Result result)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqFromNpc = new();
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_FROM_BEACON Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
|
||||
using static ClientToGameRes.Types;
|
||||
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.C2GS_REQ_UGQ_REASSIGN), typeof(UgqReassignPacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqReassignPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var player = session as Player;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
var game_msg = recvMessage as ClientToGame;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(game_msg, () => $"game_msg is null !!! - {player.toBasicString()}");
|
||||
var request = game_msg.Request.ReqUgqReAssign;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(request.ComposedQuestId);
|
||||
|
||||
var ugq_assign_action = player.getEntityAction<UgqAssignAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_assign_action, () => $"ugq_assign_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
(var result, var ack, var new_quest_revision) = await ugq_assign_action.ugqReAssign(quest_id, quest_revision);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_REASSIGN(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_GS2C_ACK_UGQ_REASSIGN(player, result, ack);
|
||||
|
||||
await player.send_GS2C_NTF_UGQ(quest_id, new_quest_revision);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_REASSIGN(Player player, Result result, GS2C_ACK_UGQ_REASSIGN? ack = null)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqReAssign = new();
|
||||
|
||||
if (ack is not null)
|
||||
{
|
||||
ack_packet.Response.AckUgqReAssign = ack;
|
||||
}
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_REASSIGN Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
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.C2GS_REQ_UGQ_REGISTER_BOOKMARK), typeof(UgqRegisterBookmarkPacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqRegisterBookmarkPacketHandler : 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.ReqUgqRegisterBookmark;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(request.ComposedQuestId);
|
||||
|
||||
var ugq_action = player.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_action, () => $"ugq_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = await ugq_action.ugqRegisterBookmark(quest_id);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_REGISTER_BOOKMARK(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_GS2C_ACK_UGQ_REGISTER_BOOKMARK(player, result);
|
||||
|
||||
var invokers = new List<ILogInvoker>();
|
||||
invokers.Add(new UgqRegisterBookmarkBusinessLog(quest_id, quest_revision));
|
||||
var log_action = new LogActionEx(LogActionType.UgqRegisterBookmark);
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_REGISTER_BOOKMARK(Player player, Result result)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqRegisterBookmark = new();
|
||||
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_REGISTER_BOOKMARK Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
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.C2GS_REQ_UGQ_REGISTER_LIKE), typeof(UgqRegisterLikePacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqRegisterLikePacketHandler : 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.ReqUgqRegisterLike;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
|
||||
var ugq_quest_id = request.ComposedQuestId;
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(ugq_quest_id);
|
||||
|
||||
|
||||
var ugq_action = player.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_action, () => $"ugq_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = await ugq_action.ugqRegisterLike(quest_id, quest_revision);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_REGISTER_LIKE(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_GS2C_ACK_UGQ_REGISTER_LIKE(player, result);
|
||||
|
||||
|
||||
var invokers = new List<ILogInvoker>();
|
||||
invokers.Add(new UgqRegisterLikeBusinessLog(quest_id, quest_revision));
|
||||
var log_action = new LogActionEx(LogActionType.UgqRegisterLike);
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_REGISTER_LIKE(Player player, Result result)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqRegisterLike = new();
|
||||
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_REGISTER_LIKE Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
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.C2GS_REQ_UGQ_RELOAD_STATE), typeof(UgqReloadCurrentStatePacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqReloadCurrentStatePacketHandler : 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.ReqUgqReloadState;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = new Result();
|
||||
|
||||
var ugq_info_action = player.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_info_action, () => $"ugq_info_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
(result, var states) = await ugq_info_action.reloadUgqCurrentState();
|
||||
if (result.isFail())
|
||||
{
|
||||
send_C2GS_REQ_UGQ_RELOAD_STATE(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_C2GS_REQ_UGQ_RELOAD_STATE(player, result, states);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Result send_C2GS_REQ_UGQ_RELOAD_STATE(Player player, Result result, List<UgqCurrentState>? states = null)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqReloadState = new();
|
||||
|
||||
if(null != states)
|
||||
{
|
||||
ack_packet.Response.AckUgqReloadState.UgqCurrentState.AddRange(states);
|
||||
}
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_C2GS_REQ_UGQ_RELOAD_STATE Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
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.C2GS_REQ_UGQ_REPORT), typeof(UgqReportPacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqReportPacketHandler : 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.ReqUgqReport;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
var ugq_quest_id = request.ComposedQuestId;
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(ugq_quest_id);
|
||||
|
||||
var report_text = request.ReportText;
|
||||
|
||||
var ugq_action = player.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_action, () => $"ugq_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = await ugq_action.getUgqReport(quest_id, quest_revision, report_text);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_REPORT(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_GS2C_ACK_UGQ_REPORT(player, result);
|
||||
|
||||
var invokers = new List<ILogInvoker>();
|
||||
invokers.Add(new UgqReportBusinessLog(quest_id, quest_revision, report_text));
|
||||
var log_action = new LogActionEx(LogActionType.UgqRegisterLike);
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_REPORT(Player player, Result result)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqReport = new();
|
||||
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_REPORT Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
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.C2GS_REQ_UGQ_SPOTLIGHT_FROM_BOARD), typeof(UgqSpotlightFromBoardPacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqSpotlightFromBoardPacketHandler : 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 ugq_action = player.getEntityAction<UgqInfoAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_action, () => $"ugq_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
(var result, var ugq_board_search_result) = await ugq_action.getUgqSpotlightFromBoard();
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_FROM_BOARD(player, result, new());
|
||||
return result;
|
||||
}
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_board_search_result, () => $"ugq_board_search_result is null !!! - {player.toBasicString()}");
|
||||
|
||||
result = send_GS2C_ACK_UGQ_FROM_BOARD(player, result, ugq_board_search_result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_FROM_BOARD(Player player, Result result, UgqBoardSportlightResult spotlighthResult)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqSpotlightFromBoard = new();
|
||||
ack_packet.Response.AckUgqSpotlightFromBoard.SpotlightResult = spotlighthResult;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_PAGED_UGQ_FROM_BOARD Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
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.C2GS_REQ_UGQ_TEST_ABORT), typeof(UgqTestAbortPacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqTestAbortPacketHandler : 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.ReqUgqTestAbort;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
var ugq_quest_id = request.ComposedQuestId;
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(ugq_quest_id);
|
||||
|
||||
var ugq_test_action = player.getEntityAction<UgqTestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_test_action, () => $"ugq_test_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = await ugq_test_action.ugqTestAbort(quest_id, quest_revision);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_TEST_ABORT(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_GS2C_ACK_UGQ_TEST_ABORT(player, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_TEST_ABORT(Player player, Result result)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqTestAbort = new();
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_ABORT Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using static ClientToGameRes.Types;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.C2GS_REQ_UGQ_TEST_ASSIGN), typeof(UgqTestAssignPacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqTestAssignPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, Google.Protobuf.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.ReqUgqTestAssign;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = new Result();
|
||||
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(request.ComposedQuestId);
|
||||
|
||||
//var ugq_test_action = player.getEntityAction<UgqTestAction>();
|
||||
|
||||
//현재 미사용
|
||||
//(var result, var ack) = await ugq_test_action.ugqTestAssign(quest_id, quest_revision);
|
||||
|
||||
|
||||
//if (result.isFail())
|
||||
//{
|
||||
// send_GS2C_ACK_UGQ_TEST_ASSIGN(player, result, null);
|
||||
// return result;
|
||||
//}
|
||||
|
||||
//result = send_GS2C_ACK_UGQ_TEST_ASSIGN(player, result, ack);
|
||||
|
||||
return await Task.FromResult(result);
|
||||
}
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_TEST_ASSIGN(Player player, Result result, GS2C_ACK_UGQ_TEST_ASSIGN ack)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqTestAssign = ack;
|
||||
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_TEST_UGQ_ASSIGN Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
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.C2GS_REQ_UGQ_TEST_COMPLETE), typeof(UgqTestCompletePacketHandler), typeof(GameLoginListener))]
|
||||
public class UgqTestCompletePacketHandler : 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.ReqUgqTestComplete;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(request.ComposedQuestId);
|
||||
|
||||
var ugq_test_action = player.getEntityAction<UgqTestAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_test_action, () => $"ugq_test_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = await ugq_test_action.ugqTestComplete(quest_id, quest_revision);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_UGQ_TEST_COMPLETE(player, result, quest_id, quest_revision);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = send_GS2C_ACK_UGQ_TEST_COMPLETE(player, result, quest_id, quest_revision);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static Result send_GS2C_ACK_UGQ_TEST_COMPLETE(Player player, Result result, UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.AckUgqTestComplete = new();
|
||||
ack_packet.Response.AckUgqTestComplete.ComposedQuestId = QuestHelper.convertQuestIdAndRevisionToUgqQuestId(questId, questRevision);
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
if (false == server_logic.onSendPacket(player, ack_packet))
|
||||
{
|
||||
var err_msg = $"send_GS2C_ACK_UGQ_TEST_COMPLETE Fail !!! : owner:{player.toBasicString()}";
|
||||
result.setFail(ServerErrorCode.ProudNetException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
13
GameServer/Contents/QuestUGQ/UgqMetaManager.cs
Normal file
13
GameServer/Contents/QuestUGQ/UgqMetaManager.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
using MetaAssets;
|
||||
using ServerCommon;
|
||||
using ServerCore; using ServerBase;
|
||||
using System.Collections.Concurrent;
|
||||
using UGQDatabase.Models;
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class UgqMetaManager : Singleton<UgqMetaManager>
|
||||
{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user