Pravljenje četovskih i konzolnih komandi u CounterStrikeSharp-u
Komande su obično prvo sa čime igrači stupaju u interakciju. U CounterStrikeSharp-u komanda je jednostavno metoda sa atributom iznad, a ista komanda može da se ukuca u konzolu ili u čet. Ovaj vodič polazi od jednostavne hello komande i stiže do zaštićenih komandi sa argumentima.
Kako komande rade
Komanda je metoda označena sa [ConsoleCommand]. Framework je registruje kad se plagin učita i uklanja kad se plagin ukloni. Svaka komanda čije ime počinje sa css_ dostupna je na tri načina: u konzoli kao css_hello, a u četu kao !hello ili /hello. Varijanta sa kosom crtom sakriva poruku od ostalih igrača.
Vaša prva komanda
Metoda prima igrača koji je pokrenuo komandu i objekat CommandInfo koji služi za čitanje argumenata i odgovaranje. Igrač je prazan kada je komanda ukucana u konzolu servera, zato prvo proverite to.
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}!"); }
}
Zašto igrač može biti null
Kada komandu ukucate u konzolu servera, iza nje nema igrača. Ako vaš kod koristi igrača bez provere, puca. Ili izađite iz metode kada dolazi iz konzole, kao gore, ili napišite kod tako da radi i za server.
Argumenti i način upotrebe
Atribut CommandHelper opisuje kako komanda treba da se koristi: minimalan broj argumenata, kratak tekst uputstva i ko može da je izvrši. Ako igrač pogreši argumente, CounterStrikeSharp mu sam prikazuje uputstvo. GetArg(1) je prvi argument, jer je ime komande argument 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}!");
}
Komande sa lambdom
Komandu možete registrovati i u metodi Load umesto da koristite atribut. Zgodno je za male komande ili kada ime komande dolazi iz konfiguracionog fajla.
public override void Load(bool hotReload)
{
AddCommand("css_ping", "Replies with pong", (player, commandInfo) =>
{
commandInfo.ReplyToCommand("pong");
});
}
Ograničite komandu dozvolama
Dodajte RequiresPermissions da komandu dozvolite samo igračima sa flagom, na primer @css/kick. Oni koji ga nemaju automatski se odbijaju. Flagovi se dodeljuju u admins.json, kako objašnjava naš vodič o tome kako postati 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.");
}
Obojene poruke u četu
ChatColors vam omogućava da obojite delove poruke poslate preko PrintToChat. Počnite string razmakom, kao u primeru, inače se prva boja možda neće prikazati ispravno. ChatColors se nalazi u CounterStrikeSharp.API.Modules.Utils.
player.PrintToChat($" {ChatColors.Green}Hello, {player.PlayerName}!");
Česte greške
Komanda koja nikad ne odgovara obično nema prefiks css_, pa ne postoji u četu, ili baca izuzetak jer je igrač bio null. Zapamtite i da imena moraju biti jedinstvena: ako dva plagina registruju istu komandu, ponašanje je nepredvidivo, zato svojoj komandi dajte prepoznatljivo ime.
Da li vam je ovaj vodič bio koristan?
Barlap za zajednicu.