Chat- und Konsolenbefehle in CounterStrikeSharp erstellen
Befehle sind meist das Erste, womit Spieler in Berührung kommen. In CounterStrikeSharp ist ein Befehl nur eine Methode mit einem Attribut darüber, und derselbe Befehl lässt sich in der Konsole oder im Chat eingeben. Diese Anleitung baut von einem einfachen Hello-Befehl bis zu geschützten Befehlen mit Argumenten auf.
Wie Befehle funktionieren
Ein Befehl ist eine Methode mit dem Attribut [ConsoleCommand]. Das Framework registriert ihn beim Laden des Plugins und entfernt ihn beim Entladen. Jeder Befehl, dessen Name mit css_ beginnt, ist auf drei Wegen verfügbar: in der Konsole als css_hello und im Chat als !hello oder /hello. Die Variante mit Schrägstrich blendet die Nachricht für andere Spieler aus.
Dein erster Befehl
Die Methode erhält den Spieler, der den Befehl ausgeführt hat, und ein CommandInfo-Objekt zum Lesen der Argumente und zum Antworten. Der Spieler ist leer, wenn der Befehl in der Serverkonsole eingegeben wurde, prüfe das also zuerst.
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Modules.Commands;
public class CommandsPlugin : BasePlugin
{
public override string ModuleName => "Commands Example";
public override string ModuleVersion => "1.0.0";
[ConsoleCommand("css_hello", "Says hello to the player")] public void OnHelloCommand(CCSPlayerController? player, CommandInfo commandInfo)
{
if (player == null) return;
commandInfo.ReplyToCommand($"Hello, {player.PlayerName}!"); }
}
Warum der Spieler null sein kann
Gibst du den Befehl in der Serverkonsole ein, steht kein Spieler dahinter. Nutzt dein Code den Spieler ohne Prüfung, stürzt er ab. Entweder verlässt du die Methode für die Konsole früh, wie oben, oder du schreibst den Code so, dass er auch für den Server funktioniert.
Argumente und Verwendung
Das Attribut CommandHelper beschreibt, wie der Befehl benutzt werden muss: Mindestanzahl der Argumente, ein kurzer Hilfetext und wer ihn ausführen darf. Macht der Spieler es falsch, zeigt CounterStrikeSharp ihm die Verwendung selbst an. GetArg(1) ist das erste Argument, da der Befehlsname selbst Argument 0 ist.
[ConsoleCommand("css_greet", "Greets another player by name")]
[CommandHelper(minArgs: 1, usage: "<name>", whoCanExecute: CommandUsage.CLIENT_ONLY)]
public void OnGreetCommand(CCSPlayerController? player, CommandInfo commandInfo)
{
var name = commandInfo.GetArg(1);
commandInfo.ReplyToCommand($"Hello, {name}!");
}
Befehle mit Lambda
Du kannst einen Befehl auch in der Methode Load registrieren, statt ein Attribut zu nutzen. Das ist praktisch für kleine Befehle oder wenn der Befehlsname aus einer Konfigurationsdatei kommt.
public override void Load(bool hotReload)
{
AddCommand("css_ping", "Replies with pong", (player, commandInfo) =>
{
commandInfo.ReplyToCommand("pong");
});
}
Befehle mit Berechtigungen einschränken
Mit RequiresPermissions erlaubst du einen Befehl nur Spielern mit einem Flag, zum Beispiel @css/kick. Wer es nicht hat, wird automatisch abgewiesen. Flags werden in admins.json vergeben, wie in unserer Anleitung zum Admin-Werden beschrieben.
[ConsoleCommand("css_kickme", "Example of a protected command")]
[RequiresPermissions("@css/kick")]
public void OnKickMeCommand(CCSPlayerController? player, CommandInfo commandInfo)
{
commandInfo.ReplyToCommand("You have the @css/kick flag.");
}
Farbige Chatnachrichten
Mit ChatColors färbst du Teile einer Nachricht, die per PrintToChat gesendet wird. Beginne den Text wie im Beispiel mit einem Leerzeichen, sonst wird die erste Farbe eventuell nicht richtig angezeigt. ChatColors liegt in CounterStrikeSharp.API.Modules.Utils.
player.PrintToChat($" {ChatColors.Green}Hello, {player.PlayerName}!");
Häufige Fehler
Ein Befehl, der nie antwortet, hat meist das Präfix css_ nicht und ist dadurch im Chat nicht verfügbar, oder er wirft eine Ausnahme, weil der Spieler null war. Denke auch daran, dass Namen eindeutig sein müssen: Registrieren zwei Plugins denselben Befehl, ist das Verhalten unvorhersehbar, gib deinem also einen eigenen Namen.
War diese Anleitung hilfreich?
Barlap für die Community.