초기커밋
This commit is contained in:
396
GameServer/Contents/Quest/Helper/QuestNotifyHelper.cs
Normal file
396
GameServer/Contents/Quest/Helper/QuestNotifyHelper.cs
Normal 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();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user