Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 17 1 2 3 11 ... ПоследняяПоследняя
Показано с 1 по 10 из 163
  1. #1
    Аватар для urShadow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.05.2016
    Сообщений
    44
    Репутация:
    54 ±

    Pawn.CMD - самый быстрый и функциональный командный процессор

    Pawn.CMD 3.1.4


    Описание:
    Pawn.CMD - новый командный процессор, который работает через плагин.
    Плагин совместим с любой версией SA:MP, несмотря на работу с памятью.


    Natives:
    PHP код:
    native PC_RegAlias(const cmd[], const alias[], ...);
    native PC_SetFlags(const cmd[], flags);
    native PC_GetFlags(const cmd[]);
    native PC_EmulateCommand(playerid, const cmdtext[]);
    native PC_RenameCommand(const cmd[], const newname[]);
    native PC_CommandExists(const cmd[]);   
    native PC_DeleteCommand(const cmd[]);

    native CmdArray:PC_GetCommandArray();
    native CmdArray:PC_GetAliasArray(const cmd[]);
    native PC_GetArraySize(CmdArray:arr);
    native PC_FreeArray(&CmdArray:arr);
    native PC_GetCommandName(CmdArray:arrindexdest[], size sizeof dest); 
    Callbacks:
    PHP код:
    forward PC_OnInit(); // calls after Pawn.CMD initialization
    forward OnPlayerCommandReceived(playeridcmd[], params[], flags); // calls before a command 
    forward OnPlayerCommandPerformed(playeridcmd[], params[], resultflags); // calls after a command 
    Установка:
    Распакуйте архив в папку вашего сервера. Отредактируйте"server.cfg":

    - Windows
    Код:
    plugins pawncmd.dll
    - Linux
    Код:
    plugins pawncmd.so
    Пример команды:
    PHP код:
    #include <Pawn.CMD>

    cmd:help(playeridparams[]) // к тому же возможно использовать CMD и COMMAND
    {
        
    // код
        
    return 1;

    Регистрация альтернативных названий (псевдонимов):
    PHP код:
    #include <Pawn.CMD>

    cmd:help(playeridparams[])
    {
        
    // код
        
    return 1;
    }
    alias:help("commands""cmds""menu"); // нечувствительно к регистру 
    Использование флагов:
    PHP код:
    #include <Pawn.CMD>

    enum(<<=1)
    {
        
    CMD_ADMIN 1,
        
    CMD_MODER,
        
    CMD_USER
    };

    flags:ban(CMD_ADMIN);
    cmd:ban(playeridparams[])
    {
        
    // code here
        
    return 1;
    }

    public 
    OnPlayerCommandReceived(playeridcmd[], params[], flags)
    {
        if ((
    flags CMD_ADMIN) && !pAdmin[playerid])
            return 
    0;

        return 
    1;

    Полный пример:
    PHP код:
    #include <Pawn.CMD>

    enum(<<=1)
    {
        
    CMD_ADMIN 1,
        
    CMD_MODER,
        
    CMD_USER
    };

    flags:ban(CMD_ADMIN);
    cmd:ban(playeridparams[])
    {
        
    // code here
        
    return 1;
    }
    alias:ban("block");

    public 
    OnPlayerCommandReceived(playeridcmd[], params[], flags)
    {
        if ((
    flags CMD_ADMIN) && !pAdmin[playerid])
            return 
    0;

        return 
    1;
    }

    public 
    OnPlayerCommandPerformed(playeridcmd[], params[], resultflags)
    {
        if(
    result == -1)
        {
            
    SendClientMessage(playerid0xFFFFFFFF"SERVER: Unknown command.");
            return 
    0;
        }

        return 
    1;

    Если вы хотите использовать Pawn.CMD в filterscript, вставьте этот define перед include:
    PHP код:
    #define FILTERSCRIPT 
    Changelog:
    1.0:
    - Первый релиз.
    2.0:
    - Теперь плагин полностью совместим с синтаксисом zcmd.
    2.1:
    - Были исправлены баги.
    3.0:
    - Добавлен макрос "callcmd" для вызова команды. Пример: callcmd::ban(playerid, "42");
    - Добавлены нативы: PC_SetFlags, PC_GetFlags, PC_EmulateCommand, PC_RenameCommand, PC_DeleteCommand.
    - Добавлен макрос "isnull" для проверки параметров команды.
    - Удалена запись в консоль о регистрации команды.
    - "cmdtext" был разделен на "cmd" и "params".
    - Потеряна совместимость с синтаксисом zcmd.
    3.1:
    - Добавлены нативы: PC_CommandExists, PC_GetCommandArray, PC_GetAliasArray, PC_GetArraySize, PC_FreeArray, PC_GetCommandName.
    - Добавлен макрос "PC_HasFlag".
    - Добавлен паблик "PC_OnInit".
    - Изменен натив "PC_GetFlags".
    - Совместимость с YSI.
    3.1.1:
    - Исправлена ошибка в функции "PC_RenameCommand".
    3.1.2:
    - Исправлена ошибка в очереди скриптов.
    3.1.3:
    - Исправлена ошибка "File or function is not found"
    3.1.4:
    - Добавлена поддержка OPCT

    Download binaries:
    https://github.com/urShadow/Pawn.CMD/releases

    Source code:
    https://github.com/urShadow/Pawn.CMD

    Source code of the benchmark:
    https://gist.github.com/urShadow/14d...17088cf2f23cbe

    Внимание:
    При использовании версии 3.1.4 убедитесь, что в Вашем моде и скриптах отсутствует возврат единицы в коллбэке OnPlayerCommandText (иначе команды через "CMD:" работать не будут).
     Пояснение
    Для правильной работы плагина Вы должны убедиться, что в конце каждого OnPlayerCommandText (не в командах) возвращается нуль.
    То есть, если у Вас так:
    PHP код:
    public OnPlayerCommandText(playeridcmdtext[])
    {
        
    //Тут могут быть команды
        
    return 1;

    То нужно сделать так:
    PHP код:
    public OnPlayerCommandText(playeridcmdtext[])
    {
        
    //Тут могут быть команды
        
    return 0;

    В самих командах же нужно возвращать единицу.
    Последний раз редактировалось DeimoS; 15.10.2017 в 03:31.

  2. 18 пользователя(ей) сказали cпасибо:
    Geebrox (08.09.2016) Glant (09.09.2016) ihNNNNNify (19.11.2020) iWors (03.06.2016) Josan_Solomon (14.01.2019) newbie01 (07.06.2016) Nexius_Tailer (01.06.2016) Prolific (02.06.2016) punkochel (25.12.2022) Quays (23.07.2017) Rodrigo (03.06.2016) Saibot (03.10.2016) seriu (02.06.2016) Sp1ke (03.06.2016) Unreal (24.06.2016) vovandolg (20.07.2016) Web (06.04.2017) Zaur_Lumanov (04.06.2016)
  3. #2
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    По-подробнее можно?)
    Насколько известно, mcmd хакает память для того, чтобы отключить вызов OnPlayerCommandText. А какие особенности у этого плагина?

  4. #3
    Аватар для Иван Бубнов
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    157
    Репутация:
    8 ±
    Подозрительный персонаж

  5. #4
    Аватар для Fallen A.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Адрес
    Минск, БССР
    Сообщений
    236
    Репутация:
    19 ±
    Цитата Сообщение от Иван Бубнов Посмотреть сообщение
    Подозрительный персонаж
    Ты про чела в очках на аватарке?

  6. #5
    Аватар для urShadow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.05.2016
    Сообщений
    44
    Репутация:
    54 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    По-подробнее можно?)
    Насколько известно, mcmd хакает память для того, чтобы отключить вызов OnPlayerCommandText. А какие особенности у этого плагина?
    Этот плагин тоже напрямую работает с памятью и отключает вызов OnPlayerCommandText, но работает быстрее благодаря продуманной реализации.

  7. #6
    Аватар для vasyok28
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.08.2015
    Сообщений
    106
    Репутация:
    8 ±
    Цитата Сообщение от Fallen A. Посмотреть сообщение
    Ты про чела в очках на аватарке?
    ахахах

  8. #7
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Идея с перехватом вызова OPCT прямиком в коде сервера хороша, но не нова (такое было ещё в mcmd 2 года назад). К тому же, могут возникнуть проблемы, если Куй скомпилирует новую версию сервера с помощью другой версии MSVC++/GCC - плагин просто не найдёт нужный фрагмент кода и не будет работать (того же эффекта можно добиться, если заставить MSVC++ и GCC по возможности компилировать функции без пролога/эпилога).

    Кто планирует пользоваться этим плагином - хорошо обдумайте свой выбор, т.к. есть вероятность, что при апгрейде до новой версии сервера придётся ждать обновления плагина, что таки может быть критично, если для SA-MP сделают новый эксплоит, которым можно положить любой сервер (такое уже было 2 года назад).

    P.S.: Я не сомневаюсь в правдивости графика сравнения Pawn.CMD с DC_CMD и mcmd (замена вызовов OPCT в памяти сервера на свой код должна быть куда быстрее, чем вызов public-функции и нативки из неё, хоть это и не самый надёжный способ), но всё же не помешало бы выложить исходники теста производительности.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. Пользователь сказал cпасибо:
    Unreal (03.06.2016)
  10. #8
    Аватар для urShadow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.05.2016
    Сообщений
    44
    Репутация:
    54 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Идея с перехватом вызова OPCT прямиком в коде сервера хороша, но не нова (такое было ещё в mcmd 2 года назад)
    Оригинальным мой плагин назван не был. Я не отрицаю, что взял лучшее из известных мне плагинов и сделал как надо. Свежей идеей можно считать разве что отсутствие вызова amx_FindPublic при каждом новом сообщении, что значительно экономит время.
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    К тому же, могут возникнуть проблемы, если Куй скомпилирует новую версию сервера с помощью другой версии MSVC++/GCC - плагин просто не найдёт нужный фрагмент кода и не будет работать (того же эффекта можно добиться, если заставить MSVC++ и GCC по возможности компилировать функции без пролога/эпилога).
    Плагин совместим со всей веткой 0.3 за последние 6 лет. Не думаю, что внезапно Kalcor сделает что-то, что изменит сигнатуру нужной функции, но даже если это произойдет, то мне не составит труда обновить ее.

    Днем выложу исходный код плагина, которым я измерял скорость работы.

  11. Пользователь сказал cпасибо:
    Unreal (03.06.2016)
  12. #9
    Аватар для urShadow
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.05.2016
    Сообщений
    44
    Репутация:
    54 ±
    Обновил до версии 2.0.
    Как и обещал, ссылка на исходник плагина, которым я замерял среднюю задержку между приходом RPC_ServerCommand и вызовом cmd_test. Во время теста было зарегистрировано 100 команд.
    https://gist.github.com/urShadow/14d...17088cf2f23cbe

  13. #10
    Аватар для seriu
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.11.2013
    Сообщений
    69
    Репутация:
    6 ±
    А предусмотрен вызов команды из мода?
    К примеру у DC
    PHP код:
    // без параметров
    cmd::help(playerid"");

    // с параметрами
    new param_str[11]; // размер строки зависит от параметров
    format(param_strsizeof(param_str), "%d"targetid);
    cmd::invite(playeridparam_str); 

 

 
Страница 1 из 17 1 2 3 11 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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