초기커밋

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,396 @@
using Google.Protobuf.WellKnownTypes;
using MetaAssets;
using Nettention.Proud;
using ServerCommon;
using ServerCommon.Cache;
using ServerCore; using ServerBase;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UGQDatabase.Models;
namespace GameServer;
public static class QuestNotifyHelper
{
public static async Task<ClientToGame> makeQuestUpdateNotify(Player player, UInt32 questId, ServerCommon.Quest assigned_quest, bool isNewQuest = false)
{
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
ClientToGame ntf_packet = new ClientToGame();
ntf_packet.Message = new ();
ntf_packet.Message.QuestUpdateNoti = new();
List<ServerCommon.Quest> quests = new();
quests.Add(assigned_quest);
ntf_packet.Message.QuestUpdateNoti.Quests.AddRange(await QuestMetaHelper.makeQuestInfoData(quests));
if (isNewQuest)
{
ntf_packet.Message.QuestUpdateNoti.QuestMetaInfos.AddRange(makeQuestMetaInfoData(new List<UInt32>() { questId }));
}
return ntf_packet;
}
//public static void send_GS2C_NTF_QUEST_UPDATE_ALL(this Player player)
//{
// var quest_action = player.getEntityAction<QuestAction>();
// var quests = quest_action.getQuests();
// foreach(var quest_key in quests.Keys)
// {
// var quest_id = quest_key.Item2;
// send_GS2C_NTF_QUEST_UPDATE(player, quest_id, false);
// }
//}
public static async Task<Result> send_GS2C_NTF_QUEST_UPDATE_ALL(this Player player)
{
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var quest_action = player.getEntityAction<QuestAction>();
var quests = quest_action.getQuests();
foreach (var quest in quests.Values)
{
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!!");
await player.send_GS2C_NTF_QUEST_UPDATE(quest_attribute.QuestId, quest_attribute.UgqInfo.QuestRevision);
}
return new();
}
public static async Task<Result> send_GS2C_NTF_QUEST_UPDATE(this Player player, UInt32 questId, UInt32 questRevision, CommonResult? commonResult = null, bool isNewQuest = false)
{
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
ClientToGame ntf_packet = new ClientToGame();
ntf_packet.Message = new ClientToGameMessage();
ntf_packet.Message.QuestUpdateNoti = new ClientToGameMessage.Types.QuestList();
var server_logic = GameServerApp.getServerLogic();
var quest_action = player.getEntityAction<QuestAction>();
(var result, var quest_meta_all_base_info) = await QuestMetaManager.It.getQuestMeta(player, questId, questRevision);
if (result.isFail()) return result;
var quest_base_info = quest_meta_all_base_info.m_quest_base_info;
NullReferenceCheckHelper.throwIfNull(quest_base_info, () => $"quest_base_info is null !!!");
result = quest_action.getQuest(quest_base_info.QuestType, questId, out var quest);
if (result.isFail()) return result;
NullReferenceCheckHelper.throwIfNull(quest, () => $"quest is null !!!");
List<ServerCommon.Quest> quests = new();
quests.Add(quest);
ntf_packet.Message.QuestUpdateNoti.Quests.AddRange(await QuestMetaHelper.makeQuestInfoData(quests));
if (isNewQuest)
{
ntf_packet.Message.QuestUpdateNoti.QuestMetaInfos.AddRange(makeQuestMetaInfoData(new List<UInt32>() { questId }));
}
ntf_packet.Message.QuestUpdateNoti.CommonResult = commonResult;
server_logic.onSendPacket(player, ntf_packet);
return result;
}
public static Result send_GS2C_NTF_QUEST_UPDATE_EMPTY(this Player player)
{
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var server_logic = GameServerApp.getServerLogic();
ClientToGame ntf_packet = new ClientToGame();
ntf_packet.Message = new ClientToGameMessage();
ntf_packet.Message.QuestUpdateNoti = new ClientToGameMessage.Types.QuestList();
var quest_action = player.getEntityAction<QuestAction>();
server_logic.onSendPacket(player, ntf_packet);
return new();
}
public static void send_GS2C_NTF_SYSTEM_QUEST_METAS(this Player player)
{
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var server_logic = GameServerApp.getServerLogic();
int quest_meta_count = MetaData.Instance.m_quest_assign_meta_infos.Count;
int quest_task_meta_count = MetaData.Instance.m_quest_task_meta_infos.Count;
int batch_size = 500;
for (int i = 0; i < quest_meta_count; i += batch_size)
{
var splited_infos = MetaData.Instance.m_quest_assign_meta_infos.GetRange(i, Math.Min(batch_size, quest_meta_count - i));
var ntf_packet = new ClientToGame();
ntf_packet.Message = new();
ntf_packet.Message.NtfQuestAssignMetaInfo = new();
ntf_packet.Message.NtfQuestAssignMetaInfo.QuestAssignMeteInfos.AddRange(splited_infos);
//ntf_packet.Message.NtfQuestAssignMetaInfo.QuestTaskMetaInfos.AddRange(MetaData.Instance.m_quest_task_meta_infos);
server_logic.onSendPacket(player, ntf_packet);
}
for (int i = 0; i < quest_task_meta_count; i += batch_size)
{
var splited_infos = MetaData.Instance.m_quest_task_meta_infos.GetRange(i, Math.Min(batch_size, quest_task_meta_count - i));
var ntf_packet = new ClientToGame();
ntf_packet.Message = new();
ntf_packet.Message.NtfQuestAssignMetaInfo = new();
//ntf_packet.Message.NtfQuestAssignMetaInfo.QuestAssignMeteInfos.AddRange(splited_infos);
ntf_packet.Message.NtfQuestAssignMetaInfo.QuestTaskMetaInfos.AddRange(splited_infos);
server_logic.onSendPacket(player, ntf_packet);
}
// var ntf_packet = new ClientToGame();
// ntf_packet.Message = new();
// ntf_packet.Message.NtfQuestAssignMetaInfo = new();
// ntf_packet.Message.NtfQuestAssignMetaInfo.QuestAssignMeteInfos.AddRange(MetaData.Instance.m_quest_assign_meta_infos);
// ntf_packet.Message.NtfQuestAssignMetaInfo.QuestTaskMetaInfos.AddRange(MetaData.Instance.m_quest_task_meta_infos);
// server_logic.onSendPacket(player, ntf_packet);
}
public static async Task send_GS2C_NTF_SYSTEM_QUESTS(this Player player)
{
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var server_logic = GameServerApp.getServerLogic();
var ntf_packet = new ClientToGame();
ntf_packet.Message = new();
ntf_packet.Message.QuestInfoNoti = new();
var quest_action = player.getEntityAction<QuestAction>();
var quests = quest_action.getSystemQuests();
ntf_packet.Message.QuestInfoNoti.Quests.AddRange(await QuestMetaHelper.makeQuestInfoData(quests));
List<UInt32> quest_ids = new();
foreach (var quest in quests)
{
var quest_attribute = quest.getEntityAttribute<QuestAttribute>();
NullReferenceCheckHelper.throwIfNull(quest_attribute, () => $"quest_attribute is null !!!");
quest_ids.Add(quest_attribute.QuestId);
}
ntf_packet.Message.QuestInfoNoti.QuestMetaInfos.AddRange(makeQuestMetaInfoData(quest_ids));
server_logic.onSendPacket(player, ntf_packet);
}
public static void send_GS2C_NTF_END_QUESTS(this Player player)
{
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var server_logic = GameServerApp.getServerLogic();
var ntf_packet = new ClientToGame();
ntf_packet.Message = new();
ntf_packet.Message.QuestEndInfoNoti = new();
var end_quest_action = player.getEntityAction<EndQuestAction>();
var end_quests = end_quest_action.getEndQuests();
var infos = end_quest_action.makeQuestEndInfo(end_quests.Keys.ToList());
ntf_packet.Message.QuestEndInfoNoti.EndQuests.AddRange(infos);
server_logic.onSendPacket(player, ntf_packet);
}
public static async Task send_GS2C_NTF_UGQS(this Player player)
{
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var server_logic = GameServerApp.getServerLogic();
var ugq_info_action = player.getEntityAction<UgqInfoAction>();
var all_infos = await ugq_info_action.makeUqgInfosForClient();
foreach (var info in all_infos)
{
var ntf_packet = new ClientToGame();
ntf_packet.Message = new();
ntf_packet.Message.NtfUgqQuests = new();
ntf_packet.Message.NtfUgqQuests.AllUgqInfos.Add(info);
server_logic.onSendPacket(player, ntf_packet);
}
}
public static async Task send_GS2C_NTF_UGQ(this Player player, UInt32 questId, UInt32 questRevision)
{
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var server_logic = GameServerApp.getServerLogic();
var ntf_packet = new ClientToGame();
ntf_packet.Message = new();
ntf_packet.Message.NtfUgqQuests = new();
var ugq_info_action = player.getEntityAction<UgqInfoAction>();
var all_infos = await ugq_info_action.makeUqgInfoForClient(questId, questRevision);
ntf_packet.Message.NtfUgqQuests.AllUgqInfos.AddRange(all_infos);
server_logic.onSendPacket(player, ntf_packet);
}
public static async Task send_GS2C_NTF_UGQ_DAILY_REWARD(this Player player)
{
//보내기 전에 여기에 리프레시 하는것 추가
var ugq_reward_action = player.getEntityAction<UgqRewardAction>();
await ugq_reward_action.uggDailyRewardRefresh();
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var server_logic = GameServerApp.getServerLogic();
var daily_reward_attribute = player.getEntityAttribute<UgqDailyRewardCountAttribute>();
NullReferenceCheckHelper.throwIfNull(daily_reward_attribute, () => $"daily_reward_attribute is null !!!");
var ntf_packet = new ClientToGame();
ntf_packet.Message = new();
ntf_packet.Message.NtfUgqDailyRewardCounts = new();
ntf_packet.Message.NtfUgqDailyRewardCounts.NextRefreshTime = daily_reward_attribute.m_next_refresh_time.ToTimestamp();
var reward_counts = daily_reward_attribute.getDailyRewardCount();
foreach(var reward_cnt in reward_counts)
{
UgqDailyRewardCount usg_daily_reward_count = new();
usg_daily_reward_count.GradeType = reward_cnt.Key;
usg_daily_reward_count.CurrentCount = reward_cnt.Value;
(var max_cnt, _) = UgqMetaHelper.getUgqDailyRewardMaxCountByGrade(reward_cnt.Key);
usg_daily_reward_count.DailyMaxCount = max_cnt;
ntf_packet.Message.NtfUgqDailyRewardCounts.UgqDailyRewardCounts.Add(usg_daily_reward_count);
}
server_logic.onSendPacket(player, ntf_packet);
}
public static List<QuestMetaInfo> makeQuestMetaInfoData(List<UInt32> questIds)
{
List<QuestMetaInfo> metaInfos = new List<QuestMetaInfo>();
foreach(var questId in questIds)
{
if (!MetaData.Instance._QuestScriptMetaTable.TryGetValue(questId, out var questScripts))
{
Log.getLogger().error($"QuestMetaInfoData Not Exist questId : {questId}");
continue;
}
foreach (var script in questScripts.Values)
{
var meta = fillQuestMetaInfo(script);
metaInfos.Add(meta);
}
}
return metaInfos;
}
public static List<QuestMetaInfo> fillQuestMetaInfos(List<MetaAssets.QuestScriptMetaData> datas)
{
List<QuestMetaInfo> metaInfos = new List<QuestMetaInfo>();
foreach (var script in datas)
{
var meta = fillQuestMetaInfo(script);
metaInfos.Add(meta);
}
return metaInfos;
}
public static QuestMetaInfo fillQuestMetaInfo(MetaAssets.QuestScriptMetaData data)
{
QuestMetaInfo meta = new QuestMetaInfo();
meta.Index = data.Index;
meta.ComposedQuestId = QuestHelper.convertQuestIdAndRevisionToUgqQuestId(data.QuestId, 0);
meta.EventTarget = data.EventTarget;
meta.EventName = data.Event;
meta.EventCondition1 = data.EventCondition1;
meta.EventCondition2 = data.EventCondition2;
if (data.EventCondition2.Equals("0"))
{
meta.EventCondition2 = "";
}
meta.EventCondition3 = data.EventCondition3;
meta.FunctionTarget = data.FunctionTarget;
meta.FunctionName = data.Function;
meta.FunctionCondition1 = data.FunctionCondition1;
meta.FunctionCondition2 = data.FunctionCondition2;
meta.FunctionCondition3 = data.FunctionCondition3;
return meta;
}
public static async Task<Result> sendRedisQuestNotifyRequest(Player player, QuestTaskUpdateHandler questTaskUpdateHandler)
{
var result = new Result();
if (questTaskUpdateHandler is null)
{
var err_msg = $"quest notify redis regist fail questTaskUpdateHandler is null";
result.setFail(ServerErrorCode.QuestNotifyRedisRegistFail, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
var quest_id = questTaskUpdateHandler.m_quest_id;
var quest_revision = questTaskUpdateHandler.m_quest_revision;
var server_logic = GameServerApp.getServerLogic();
QuestNotifyCacheRequest cache = new QuestNotifyCacheRequest(player, player.getUserGuid(), quest_id, quest_revision, server_logic.getRedisConnector());
result = await cache.addQuestNotify();
if(result.isFail())
{
var err_msg = $"addQuestNotify fail";
result.setFail(ServerErrorCode.RedisHashesWriteFailed, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
return result;
}
public static async Task<Result> send_GS2C_NTF_QUEST_UPDATE_BY_SERVER_MOVE(this Player player)
{
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var server_logic = GameServerApp.getServerLogic();
QuestNotifyCacheRequest cache = new QuestNotifyCacheRequest(player, player.getUserGuid(), server_logic.getRedisConnector());
var notify_caches = await cache.getQuestNotifyAll();
foreach (var notify_cache in notify_caches)
{
var quest_id = notify_cache.m_quest_id;
var quest_revision = notify_cache.m_quest_revision;
await send_GS2C_NTF_QUEST_UPDATE(player, quest_id, quest_revision, new(), false);
await cache.deleteQuestNotify(quest_id, quest_revision);
}
return new();
}
public static Result send_GS2C_NTF_QUEST_REWARD(Player player, CommonResult commonResult)
{
var server_logic = GameServerApp.getServerLogic();
ClientToGame ntf_packet = new ClientToGame();
ntf_packet.Message = new ClientToGameMessage();
ntf_packet.Message.NtfQuestReward = new ClientToGameMessage.Types.GS2C_NTF_QUEST_REWARD();
ntf_packet.Message.NtfQuestReward.CommonResult = commonResult;
server_logic.onSendPacket(player, ntf_packet);
return new();
}
}