Files
caliverse_server/GameServer/Entity/Ranking/Action/UgcNpcCommunicationRankAction.cs
2025-05-01 07:20:41 +09:00

70 lines
2.1 KiB
C#

using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
namespace GameServer;
public class UgcNpcCommunicationRankAction : EntityActionBase
{
private Dictionary<UgcNpcRankState, List<UgcNpcRank>> m_ranks { get; } = new();
public UgcNpcCommunicationRankAction(UgcNpcRankEntity owner) : base(owner)
{
}
public override async Task<Result> onInit() => await Task.FromResult(new Result());
public override void onClear()
{
}
public async Task<(Result result, List<UgcNpcRank>? list)> getRanks(UgcNpcRankState state)
{
if (!m_ranks.TryGetValue(state, out var ranks))
{
ranks = await loadRank(state);
}
return (new Result(), ranks);
}
public async Task<List<UgcNpcRank>?> loadRank(UgcNpcRankState state)
{
Result result;
AIChatRanking? chat_ranks;
List<UgcNpcRank>? list;
var ugc_npc_guids = new List<(string, long)>();
// 누적 랭킹 조회
if (state == UgcNpcRankState.Total)
{
(result, chat_ranks) = await AIChatServerConnector.getAllRanking(LanguageType.Ko, UgcNpcRankEntity.DefaultPageNum, UgcNpcRankEntity.DefaultPageSize);
if (result.isFail() || chat_ranks == null) return null;
}
// 트랜드 랭킹 조회
else
{
(result, chat_ranks) = await AIChatServerConnector.getTodayRanking(LanguageType.Ko, UgcNpcRankEntity.DefaultPageNum, UgcNpcRankEntity.DefaultPageSize);
if (result.isFail() || chat_ranks == null) return null;
}
foreach (var rank in chat_ranks.items)
{
ugc_npc_guids.Add((UgcNpcRankHelper.makeRankKey(rank.owner_guid, rank.char_guid), rank.total_chat_count));
}
list = await UgcNpcRankHelper.getUgcNpcSummaryFromMetaGuid(ugc_npc_guids);
Log.getLogger().info($"update ugc npc communication rank data : rank state[{state}] / rank count[{list.Count}]");
m_ranks[state] = list;
return list;
}
}