초기커밋
This commit is contained in:
145
GameServer/Contents/Quest/QuestHandler/QuestTaskUpdateHandler.cs
Normal file
145
GameServer/Contents/Quest/QuestHandler/QuestTaskUpdateHandler.cs
Normal file
@@ -0,0 +1,145 @@
|
||||
using ServerCommon;
|
||||
using System.Collections.Concurrent;
|
||||
using ServerCore; using ServerBase;
|
||||
using MetaAssets;
|
||||
using UGQDatabase.Models;
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class QuestTaskUpdateHandler
|
||||
{
|
||||
private Player m_player;
|
||||
public UInt32 m_quest_id { get; set; } = 0;
|
||||
public UInt32 m_quest_revision { get; set; } = 0;
|
||||
public EQuestType m_quest_type { get; set; } = EQuestType.NONE;
|
||||
public QuestBaseInfo? m_quest_meta_info { get; set; } = null;
|
||||
public GameQuestDataEntity? m_game_quest_data { get; set; } = null;
|
||||
public QuestTaskGroup? m_quest_task_group { get; set; } = null;
|
||||
public ServerCommon.Quest? m_quest { get; set; } = null;
|
||||
public string m_active_event { get; set; } = string.Empty;
|
||||
public EQuestEventTargetType m_target_type { get; set; } = EQuestEventTargetType.NONE;
|
||||
public EQuestEventNameType m_name_type { get; set; } = EQuestEventNameType.NONE;
|
||||
|
||||
public List<MetaAssets.Reward> m_rewards { get; set; } = new();
|
||||
public ConcurrentDictionary<int, int> m_deletable_items { get; set; } = new();
|
||||
|
||||
|
||||
public List<MetaAssets.Reward> m_rewarded_money { get; set; } = new();
|
||||
public List<Item> m_rewarded_items { get; set; } = new();
|
||||
public List<Item> m_deleted_items { get; set; } = new();
|
||||
|
||||
public List<QuestEventFunction> m_last_check_functions { get; set; } = new();
|
||||
|
||||
public bool m_need_counter_check { get; set; } = false;
|
||||
public int m_next_task_number { get; set; } = 0;
|
||||
|
||||
public CommonResult m_common_result { get; set; } = new();
|
||||
|
||||
public List<ILogInvoker> m_log_invokers { get; set; } = new();
|
||||
|
||||
|
||||
public QuestTaskUpdateHandler(Player player, UInt32 questId, UInt32 questRevision, string activeEvent)
|
||||
{
|
||||
m_player = player;
|
||||
m_quest_id = questId;
|
||||
m_quest_revision = questRevision;
|
||||
m_active_event = activeEvent;
|
||||
}
|
||||
|
||||
public async Task<Result> init()
|
||||
{
|
||||
var quest_action = m_player.getEntityAction<QuestAction>();
|
||||
|
||||
(var result, var quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(m_player, m_quest_id, m_quest_revision);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
m_quest_meta_info = quest_meta_all_base_info.m_quest_base_info;
|
||||
NullReferenceCheckHelper.throwIfNull(m_quest_meta_info, () => $"m_quest_meta_info is null !!!");
|
||||
|
||||
var quest_type = EnumHelper.convertEnumTypeAndValueStringToEnum(m_quest_meta_info.QuestType, EQuestType.NORMAL);
|
||||
m_quest_type = quest_type;
|
||||
result = quest_action.getQuest(quest_type, m_quest_id, out var quest);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
m_quest = quest;
|
||||
|
||||
if (m_quest_revision > 0)
|
||||
{
|
||||
var game_quest_data = quest_meta_all_base_info.m_quest_data_entity;
|
||||
NullReferenceCheckHelper.throwIfNull(game_quest_data, () => $"game_quest_data is null !!!");
|
||||
if (game_quest_data.UgqGameQuestDataForClient.UgqStateType == UgqStateType.Standby)
|
||||
{
|
||||
result.setFail(ServerErrorCode.UgqQuestShutdowned);
|
||||
return result;
|
||||
}
|
||||
else if (game_quest_data.UgqGameQuestDataForClient.UgqStateType == UgqStateType.Shutdown || game_quest_data.Shutdown == true)
|
||||
{
|
||||
result.setFail(ServerErrorCode.UgqQuestShutdowned);
|
||||
return result;
|
||||
}
|
||||
else if (game_quest_data.UgqGameQuestDataForClient.UgqStateType == UgqStateType.RevisionChanged)
|
||||
{
|
||||
result.setFail(ServerErrorCode.UgqQuestRevisionChanged);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> init(Player player, ServerCommon.Quest quest)
|
||||
{
|
||||
(var result, var quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(m_player, m_quest_id, m_quest_revision);
|
||||
if (result.isFail()) return result;
|
||||
//var game_quest_data = quest_meta_all_base_info.m_quest_data_entity;
|
||||
m_quest_meta_info = quest_meta_all_base_info.m_quest_base_info;
|
||||
NullReferenceCheckHelper.throwIfNull(m_quest_meta_info, () => $"m_quest_meta_info is null !!!");
|
||||
|
||||
var quest_type = EnumHelper.convertEnumTypeAndValueStringToEnum(m_quest_meta_info.QuestType, EQuestType.NORMAL);
|
||||
m_quest_type = quest_type;
|
||||
m_quest = quest;
|
||||
if (result.isFail()) return result;
|
||||
|
||||
|
||||
if (m_quest_revision > 0)
|
||||
{
|
||||
var game_quest_data = quest_meta_all_base_info.m_quest_data_entity;
|
||||
NullReferenceCheckHelper.throwIfNull(game_quest_data, () => $"game_quest_data is null !!!");
|
||||
if (game_quest_data.UgqGameQuestDataForClient.UgqStateType == UgqStateType.Shutdown)
|
||||
{
|
||||
result.setFail(ServerErrorCode.UgqQuestShutdowned);
|
||||
send_NTF_UGQ_STATE_CHANGED(player, result, m_quest_id, m_quest_revision);
|
||||
return result;
|
||||
}
|
||||
else if (game_quest_data.UgqGameQuestDataForClient.UgqStateType == UgqStateType.RevisionChanged)
|
||||
{
|
||||
result.setFail(ServerErrorCode.UgqQuestRevisionChanged);
|
||||
send_NTF_UGQ_STATE_CHANGED(player, result, m_quest_id, m_quest_revision);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private void send_NTF_UGQ_STATE_CHANGED(Player player, Result result, UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
if (result.getErrorCode() != ServerErrorCode.UgqQuestRevisionChanged && result.getErrorCode() != ServerErrorCode.UgqQuestShutdowned) return;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var ntf_packet = new ClientToGame();
|
||||
ntf_packet.Message = new();
|
||||
ntf_packet.Message.NtfUgqStateChanged = new();
|
||||
ntf_packet.Message.NtfUgqStateChanged.ComposedQuestId = QuestHelper.convertQuestIdAndRevisionToUgqQuestId(questId, questRevision);
|
||||
|
||||
ntf_packet.Message.NtfUgqStateChanged.State = UgqStateType.Shutdown;
|
||||
if (result.getErrorCode() == ServerErrorCode.UgqQuestRevisionChanged)
|
||||
{
|
||||
ntf_packet.Message.NtfUgqStateChanged.State = UgqStateType.RevisionChanged;
|
||||
}
|
||||
|
||||
server_logic.onSendPacket(player, ntf_packet);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user