초기커밋
This commit is contained in:
333
GameServer/Contents/QuestUGQ/Helper/UgqMetaHelper.cs
Normal file
333
GameServer/Contents/QuestUGQ/Helper/UgqMetaHelper.cs
Normal file
@@ -0,0 +1,333 @@
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
|
||||
using RabbitMQ.Client;
|
||||
using MongoDB.Bson.IO;
|
||||
|
||||
|
||||
using ServerCore; using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using UGQDatabase.Models;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public static class UgqMetaHelper
|
||||
{
|
||||
public static UgqNpcInfo copyToUgcNpc(UgcNpcAttrib npcAttrib)
|
||||
{
|
||||
var ugq_npc = new UgqNpcInfo();
|
||||
ugq_npc.NpcMetaGuid = npcAttrib.UgcNpcMetaGuid;
|
||||
ugq_npc.OwnerGuid = npcAttrib.OwnerGuid;
|
||||
ugq_npc.OwnerEntityType = (int)npcAttrib.OwnerEntityType;
|
||||
ugq_npc.Nickname = npcAttrib.Nickname;
|
||||
ugq_npc.Title = npcAttrib.Title;
|
||||
ugq_npc.Greeting = npcAttrib.Greeting;
|
||||
ugq_npc.Introduction = npcAttrib.Introduction;
|
||||
ugq_npc.Description = npcAttrib.Description;
|
||||
ugq_npc.WorldScenario = npcAttrib.WorldScenario;
|
||||
ugq_npc.DefaultSocialActionMetaId = npcAttrib.DefaultSocialActionMetaId;
|
||||
ugq_npc.HabitSocialActionMetaIds.AddRange(npcAttrib.HabitSocialActionMetaIds);
|
||||
ugq_npc.DialogueSocialActionMetaIds.AddRange(npcAttrib.DialogueSocialActionMetaIds);
|
||||
ugq_npc.BodyItemMetaId = npcAttrib.BodyItemMetaId;
|
||||
ugq_npc.HashTagMetaIds.AddRange(npcAttrib.HashTagMetaIds);
|
||||
ugq_npc.State = npcAttrib.State;
|
||||
ugq_npc.IsRegisteredAiChatServer = npcAttrib.IsRegisteredAiChatServer == true ? BoolType.True : BoolType.False;
|
||||
|
||||
return ugq_npc;
|
||||
|
||||
}
|
||||
|
||||
public static UGQAbortReason convertUGQAbortReason(this UgqStateType ugqStateType)
|
||||
{
|
||||
switch (ugqStateType)
|
||||
{
|
||||
case UgqStateType.Shutdown:
|
||||
return UGQAbortReason.Shutdown;
|
||||
|
||||
case UgqStateType.RevisionChanged:
|
||||
return UGQAbortReason.RevisionUpdated;
|
||||
|
||||
case UgqStateType.None:
|
||||
default:
|
||||
return UGQAbortReason.None;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static (Result, QuestBaseInfo?) generateUgqQuestBaseInfo(GameQuestDataEntity gameQuestData)
|
||||
{
|
||||
var quest_base_info = new QuestBaseInfo();
|
||||
SortedSet<int> setTaskNum = new();
|
||||
SortedSet<int> setTaskIdx = new();
|
||||
|
||||
UgqGradeType grade_type = gameQuestData.GradeType;
|
||||
int beacon_id = gameQuestData.BeaconId;
|
||||
|
||||
var result = new Result();
|
||||
if (gameQuestData.QuestScriptMetas.Count == 0)
|
||||
{
|
||||
var err_msg = $"gameQuestData QuestsScript Metas count zero QuestId : {gameQuestData.QuestId}, revision : {gameQuestData.Revision}";
|
||||
result.setFail(ServerErrorCode.UgqQuestMetaNotExist, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
return (result, null);
|
||||
}
|
||||
|
||||
var quest_script_metas = convertQuestMeta2ScrioptMeta(gameQuestData.QuestScriptMetas);
|
||||
|
||||
var ugq_quest_type = QuestHelper.convertQuestContentStateToUgqStateType(gameQuestData.State);
|
||||
MetaData.Instance.makeQuestBaseInfo(quest_script_metas, ref quest_base_info, ref setTaskIdx,
|
||||
(UInt32)gameQuestData.QuestId,
|
||||
EQuestType.UGQ.ToString(),
|
||||
true,
|
||||
EAssignType.NONE.ToString(),
|
||||
ERequirementQuestType.None.ToString(),
|
||||
0,
|
||||
OncePeriodRangeType.Nolimit,
|
||||
false,
|
||||
true,
|
||||
getUgqRewardGroupIdByGrade(grade_type, beacon_id),
|
||||
string.Empty,
|
||||
string.Empty,
|
||||
ugq_quest_type,
|
||||
(UInt32)gameQuestData.Revision
|
||||
);
|
||||
|
||||
|
||||
//Log.getLogger().info($"base_info : {JsonConvert.SerializeObject(quest_base_info)}");
|
||||
return (new(), quest_base_info);
|
||||
|
||||
}
|
||||
|
||||
private static bool isWorldBeacon(int beaconId)
|
||||
{
|
||||
if (beaconId > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ugq api 서버 테스트 및 디버깅이 어려워 우선 meta 정보 받아오고 나서 groupId셋팅 처리
|
||||
* 추후 다시 리팩토링 필요
|
||||
*/
|
||||
|
||||
private static int getUgqRewardGroupIdByGrade(UgqGradeType gradeType, int beaconId)
|
||||
{
|
||||
|
||||
bool is_world_beacon = isWorldBeacon(beaconId);
|
||||
|
||||
if (is_world_beacon)
|
||||
{
|
||||
switch (gradeType)
|
||||
{
|
||||
case UgqGradeType.Amature:
|
||||
return MetaHelper.GameConfigMeta.WorldBeaconAmateurUGQReward;
|
||||
case UgqGradeType.RisingStar:
|
||||
return MetaHelper.GameConfigMeta.WorldBeaconRisingstarUGQReward;
|
||||
case UgqGradeType.Master1:
|
||||
return MetaHelper.GameConfigMeta.WorldBeaconMasterOneUGQReward;
|
||||
case UgqGradeType.Master2:
|
||||
return MetaHelper.GameConfigMeta.WorldBeaconMasterTwoUGQReward;
|
||||
case UgqGradeType.Master3:
|
||||
return MetaHelper.GameConfigMeta.WorldBeaconMasterThreeUGQReward;
|
||||
default:
|
||||
Log.getLogger().error($"{gradeType} type not exist in getUgqRewardGroupIdByGrade");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (gradeType)
|
||||
{
|
||||
case UgqGradeType.Amature:
|
||||
return MetaHelper.GameConfigMeta.NormalBeaconAmateurUGQReward;
|
||||
case UgqGradeType.RisingStar:
|
||||
return MetaHelper.GameConfigMeta.NormalBeaconRisingstarUGQReward;
|
||||
case UgqGradeType.Master1:
|
||||
return MetaHelper.GameConfigMeta.NormalBeaconMasterOneUGQReward;
|
||||
case UgqGradeType.Master2:
|
||||
return MetaHelper.GameConfigMeta.NormalBeaconMasterTwoUGQReward;
|
||||
case UgqGradeType.Master3:
|
||||
return MetaHelper.GameConfigMeta.NormalBeaconMasterThreeUGQReward;
|
||||
default:
|
||||
Log.getLogger().error($"{gradeType} type not exist in getUgqRewardGroupIdByGrade");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static List<QuestScriptMetaData> convertQuestMeta2ScrioptMeta(List<QuestMetaInfo> questMetaInfos)
|
||||
{
|
||||
List<QuestScriptMetaData> metas = new();
|
||||
|
||||
(var quest_id, var quest_revision) = QuestHelper.convertUgqQuestIdToQuestIdAndRevision(questMetaInfos[0].ComposedQuestId);
|
||||
|
||||
foreach (var quest_meta in questMetaInfos)
|
||||
{
|
||||
QuestScriptMetaDataMutable script_mutable = new();
|
||||
|
||||
script_mutable.QuestId = quest_id;
|
||||
script_mutable.Index = quest_meta.Index;
|
||||
script_mutable.EventTarget = quest_meta.EventTarget;
|
||||
script_mutable.Event = quest_meta.EventName;
|
||||
script_mutable.EventCondition1 = quest_meta.EventCondition1;
|
||||
script_mutable.EventCondition2 = quest_meta.EventCondition2;
|
||||
script_mutable.EventCondition3 = quest_meta.EventCondition3;
|
||||
script_mutable.FunctionTarget = quest_meta.FunctionTarget;
|
||||
script_mutable.Function = quest_meta.FunctionName;
|
||||
script_mutable.FunctionCondition1 = quest_meta.FunctionCondition1;
|
||||
script_mutable.FunctionCondition2 = quest_meta.FunctionCondition2;
|
||||
script_mutable.FunctionCondition3 = quest_meta.FunctionCondition3;
|
||||
|
||||
|
||||
QuestScriptMetaData script_meta = new(script_mutable);
|
||||
metas.Add(script_meta);
|
||||
}
|
||||
return metas;
|
||||
}
|
||||
|
||||
|
||||
public static async Task<(Result, GameQuestDataEntity?)> loadLiveGameQuestGameDataEntity(Player player, UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_api_manager, () => $"ugq_api_manager is null - {player.toBasicString()}");
|
||||
|
||||
var lang_type = player.getLanguageType();
|
||||
|
||||
var func = new Func<string, UInt32, UInt32, LanguageType, Task<(Result, GameQuestDataEntity?)>>(ugq_api_manager.getUgqQuestData);
|
||||
|
||||
return await loadGameQuestDataEntity(player, questId, questRevision, func);
|
||||
}
|
||||
|
||||
public static async Task<(Result, GameQuestDataEntity?)> loadTestGameQuestGameDataEntity(Player player, UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
NullReferenceCheckHelper.throwIfNull(ugq_api_manager, () => $"ugq_api_manager is null - {player.toBasicString()}");
|
||||
|
||||
var lang_type = player.getLanguageType();
|
||||
|
||||
var func = new Func<string, UInt32, UInt32, LanguageType, Task<(Result, GameQuestDataEntity?)>>(ugq_api_manager.getUgqTestQuestData);
|
||||
|
||||
return await loadGameQuestDataEntity(player, questId, questRevision, func);
|
||||
}
|
||||
|
||||
public static async Task<(Result, GameQuestDataEntity?)> loadGameQuestDataEntity(Player player, UInt32 questId, UInt32 questRevision, Func<string, UInt32, UInt32, LanguageType, Task<(Result, GameQuestDataEntity?)>> func)
|
||||
{
|
||||
// 1. ugq api 서버에서 데이터 호출
|
||||
(var result, var game_quest_data) = await func(player.getUserGuid(), questId, questRevision, player.getLanguageType());
|
||||
if (result.isFail())
|
||||
{
|
||||
return (result, null);
|
||||
}
|
||||
if (game_quest_data == null || game_quest_data.QuestScriptMetas.Count == 0 || game_quest_data.UgqGameQuestDataForClientString == string.Empty)
|
||||
{
|
||||
var err_msg = $"GameQuestDataEntity NotExist questId : {questId} - questRevision L {questRevision}";
|
||||
result.setFail(ServerErrorCode.UgqQuestMetaNotExist, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
return (result, null);
|
||||
}
|
||||
|
||||
// 2. string -> UgqGameQuestDataForClient 로 전환및 gradeType, stateType 적용
|
||||
var ugq_game_quest_data_for_client = Newtonsoft.Json.JsonConvert.DeserializeObject<UgqGameQuestDataForClient>(game_quest_data.UgqGameQuestDataForClientString);
|
||||
if (ugq_game_quest_data_for_client is null)
|
||||
{
|
||||
var err_msg = $"GameQuestDataEntity NotExist questId : {questId} - questRevision L {questRevision}";
|
||||
result.setFail(ServerErrorCode.UgqQuestMetaNotExist, err_msg);
|
||||
Log.getLogger().error(err_msg);
|
||||
return (result, null);
|
||||
}
|
||||
game_quest_data.UgqGameQuestDataForClient = ugq_game_quest_data_for_client;
|
||||
game_quest_data.UgqGameQuestDataForClient.UgqGradeType = game_quest_data.GradeType;
|
||||
game_quest_data.UgqGameQuestDataForClient.UgqStateType = QuestHelper.convertQuestContentStateToUgqStateType(game_quest_data.State);
|
||||
|
||||
// 3. IsShowNpcLocation 값 신규 추가 됐으나, 추가되기전 데이터에는 반영이 안되어 있어서 임시로 반영 처리
|
||||
if (false == game_quest_data.UgqGameQuestDataForClientString.Contains("IsShowNpcLocation"))
|
||||
{
|
||||
foreach (var task in game_quest_data.UgqGameQuestDataForClient.Task)
|
||||
{
|
||||
task.IsShowNpcLocation = BoolType.True;
|
||||
}
|
||||
}
|
||||
|
||||
// 4. shutdown 체크
|
||||
if (game_quest_data.Shutdown == true) game_quest_data.UgqGameQuestDataForClient.UgqStateType = UgqStateType.Shutdown;
|
||||
|
||||
game_quest_data.UgqGameQuestDataForClientString = string.Empty;
|
||||
return (result, game_quest_data);
|
||||
|
||||
}
|
||||
|
||||
public static (Int32, Int32) getUgqDailyRewardMaxCountByGrade(UgqGradeType grade)
|
||||
{
|
||||
switch (grade)
|
||||
{
|
||||
case UgqGradeType.Amature:
|
||||
return (MetaHelper.GameConfigMeta.UgqAmateurBonusCount, MetaHelper.GameConfigMeta.UgqBonusGoldAmateur);
|
||||
case UgqGradeType.RisingStar:
|
||||
return (MetaHelper.GameConfigMeta.UgqRisingStarBonusCount, MetaHelper.GameConfigMeta.UgqBonusGoldRisingStar);
|
||||
case UgqGradeType.Master1:
|
||||
return (MetaHelper.GameConfigMeta.UgqMaster1BonusCount, MetaHelper.GameConfigMeta.UgqBonusGoldMaster1);
|
||||
case UgqGradeType.Master2:
|
||||
return (MetaHelper.GameConfigMeta.UgqMaster2BonusCount, MetaHelper.GameConfigMeta.UgqBonusGoldMaster2);
|
||||
case UgqGradeType.Master3:
|
||||
return (MetaHelper.GameConfigMeta.UgqMaster3BonusCount, MetaHelper.GameConfigMeta.UgqBonusGoldMaster3);
|
||||
default:
|
||||
return (MetaHelper.GameConfigMeta.UgqAmateurBonusCount, MetaHelper.GameConfigMeta.UgqBonusGoldAmateur);
|
||||
}
|
||||
}
|
||||
|
||||
public static CurrencyType getUgqUsageFeeType(UgqGradeType grade)
|
||||
{
|
||||
switch (grade)
|
||||
{
|
||||
case UgqGradeType.Amature:
|
||||
return EnumHelper.convertEnumValueStringToEnum<CurrencyType>(MetaHelper.GameConfigMeta.UgqUsageFeeTypeAmateur, CurrencyType.Sapphire);
|
||||
case UgqGradeType.RisingStar:
|
||||
return EnumHelper.convertEnumValueStringToEnum<CurrencyType>(MetaHelper.GameConfigMeta.UgqUsageFeeTypeRisingStar, CurrencyType.Ruby);
|
||||
case UgqGradeType.Master1:
|
||||
return EnumHelper.convertEnumValueStringToEnum<CurrencyType>(MetaHelper.GameConfigMeta.UgqUsageFeeTypeMaster1, CurrencyType.Sapphire);
|
||||
case UgqGradeType.Master2:
|
||||
return EnumHelper.convertEnumValueStringToEnum<CurrencyType>(MetaHelper.GameConfigMeta.UgqUsageFeeTypeMaster2, CurrencyType.Sapphire);
|
||||
case UgqGradeType.Master3:
|
||||
return EnumHelper.convertEnumValueStringToEnum<CurrencyType>(MetaHelper.GameConfigMeta.UgqUsageFeeTypeMaster3, CurrencyType.Sapphire);
|
||||
default:
|
||||
return CurrencyType.Sapphire;
|
||||
}
|
||||
}
|
||||
|
||||
public static int getUgqCost(UgqGradeType gradeType)
|
||||
{
|
||||
switch (gradeType)
|
||||
{
|
||||
case UgqGradeType.Amature:
|
||||
return MetaHelper.GameConfigMeta.UgqUsageFeeAmateur;
|
||||
case UgqGradeType.RisingStar:
|
||||
return MetaHelper.GameConfigMeta.UgqUsageFeeRisingStar;
|
||||
case UgqGradeType.Master1:
|
||||
return MetaHelper.GameConfigMeta.UgqUsageFeeMaster1;
|
||||
case UgqGradeType.Master2:
|
||||
return MetaHelper.GameConfigMeta.UgqUsageFeeMaster2;
|
||||
case UgqGradeType.Master3:
|
||||
return MetaHelper.GameConfigMeta.UgqUsageFeeMaster3;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user