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; using CommunityServerAPI.Enums;
namespace CommunityServerAPI; namespace CommunityServerAPI;
public class CommandHandler 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) switch (cmd.Action)
{ {
case ActionType.Kill: case ActionType.Kill:
{ {
var target = players.Find(p => p.SteamID == cmd.SteamId); var splits = cmd.Message.Split(" ");
if (target == null) if (splits.Length < 2)
{ {
player.Message("Player not found!"); player.Message("Usage: /kill <name>|<steamid>");
return; break;
} }
target.Kill(); var target = cmd.Message.Split(" ")[1..].Aggregate((a, b) => a + " " + b);
player.Message("Player killed!"); 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; break;
} }
case ActionType.Start: case ActionType.Start:
{ {
if (player.GameServer.RoundSettings.State != GameState.WaitingForPlayers)
{
player.Message("Round already started!");
break;
}
player.Message("Starting game!"); player.Message("Starting game!");
player.GameServer.RoundSettings.PlayersToStart = 0; player.GameServer.ForceStartGame();
player.GameServer.RoundSettings.SecondsLeft = 3;
break; break;
} }
default: default:

View File

@ -13,16 +13,10 @@ public abstract class ApiCommand
public string[] Aliases; public string[] Aliases;
public bool AdminOnly; 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; 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 public class KillCommand : ApiCommand
@ -30,31 +24,18 @@ public class KillCommand : ApiCommand
public KillCommand() public KillCommand()
{ {
CommandString = "/kill"; CommandString = "/kill";
HelpString = "Kills a player by name or steamid"; HelpString = "/kill <name>|<steamid>";
Aliases = new string[] { "/k" }; Aliases = new string[] { "/k" };
AdminOnly = true; 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(" "); return new Command()
var target = FindPlayerByIdentifier(words[1], players);
if (target == null)
{
return new Command
{
Action = ActionType.Kill,
Executor = player.Name,
Error = true,
};
}
return new Command
{ {
Action = ActionType.Kill, Action = ActionType.Kill,
Executor = player.Name, Executor = player.Name,
SteamId = target.SteamID, Message = msg,
Error = false, Error = false,
}; };
} }
@ -70,7 +51,7 @@ public class StartCommand : ApiCommand
AdminOnly = true; 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 return new Command
{ {

View File

@ -21,7 +21,6 @@ public class MyPlayer : Player<MyPlayer>
public bool IsAdmin = true; public bool IsAdmin = true;
public int Kills; public int Kills;
public int Deaths; public int Deaths;
public List<MyPlayer> Players;
} }
class MyGameServer : GameServer<MyPlayer> class MyGameServer : GameServer<MyPlayer>
@ -29,9 +28,10 @@ class MyGameServer : GameServer<MyPlayer>
private readonly List<ApiCommand> mApiCommands = new() private readonly List<ApiCommand> mApiCommands = new()
{ {
new KillCommand(), new KillCommand(),
new StartCommand()
}; };
private CommandHandler handler = new CommandHandler(); private CommandHandler handler = new();
public List<MyPlayer> Players; public List<MyPlayer> Players;
@ -57,21 +57,6 @@ class MyGameServer : GameServer<MyPlayer>
ServerSettings.SpectatorEnabled = false; 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) public override async Task OnPlayerDisconnected(MyPlayer player)
{ {
await Console.Out.WriteLineAsync("Disconnected: " + player); await Console.Out.WriteLineAsync("Disconnected: " + player);
@ -87,8 +72,8 @@ class MyGameServer : GameServer<MyPlayer>
{ {
if (apiCommand.CommandString == cmd) if (apiCommand.CommandString == cmd)
{ {
var command = apiCommand.ChatCommand(player, Players, channel, msg); // stops here, async issue? var command = apiCommand.ChatCommand(player, channel, msg);
await handler.handleCommand(player, Players, command); await handler.handleCommand(player, command);
return false; return false;
} }
} }

View File

@ -1,4 +1,5 @@
using System.Numerics; using System.Numerics;
using BattleBitAPI;
using CommunityServerAPI.Enums; using CommunityServerAPI.Enums;
namespace CommunityServerAPI; namespace CommunityServerAPI;
@ -8,7 +9,7 @@ public class Command
public ActionType Action { get; set; } public ActionType Action { get; set; }
public ulong SteamId { get; set; } public ulong SteamId { get; set; }
public string Executor { get; set; } public string Executor { get; set; }
public string Target { get; set; } public Player<MyPlayer> Target { get; set; }
public ulong TargetSteamId { get; set; } public ulong TargetSteamId { get; set; }
public string Message { get; set; } public string Message { get; set; }
public Vector3 Location { get; set; } public Vector3 Location { get; set; }