Как да създавате чат и конзолни команди в CounterStrikeSharp
Командите обикновено са първото, с което играчите си взаимодействат. В CounterStrikeSharp командата е просто метод с атрибут отгоре, а една и съща команда може да се въведе в конзолата или в чата. Ръководството тръгва от проста команда hello и стига до защитени команди с аргументи.
Как работят командите
Командата е метод, маркиран с [ConsoleCommand]. Framework-ът я регистрира, когато плъгинът се зареди, и я премахва, когато се разтовари. Всяка команда, чието име започва с css_, е достъпна по три начина: в конзолата като css_hello, а в чата като !hello или /hello. Вариантът с наклонена черта скрива съобщението от другите играчи.
Вашата първа команда
Методът получава играча, който е изпълнил командата, и обект CommandInfo, чрез който четете аргументите и отговаряте. Играчът е празен, когато командата е въведена в конзолата на сървъра, затова проверете първо това.
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}!"); }
}
Защо играчът може да е null
Когато въведете командата в конзолата на сървъра, зад нея няма играч. Ако кодът ви ползва играча без проверка, се чупи. Или излизате от метода при конзола, както по-горе, или пишете кода така, че да работи и за сървъра.
Аргументи и начин на употреба
Атрибутът CommandHelper описва как трябва да се ползва командата: минимален брой аргументи, кратък текст за употреба и кой може да я изпълнява. Ако играчът сбърка аргументите, CounterStrikeSharp сам му показва начина на употреба. GetArg(1) е първият аргумент, защото името на командата е аргумент 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}!");
}
Команди с ламбда
Можете да регистрирате команда и в метода Load, вместо да ползвате атрибут. Удобно е за малки команди или когато името на командата идва от конфигурационен файл.
public override void Load(bool hotReload)
{
AddCommand("css_ping", "Replies with pong", (player, commandInfo) =>
{
commandInfo.ReplyToCommand("pong");
});
}
Ограничете команда с права
Добавете RequiresPermissions, за да разрешите командата само на играчи с флаг, например @css/kick. Тези без него се отказват автоматично. Флаговете се задават в admins.json, както обяснява нашето ръководство как да станете админ.
[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.");
}
Цветни съобщения в чата
ChatColors ви позволява да оцветявате части от съобщение, изпратено с PrintToChat. Започнете низа с интервал, както в примера, иначе първият цвят може да не се покаже правилно. ChatColors се намира в CounterStrikeSharp.API.Modules.Utils.
player.PrintToChat($" {ChatColors.Green}Hello, {player.PlayerName}!");
Чести грешки
Команда, която никога не отговаря, обикновено или няма префикса css_ и затова не е достъпна в чата, или хвърля изключение, защото играчът е бил null. Помнете и че имената трябва да са уникални: ако два плъгина регистрират една и съща команда, поведението е непредсказуемо, затова дайте на вашата отличително име.
Беше ли полезно това ръководство?
Barlap за общността.