Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 38

Тема: DC_CMD

  1. #1
    Пользователь Аватар для Daniel_Cortez
    Регистрация
    01.02.2013
    Возраст
    30
    Сообщений
    28
    Репутация: 7

    Звание: пока не определено

    DC_CMD

    Всем привет.

    За последнее время в паблик выкладывалось много разных командных процессоров.
    Один самый быстрый командный процессор сменялся другим, шли споры, какой из них быстрее и т.д. и т.п.
    Пришло время положить конец этим спорам.
    Представляю вашему вниманию новый командный движок 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(playeridparams[])
      {
          return 
      SendClientMessage(playerid, -1"Плагин dc_cmd успешно установлен.");



    Функционал плагина:
    1. Добавлен макрос ALT для объявления альтернативных названий команд.
      Использование:
      Код:
      ALT:<имя команды>:<имя альт. команды>;
      Пример: допустим мы создали команду "/info" и нужно сделать сокращённый вариант "/i".
      Пример использования ALT:
      PHP код:
      // тестовая команда
      CMD:info(playeridparams[])
      {
          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(playeridcmdtext[]) 
        Вызывается перед обработкой команды. В нём можно указать условия выполнения команды.
        При этом с помощью return 1/0 можно разрешить/запретить выполнение команды.
        Пример:
        PHP код:
        public OnPlayerCommandReceived(playeridcmdtext[])
        {
            if(
        PlayerInfo[playerid][pMute] == 1// если у игрока затычка (/mute)
            
        {
                
        SendClientMessage(playerid, -1"Дождитесь окончания действия заглушки!");
                return 
        0// передать плагину, чтобы он не выполнял команду
            
        }
            return 
        1// разрешить выполнение команды

      • OnPlayerCommandPerformed:
        PHP код:
        OnPlayerCommandPerformed(playeridcmdtext[], success); 
        Вызывается после выполнения команды.
        При этом если success = 1 - команда выполнилась успешно, success = 0 - с ошибкой, success = -1 - команда не найдена.
        Таким образом можно самостоятельно сделать поддержку стандартных команд:
        PHP код:
        public OnPlayerCommandPerformed(playeridcmdtext[], success)
        {
            if(
        success == -1// если команда не найдена
            
        {
                return 
        OnPlayerCommandText(playeridcmdtext);
            }
            return 
        1// разрешить выполнение команды

        Либо можно сделать сообщение о несуществующей команде:
        PHP код:
        public OnPlayerCommandPerformed(playeridcmdtext[], success)
        {
            if(
        success == -1// если команда не найдена
            
        {
                return 
        SendClientMessage(playerid, -1"Несуществующая команда. Используйте /help, чтобы узнать список команд сервера.");
            }
            return 
        1;


    4. Вызов команд напрямую из мода:
      В версии 2.02 был добавлен макрос "cmd::", благодаря которому можно удобно вызывать команды из любого места в моде.
      Пример использования:
      PHP код:
      // без параметров
      cmd::help(playerid"");
      // с параметрами
      new param_str[11]; // размер строки зависит от параметров
      format(param_strsizeof(param_str), "%d"targetid);
      cmd::stats(playeridparam_str); 


    Тесты скорости:


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


    Ссылки:
    Внимание! В Шindoшs для работы плагина требуются библиотеки MSVC++, скачать их можно здесь:
    http://www.microsoft.com/ru-ru/downl...s.aspx?id=5555
    http://www.microsoft.com/ru-ru/downl....aspx?id=30679

    Автор: Daniel_Cortez

  2. #2
    Проверенный Аватар для Arios Jentu
    Регистрация
    15.02.2012
    Адрес
    Таанаб - Пандат
    Сообщений
    2,433
    Репутация: 319

    Звание: как роза среди колючек

    Re: DC_CMD

    Хорошая работа, но что значат эти десятитысячные цифры на 100 команд?

  3. #3
    Люблю Окса :3 Аватар для Folleah
    Регистрация
    26.09.2012
    Сообщений
    2,045
    Репутация: 184

    Звание: - весьма и весьма положительная личность

    Re: DC_CMD

    TCMD - 100 комманд выполняются за несколько милисекунд, ты уверен что твой командный процессор самый быстрый?

  4. #4
    Пользователь Аватар для Daniel_Cortez
    Регистрация
    01.02.2013
    Возраст
    30
    Сообщений
    28
    Репутация: 7

    Звание: пока не определено

    Re: DC_CMD

    Цитата Сообщение от RunAway Посмотреть сообщение
    Хорошая работа, но что значат эти десятитысячные цифры на 100 команд?
    В тесте скорости для каждого командного процессора выполнялось по 100 000 итераций, в каждой по 100 команд.
    Если на тест уходит слишком много времени - измените константу PROFILE_ITERS_MAJOR, чтобы было меньше итераций.

    Цитата Сообщение от Folleah Посмотреть сообщение
    TCMD - 100 комманд выполняются за несколько милисекунд, ты уверен что твой командный процессор самый быстрый?
    Если не ошибаюсь, в TCMD измеряется лишь время помещения команды в очередь на выполнение. Сам же вызов команды происходит в 2-ом потоке, на что уходит сравнительно много времени, которое не измеряется.

  5. #5
    Почетный пользователь LC Аватар для ..KempeR..
    Регистрация
    31.08.2011
    Адрес
    Киев, Украина
    Сообщений
    1,504
    Репутация: 189

    Звание: - весьма и весьма положительная личность

    Re: DC_CMD

    Плагин надёжный? На сервер с онлайном можно ставить?

  6. #6
    Пользователь Аватар для Daniel_Cortez
    Регистрация
    01.02.2013
    Возраст
    30
    Сообщений
    28
    Репутация: 7

    Звание: пока не определено

    Re: DC_CMD

    Цитата Сообщение от ..KempeR.. Посмотреть сообщение
    Плагин надёжный? На сервер с онлайном можно ставить?
    Однозначного ответа дать не могу, т.к. на крупных серверах плагин пока что не тестировался.
    Тем не менее, на моём тестовом сервере полёт нормальный.
    Да и код плагина довольно простой (сам проверь), вряд ли там найдётся чему "не работать", иначе я вряд ли бы взялся писать его на асме...

  7. #7
    Активный пользователь Аватар для Kye
    Регистрация
    03.09.2012
    Сообщений
    130
    Репутация: 22

    Звание: на пути к лучшему

    Re: DC_CMD

    нормально \ но Debug Command Engine быстрее

  8. #8
    Пользователь Аватар для Daniel_Cortez
    Регистрация
    01.02.2013
    Возраст
    30
    Сообщений
    28
    Репутация: 7

    Звание: пока не определено

    Re: DC_CMD

    Цитата Сообщение от Kye Посмотреть сообщение
    нормально \ но Debug Command Engine быстрее
    Уже давно есть 2-я версия DC_CMD, переписанная с чистого листа на C++. При этом он обходит DCMD как по скорости, так и по функционалу. Поищи на других форумах, если нужно; скоро опубликую и тут.

    P.S.: Ты и есть тот самый, кто тестировал всего на 1000 итераций?

  9. #9
    Пользователь Аватар для Daniel_Cortez
    Регистрация
    01.02.2013
    Возраст
    30
    Сообщений
    28
    Репутация: 7

    Звание: пока не определено

    Re: DC_CMD

    Цитата Сообщение от amxAPI Посмотреть сообщение
    Зачем С++? ASM достаточно оптимизирует работу, и он более компактен.
    Асм ничего не оптимизирует, задача по оптимизации кода возлагается целиком на программиста. При этом современные сишные компиляторы справляются с задачей оптимизации кода намного лучше, чем даже программисты, несколько лет профессионально пишушие на ASM.
    Да, компактность полученного кода иногда хромает, т.к. компиляторы "навязывают" свои библиотечные функции, но в последнее время это не имеет особого значения.

    Цитата Сообщение от amxAPI Посмотреть сообщение
    Так что посоветовал бы оставить плагин на нем.
    На ASM вряд ли получится реализовать создание альтернативных команд с использованием MurmurHash3 и unordered_map (как в v2.0 на C++).

  10. #10
    Пользователь Аватар для Daniel_Cortez
    Регистрация
    01.02.2013
    Возраст
    30
    Сообщений
    28
    Репутация: 7

    Звание: пока не определено

    Re: DC_CMD

    Плагин обновлён до v2.02, давно я уже не выкладывал новые версии =/
    Описание и подробности - в 1-м посте.

    Damnit, triple post -_-

Страница 1 из 4 123 ... ПоследняяПоследняя

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •