From bd76be6652a36c4312f7a3ed7fb33f823ae5bf20 Mon Sep 17 00:00:00 2001 From: StopWuyu Date: Sat, 23 Aug 2025 20:26:50 +0800 Subject: [PATCH] feat: player collection display --- Common/Data/Excel/AchievementDataExcel.cs | 18 ++++++++++++++++ Common/Data/GameData.cs | 1 + Common/Database/Player/PlayerData.cs | 21 ++++++++++++++++--- .../Friend/HandlerGetPlayerDetailInfoCsReq.cs | 2 +- 4 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 Common/Data/Excel/AchievementDataExcel.cs diff --git a/Common/Data/Excel/AchievementDataExcel.cs b/Common/Data/Excel/AchievementDataExcel.cs new file mode 100644 index 00000000..8084b00d --- /dev/null +++ b/Common/Data/Excel/AchievementDataExcel.cs @@ -0,0 +1,18 @@ +namespace EggLink.DanhengServer.Data.Excel; + +[ResourceEntity("AchievementData.json")] +public class AchievementDataExcel : ExcelResource +{ + public int QuestID { get; set; } + public int AchievementID { get; set; } + + public override int GetId() + { + return AchievementID; + } + + public override void Loaded() + { + GameData.AchievementDataData.TryAdd(AchievementID, this); + } +} \ No newline at end of file diff --git a/Common/Data/GameData.cs b/Common/Data/GameData.cs index 6ea5b36d..f89c8703 100644 --- a/Common/Data/GameData.cs +++ b/Common/Data/GameData.cs @@ -128,6 +128,7 @@ public static class GameData #region Player + public static Dictionary AchievementDataData { get; private set; } = []; public static Dictionary QuestDataData { get; private set; } = []; public static Dictionary FinishWayData { get; private set; } = []; public static Dictionary PlayerLevelConfigData { get; private set; } = []; diff --git a/Common/Database/Player/PlayerData.cs b/Common/Database/Player/PlayerData.cs index 56cd0ad0..f0c4d37b 100644 --- a/Common/Database/Player/PlayerData.cs +++ b/Common/Database/Player/PlayerData.cs @@ -1,6 +1,7 @@ using EggLink.DanhengServer.Data; using EggLink.DanhengServer.Database.Avatar; using EggLink.DanhengServer.Database.Inventory; +using EggLink.DanhengServer.Database.Quests; using EggLink.DanhengServer.Proto; using EggLink.DanhengServer.Util; using SqlSugar; @@ -168,9 +169,10 @@ public class PlayerData : BaseDatabaseDataHelper }; var avatarInfo = DatabaseHelper.Instance!.GetInstance(Uid); - var inventoryInfo = DatabaseHelper.Instance!.GetInstance(Uid); + var inventoryInfo = DatabaseHelper.Instance.GetInstance(Uid); + var questInfo = DatabaseHelper.Instance.GetInstance(Uid); - if (avatarInfo == null || inventoryInfo == null) + if (avatarInfo == null || inventoryInfo == null || questInfo == null) { // Handle server profile var serverProfile = ConfigManager.Config.ServerOption.ServerProfile; @@ -187,6 +189,18 @@ public class PlayerData : BaseDatabaseDataHelper return info; } + info.RecordInfo = new PlayerRecordInfo + { + CollectAvatarCount = (uint)avatarInfo.FormalAvatars.Count, + CollectEquipmentCount = (uint)inventoryInfo.EquipmentItems.Select(x => x.ItemId).ToHashSet().Count, + CollectRelicCount = (uint)inventoryInfo.RelicItems.Count, + CollectAchievementCount = (uint)GameData.AchievementDataData.Values.Select(x => x.QuestID).ToHashSet() + .Count(x => questInfo.Quests.GetValueOrDefault(x)?.QuestStatus is QuestStatus.QuestFinish + or QuestStatus.QuestClose), // count finished achievements + CollectionInfo = new PlayerCollectionInfo(), + CollectDiscCount = (uint)GameData.BackGroundMusicData.Count + }; + var pos = 0; foreach (var avatar in avatarInfo.AssistAvatars.Select(assist => avatarInfo.FormalAvatars.Find(x => x.BaseAvatarId == assist))) @@ -248,7 +262,8 @@ public class PrivacySettingsPb DisplayActiveState = DisplayActiveState, DisplayRecentlyState = DisplayRecentlyState, DisplayBattleRecord = DisplayBattleRecord, - DisplayCollection = DisplayCollection + DisplayCollection = DisplayCollection, + ExtraSettingsInfo = new PlayerExtraSettingsInfo() }; } } \ No newline at end of file diff --git a/GameServer/Server/Packet/Recv/Friend/HandlerGetPlayerDetailInfoCsReq.cs b/GameServer/Server/Packet/Recv/Friend/HandlerGetPlayerDetailInfoCsReq.cs index f26a5874..9fdefa64 100644 --- a/GameServer/Server/Packet/Recv/Friend/HandlerGetPlayerDetailInfoCsReq.cs +++ b/GameServer/Server/Packet/Recv/Friend/HandlerGetPlayerDetailInfoCsReq.cs @@ -11,7 +11,7 @@ public class HandlerGetPlayerDetailInfoCsReq : Handler { var req = GetPlayerDetailInfoCsReq.Parser.ParseFrom(data); - var playerData = connection.Player!.FriendManager!.GetFriendPlayerData([(int)req.Uid]).First(); + var playerData = connection.Player!.FriendManager!.GetFriendPlayerData([(int)req.Uid]).FirstOrDefault(); if (playerData == null) { await connection.SendPacket(new PacketGetPlayerDetailInfoScRsp());