초기커밋
This commit is contained in:
153
GameServer/Contents/Quest/Helper/QuestMetaHelper.cs
Normal file
153
GameServer/Contents/Quest/Helper/QuestMetaHelper.cs
Normal file
@@ -0,0 +1,153 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
|
||||
using Newtonsoft.Json;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
using Microsoft.AspNetCore.SignalR.Protocol;
|
||||
using RabbitMQ.Client;
|
||||
|
||||
|
||||
using ServerCore; using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using UGQDatabase.Models;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public static class QuestMetaHelper
|
||||
{
|
||||
public static Result getQuestTaskEventGroupByEventString(QuestTaskGroup questTaskInfo, string eventString, [MaybeNullWhen(false)] out QuestEventInfo? questEventInfo)
|
||||
{
|
||||
var result = new Result();
|
||||
if (false == questTaskInfo.QuestEventGroupByEventString.TryGetValue(eventString, out questEventInfo))
|
||||
{
|
||||
var err_msg = $"activeEnvent info not match current task !!!, eventString : {eventString}, questTaskInfo = {JsonConvert.SerializeObject(questTaskInfo)}";
|
||||
result.setFail(ServerErrorCode.QuestInvalidValue, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
questEventInfo = null;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async Task<(Result, QuestInfo?)> makeQuestInfoData(ServerCommon.Quest quest)
|
||||
{
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!!");
|
||||
|
||||
QuestInfo questInfo = new QuestInfo();
|
||||
var quest_id = quest_attribute.QuestId;
|
||||
var quest_revision = quest_attribute.UgqInfo.QuestRevision;
|
||||
|
||||
(var result, var quest_task_info) = await getQuestTaskGroupFromQuest(quest);
|
||||
if (result.isFail()) return (result, null);
|
||||
|
||||
|
||||
questInfo.ComposedQuestId = QuestHelper.convertQuestIdAndRevisionToUgqQuestId(quest_id, quest_revision);
|
||||
questInfo.QuestAssignTime = Timestamp.FromDateTime(quest_attribute.QuestAssignTime);
|
||||
questInfo.CurrentTaskNum = quest_attribute.CurrentTaskNum;
|
||||
questInfo.TaskStartTime = Timestamp.FromDateTime(quest_attribute.TaskStartTime);
|
||||
questInfo.QuestCompleteTime = Timestamp.FromDateTime(quest_attribute.QuestCompleteTime);
|
||||
questInfo.HasCounter = quest_attribute.HasCounter;
|
||||
questInfo.MinCounter = quest_attribute.MinCounter;
|
||||
questInfo.MaxCounter = quest_attribute.MaxCounter;
|
||||
questInfo.CurrentCounter = quest_attribute.CurrentCounter;
|
||||
questInfo.IsComplete = quest_attribute.IsComplete;
|
||||
questInfo.ReplacedRewardGroupId = quest_attribute.ReplacedRewardGroupId;
|
||||
questInfo.HasTimer = quest_attribute.HasTimer;
|
||||
questInfo.TimerCompleteTime = Timestamp.FromDateTime(quest_attribute.TimerCompleteTime);
|
||||
questInfo.ActiveEvents.AddRange(quest_attribute.ActiveEvents);
|
||||
|
||||
return (result, questInfo);
|
||||
|
||||
}
|
||||
|
||||
public static async Task<(Result, QuestTaskGroup?)> getQuestTaskGroupFromQuest(ServerCommon.Quest quest)
|
||||
{
|
||||
var player = quest.getRootParent() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!!");
|
||||
|
||||
var quest_id = quest_attribute.QuestId;
|
||||
var quest_revision = quest_attribute.UgqInfo.QuestRevision;
|
||||
|
||||
(var result, var quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(player, quest_id, quest_revision, quest_attribute.UgqInfo.UqgState);
|
||||
if (result.isFail()) return (result, null);
|
||||
var quest_base_info = quest_meta_all_base_info.m_quest_base_info;
|
||||
NullReferenceCheckHelper.throwIfNull(quest_base_info, () => $"quest_base_info is null !!!");
|
||||
|
||||
if (false == quest_base_info.QuestTaskGroupList.TryGetValue(quest_attribute.CurrentTaskNum, out var quest_task_info))
|
||||
{
|
||||
string err_msg = $"NotExist Quest Task Group Data QuestID : {quest_attribute.QuestId}, TaskNum : {quest_attribute.CurrentTaskNum}";
|
||||
result.setFail(ServerErrorCode.QuestInvalidTaskNum, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
return (result, null);
|
||||
}
|
||||
return (result, quest_task_info);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static async Task<List<QuestInfo>> makeQuestInfoData(List<ServerCommon.Quest> quests)
|
||||
{
|
||||
List<QuestInfo> questInfos = new List<QuestInfo>();
|
||||
|
||||
foreach (var quest in quests)
|
||||
{
|
||||
(var result, var quest_info) = await makeQuestInfoData(quest);
|
||||
if (result.isFail()) continue;
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(quest_info, () => $"quest_info is null !!!");
|
||||
questInfos.Add(quest_info);
|
||||
}
|
||||
return questInfos;
|
||||
|
||||
}
|
||||
|
||||
public static async Task<EQuestType> getQuestType(Player player, UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
if (questRevision > 0)
|
||||
{
|
||||
return EQuestType.UGQ;
|
||||
}
|
||||
else
|
||||
{
|
||||
(var result, var quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(player, questId, questRevision);
|
||||
if (result.isFail()) return EQuestType.NORMAL;
|
||||
var quest_base_info = quest_meta_all_base_info.m_quest_base_info;
|
||||
NullReferenceCheckHelper.throwIfNull(quest_base_info, () => $"quest_base_info is null !!!");
|
||||
|
||||
var quest_type = EnumHelper.convertEnumTypeAndValueStringToEnum(quest_base_info.QuestType, EQuestType.NORMAL);
|
||||
return quest_type;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static string convertFarmingSummonedEntityTypeToQuestEntityType(FarmingSummonedEntityType entityType)
|
||||
{
|
||||
switch (entityType)
|
||||
{
|
||||
case FarmingSummonedEntityType.User:
|
||||
return "MYSELF";
|
||||
case FarmingSummonedEntityType.Beacon:
|
||||
return "BEACON";
|
||||
default:
|
||||
return "UNKNOWN";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user