Creare comandi di chat e di console in CounterStrikeSharp
I comandi sono di solito la prima cosa con cui interagiscono i giocatori. In CounterStrikeSharp un comando è semplicemente un metodo con un attributo sopra, e lo stesso comando si può scrivere in console o in chat. Questa guida parte da un semplice comando hello e arriva a comandi protetti con argomenti.
Come funzionano i comandi
Un comando è un metodo contrassegnato con [ConsoleCommand]. Il framework lo registra quando il plugin si carica e lo rimuove quando si scarica. Ogni comando il cui nome inizia con css_ è disponibile in tre modi: in console come css_hello e in chat come !hello o /hello. La versione con la barra nasconde il messaggio agli altri giocatori.
Il tuo primo comando
Il metodo riceve il giocatore che ha eseguito il comando e un oggetto CommandInfo per leggere gli argomenti e rispondere. Il giocatore è vuoto quando il comando è stato scritto nella console del server, quindi controlla prima questo caso.
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}!"); }
}
Perché il giocatore può essere null
Quando scrivi il comando nella console del server non c’è nessun giocatore dietro. Se il tuo codice usa il giocatore senza controllare, va in errore. Oppure esci dal metodo quando arriva dalla console, come sopra, oppure scrivi il codice in modo che funzioni anche per il server.
Argomenti e modo d’uso
L’attributo CommandHelper descrive come va usato il comando: numero minimo di argomenti, un breve testo d’uso e chi può eseguirlo. Se il giocatore sbaglia gli argomenti, CounterStrikeSharp gli mostra da solo come si usa. GetArg(1) è il primo argomento, perché il nome del comando è l’argomento 0.
[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}!");
}
Comandi con lambda
Puoi anche registrare un comando nel metodo Load invece di usare un attributo. È comodo per i comandi piccoli o quando il nome del comando arriva da un file di configurazione.
public override void Load(bool hotReload)
{
AddCommand("css_ping", "Replies with pong", (player, commandInfo) =>
{
commandInfo.ReplyToCommand("pong");
});
}
Limita un comando con i permessi
Aggiungi RequiresPermissions per consentire il comando solo ai giocatori con un flag, per esempio @css/kick. Chi non lo ha viene rifiutato automaticamente. I flag si assegnano in admins.json, come spiega la nostra guida su come diventare admin.
[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.");
}
Messaggi colorati in chat
ChatColors permette di colorare parti di un messaggio inviato con PrintToChat. Inizia la stringa con uno spazio, come nell’esempio, altrimenti il primo colore potrebbe non essere mostrato correttamente. ChatColors si trova in CounterStrikeSharp.API.Modules.Utils.
player.PrintToChat($" {ChatColors.Green}Hello, {player.PlayerName}!");
Errori comuni
Un comando che non risponde mai di solito non ha il prefisso css_, quindi non esiste in chat, oppure lancia un’eccezione perché il giocatore era null. Ricorda anche che i nomi devono essere unici: se due plugin registrano lo stesso comando, il comportamento è imprevedibile, quindi dai al tuo un nome distintivo.
Questo tutorial ti è stato utile?
Barlap per la comunità.