Criando comandos de chat e de console no CounterStrikeSharp
Os comandos costumam ser a primeira coisa com que os jogadores interagem. No CounterStrikeSharp, um comando é só um método com um atributo acima, e o mesmo comando pode ser digitado no console ou no chat. Este guia parte de um comando hello simples e chega a comandos protegidos com argumentos.
Como os comandos funcionam
Um comando é um método marcado com [ConsoleCommand]. O framework o registra quando o plugin carrega e o remove quando o plugin descarrega. Todo comando cujo nome começa com css_ fica disponível de três formas: no console como css_hello e no chat como !hello ou /hello. A versão com barra esconde a mensagem dos outros jogadores.
Seu primeiro comando
O método recebe o jogador que executou o comando e um objeto CommandInfo usado para ler argumentos e responder. O jogador vem vazio quando o comando foi digitado no console do servidor, então verifique isso primeiro.
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}!"); }
}
Por que o jogador pode ser null
Quando você digita o comando no console do servidor, não há jogador por trás. Se o seu código usa o jogador sem verificar, ele quebra. Ou você sai do método quando vem do console, como acima, ou escreve o código para funcionar também com o servidor.
Argumentos e modo de uso
O atributo CommandHelper descreve como o comando deve ser usado: número mínimo de argumentos, um texto curto de uso e quem pode executá-lo. Se o jogador errar os argumentos, o CounterStrikeSharp mostra o uso por você. GetArg(1) é o primeiro argumento, porque o nome do comando é o argumento 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}!");
}
Comandos com lambda
Você também pode registrar um comando no método Load em vez de usar um atributo. É útil para comandos pequenos ou quando o nome do comando vem de um arquivo de configuração.
public override void Load(bool hotReload)
{
AddCommand("css_ping", "Replies with pong", (player, commandInfo) =>
{
commandInfo.ReplyToCommand("pong");
});
}
Restrinja um comando com permissões
Adicione RequiresPermissions para permitir o comando só a jogadores com uma flag, por exemplo @css/kick. Quem não tem é recusado automaticamente. As flags são atribuídas no admins.json, como explica nosso guia sobre como virar administrador.
[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.");
}
Mensagens coloridas no chat
ChatColors permite colorir partes de uma mensagem enviada com PrintToChat. Comece a string com um espaço, como no exemplo, senão a primeira cor pode não aparecer direito. ChatColors fica em CounterStrikeSharp.API.Modules.Utils.
player.PrintToChat($" {ChatColors.Green}Hello, {player.PlayerName}!");
Erros comuns
Um comando que nunca responde geralmente está sem o prefixo css_, e por isso não existe no chat, ou lança uma exceção porque o jogador era null. Lembre também que os nomes precisam ser únicos: se dois plugins registram o mesmo comando, o comportamento é imprevisível, então dê ao seu um nome próprio.
Este tutorial foi útil?
Barlap para a comunidade.