154 lines
5.9 KiB
C#
154 lines
5.9 KiB
C#
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";
|
|
}
|
|
}
|
|
|
|
}
|