Всем привет.
За последнее время в паблик выкладывалось много разных командных процессоров.
Один самый быстрый командный процессор сменялся другим, шли споры, какой из них быстрее и т.д. и т.п.
Пришло время положить конец этим спорам.
Представляю вашему вниманию новый командный движок DC_CMD, реализованный в виде плагина.
Все команды обрабатываются в плагине, что ускоряет их выполнение, однако принцип работы схож с ZCMD.
Установка:- Файл dc_cmd.dll (или dc_cmd.so, если на хостинге) закинуть в папку "plugins", dc_cmd.inc - в папку "pawno/include".
- В server.cfg в поле plugins добавить dc_cmd (на хостинге - dc_cmd.so)
- После строки #include <a_samp> добавить подключение инклуда
PHP код:
#include <dc_cmd>
- В моде создавать команды, как для ZCMD:
PHP код:
// тестовая команда
CMD:info(playerid, params[])
{
return SendClientMessage(playerid, -1, "Плагин dc_cmd успешно установлен.");
}
Функционал плагина:- Добавлен макрос ALT для объявления альтернативных названий команд.
Использование:
Код:
ALT:<имя команды>:<имя альт. команды>;
Пример: допустим мы создали команду "/info" и нужно сделать сокращённый вариант "/i".
Пример использования
ALT:
PHP код:
// тестовая команда
CMD:info(playerid, params[])
{
return SendClientMessage(playerid, -1, "Плагин dc_cmd успешно установлен.");
}
ALT:info:i; // "/i" - альтернативный вариант для "/info"
- Можно создавать альтернативные команды (в том числе и на русском языке) с помощью функции RegisterAlt:
RegisterAlt(оригинальная команда, команда на русском языке) |
RegisterAlt(оригинальная команда, команда на русском языке (1), команда на русском языке (2), команда на русском языке (3), ...) |
Пример:
PHP код:
public OnGameModeInit()
{
RegisterAlt("/family", "/f");
RegisterAlt("/help", "/info", "/hlp", "/помощь", "/h"); // теперь, если в игре набрать "/h" или "/помощь", будет вызвана команда /help
//...
}
И всё же альтернативные команды на английском языке рекомендуется создавать через макрос ALT, т.к. это удобнее.
- Колбэки 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;
}
- Вызов команд напрямую из мода:
В версии 2.02 был добавлен макрос "cmd::", благодаря которому можно удобно вызывать команды из любого места в моде.
Пример использования:
PHP код:
// без параметров
cmd::help(playerid, "");
// с параметрами
new param_str[11]; // размер строки зависит от параметров
format(param_str, sizeof(param_str), "%d", targetid);
cmd::stats(playerid, param_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