127 lines
4.7 KiB
C#
127 lines
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using ServerCore; using ServerBase;
|
|
using ServerCommon;
|
|
using UGQDatabase.Models;
|
|
|
|
namespace GameServer;
|
|
|
|
public class QuestMetaManager : Singleton<QuestMetaManager>
|
|
{
|
|
IQuestMeta m_system_quest_meta;
|
|
IQuestMeta m_ugq_live_quest_meta;
|
|
IQuestMeta m_ugq_test_quest_meta;
|
|
public QuestMetaManager()
|
|
{
|
|
m_system_quest_meta = new QuestSystemMeta();
|
|
m_ugq_live_quest_meta = new QuestUgqLiveMeta();
|
|
m_ugq_test_quest_meta = new QuestUgqTestMeta();
|
|
}
|
|
|
|
//system quest일때 사용
|
|
public async Task<(Result, QuestMetaAllBaseInfo)> getQuestMeta(UInt32 questId)
|
|
{
|
|
return await m_system_quest_meta.getQuestMetaInfo(null, questId, 0);
|
|
}
|
|
|
|
//시스템 퀘스트 인지 아닌지 잘 모를때 사용
|
|
public async Task<(Result, QuestMetaAllBaseInfo)> getQuestMeta(Player player, UInt32 questId, UInt32 questRevision)
|
|
{
|
|
(var result, IQuestMeta i_quest_meta) = await getIUgqMeta(questId, questRevision);
|
|
return await i_quest_meta.getQuestMetaInfo(player, questId, questRevision);
|
|
}
|
|
|
|
//Ugq 퀘스트를 명시적으로 호출할때 사용
|
|
public async Task<(Result, QuestMetaAllBaseInfo)> getQuestMeta(Player player, UInt32 questId, UInt32 questRevision, QuestContentState contentState)
|
|
{
|
|
(var result, IQuestMeta i_quest_meta) = getIUgqMeta(questRevision, contentState);
|
|
return await i_quest_meta.getQuestMetaInfo(player, questId, questRevision);
|
|
}
|
|
|
|
//Ugq 퀘스트를 명시적으로 호출할때 사용
|
|
public async Task<(Result, QuestMetaAllBaseInfo)> getQuestMeta(Player player, UInt32 questId, UInt32 questRevision, UgqStateType UgqStateState)
|
|
{
|
|
(var result, IQuestMeta i_quest_meta) = getIUgqMeta(questRevision, UgqStateState);
|
|
return await i_quest_meta.getQuestMetaInfo(player, questId, questRevision);
|
|
}
|
|
|
|
|
|
private (Result, IQuestMeta) getIUgqMeta(UInt32 questRevision, QuestContentState contentState)
|
|
{
|
|
var result = new Result();
|
|
|
|
if (questRevision == 0)
|
|
{
|
|
return (result, m_system_quest_meta);
|
|
}
|
|
|
|
switch (contentState)
|
|
{
|
|
case QuestContentState.Live:
|
|
return (result, m_ugq_live_quest_meta);
|
|
case QuestContentState.Test:
|
|
return (result, m_ugq_test_quest_meta);
|
|
default:
|
|
var err_msg = $"Not Support QuestContentState : {contentState}";
|
|
result.setFail(ServerErrorCode.MetaInfoException, err_msg);
|
|
return (result, null!);
|
|
}
|
|
}
|
|
|
|
private (Result, IQuestMeta) getIUgqMeta(UInt32 questRevision, UgqStateType ugqQuestType)
|
|
{
|
|
var result = new Result();
|
|
|
|
if (questRevision == 0)
|
|
{
|
|
return (result, m_system_quest_meta);
|
|
}
|
|
|
|
switch (ugqQuestType)
|
|
{
|
|
case UgqStateType.Live:
|
|
return (result, m_ugq_live_quest_meta);
|
|
case UgqStateType.Test:
|
|
return (result, m_ugq_test_quest_meta);
|
|
default:
|
|
var err_msg = $"Not Support ugqQuestType : {ugqQuestType}";
|
|
result.setFail(ServerErrorCode.MetaInfoException, err_msg);
|
|
return (result, null!);
|
|
}
|
|
}
|
|
|
|
private async Task<(Result, IQuestMeta)> getIUgqMeta(UInt32 questId, UInt32 questRevision)
|
|
{
|
|
var result = new Result();
|
|
if(questRevision == 0)
|
|
{
|
|
return (result, m_system_quest_meta);
|
|
}
|
|
else
|
|
{
|
|
//Live 상태가 많을 것으로 생각해서 많은것 먼저조회 해서 가져 오도록 하자.
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
var ugq_api_manager = server_logic.GetUqgApiManager();
|
|
|
|
(result, var simple_game_quest_data) = await ugq_api_manager.getUgqQuestSimpleInfo(questId, questRevision, QuestContentState.Live);
|
|
if (result.isSuccess() && simple_game_quest_data is not null)
|
|
return (result, m_ugq_live_quest_meta);
|
|
|
|
(result, simple_game_quest_data) = await ugq_api_manager.getUgqQuestSimpleInfo(questId, questRevision, QuestContentState.Test);
|
|
if (result.isSuccess() && simple_game_quest_data is not null)
|
|
return (result, m_ugq_test_quest_meta);
|
|
|
|
//여기까지 오면 에러...
|
|
var err_msg = $"Not Exist QuestUgqMetaInfo QuestID : {questId} - QuestRevision : {questRevision}";
|
|
result.setFail(ServerErrorCode.MetaInfoException, err_msg);
|
|
Log.getLogger().error(result.toBasicString());
|
|
return (result, null!);
|
|
}
|
|
|
|
}
|
|
|
|
}
|