From dbafb4368704cf897734e1ef1c5825b3b8dded99 Mon Sep 17 00:00:00 2001 From: DasIschBims Date: Thu, 17 Aug 2023 20:54:58 +0200 Subject: [PATCH] TI WKROES --- CommandHandler.cs | 34 +++++++++++++++++++++++++--------- Commands.cs | 31 ++++++------------------------- Program.cs | 23 ++++------------------- Utils.cs | 3 ++- 4 files changed, 37 insertions(+), 54 deletions(-) diff --git a/CommandHandler.cs b/CommandHandler.cs index 1958ef2..be03d81 100644 --- a/CommandHandler.cs +++ b/CommandHandler.cs @@ -1,31 +1,47 @@ -using BattleBitAPI; +using BattleBitAPI.Common; using CommunityServerAPI.Enums; namespace CommunityServerAPI; public class CommandHandler { - public async Task handleCommand(MyPlayer player, List players, Command cmd) + public async Task handleCommand(MyPlayer player, Command cmd) { switch (cmd.Action) { case ActionType.Kill: { - var target = players.Find(p => p.SteamID == cmd.SteamId); - if (target == null) + var splits = cmd.Message.Split(" "); + if (splits.Length < 2) { - player.Message("Player not found!"); - return; + player.Message("Usage: /kill |"); + break; } - target.Kill(); - player.Message("Player killed!"); + 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)); + + if (targetPlayer == null) + { + player.Message("Player not found!"); + break; + } + + targetPlayer.Kill(); + player.Message("Killed player!"); break; } case ActionType.Start: { + if (player.GameServer.RoundSettings.State != GameState.WaitingForPlayers) + { + player.Message("Round already started!"); + break; + } + player.Message("Starting game!"); - player.GameServer.RoundSettings.PlayersToStart = 0; + player.GameServer.ForceStartGame(); + player.GameServer.RoundSettings.SecondsLeft = 3; break; } default: diff --git a/Commands.cs b/Commands.cs index 6f4839f..68351c2 100644 --- a/Commands.cs +++ b/Commands.cs @@ -13,16 +13,10 @@ public abstract class ApiCommand public string[] Aliases; public bool AdminOnly; - public virtual Command ChatCommand(MyPlayer player, List players, ChatChannel channel, string msg) + public virtual Command ChatCommand(MyPlayer player, ChatChannel channel, string msg) { return null; } - - public Player FindPlayerByIdentifier(string identifier, List players) - { - var player = players.Find(p => p.SteamID.ToString() == identifier || p.Name == identifier); - return player; - } } public class KillCommand : ApiCommand @@ -30,31 +24,18 @@ public class KillCommand : ApiCommand public KillCommand() { CommandString = "/kill"; - HelpString = "Kills a player by name or steamid"; + HelpString = "/kill |"; Aliases = new string[] { "/k" }; AdminOnly = true; } - public override Command ChatCommand(MyPlayer player, List players, ChatChannel channel, string msg) + public override Command ChatCommand(MyPlayer player, ChatChannel channel, string msg) { - var words = msg.Split(" "); - var target = FindPlayerByIdentifier(words[1], players); - - if (target == null) - { - return new Command - { - Action = ActionType.Kill, - Executor = player.Name, - Error = true, - }; - } - - return new Command + return new Command() { Action = ActionType.Kill, Executor = player.Name, - SteamId = target.SteamID, + Message = msg, Error = false, }; } @@ -70,7 +51,7 @@ public class StartCommand : ApiCommand AdminOnly = true; } - public override Command ChatCommand(MyPlayer player, List players, ChatChannel channel, string msg) + public override Command ChatCommand(MyPlayer player, ChatChannel channel, string msg) { return new Command { diff --git a/Program.cs b/Program.cs index 99801de..b9d1f8a 100644 --- a/Program.cs +++ b/Program.cs @@ -21,7 +21,6 @@ public class MyPlayer : Player public bool IsAdmin = true; public int Kills; public int Deaths; - public List Players; } class MyGameServer : GameServer @@ -29,9 +28,10 @@ class MyGameServer : GameServer private readonly List mApiCommands = new() { new KillCommand(), + new StartCommand() }; - private CommandHandler handler = new CommandHandler(); + private CommandHandler handler = new(); public List Players; @@ -57,21 +57,6 @@ class MyGameServer : GameServer ServerSettings.SpectatorEnabled = false; } - public override async Task OnGameStateChanged(GameState oldState, GameState newState) - { - await Console.Out.WriteLineAsync("State changed to -> " + newState); - } - - public override async Task OnPlayerDied(MyPlayer player) - { - await Console.Out.WriteLineAsync("Died: " + player); - } - - public override async Task OnAPlayerRevivedAnotherPlayer(MyPlayer from, MyPlayer to) - { - await Console.Out.WriteLineAsync(from + " revived " + to); - } - public override async Task OnPlayerDisconnected(MyPlayer player) { await Console.Out.WriteLineAsync("Disconnected: " + player); @@ -87,8 +72,8 @@ class MyGameServer : GameServer { if (apiCommand.CommandString == cmd) { - var command = apiCommand.ChatCommand(player, Players, channel, msg); // stops here, async issue? - await handler.handleCommand(player, Players, command); + var command = apiCommand.ChatCommand(player, channel, msg); + await handler.handleCommand(player, command); return false; } } diff --git a/Utils.cs b/Utils.cs index 2b2b42c..5b0c76f 100644 --- a/Utils.cs +++ b/Utils.cs @@ -1,4 +1,5 @@ using System.Numerics; +using BattleBitAPI; using CommunityServerAPI.Enums; namespace CommunityServerAPI; @@ -8,7 +9,7 @@ public class Command public ActionType Action { get; set; } public ulong SteamId { get; set; } public string Executor { get; set; } - public string Target { get; set; } + public Player Target { get; set; } public ulong TargetSteamId { get; set; } public string Message { get; set; } public Vector3 Location { get; set; }