feat: add dress system

This commit is contained in:
Naruse
2025-06-17 09:42:42 +08:00
parent a9c362f224
commit 7f4e4b38c5
6 changed files with 44 additions and 35 deletions

View File

@@ -5,16 +5,16 @@ namespace KianaBH.Data.Excel;
[ResourceEntity("DressData.json")]
public class DressDataExcel : ExcelResource
{
[JsonPropertyName("dressID")] public uint DressID { get; set; }
[JsonPropertyName("avatarIDList")] public List<uint> AvatarIDList { get; set; } = [];
[JsonPropertyName("dressID")] public int DressID { get; set; }
[JsonPropertyName("avatarIDList")] public List<int> AvatarIDList { get; set; } = [];
public override int GetId()
{
return (int)DressID;
return DressID;
}
public override void Loaded()
{
GameData.DressData.Add(GetId(), this);
GameData.DressData.Add(DressID, this);
}
}

View File

@@ -43,6 +43,7 @@ public class WordTextEN
public string Banner => "Gacha";
public string Activity => "Activity";
public string Elf => "Elf";
public string Dress => "Outfit";
// server info
public string Config => "Config File";
@@ -208,7 +209,9 @@ public class GiveAllTextEN
public string Usage =>
"Usage: /giveall weapon\n\n" +
"Usage: /giveall stigmata";
"Usage: /giveall stigmata\n\n" +
"Usage: /giveall material\n\n" +
"Usage: /giveall dress\n";
public string GiveAllItems => "Granted all {0}";
}

View File

@@ -44,4 +44,23 @@ public class CommandGiveall : ICommands
await arg.Target!.Player!.SyncInventory();
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems", I18NManager.Translate("Word.Material")));
}
[CommandMethod("dress")]
public async ValueTask GiveDress(CommandArg arg)
{
if (!await arg.CheckOnlineTarget()) return;
foreach (var config in GameData.DressData.Values)
{
foreach (var valkId in config.AvatarIDList)
{
var valk = arg.Target!.Player!.AvatarManager!.GetAvatar(valkId);
if (valk == null) continue;
if (valk.DressList.Contains(config.DressID)) continue;
valk.DressList.Add(config.DressID);
}
}
await arg.Target!.Player!.SyncValk();
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems", I18NManager.Translate("Word.Dress")));
}
}

View File

@@ -0,0 +1,17 @@
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Avatar;
[Opcode(CmdIds.SetDressReq)]
public class HandlerSetDressReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = SetDressReq.Parser.ParseFrom(data);
var player = connection.Player!;
var valk = player.AvatarManager!.GetAvatar((int)req.AvatarId);
if (valk == null) return;
valk.DressId = (int)req.DressId;
await connection.SendPacket(CmdIds.SetDressRsp);
}
}

View File

@@ -1,13 +0,0 @@
using KianaBH.GameServer.Server.Packet.Send.Test;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Recv.Test;
[Opcode(CmdIds.SetDressReq)]
public class HandlerSetDressReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
await connection.SendPacket(new PacketSetDressRsp());
}
}

View File

@@ -1,17 +0,0 @@
using KianaBH.KcpSharp;
using KianaBH.Proto;
namespace KianaBH.GameServer.Server.Packet.Send.Test;
public class PacketSetDressRsp : BasePacket
{
public PacketSetDressRsp() : base(CmdIds.SetDressRsp)
{
var proto = new SetDressRsp
{
};
SetData(proto);
}
}