Chat- és konzolparancsok készítése CounterStrikeSharp-pal
A parancsok általában az első dolog, amellyel a játékosok kapcsolatba kerülnek. A CounterStrikeSharpban a parancs egyszerűen egy metódus egy attribútummal a fölött, és ugyanaz a parancs beírható a konzolba vagy a chatbe. Ez az útmutató egy egyszerű hello paranccsal indul, és védett, argumentumos parancsokig jut el.
Hogyan működnek a parancsok
A parancs egy [ConsoleCommand] attribútummal megjelölt metódus. A keretrendszer a bővítmény betöltésekor regisztrálja, eltávolításakor törli. Minden css_-sel kezdődő nevű parancs háromféleképpen érhető el: a konzolon css_hello néven, a chatben pedig !hello vagy /hello formában. A perjeles változat elrejti az üzenetet a többi játékos elől.
Az első parancsod
A metódus megkapja a parancsot futtató játékost és egy CommandInfo objektumot, amellyel az argumentumokat olvashatod és válaszolhatsz. A játékos üres, ha a parancsot a szerverkonzolon írták be, ezért ezt ellenőrizd először.
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}!"); }
}
Miért lehet a játékos null
Ha a parancsot a szerverkonzolba írod, nincs mögötte játékos. Ha a kódod ellenőrzés nélkül használja a játékost, összeomlik. Vagy kilépsz a metódusból a konzol esetén, ahogy fent, vagy úgy írod meg a kódot, hogy a szerverrel is működjön.
Argumentumok és használat
A CommandHelper attribútum leírja, hogyan kell használni a parancsot: az argumentumok minimális számát, egy rövid használati szöveget és azt, hogy ki futtathatja. Ha a játékos rosszul adja meg az argumentumokat, a CounterStrikeSharp maga mutatja meg a használatot. A GetArg(1) az első argumentum, mert a parancs neve a 0. argumentum.
[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}!");
}
Parancsok lambdával
A parancsot a Load metódusban is regisztrálhatod attribútum helyett. Ez kényelmes kis parancsoknál, vagy amikor a parancs neve konfigurációs fájlból jön.
public override void Load(bool hotReload)
{
AddCommand("css_ping", "Replies with pong", (player, commandInfo) =>
{
commandInfo.ReplyToCommand("pong");
});
}
Korlátozd a parancsot jogosultsággal
A RequiresPermissions hozzáadásával a parancsot csak a jelzővel, például @css/kick joggal rendelkező játékosoknak engedélyezed. Aki nem rendelkezik vele, automatikusan elutasításra kerül. A jogokat az admins.json-ben osztod ki, ahogy az adminná válásról szóló útmutatónk leírja.
[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.");
}
Színes chatüzenetek
A ChatColors segítségével a PrintToChat-tel küldött üzenet részeit színezheted. A szöveget kezdd szóközzel, ahogy a példában, különben az első szín esetleg nem jelenik meg jól. A ChatColors a CounterStrikeSharp.API.Modules.Utils névtérben található.
player.PrintToChat($" {ChatColors.Green}Hello, {player.PlayerName}!");
Gyakori hibák
Az a parancs, amely sosem válaszol, többnyire vagy nem rendelkezik a css_ előtaggal, ezért nincs a chatben, vagy kivételt dob, mert a játékos null volt. Ne feledd azt sem, hogy a neveknek egyedinek kell lenniük: ha két bővítmény ugyanazt a parancsot regisztrálja, a viselkedés kiszámíthatatlan, ezért adj a sajátodnak megkülönböztető nevet.
Hasznos volt ez az útmutató?
Barlap a közösségért.