초기커밋

This commit is contained in:
2025-05-01 07:20:41 +09:00
commit 98bb2e3c5c
2747 changed files with 646947 additions and 0 deletions

View File

@@ -0,0 +1,531 @@
using System.Collections.Generic;
using System.Net.Http;
using Newtonsoft.Json;
using Amazon.Runtime.Internal.Endpoints.StandardLibrary;
using ServerCore; using ServerBase;
using ServerCommon;
using MetaAssets;
using UGQDatabase.Models;
namespace GameServer;
public class UgqInfoAction : EntityActionBase
{
public UgqInfoAction(EntityBase owner)
: base(owner)
{}
public override void onClear()
{
return;
}
public override async Task<Result> onInit()
{
await Task.CompletedTask;
var result = new Result();
return result;
}
public async Task<(Result, UgqBoardSearchResult?)> getPagedUgqFromBoard(UgqSearchCategoryType searchCategoryType = UgqSearchCategoryType.GradeAmateur,
UgqSortType sortType = UgqSortType.New,
Int32 pageNumber = 1,
string searchText = "",
UgqSearchType searchType = UgqSearchType.Title)
{
//TODO : 최대 입력 글자수 체크
//TODO : paging 된 데이터에 대해서 갱신 시간을 그때 처리 안하는게 좋을것 같긴 한데... 리프레시 타임 Meta로 빼서 처리
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
var language_type = player.getLanguageType();
var user_guid = player.getUserGuid();
var search_result = new UgqBoardSearchResult();
var result = new Result();
var page_size = MetaHelper.GameConfigMeta.UGQBoardMaxListAmount;
switch (searchCategoryType)
{
case UgqSearchCategoryType.GradeAmateur:
case UgqSearchCategoryType.GradeRisingStar:
case UgqSearchCategoryType.GradeMaster:
UgqUICategoryGradeType grade_type = UgqApiHelper.convertSearchCategoryTypeToUICategoryGradeType(searchCategoryType);
var dict = UgqApiHelper.makeDictionaryFromSearchQuestBoard(pageNumber, grade_type, searchType, searchText, sortType, language_type, page_size);
(result, search_result) = await ugq_api_manager.getPagedGradeUgqFromBoard(dict, language_type);
break;
case UgqSearchCategoryType.Bookmark:
dict = UgqApiHelper.makeDictionaryFromSearchQuestBoard(pageNumber, UgqUICategoryGradeType.None, UgqSearchType.None, string.Empty, sortType, language_type, page_size);
(result, search_result) = await ugq_api_manager.getPagedBookmarkUgqFromBoard(dict, user_guid);
break;
case UgqSearchCategoryType.SpotLight:
default:
var err_msg = $"getPagedUgqFromBoard Invalid searchCategoryType : {searchCategoryType} !!!";
result.setFail(ServerErrorCode.UgqApiServerInvaildSearchCategoryType, err_msg);
Log.getLogger().info(result.toBasicString());
break;
}
if (result.isFail())
{
return (result, null);
}
return (result, search_result);
}
public async Task<(Result, UgqBoardSportlightResult?)> getUgqSpotlightFromBoard()
{
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
var language_type = account_attribute.LanguageType;
var dict = UgqApiHelper.makeDictionaryFromLanguageType(language_type);
var (result, search_result) = await ugq_api_manager.getPagedSpotLightUgqFromBoard(dict);
return (result, search_result);
}
public async Task<(Result, UgqBoardItemDetail?)> getUgqDetailFromBoard(UInt32 questId, UInt32 questRevision)
{
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
var language_type = account_attribute.LanguageType;
var user_guid = player.getUserGuid();
var dict = UgqApiHelper.makeDictionaryForUgqQuestId(questId, questRevision);
(var result, var board_item_detail) = await ugq_api_manager.getUgqDetailFromBoard(dict, user_guid, language_type);
return (result, board_item_detail);
}
public (Result, List<string>) getUgqFromNpc(string npcGuid)
{
var result = new Result();
var ugqs = new List<string>();
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
var language_type = account_attribute.LanguageType;
var user_guid = player.getUserGuid();
return (result, ugqs);
}
public async Task<Result> ugqRegisterBookmark(UInt32 questId)
{
var result = new Result();
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
var account_attribute = player.getEntityAttribute<AccountAttribute>();
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
var language_type = account_attribute.LanguageType;
var user_guid = player.getUserGuid();
var dict = UgqApiHelper.makeDictionaryFromLanguageTypeWithMediaType(language_type);
result = await ugq_api_manager.ugqRegisterBookmark(dict, questId, user_guid);
return result;
}
public async Task<Result> ugqDeregisterBookmark(UInt32 questId)
{
var result = new Result();
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
var language_type = account_attribute.LanguageType;
var user_guid = player.getUserGuid();
var dict = UgqApiHelper.makeDictionaryFromLanguageTypeWithMediaType(language_type);
result = await ugq_api_manager.ugqDeRegisterBookmark(dict, questId, user_guid);
return result;
}
public async Task<Result> ugqRegisterLike(UInt32 questId, UInt32 questRevision)
{
var result = new Result();
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
var language_type = account_attribute.LanguageType;
var user_guid = player.getUserGuid();
var dict = UgqApiHelper.makeDictionaryFromLanguageTypeWithMediaType(language_type);
result = await ugq_api_manager.ugqRegisterLike(dict, questId, questRevision, user_guid);
return result;
}
public async Task<Result> ugqDeregisterLike(UInt32 questId, UInt32 questRevision)
{
var result = new Result();
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
var language_type = account_attribute.LanguageType;
var user_guid = player.getUserGuid();
var dict = UgqApiHelper.makeDictionaryFromLanguageTypeWithMediaType(language_type);
result = await ugq_api_manager.ugqDeregisterLike(dict, questId, questRevision, user_guid);
return result;
}
public async Task<Result> getUgqReport(UInt32 questId, UInt32 questRevision, string reportText)
{
var result = new Result();
//몇자 이상 넘어가면 에러 처리, 빈값이어도 에러 처리
if (MetaHelper.GameConfigMeta.MinReportContentNum > reportText.Length
|| MetaHelper.GameConfigMeta.MaxReportContentNum < reportText.Length)
{
var err_msg = $"fail to report ugc !!! : invalid report text length - {reportText.Length}";
result.setFail(ServerErrorCode.UgqReportInvalidTextLength, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
var language_type = account_attribute.LanguageType;
var user_guid = player.getUserGuid();
var dict = UgqApiHelper.makeDictionaryFromLanguageTypeWithMediaType(language_type);
result = await ugq_api_manager.ugqReport(dict, questId, questRevision, user_guid, reportText);
return result;
}
public async Task<(Result, List<UgqCurrentState>)> reloadUgqCurrentState()
{
var result = new Result();
var states = new List<UgqCurrentState>();
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var quest_action = player.getEntityAction<QuestAction>();
NullReferenceCheckHelper.throwIfNull(quest_action, () => $"quest_action is null !!! - {player.toBasicString()}");
var quests = quest_action.getQuests();
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
var language_type = account_attribute.LanguageType;
foreach (var quest in quests)
{
var quest_attribute = quest.Value.getEntityAttribute<QuestAttribute>();
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
var quest_revision = quest_attribute.UgqInfo.QuestRevision;
if (quest_revision == 0) continue;
var quest_id = quest.Key.Item2;
(result, var state, _) = await makeUgqCurrentState(quest_id, quest_revision, language_type);
if (result.isFail())
{
continue;
}
NullReferenceCheckHelper.throwIfNull(state, () => $"state is null !!! - {player.toBasicString()}");
states.Add(state);
}
return (result, states);
}
public async Task<(Result, UgqCurrentState?, UgqGradeType)> makeUgqCurrentState(UInt32 questId, UInt32 questRevision, LanguageType languageType)
{
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var state = new UgqCurrentState();
state.ComposedQuestId = QuestHelper.convertQuestIdAndRevisionToUgqQuestId(questId, questRevision);
//state.UgqQuestId.QuestRevision = questRevision;
var ugq_api_manager = GameServerApp.getServerLogic().GetUqgApiManager();
(var result, var latest_game_quest_data) = await ugq_api_manager.getUgqLatestQuestData(questId, languageType);
if (result.isFail())
{
var err_msg = $"fail to getUgqLatestQuestData !!! questId : {questId}, {player.getUserGuid()}";
Log.getLogger().error(err_msg);
return (result, null, UgqGradeType.None);
}
NullReferenceCheckHelper.throwIfNull(latest_game_quest_data, () => $"latest_game_quest_data is null !!! - {player.toBasicString()}");
var grade = latest_game_quest_data.GradeType;
if (questRevision < latest_game_quest_data.Revision)
{
if (false == latest_game_quest_data.Shutdown)
{
state.UgqState = UgqStateType.Shutdown;
}
else
{
state.UgqState = UgqStateType.RevisionChanged;
}
}
else if (questRevision == latest_game_quest_data.Revision)
{
if (true == latest_game_quest_data.Shutdown)
{
state.UgqState = UgqStateType.Shutdown;
}
else
{
state.UgqState = UgqStateType.Live;
}
}
else if (latest_game_quest_data.UgqGameQuestDataForClient.UgqStateType == UgqStateType.Standby)
{
state.UgqState = UgqStateType.Standby;
}
else
{
var err_msg = $"UgqQuestData Invalid questId : {questId}, questRevision : {questRevision}, latest_game_quest_data.Revision :{latest_game_quest_data.Revision}, {player.getUserGuid()}";
result.setFail(ServerErrorCode.UgqQuestDataInvalidRevision, err_msg);
Log.getLogger().error(err_msg);
return (result, null, grade);
}
return (result, state, grade);
}
public async Task<List<AllUgqInfos>> makeUqgInfosForClient()
{
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var server_logic = GameServerApp.getServerLogic();
var ugq_api_manager = server_logic.GetUqgApiManager();
var user_guid = player.getUserGuid();
var quest_action = player!.getEntityAction<QuestAction>();
var quests = quest_action.getUgqQuests();
List<AllUgqInfos> all_ugq_infos = new();
foreach (var quest in quests)
{
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
if (quest_attribute.UgqInfo.QuestRevision == 0) continue;
var quest_id = quest_attribute.QuestId;
var quest_revision = quest_attribute.UgqInfo.QuestRevision;
var ugq_info_action = player!.getEntityAction<UgqInfoAction>();
NullReferenceCheckHelper.throwIfNull(ugq_info_action, () => $"ugq_info_action is null !!! - {player.toBasicString()}");
(var result, var quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(player, quest_id, quest_revision, quest_attribute.UgqInfo.UqgState);
if (result.isFail()) continue;
NullReferenceCheckHelper.throwIfNull(quest_meta_all_base_info, () => $"quest_meta_all_base_info is null !!! - {player.toBasicString()}");
var game_quest_data = quest_meta_all_base_info.m_quest_data_entity;
NullReferenceCheckHelper.throwIfNull(game_quest_data, () => $"game_quest_data is null !!! - {player.toBasicString()}");
var quest_base_info = quest_meta_all_base_info.m_quest_base_info;
NullReferenceCheckHelper.throwIfNull(quest_base_info, () => $"quest_base_info is null !!! - {player.toBasicString()}");
game_quest_data.UgqGameQuestDataForClient.UgqGradeType = game_quest_data.GradeType;
List<ServerCommon.Quest> ugq_quests = new();
List<QuestMetaInfo> meta_infos = new();
List<UgqGameQuestDataForClient> ugq_game_quest_data_for_clients = new();
var quest_infos = await QuestMetaHelper.makeQuestInfoData(new List<ServerCommon.Quest> { quest });
meta_infos.AddRange(game_quest_data.QuestScriptMetas);
ugq_game_quest_data_for_clients.AddRange(new List<UgqGameQuestDataForClient>() { game_quest_data.UgqGameQuestDataForClient });
var all_info = new AllUgqInfos();
all_info.Quests.AddRange(quest_infos);
all_info.QuestMetaInfos.AddRange(meta_infos);
all_info.UgqGameQuestDataForClients.AddRange(ugq_game_quest_data_for_clients);
all_ugq_infos.Add(all_info);
}
return all_ugq_infos;
}
public async Task<List<AllUgqInfos>> makeUqgInfoForClient(UInt32 questId, UInt32 questRevision)
{
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var server_logic = GameServerApp.getServerLogic();
var ugq_api_manager = server_logic.GetUqgApiManager();
var user_guid = player.getUserGuid();
var all_ugq_infos = new List<AllUgqInfos>();
var quest_action = player!.getEntityAction<QuestAction>();
NullReferenceCheckHelper.throwIfNull(quest_action, () => $"quest_action is null !!! - {player.toBasicString()}");
(var result, var quest) = await quest_action.getQuest(questId, questRevision);
if (result.isFail()) return all_ugq_infos;
NullReferenceCheckHelper.throwIfNull(quest, () => $"quest is null !!! - {player.toBasicString()}");
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!! - {player.toBasicString()}");
if (questRevision == 0) return all_ugq_infos;
//var quest_id = quest_attribute.QuestId;
//var quest_revision = quest_attribute.UgqInfo.QuestRevision;
var ugq_info_action = player!.getEntityAction<UgqInfoAction>();
NullReferenceCheckHelper.throwIfNull(ugq_info_action, () => $"ugq_info_action is null !!! - {player.toBasicString()}");
(result, var quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(player, questId, questRevision, quest_attribute.UgqInfo.UqgState);
if (result.isFail()) return all_ugq_infos;
var game_quest_data = quest_meta_all_base_info.m_quest_data_entity;
NullReferenceCheckHelper.throwIfNull(game_quest_data, () => $"game_quest_data is null !!! - {player.toBasicString()}");
var quest_base_info = quest_meta_all_base_info.m_quest_base_info;
NullReferenceCheckHelper.throwIfNull(quest_base_info, () => $"quest_base_info is null !!! - {player.toBasicString()}");
List<ServerCommon.Quest> ugq_quests = new();
List<QuestMetaInfo> meta_infos = new();
List<UgqGameQuestDataForClient> ugq_game_quest_data_for_clients = new();
var quest_infos = await QuestMetaHelper.makeQuestInfoData(new List<ServerCommon.Quest> { quest });
meta_infos.AddRange(game_quest_data.QuestScriptMetas);
ugq_game_quest_data_for_clients.AddRange(new List<UgqGameQuestDataForClient>() { game_quest_data.UgqGameQuestDataForClient });
var all_info = new AllUgqInfos();
all_info.Quests.AddRange(quest_infos);
all_info.QuestMetaInfos.AddRange(meta_infos);
all_info.UgqGameQuestDataForClients.AddRange(ugq_game_quest_data_for_clients);
all_ugq_infos.Add(all_info);
return all_ugq_infos;
}
public async Task<Result> ugqLatestRevisionCheck(UInt32 questId, UInt32 questRevision)
{
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var server_logic = GameServerApp.getServerLogic();
var ugq_api_manager = server_logic.GetUqgApiManager();
var account_attribute = player!.getEntityAttribute<AccountAttribute>();
NullReferenceCheckHelper.throwIfNull(account_attribute, () => $"account_attribute is null !!! - {player.toBasicString()}");
var language_type = account_attribute.LanguageType;
(var result, var latest_quest_data) = await ugq_api_manager.getUgqLatestQuestData(questId, language_type);
if (result.isFail()) return result;
NullReferenceCheckHelper.throwIfNull(latest_quest_data, () => $"latest_quest_data is null !!! - {player.toBasicString()}");
if (latest_quest_data.Revision > questRevision)
{
var err_msg = $"ugq revision updateed !!! : questId : {questId}, requestedquestRevision : {questRevision}, latest_quest_data.Revision : {latest_quest_data.Revision}";
result.setFail(ServerErrorCode.UgqQuestDataRevisionUpdated, err_msg);
//Log.getLogger().error(err_msg);
return result;
}
if (latest_quest_data.Revision < questRevision)
{
var err_msg = $"ugq revision updateed !!! : questId : {questId}, requestedquestRevision : {questRevision}, latest_quest_data.Revision : {latest_quest_data.Revision}";
result.setFail(ServerErrorCode.UgqRevisionCannotSmallerThanRequestedRevision, err_msg);
return result;
}
if (latest_quest_data.State != QuestContentState.Live)
{
var err_msg = $"ugq state is not live !!! : questId : {questId}, requestedquestRevision : {questRevision}, latest_quest_data.state : {latest_quest_data.State}";
result.setFail(ServerErrorCode.UgqRevisionStateNotLive, err_msg);
return result;
}
return result;
}
}