From 7ab7fae2bf51412a662593db1b6983b31278170d Mon Sep 17 00:00:00 2001 From: Kyle873 Date: Thu, 1 Jun 2023 03:31:43 -0400 Subject: [PATCH] Partial give command --- GameServer/Commands/AvatarCommand.cs | 25 +++++---- GameServer/Commands/GiveCommand.cs | 80 ++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 10 deletions(-) create mode 100644 GameServer/Commands/GiveCommand.cs diff --git a/GameServer/Commands/AvatarCommand.cs b/GameServer/Commands/AvatarCommand.cs index a88b04f..06e2700 100644 --- a/GameServer/Commands/AvatarCommand.cs +++ b/GameServer/Commands/AvatarCommand.cs @@ -14,8 +14,8 @@ namespace PemukulPaku.GameServer.Commands Run(session.Player, args); session.ProcessPacket(Packet.FromProto(new GetEquipmentDataReq() { }, CmdId.GetEquipmentDataReq)); - if (avatarId == -1) - { + if (avatarId == -1) + { session.ProcessPacket(Packet.FromProto(new GetAvatarDataReq() { AvatarIdLists = new uint[] { 0 } }, CmdId.GetAvatarDataReq)); } else @@ -32,19 +32,24 @@ namespace PemukulPaku.GameServer.Commands switch (action) { case "add": - if (avatarId == -1) + if (player.Equipment is not null) { - foreach (AvatarDataExcel avatarData in AvatarData.GetInstance().All) + if (avatarId == -1) { - AvatarScheme avatar = Common.Database.Avatar.Create(avatarData.AvatarId, player.User.Uid, player.Equipment); + foreach (AvatarDataExcel avatarData in AvatarData.GetInstance().All) + { + if (avatarData.AvatarId >= 9000) continue; // Avoid APHO avatars + + AvatarScheme 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); player.AvatarList = player.AvatarList.Append(avatar).ToArray(); } } - else - { - AvatarScheme avatar = Common.Database.Avatar.Create(avatarId, player.User.Uid, player.Equipment); - player.AvatarList = player.AvatarList.Append(avatar).ToArray(); - } player.Equipment.Save(); break; default: diff --git a/GameServer/Commands/GiveCommand.cs b/GameServer/Commands/GiveCommand.cs new file mode 100644 index 0000000..15a72cf --- /dev/null +++ b/GameServer/Commands/GiveCommand.cs @@ -0,0 +1,80 @@ +using Common.Database; +using Common.Resources.Proto; +using Common.Utils.ExcelReader; +using PemukulPaku.GameServer.Game; + +namespace PemukulPaku.GameServer.Commands +{ + [CommandHandler("give", "Mass give resources", CommandType.Player)] + internal class GiveCommand : Command + { + public override void Run(Session session, string[] args) + { + Run(session.Player, args); + + session.ProcessPacket(Packet.FromProto(new GetEquipmentDataReq() { }, CmdId.GetEquipmentDataReq)); + session.ProcessPacket(Packet.FromProto(new GetAvatarDataReq() { AvatarIdLists = new uint[] { 0 } }, CmdId.GetAvatarDataReq)); + } + + public override void Run(Player player, string[] args) + { + string action = args[0]; + + switch (action) + { + case "avatars": + case "characters": + case "chars": + if (player.Equipment is not null) + { + foreach (AvatarDataExcel avatarData in AvatarData.GetInstance().All) + { + if (avatarData.AvatarId >= 9000) continue; // Avoid APHO avatars + + AvatarScheme avatar = Common.Database.Avatar.Create(avatarData.AvatarId, player.User.Uid, player.Equipment); + player.AvatarList = player.AvatarList.Append(avatar).ToArray(); + } + } + break; + case "weapons": + if (player.Equipment is not null) + { + foreach (WeaponDataExcel weaponData in WeaponData.GetInstance().All) + { + player.Equipment.AddWeapon(weaponData.Id); + } + } + break; + case "stigmata": + case "stigs": + if (player.Equipment is not null) + { + foreach (StigmataDataExcel stigmataData in StigmataData.GetInstance().All) + { + player.Equipment.AddStigmata(stigmataData.Id); + } + } + break; + /* + * TODO: Needs MaterialDataExcel implementation + case "materials": + case "matz": + if (player.Equipment is not null) + { + foreach (MaterialDataExcel materialData in MaterialData.GetInstance().All) + { + player.Equipment.AddMaterial(materialData.Id, 9999999); + } + } + break; + */ + case "dress": // TODO: Needs DressDataExcel implementation + break; + default: + throw new ArgumentException("Unrecognized action"); + } + + player.User.Save(); + } + } +}