From 5f173ce8d2d41979f55ca424e8ccab7fe7a5fd48 Mon Sep 17 00:00:00 2001 From: Naruse <71993948+DevilProMT@users.noreply.github.com> Date: Wed, 29 Apr 2026 12:41:45 +0800 Subject: [PATCH] add badge --- GameServer/Game/Player/PlayerInstance.cs | 1 + .../Misc/PlayerSetting_SetShowBadge.cs | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 GameServer/Server/CallGS/Handlers/Misc/PlayerSetting_SetShowBadge.cs diff --git a/GameServer/Game/Player/PlayerInstance.cs b/GameServer/Game/Player/PlayerInstance.cs index a424c18..1b77b98 100644 --- a/GameServer/Game/Player/PlayerInstance.cs +++ b/GameServer/Game/Player/PlayerInstance.cs @@ -210,6 +210,7 @@ public class PlayerInstance(PlayerGameData data) Sex = Data.Gender, Vigor = Data.Vigor, Solutions = { LineupManager.LineupData.LineupInfo.Values.Select(x => x.ToProto()) }, + Badges = { InventoryManager.InventoryData.Items.Values.Where(x => x.ItemType == ItemTypeEnum.TYPE_BADGE).Select(x => (ulong)x.UniqueId) } }; foreach (var chara in CharacterManager.CharacterData.Characters) proto.Items.Add(chara.ToProto()); diff --git a/GameServer/Server/CallGS/Handlers/Misc/PlayerSetting_SetShowBadge.cs b/GameServer/Server/CallGS/Handlers/Misc/PlayerSetting_SetShowBadge.cs new file mode 100644 index 0000000..4dab8bb --- /dev/null +++ b/GameServer/Server/CallGS/Handlers/Misc/PlayerSetting_SetShowBadge.cs @@ -0,0 +1,43 @@ +using MikuSB.Enums.Player; +using MikuSB.Proto; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace MikuSB.GameServer.Server.CallGS.Handlers.Misc; + +[CallGSApi("PlayerSetting_SetShowBadge")] +public class PlayerSetting_SetShowBadge : ICallGSHandler +{ + public async Task Handle(Connection connection, string param, ushort seqNo) + { + var player = connection.Player!; + var req = JsonSerializer.Deserialize(param); + if (req == null) + { + await CallGSRouter.SendScript(connection, "PlayerSetting_SetShowBadge", "{\"err\":\"error.BadParam\"}"); + return; + } + + var slots = new[] + { + ProfileShowItemTypeEnum.SHOWITEM_BADGE1, + ProfileShowItemTypeEnum.SHOWITEM_BADGE2, + ProfileShowItemTypeEnum.SHOWITEM_BADGE3 + }; + for (int i = 0; i < slots.Length; i++) + { + var uniqueId = i < req.Badges.Count ? req.Badges[i] : 0; + player.SetShowItem((int)slots[i], uniqueId); + } + + var sync = new NtfSyncPlayer(); + sync.ShowItems.AddRange(player.Data.ShowItems); + await CallGSRouter.SendScript(connection, "PlayerSetting_SetShowBadge", "null", sync); + } +} + +internal sealed class SetShowBadgeParam +{ + [JsonPropertyName("tbBadge")] + public List Badges { get; set; } = []; +}