using ServerCore; using ServerBase; using ServerCommon; using MetaAssets; using UGQDatabase.Models; namespace GameServer; public class QuestRewardHandler { public readonly 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 GameQuestDataEntity? m_ugq_game_data { get; set; } = null; public bool m_is_repeat_ugq_quest { get; set; } = false; public QuestBaseInfo? m_quest_meta_info { get; set; } = null; public ServerCommon.Quest? m_quest { get; set; } = null; public ServerCommon.EndQuest? m_end_quest { get; set; } = null; public bool m_has_ugq_daily_reward { get; set; } = false; public Int32 m_ugq_daily_bonus_gold { get; set; } = 0; public Int32 m_replaced_reward_group_id { get; set; } = 0; public List m_rewards { get; set; } = new(); public List m_rewarded_money { get; set; } = new(); public List m_rewarded_items { get; set; } = new(); public bool m_has_already_end_quest { get; set; } = false; public QuestRewardHandler(Player player, UInt32 questId, UInt32 questRevision) { m_player = player; m_quest_id = questId; m_quest_revision = questRevision; } public async Task init() { var quest_action = m_player.getEntityAction(); (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, () => $"player is null !!!"); if (quest_meta_all_base_info.m_quest_data_entity is not null) { m_ugq_game_data = quest_meta_all_base_info.m_quest_data_entity; } m_replaced_reward_group_id = m_quest_meta_info.RewardGroupId; result = quest_action.getQuest(m_quest_meta_info.QuestType, m_quest_id, out var quest); if (result.isFail()) return result; m_quest = quest; var end_quest_action = m_player.getEntityAction(); m_has_already_end_quest = end_quest_action.hasEndQuest(m_quest_id, m_quest_revision); return result; } public Player getPlayer() => m_player; }