From 7e9fb3eefd4d7d68d0b642c0026dc80ec43a2f4a Mon Sep 17 00:00:00 2001 From: Kyle Belanger Date: Sat, 2 Dec 2023 05:53:55 -0500 Subject: [PATCH] Mostly working:tm: character command --- .../Commands/CharacterCommand.cs | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 AscNet.GameServer/Commands/CharacterCommand.cs diff --git a/AscNet.GameServer/Commands/CharacterCommand.cs b/AscNet.GameServer/Commands/CharacterCommand.cs new file mode 100644 index 0000000..bd3d2ed --- /dev/null +++ b/AscNet.GameServer/Commands/CharacterCommand.cs @@ -0,0 +1,54 @@ +using AscNet.Common.MsgPack; +using AscNet.Table.share.character; + +namespace AscNet.GameServer.Commands +{ + [CommandName("character")] + internal class CharacterCommand : Command + { + public CharacterCommand(Session session, string[] args, bool validate = true) : base(session, args, validate) { } + + public override string Help => "Command to modify characters."; + + [Argument(0, @"^add$", "The operation selected (add)")] + string Op { get; set; } = string.Empty; + + [Argument(1, @"^[0-9]+$|^all$", "The target character, value is character id or 'all'")] + string Target { get; set; } = string.Empty; + + public override void Execute() + { + uint id = 0; + + uint.TryParse(Target, out id); + + switch (Op) + { + case "add": + if (Target == "all") + { + new Thread(() => + { + foreach (CharacterTable character in CharacterTableReader.Instance.All) + { + if (session.character.Characters.FirstOrDefault(c => c.Id == character.Id) is not null) + session.character.AddCharacter((uint)character.Id); + + Thread.Sleep(100); + } + }).Start(); + } + else if (id > 0) + { + if (session.character.Characters.Find(c => c.Id == id) == null) + session.character.AddCharacter(id); + } + else + throw new ArgumentException("Invalid Target / ID!"); + break; + default: + throw new InvalidOperationException("Invalid operation!"); + } + } + } +}