초기커밋
This commit is contained in:
90
GameServer/Contents/Reward/RewardQuest.cs
Normal file
90
GameServer/Contents/Reward/RewardQuest.cs
Normal file
@@ -0,0 +1,90 @@
|
||||
using Amazon.DynamoDBv2.DocumentModel;
|
||||
using GameServer;
|
||||
using Newtonsoft.Json;
|
||||
using ServerCommon;
|
||||
using ServerCore; using ServerBase;
|
||||
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class RewardQuest : RewardBase
|
||||
{
|
||||
QuestRewardHandler m_quest_reward_handler;
|
||||
|
||||
public RewardQuest(Player player, string userGuid, QuestRewardHandler questRewardRef) : base(player, userGuid)
|
||||
{
|
||||
m_quest_reward_handler = questRewardRef;
|
||||
setRewardMetas(questRewardRef.m_rewards);
|
||||
|
||||
//m_res = res;
|
||||
//m_quest_log_invoker = new QuestRewardBusinessLog(LogActionType.QuestMainReward, )
|
||||
}
|
||||
|
||||
//=====================================================================================
|
||||
// 보상전 처리해야되는 것들 처리, 여기선 퀘스트 삭제 처리하고, EndQuest 추가 처리
|
||||
//=====================================================================================
|
||||
public override Task<Result> prepareReward()
|
||||
{
|
||||
var result = new Result();
|
||||
//기존 퀘스트 삭제 처리
|
||||
var quest = m_quest_reward_handler.m_quest;
|
||||
if (quest == null)
|
||||
{
|
||||
//정상 로직대로라면 퀘스트가 null일수가 없는데 일단 예외처리
|
||||
var err_msg = $"questRewardRef quest is null. questRewardRef = {JsonConvert.SerializeObject(m_quest_reward_handler)}";
|
||||
result.setFail(ServerErrorCode.QuestInvalidValue, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!!");
|
||||
quest_attribute.deleteEntityAttribute();
|
||||
|
||||
//완료 퀘스트 생성
|
||||
m_quest_reward_handler.m_end_quest = new EndQuest(getOwner(), getUserGuid(), m_quest_reward_handler.m_quest_id, m_quest_reward_handler.m_quest_revision);
|
||||
var end_quest_attribute = m_quest_reward_handler.m_end_quest.getEntityAttribute<EndQuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(end_quest_attribute, () => $"end_quest_attribute is null !!!");
|
||||
|
||||
var end_quest_doc = new EndQuestDoc(getOwner().getUserGuid(), m_quest_reward_handler.m_quest_id, m_quest_reward_handler.m_quest_revision);
|
||||
end_quest_attribute.syncOriginDocBaseWithNewDoc<EndQuestAttribute>(end_quest_doc);
|
||||
|
||||
var end_quest_attrib = end_quest_doc.getAttrib<EndQuestAttrib>();
|
||||
NullReferenceCheckHelper.throwIfNull(end_quest_attrib, () => $"end_quest_attrib is null !!!");
|
||||
|
||||
end_quest_attrib.m_last_end_time = DateTimeHelper.Current;
|
||||
end_quest_attrib.m_end_count = 1;
|
||||
end_quest_attrib.m_quest_id = m_quest_reward_handler.m_quest_id;
|
||||
end_quest_attribute.modifiedEntityAttribute(true);
|
||||
|
||||
if (m_quest_reward_handler.m_has_ugq_daily_reward)
|
||||
{
|
||||
var daily_reward_attribute = getOwner().getEntityAttribute<UgqDailyRewardCountAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(daily_reward_attribute, () => $"daily_reward_attribute is null !!!");
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(m_quest_reward_handler.m_ugq_game_data, () => $"m_quest_reward_handler.m_ugq_game_data is null !!!");
|
||||
if (true == daily_reward_attribute.m_ugq_daily_reward_count.TryGetValue(m_quest_reward_handler.m_ugq_game_data.GradeType, out var cnt))
|
||||
{
|
||||
cnt++;
|
||||
daily_reward_attribute.m_ugq_daily_reward_count.AddOrUpdate(m_quest_reward_handler.m_ugq_game_data.GradeType, cnt, (key, old) => cnt);
|
||||
daily_reward_attribute.modifiedEntityAttribute(true);
|
||||
}
|
||||
}
|
||||
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
//=====================================================================================
|
||||
// 보상처리 후 필요한 로직들 처리
|
||||
//=====================================================================================
|
||||
public override Task<Result> finalizeReward()
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
m_quest_reward_handler.m_rewarded_money.AddRange(getRewardedMoneys());
|
||||
m_quest_reward_handler.m_rewarded_items.AddRange(getRewardedItems());
|
||||
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user