feat: player collection display

This commit is contained in:
StopWuyu
2025-08-23 20:26:50 +08:00
parent 8673c01f42
commit bd76be6652
4 changed files with 38 additions and 4 deletions

View File

@@ -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);
}
}

View File

@@ -128,6 +128,7 @@ public static class GameData
#region Player
public static Dictionary<int, AchievementDataExcel> AchievementDataData { get; private set; } = [];
public static Dictionary<int, QuestDataExcel> QuestDataData { get; private set; } = [];
public static Dictionary<int, FinishWayExcel> FinishWayData { get; private set; } = [];
public static Dictionary<int, PlayerLevelConfigExcel> PlayerLevelConfigData { get; private set; } = [];

View File

@@ -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<AvatarData>(Uid);
var inventoryInfo = DatabaseHelper.Instance!.GetInstance<InventoryData>(Uid);
var inventoryInfo = DatabaseHelper.Instance.GetInstance<InventoryData>(Uid);
var questInfo = DatabaseHelper.Instance.GetInstance<QuestData>(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()
};
}
}

View File

@@ -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());