From 75d47b83ffa6b88d0bcb323f38244c203161eccc Mon Sep 17 00:00:00 2001 From: Kyle873 Date: Sat, 3 Jun 2023 07:59:35 -0400 Subject: [PATCH] avatar modify subcommand --- GameServer/Commands/AvatarCommand.cs | 53 ++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/GameServer/Commands/AvatarCommand.cs b/GameServer/Commands/AvatarCommand.cs index a22970f..e3adc77 100644 --- a/GameServer/Commands/AvatarCommand.cs +++ b/GameServer/Commands/AvatarCommand.cs @@ -10,7 +10,9 @@ namespace PemukulPaku.GameServer.Commands { public override void Run(Session session, string[] args) { + string action = args[0]; int avatarId = int.Parse(args[1]); + Run(session.Player, args); session.ProcessPacket(Packet.FromProto(new GetEquipmentDataReq() { }, CmdId.GetEquipmentDataReq)); @@ -22,12 +24,38 @@ namespace PemukulPaku.GameServer.Commands { session.ProcessPacket(Packet.FromProto(new GetAvatarDataReq() { AvatarIdLists = new uint[] { (uint)avatarId } }, CmdId.GetAvatarDataReq)); } + + if (action == "modify") + { + List updatedAvatars = new(); + + if (avatarId == -1) + { + foreach (AvatarScheme av in session.Player.AvatarList) + { + updatedAvatars.Add(av.AvatarId); + } + } + else + { + AvatarScheme? avatar = session.Player.AvatarList.FirstOrDefault(av => av.AvatarId == avatarId); + if (avatar is not null) + { + updatedAvatars.Add(avatar.AvatarId); + } + } + + session.ProcessPacket(Packet.FromProto(new GetAvatarDataReq() { AvatarIdLists = updatedAvatars.ToArray() }, CmdId.GetAvatarDataReq)); + } } public override void Run(Player player, string[] args) { string action = args[0]; int avatarId = int.Parse(args[1]); + string modType = args[2]; + int value = int.Parse(args[3]); + AvatarScheme? avatar; switch (action) { @@ -38,17 +66,38 @@ namespace PemukulPaku.GameServer.Commands { if (avatarData.AvatarId >= 9000) continue; // Avoid APHO avatars - AvatarScheme avatar = Common.Database.Avatar.Create(avatarData.AvatarId, player.User.Uid, player.Equipment); + avatar = Common.Database.Avatar.Create(avatarData.AvatarId, player.User.Uid, player.Equipment); player.AvatarList = player.AvatarList.Append(avatar).ToArray(); } } else { - AvatarScheme avatar = Common.Database.Avatar.Create(avatarId, player.User.Uid, player.Equipment); + avatar = Common.Database.Avatar.Create(avatarId, player.User.Uid, player.Equipment); player.AvatarList = player.AvatarList.Append(avatar).ToArray(); } player.Equipment.Save(); break; + case "modify": + if (avatarId == -1) + { + foreach (var av in player.AvatarList) + { + av.GetType()?.GetProperty(modType)?.SetValue(av, (uint)value, null); + av.Save(); + } + } + else + { + avatar = player.AvatarList.FirstOrDefault(av => av.AvatarId == avatarId); + if (avatar is not null) + { + avatar.GetType()?.GetProperty(modType)?.SetValue(avatar, value, null); + avatar.Save(); + } + else + c.Error("Invalid AvatarScheme in avatar modify command"); + } + break; default: throw new ArgumentException("Unrecognized action"); }