초기커밋
This commit is contained in:
192
GameServer/Contents/Quest/Action/EndQuestAction.cs
Normal file
192
GameServer/Contents/Quest/Action/EndQuestAction.cs
Normal file
@@ -0,0 +1,192 @@
|
||||
using Amazon.S3.Model;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
using Newtonsoft.Json;
|
||||
using ServerCommon;
|
||||
using ServerCore; using ServerBase;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace GameServer
|
||||
{
|
||||
public class EndQuestAction : EntityActionBase
|
||||
{
|
||||
private ConcurrentDictionary<(UInt32, UInt32/*questid, revision*/), ServerCommon.EndQuest> m_end_quests = new();
|
||||
|
||||
|
||||
public EndQuestAction(EntityBase owner)
|
||||
: base(owner)
|
||||
{
|
||||
}
|
||||
|
||||
public override async Task<Result> onInit()
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
|
||||
var result = new Result();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public override void onClear()
|
||||
{
|
||||
m_end_quests.Clear();
|
||||
}
|
||||
|
||||
public async Task<Result> loadEndQuests()
|
||||
{
|
||||
var owner = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(owner, LogActionType.None
|
||||
, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQEndQuestsReadAll(owner.getUserGuid()));
|
||||
}
|
||||
var result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public void addEndQuest(ServerCommon.EndQuest endQuest)
|
||||
{
|
||||
if (endQuest is null)
|
||||
{
|
||||
Log.getLogger().error("endQuest is null !!!");
|
||||
return;
|
||||
}
|
||||
var end_quest_attribute = endQuest.getEntityAttribute<EndQuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(end_quest_attribute, () => $"end_quest_attribute is null !!!");
|
||||
|
||||
_ = m_end_quests.TryAdd((end_quest_attribute.QuestId, end_quest_attribute.QuestRevision), endQuest);
|
||||
|
||||
//if (false == m_end_quests.TryAdd((end_quest_attribute.QuestId, end_quest_attribute.QuestRevision), endQuest))
|
||||
//{
|
||||
// Log.getLogger().error($"endQuest TryAdd fail !!! quest : {JsonConvert.SerializeObject(endQuest)}");
|
||||
// return;
|
||||
//}
|
||||
}
|
||||
|
||||
public Result setEndQuestsFromDoc(EndQuestDoc doc)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var owner = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
var end_quest_attrib = doc.getAttrib<EndQuestAttrib>();
|
||||
NullReferenceCheckHelper.throwIfNull(end_quest_attrib, () => $"end_quest_attrib is null !!!");
|
||||
|
||||
ServerCommon.EndQuest end_quest = new ServerCommon.EndQuest(owner, owner.getUserGuid(), end_quest_attrib.m_quest_id, end_quest_attrib.m_quest_revision);
|
||||
|
||||
var attribute = end_quest.getEntityAttribute<EndQuestAttribute>();
|
||||
if (attribute is null)
|
||||
{
|
||||
var err_msg = $"Fail to get QuestAttribute";
|
||||
result.setFail(ServerErrorCode.EntityAttributeNotFound, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
if (false == doc.getAttribWrappers().TryGetValue(typeof(EndQuestAttrib), out var to_copy_doc_attrib))
|
||||
{
|
||||
var err_msg = $"Fail to get QuestAttrib";
|
||||
result.setFail(ServerErrorCode.EntityAttributeNotFound, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var attrib_base = to_copy_doc_attrib.getAttribBase();
|
||||
var doc_attrib = attrib_base as EndQuestAttrib;
|
||||
if (doc_attrib is null)
|
||||
{
|
||||
var err_msg = $"Fail to get QuestAttrib";
|
||||
result.setFail(ServerErrorCode.EntityAttributeNotFound, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
attribute.QuestId = doc_attrib.m_quest_id;
|
||||
attribute.EndCount = doc_attrib.m_end_count;
|
||||
attribute.LastEndTime = doc_attrib.m_last_end_time;
|
||||
|
||||
if (false == m_end_quests.TryAdd((attribute.QuestId, attribute.QuestRevision), end_quest))
|
||||
{
|
||||
var err_msg = $"m_end_quest try Add Fail";
|
||||
result.setFail(ServerErrorCode.ServerLogicError, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public ConcurrentDictionary<(UInt32, UInt32), ServerCommon.EndQuest> getEndQuests()
|
||||
{
|
||||
return m_end_quests;
|
||||
}
|
||||
|
||||
public ServerCommon.EndQuest? getEndQuest(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
if (m_end_quests.TryGetValue((questId, questRevision), out var end_quest))
|
||||
{
|
||||
return end_quest;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Result endQuestCheck(MetaAssets.EQuestType questType, UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
//normal은 체크안한다.
|
||||
if (questType == MetaAssets.EQuestType.NORMAL) return result;
|
||||
|
||||
if (true == m_end_quests.ContainsKey((questId, questRevision)))
|
||||
{
|
||||
result.setFail(ServerErrorCode.QuestAlreadyEnded, $"Quest Already End. QuestID : {questId}");
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public bool hasEndQuest(UInt32 questId, UInt32 questRevision = 0)
|
||||
{
|
||||
return m_end_quests.ContainsKey((questId, questRevision));
|
||||
}
|
||||
|
||||
public List<QuestEndInfo> makeQuestEndInfo(List<(UInt32, UInt32)> questIdAndRevisions)
|
||||
{
|
||||
|
||||
var infos = new List<QuestEndInfo>();
|
||||
foreach (var quest_id_revision in questIdAndRevisions)
|
||||
{
|
||||
if (false == m_end_quests.TryGetValue(quest_id_revision, out var end_quest))
|
||||
{
|
||||
Log.getLogger().error($"makeQuestEndInfo End Quest Not Found. QuestID : {quest_id_revision}");
|
||||
continue;
|
||||
}
|
||||
|
||||
var end_quest_attribute = end_quest.getEntityAttribute<EndQuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(end_quest_attribute, () => $"end_quest_attribute is null !!!");
|
||||
|
||||
var quest_id = quest_id_revision.Item1;
|
||||
var quest_revision = quest_id_revision.Item2;
|
||||
var ugq_quest_id = QuestHelper.convertQuestIdAndRevisionToUgqQuestId(quest_id, quest_revision);
|
||||
|
||||
var info = new QuestEndInfo();
|
||||
info.ComposedQuestId = ugq_quest_id;
|
||||
info.EndCount = end_quest_attribute.EndCount;
|
||||
info.LastEndTime = Timestamp.FromDateTime(end_quest_attribute.LastEndTime);
|
||||
|
||||
infos.Add(info);
|
||||
}
|
||||
|
||||
return infos;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user