MySQL: Online
Load: Medium
Sandbox: Running

Crear comandos de chat y de consola en CounterStrikeSharp

Los comandos suelen ser lo primero con lo que interactúan los jugadores. En CounterStrikeSharp un comando es simplemente un método con un atributo encima, y el mismo comando se puede escribir en la consola o en el chat. Esta guía parte de un comando hello sencillo y llega a comandos protegidos con argumentos.

1

Cómo funcionan los comandos

Un comando es un método marcado con [ConsoleCommand]. El framework lo registra al cargar el plugin y lo quita al descargarlo. Todo comando cuyo nombre empiece por css_ está disponible de tres maneras: en la consola como css_hello, y en el chat como !hello o /hello. La versión con barra oculta el mensaje al resto de jugadores.

2

Tu primer comando

El método recibe al jugador que ejecutó el comando y un objeto CommandInfo para leer argumentos y responder. El jugador viene vacío cuando el comando se escribió en la consola del servidor, así que comprueba eso primero.

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 qué el jugador puede ser null

Cuando escribes el comando en la consola del servidor no hay ningún jugador detrás. Si tu código usa al jugador sin comprobarlo, se rompe. O sales del método cuando viene de la consola, como arriba, o escribes el código para que también funcione con el servidor.

4

Argumentos y modo de uso

El atributo CommandHelper describe cómo debe usarse el comando: número mínimo de argumentos, un texto breve de uso y quién puede ejecutarlo. Si el jugador se equivoca con los argumentos, CounterStrikeSharp le muestra el uso por ti. GetArg(1) es el primer argumento, porque el nombre del comando es el 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 con lambda

También puedes registrar un comando en el método Load en vez de usar un atributo. Es útil para comandos pequeños o cuando el nombre del comando viene de un archivo de configuración.

public override void Load(bool hotReload)
{
    AddCommand("css_ping", "Replies with pong", (player, commandInfo) =>
    {
        commandInfo.ReplyToCommand("pong");
    });
}
6

Restringe un comando con permisos

Añade RequiresPermissions para permitir el comando solo a quien tenga un flag, por ejemplo @css/kick. Los demás son rechazados automáticamente. Los flags se asignan en admins.json, como explica nuestra guía sobre cómo ser 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

Mensajes de chat en color

ChatColors te permite colorear partes de un mensaje enviado con PrintToChat. Empieza la cadena con un espacio, como en el ejemplo; si no, el primer color puede no mostrarse bien. ChatColors está en CounterStrikeSharp.API.Modules.Utils.

player.PrintToChat($" {ChatColors.Green}Hello, {player.PlayerName}!");
8

Errores comunes

Un comando que nunca responde suele no tener el prefijo css_, por lo que no existe en el chat, o lanza una excepción porque el jugador era null. Recuerda también que los nombres deben ser únicos: si dos plugins registran el mismo comando, el comportamiento es impredecible, así que dale a tu comando un nombre propio.

¿Te ha resultado útil este tutorial?

Página generada en 0.010 segundos
CounterStrikeSharp Web Compiler V1.0 - Hecho con por RomaniaBarlap para la comunidad.