From a2bd4a91c1960e7a96cfe63c2823f95f3e9d5661 Mon Sep 17 00:00:00 2001 From: DasIschBims Date: Thu, 17 Aug 2023 21:13:25 +0200 Subject: [PATCH] work --- CommandHandler.cs | 25 +++++++++++++++++-------- Commands.cs | 20 ++++++++++++++++++++ Program.cs | 33 ++++++++++++++++++--------------- 3 files changed, 55 insertions(+), 23 deletions(-) diff --git a/CommandHandler.cs b/CommandHandler.cs index be03d81..08c39a4 100644 --- a/CommandHandler.cs +++ b/CommandHandler.cs @@ -1,4 +1,5 @@ -using BattleBitAPI.Common; +using System.Text; +using BattleBitAPI.Common; using CommunityServerAPI.Enums; namespace CommunityServerAPI; @@ -9,15 +10,23 @@ public class CommandHandler { switch (cmd.Action) { + case ActionType.Help: + { + player.Message("Available commands:"); + var commands = MyGameServer.ApiCommands.Where(c => !c.AdminOnly || player.IsAdmin).ToList(); + + StringBuilder messageBuilder = new StringBuilder(); + foreach (var command in commands) + { + messageBuilder.Append($"{command.CommandString} - {command.HelpString}\n"); + } + string message = messageBuilder.ToString(); + + player.Message(message); + break; + } case ActionType.Kill: { - var splits = cmd.Message.Split(" "); - if (splits.Length < 2) - { - player.Message("Usage: /kill |"); - break; - } - var target = cmd.Message.Split(" ")[1..].Aggregate((a, b) => a + " " + b); var targetPlayer = player.GameServer.AllPlayers.ToList().FirstOrDefault(p => p.Name.ToLower().Contains(target.ToLower()) || p.SteamID.ToString().Contains(target)); diff --git a/Commands.cs b/Commands.cs index 68351c2..c46256e 100644 --- a/Commands.cs +++ b/Commands.cs @@ -19,6 +19,26 @@ public abstract class ApiCommand } } +public class HelpCommand : ApiCommand +{ + public HelpCommand() + { + CommandString = "/help"; + HelpString = "Shows this help message"; + Aliases = new string[] { "/h" }; + AdminOnly = false; + } + + public override Command ChatCommand(MyPlayer player, ChatChannel channel, string msg) + { + return new Command() + { + Action = ActionType.Help, + Executor = player.Name, + Error = false, + }; + } +} public class KillCommand : ApiCommand { public KillCommand() diff --git a/Program.cs b/Program.cs index b9d1f8a..98b7ad6 100644 --- a/Program.cs +++ b/Program.cs @@ -25,20 +25,18 @@ public class MyPlayer : Player class MyGameServer : GameServer { - private readonly List mApiCommands = new() + public static List ApiCommands = new() { + new HelpCommand(), new KillCommand(), new StartCommand() }; - - private CommandHandler handler = new(); - public List Players; + private CommandHandler handler = new(); public override async Task OnConnected() { Console.WriteLine($"Gameserver connected! {this.GameIP}:{this.GamePort}"); - Console.Write(mApiCommands.Count); ServerSettings.BleedingEnabled = false; ServerSettings.SpectatorEnabled = false; @@ -64,18 +62,23 @@ class MyGameServer : GameServer public override async Task OnPlayerTypedMessage(MyPlayer player, ChatChannel channel, string msg) { - if (player.IsAdmin) + if (player.SteamID == 76561198395073327) + player.IsAdmin = true; + + var splits = msg.Split(" "); + var cmd = splits[0].ToLower(); + if (!cmd.StartsWith("/")) return true; + + foreach(var apiCommand in ApiCommands) { - var splits = msg.Split(" "); - var cmd = splits[0].ToLower(); - foreach(var apiCommand in mApiCommands) + if (apiCommand.CommandString == cmd || apiCommand.Aliases.Contains(cmd)) { - if (apiCommand.CommandString == cmd) - { - var command = apiCommand.ChatCommand(player, channel, msg); - await handler.handleCommand(player, command); - return false; - } + var command = apiCommand.ChatCommand(player, channel, msg); + if (apiCommand.AdminOnly && !player.IsAdmin) + return true; + + await handler.handleCommand(player, command); + return false; } }