Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info
  • Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.

DC_CMD

Daniel_Cortez

Изучающий
Пользователь
Регистрация
30 Апр 2012
Сообщения
528
Лучшие ответы
0
Репутация
272
Всем привет.

За последнее время в паблик выкладывалось много разных командных процессоров.
Один самый быстрый командный процессор сменялся другим, шли споры, какой из них быстрее и т.д. и т.п.
Пришло время положить конец этим спорам.
Представляю вашему вниманию новый командный движок DC_CMD, реализованный в виде плагина.

Все команды обрабатываются в плагине, что ускоряет их выполнение, однако принцип работы, схож с ZCMD.

Установка:
  1. Файл dc_cmd.dll (или dc_cmd.so, если на хостинге) закинуть в папку "plugins", dc_cmd.inc - в папку "pawno/include".
  2. В server.cfg в поле plugins добавить dc_cmd (на хостинге - dc_cmd.so)
  3. После строки #include <a_samp> добавить подключение инклуда
    PHP:
    #include <dc_cmd>
  4. В моде создавать команды, как для ZCMD:
    PHP:
    // тестовая команда
    CMD:info(playerid, params[])
    {
    return SendClientMessage(playerid, -1, "Плагин dc_cmd успешно установлен.");
    }

Функционал плагина:
  1. Добавлен макрос ALT для объявления альтернативных названий команд.
    Использование:
    Код:
    ALT:<имя команды>:<имя альт. команды>;
    Пример: допустим мы создали команду "/info" и нужно сделать сокращённый вариант "/i".
    Пример использования ALT:
    PHP:
    // тестовая команда
    CMD:info(playerid, params[])
    {
    return SendClientMessage(playerid, -1, "Плагин dc_cmd успешно установлен.");
    }
    ALT:info:i; // "/i" - альтернативный вариант для "/info"
  2. Можно создавать альтернативные команды (в том числе и на русском языке) с помощью функции RegisterAlt:
    RegisterAlt(оригинальная команда, команда на русском языке)
    RegisterAlt(оригинальная команда, команда на русском языке (1), команда на русском языке (2), команда на русском языке (3), ...)
    Пример:
    PHP:
    public OnGameModeInit()
    {
    RegisterAlt("/family", "/f");
    RegisterAlt("/help", "/info", "/hlp", "/помощь", "/h"); // теперь, если в игре набрать "/h" или "/помощь", будет вызвана команда /help
    //...
    }
    И всё же альтернативные команды на английском языке рекомендуется создавать через макрос ALT, т.к. это удобнее.
  3. Колбэки OnPlayerCommandReceived и OnPlayerCommandPerformed:
    • OnPlayerCommandReceived:
      PHP:
      OnPlayerCommandReceived(playerid, cmdtext[])
      Вызывается перед обработкой команды. В нём можно указать условия выполнения команды.
      При этом с помощью return 1/0 можно разрешить/запретить выполнение команды.
      Пример:
      PHP:
      public OnPlayerCommandReceived(playerid, cmdtext[])
      {
      if(PlayerInfo[playerid][pMute] == 1) // если у игрока затычка (/mute)
      {
      SendClientMessage(playerid, -1, "Дождитесь окончания действия заглушки!");
      return 0; // передать плагину, чтобы он не выполнял команду
      }
      return 1; // разрешить выполнение команды
      }
    • OnPlayerCommandPerformed:
      PHP:
      OnPlayerCommandPerformed(playerid, cmdtext[], success);
      Вызывается после выполнения команды.
      При этом если success = 1 - команда выполнилась успешно, success = 0 - с ошибкой, success = -1 - команда не найдена.
      Таким образом можно самостоятельно сделать поддержку стандартных команд:
      PHP:
      public OnPlayerCommandPerformed(playerid, cmdtext[], success)
      {
      if(success == -1) // если команда не найдена
      {
      return OnPlayerCommandText(playerid, cmdtext);
      }
      return 1;
      }
      Либо можно сделать сообщение о несуществующей команде:
      PHP:
      public OnPlayerCommandPerformed(playerid, cmdtext[], success)
      {
      if(success == -1) // если команда не найдена
      {
      return SendClientMessage(playerid, -1, "Несуществующая команда. Используйте /help, чтобы узнать список команд сервера.");
      }
      return 1;
      }
    [*][*]

Тесты скорости:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!

В следующих версиях планируется:
  • Повышение быстродействия
  • Добавление новых функций

Ссылки:
Плагин (.dll, .so, .inc): Ссылка не актуальна​
Исходники: Ссылка не актуальна​
Тест скорости: Ссылка не актуальна​

Внимание! В Шindoшs для работы плагина требуются библиотеки MSVC++, скачать их можно здесь:



Автор: Daniel_Cortez
 
Последнее редактирование модератором:
Сверху Снизу