MySQL: Online
Load: Low
Sandbox: Ready

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.

1

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.

2

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}!");    }
}
3

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.

4

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}!");
}
5

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");
    });
}
6

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.");
}
7

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}!");
8

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?

Página gerada em 0.011 segundos
CounterStrikeSharp Web Compiler V1.0 - Feito com por RomaniaBarlap para a comunidade.