KUBC.DAYZ.CONSOLE

Серверный мод добавляющий глобальный чат и текстовые команды администрирования на сервер DAYZ.

Мод включает в себя базовый класс команды KCUserCMD с помощью которого можно реализовать любую пользовательскую команду, например класс команды KCUserCmdGod.

Создание собственной команды

Создание собственной команды выполняется в три этапа:

  1. Создаем класс команды
  2. Регистрируем новую команду в классе миссии сервера
  3. Добавляем ссылку на требуемый мод

Создаем класс команды

При создании класса новой команды необходимо создать класс наследуемый от 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;
    }
}

ВАЖНО!!! При выборе имени команды соблюдайте правила:

  1. Имя команды не должно содержать пробелов
  2. Постарайтесь сделать его коротким и понятным, вам будет легче её использовать

Регистрируем новую команду в классе миссии сервера

Что бы команда стала доступна в игре, её необходимо зарегистрировать, для этого в измененном файле миссии необходимо перегрузить метод 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. Если игрок не найден будет возвращен null
  • static void SendMessage(PlayerBase player, string From, string Message) отправить сообщение Messageигроку player в игровой чат. Если параметр From отличен от нуля, в сообщении будет указан от кого сообщение.