KUBC.DAYZ.CONSOLE
Серверный мод добавляющий глобальный чат и текстовые команды администрирования на сервер DAYZ.
Мод включает в себя базовый класс команды KCUserCMD с помощью которого можно реализовать любую пользовательскую команду, например класс команды KCUserCmdGod.
Создание собственной команды
Создание собственной команды выполняется в три этапа:
- Создаем класс команды
- Регистрируем новую команду в классе миссии сервера
- Добавляем ссылку на требуемый мод
Создаем класс команды
При создании класса новой команды необходимо создать класс наследуемый от KCUserCMD , в котором выполнить перегрузку методов:
GetName()данный метод вызывается когда нужно получить имя команды для записи в журнал.OnExecute(PlayerBase user, KCTextCmd data)данный метод вызывается когда необходимо выполнить действия команды, при этом проверка доступа игрока уже выполнена (у пользователя точно есть доступ к вашей команде) и ссылка на него передается параметромuser. Также дополнительные данные команды уже прочитаны и размещены вdata.
Например, мы создаем команду ncmd, класс будет выглядеть следующим образом:
class CMD1 : KCUserCMD
{
/** @brief Определяем константой имя команды*/
static const string CMD_NAME = "ncmd";
/** @brief Тут возвращаем имя команды для записи в лог*/
override string GetName()
{
return KCUserCmdGod.CMD_NAME;
}
/** @brief Тут выполняем команду
* @param user - ссылка на игрока который вызвал команду
* @param data - данные команды
* @return истина если команда выполнена успешно
*/
override bool OnExecute(PlayerBase user, KCTextCmd data)
{
//Тут код команды
//Т.е. чет-то делаем
return true;
}
}
ВАЖНО!!! При выборе имени команды соблюдайте правила:
- Имя команды не должно содержать пробелов
- Постарайтесь сделать его коротким и понятным, вам будет легче её использовать
Регистрируем новую команду в классе миссии сервера
Что бы команда стала доступна в игре, её необходимо зарегистрировать, для этого в измененном файле миссии необходимо перегрузить метод OnInit(), в котором зарегистрировать команду, например:
modded class MissionServer
{
override void OnInit()
{
RegisterCommand(CMD1.CMD_NAME, new CMD1());
super.OnInit();
}
}
Добавляем ссылку на требуемый мод
Если вы пишите свой серверный мод, и добавляете туда собственные текстовые команды, в конфигурации мода необходимо указать на наш серверный мод, это позволит исключить ошибки в работе сервера. Добавление выполняется в класс CfgPatches, например так
class CfgPatches
{
class myServerMod
{
units[]= {};
weapons[]={};
requiredVersion=0.1;
requiredAddons[]= {"KUBCconsole"};
};
};
Инструменты
При разработке команд вам возможно упростят жизнь имеющиеся методы в моде.
Инструменты базового класса команды
Метод Log(string Message, PlayerBase player = NULL, KCLogLogLevel Level = KCLogLogLevel.Info) позволяет выполнить запись в лог выполнения скриптов (файл *.log) от имени команды.
В качестве параметров в метод передается:
MessageТекст сообщения в логplayerКакой игрок участвует в команде, если не указывать, или указывать NULL игрок не будет указан в логеLevel- уровень сообщения: информация, предупреждение, ошибка. Определяется перечислением KCLogLogLevel
SCRIPT : [Info][KUBC.CMD][heal][kot23rus(76561198054180540)].Выполнил команду
SCRIPT : [Info][KUBC.CMD][sp][kot23rus(76561198054180540)].Выполнил команду
SCRIPT : [Info][KUBC.CMD][sp][kot23rus(76561198054180540)].Точка [mypoint] добавлена
SCRIPT : [Info][KUBC.CMD][sp][kot23rus(76561198054180540)].Выполнил команду
SCRIPT : [Info][KUBC.CMD][sp][kot23rus(76561198054180540)].Выполнил команду
SCRIPT : [Info][KUBC.CMD][sp][kot23rus(76561198054180540)].Точка [mypoint] обновлена
Данные передаваемые в команду
В метод выполнения команды передаются уже подготовленные данные, в виде класса KCTextCmd. Если в команде был указан получатель, и он найден на сервере ссылка на этого игрока будет в полеPlayer. Все аргументы складываются в словарь Arg. Для работы с аргументами предусмотрены следующие методы:
int GetInt(string name, int default=0)Получить значение аргумента с именемnameв виде целочисленного числа. Если данный аргумент не найден, будет возвращено значение передаваемое параметром- code>float GetFloat(string name, float default=0) Получить значение аргумента с именем
nameв виде числа с плавающей запятой. Если данный аргумент не найден, будет возвращено значение передаваемое параметром string GetValue(string name)Получить значение аргумента в виде строки. Если аргумент не найден будет возвращена пустая строка.bool ContainsArg(string name)Проверить наличие аргумента в команде. Если он существует то будет возвращена истина, иначе будет возвращена ложь
Инструменты работы с игроком
Для работы с игроками на сервере есть вспомогательный класс KCPlayer в котором есть статические методы:
static PlayerBase Find(string name)поиск игрока по имени или SteamID. Если игрок не найден будет возвращен nullstatic void SendMessage(PlayerBase player, string From, string Message)отправить сообщениеMessageигрокуplayerв игровой чат. Если параметрFromотличен от нуля, в сообщении будет указан от кого сообщение.