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:arr, index, dest[], size = sizeof dest);
Callbacks:
PHP код:
forward PC_OnInit(); // calls after Pawn.CMD initialization
forward OnPlayerCommandReceived(playerid, cmd[], params[], flags); // calls before a command
forward OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags); // calls after a command
Установка:
Распакуйте архив в папку вашего сервера. Отредактируйте"server.cfg":
- Windows
- Linux
Пример команды:
PHP код:
#include <Pawn.CMD>
cmd:help(playerid, params[]) // к тому же возможно использовать CMD и COMMAND
{
// код
return 1;
}
Регистрация альтернативных названий (псевдонимов):
PHP код:
#include <Pawn.CMD>
cmd:help(playerid, params[])
{
// код
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(playerid, params[])
{
// code here
return 1;
}
public OnPlayerCommandReceived(playerid, cmd[], 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(playerid, params[])
{
// code here
return 1;
}
alias:ban("block");
public OnPlayerCommandReceived(playerid, cmd[], params[], flags)
{
if ((flags & CMD_ADMIN) && !pAdmin[playerid])
return 0;
return 1;
}
public OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags)
{
if(result == -1)
{
SendClientMessage(playerid, 0xFFFFFFFF, "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(playerid, cmdtext[])
{
//Тут могут быть команды
return 1;
}
То нужно сделать так:
PHP код:
public OnPlayerCommandText(playerid, cmdtext[])
{
//Тут могут быть команды
return 0;
}
В самих командах же нужно возвращать единицу.