TI WKROES

This commit is contained in:
DasIschBims 2023-08-17 20:54:58 +02:00
parent bb6d404518
commit dbafb43687
No known key found for this signature in database
GPG Key ID: A01C65C4183A6610
4 changed files with 37 additions and 54 deletions

View File

@ -1,31 +1,47 @@
using BattleBitAPI;
using BattleBitAPI.Common;
using CommunityServerAPI.Enums;
namespace CommunityServerAPI;
public class CommandHandler
{
public async Task handleCommand(MyPlayer player, List<MyPlayer> 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 <name>|<steamid>");
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:

View File

@ -13,16 +13,10 @@ public abstract class ApiCommand
public string[] Aliases;
public bool AdminOnly;
public virtual Command ChatCommand(MyPlayer player, List<MyPlayer> players, ChatChannel channel, string msg)
public virtual Command ChatCommand(MyPlayer player, ChatChannel channel, string msg)
{
return null;
}
public Player<MyPlayer> FindPlayerByIdentifier(string identifier, List<MyPlayer> 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 <name>|<steamid>";
Aliases = new string[] { "/k" };
AdminOnly = true;
}
public override Command ChatCommand(MyPlayer player, List<MyPlayer> 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<MyPlayer> players, ChatChannel channel, string msg)
public override Command ChatCommand(MyPlayer player, ChatChannel channel, string msg)
{
return new Command
{

View File

@ -21,7 +21,6 @@ public class MyPlayer : Player<MyPlayer>
public bool IsAdmin = true;
public int Kills;
public int Deaths;
public List<MyPlayer> Players;
}
class MyGameServer : GameServer<MyPlayer>
@ -29,9 +28,10 @@ class MyGameServer : GameServer<MyPlayer>
private readonly List<ApiCommand> mApiCommands = new()
{
new KillCommand(),
new StartCommand()
};
private CommandHandler handler = new CommandHandler();
private CommandHandler handler = new();
public List<MyPlayer> Players;
@ -57,21 +57,6 @@ class MyGameServer : GameServer<MyPlayer>
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<MyPlayer>
{
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;
}
}

View File

@ -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<MyPlayer> Target { get; set; }
public ulong TargetSteamId { get; set; }
public string Message { get; set; }
public Vector3 Location { get; set; }