Plugin – pawn.cmd – самый быстрый и функциональный командный процессор
Моды для сервера
Огромный выбор различных модификаций для Вашего сервера. пролистайте эти темы! Возможно именно там Вы найдете то, что искали уже давно.
Софт – [plugin] pawn.cmd – самый быстрый и функциональный командный процессор.
Pawn.CMD 3.0
Описание:
Pawn.CMD – новый командный процессор, который работает через плагин.
Плагин совместим с любой версией SA:MP, несмотря на работу с памятью.
Natives:
Callbacks:
Установка:
Распакуйте “pawncmd.zip” в папку вашего сервера. Отредактируйте”server.cfg”:
– Windows
– Linux
Пример команды:
Регистрация альтернативных названий (псевдонимов):
Использование флагов:
Полный пример:
#include <Pawn.CMD>
#define ADMIN_CMD 1
#define VIP_CMD 2
#define USER_CMD 4
flags:ban(ADMIN_CMD);
cmd:ban(playerid, params[])
{
// код
return 1;
}
alias:ban("block");
public OnPlayerCommandReceived(playerid, cmd[], params[], flags)
{
if ((flags & ADMIN_CMD) && !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:
Pawn.CMD.inc должен быть подключен после остальных include!
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.
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/14da06af69232657e017088cf2f23cbe
§
Pawn.CMD 3.0
Описание:
Pawn.CMD – новый командный процессор, который работает через плагин.
Плагин совместим с любой версией SA:MP, несмотря на работу с памятью.
Natives:
Callbacks:
Установка:
Распакуйте “pawncmd.zip” в папку вашего сервера. Отредактируйте”server.cfg”:
– Windows
– Linux
Пример команды:
Регистрация альтернативных названий (псевдонимов):
Использование флагов:
Полный пример:
#include <Pawn.CMD>
#define ADMIN_CMD 1
#define VIP_CMD 2
#define USER_CMD 4
flags:ban(ADMIN_CMD);
cmd:ban(playerid, params[])
{
// код
return 1;
}
alias:ban("block");
public OnPlayerCommandReceived(playerid, cmd[], params[], flags)
{
if ((flags & ADMIN_CMD) && !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:
Pawn.CMD.inc должен быть подключен после остальных include!
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.
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/14da06af69232657e017088cf2f23cbe
Урок – для новичков №1: dc_cmd | sscanf2
Команды DC_CMD Sscanf2
[HR][/HR]
Команды в SA:MP существуют для того, чтобы можно было взаимодействовать с сервером.
Покупать оружее и т.п
Пример обработки команд стандартным способом:
Данный код при вводе команд /command и /command1 выводит соответствующие сообщения. При этом, если нужно будет сделать обработку параметров команд (например, получить число 4 из строки “/cmd1 4”), такой код придётся усложнить, в 2-3 раза.
Но есть другой способ обработки команд: командный процессор DC_CMD
[HR][/HR]Пример создания команд для DC_CMD:
[HR][/HR]
Преимущества DC_CMD:
- Более простой синтаксис команд.
- Команды можно расположить в любом участке скрипта (не только в OnPlayerCommandText).
- Не требуется вручную отделять параметры команд (уже отделённые параметры передаются в команду в строке params).
- Проще в освоении.
- Работает в разы быстрее других обработчиков, создавая меньшую нагрузку на сервер.
Теперь перейдём к обработке параметров.
Допустим, у нас есть команда “/ban”, которая банит на сервере игрока с указанным ID (пример: “/ban 65”).
Однако, кроме самой команды, потребуется ещё и обработать ID указанного игрока, а именно – извлечь этот ID из строки params (именно в ней обработчик DC_CMD передаёт параметры).
Стандартным способом это делается с помощью функции strval, которая преобразует содержимое строки в число:
new target = strval(params);
Но в данном способе есть много минусов
Чтобы избежать этих ошибок, придётся сделать дополнительные проверки на пустоту и подсчёт количества параметров (сосчитать все пробелы в строке и прибавить 1). Такая задача может оказаться слишком трудной для начинающих скриптеров.
Однако, есть иное решение: плагин sscanf2.
Использование:
– строка, из которой считываются нужные значения
– строка, в которой указывается, какого типа данные должны быть считаны из исходной строки (пример: “ds[40]”)
- d, i – целое число
- f – вещественное число (Float)
- u – игрок (ID или часть имени)
- s[размер] – строка с указанной макс. длиной
– переменные, в которые будут записаны значения, полученные из исходной строки
[HR][/HR]Для получения ID игрока в команде /ban плагин sscanf2 можно использовать следующим образом
В результате в переменной target будет получен ID игрока, которого нужно забанить.
[HR][/HR]Но что делать, если ID всё же не был введён игроком?
Здесь всё тоже предусмотрено: функция sscanf возвращает 1 в случае ошибки и 0 в случае успеха. Таким образом, проверку на неправильный ввод можно записать в виде ветвления if
Если функция sscanf не сможет правильно считать параметры, она вернёт 1 (при этом в условиях всем ненулевым числам соответствует значение true), условие выполнится, игроку будет выведена подсказка о правильном использовании и команда прервёт свою работу.
[HR][/HR]Теперь, когда ID игрока получен и все случаи неправильного ввода обработаны, можно доделать оставшуюся часть команды:
[HR][/HR]
Сделаем тестовую команду выдачу уровня:
Это команда отвечает за выдачу уровня определенного игрока.
И как вы успели заметить, тут мы используем 2 параметра это
- target – Сюда записываем id игрока.
- level – Записываем LVL который хотим дать игроку.
Разберем
по подробнее.
- SetPlayerScore – Функция отвечающая за число находящийся в TAB листе.
- targetid – переменная в которую мы записали ID игрока.
- GetPlayerScore(target) – Функция отвечающая за получения текущего числа в TAB листе.
- level – Так как мы уже получили текущее число которое уже есть и приплюсовываем к этому числу которое уже есть, ту переменную в которую записали число(Уровень).
[HR][/HR]
Давайте создадим еще одну тестовую команду, но уже будем записывать не число а текст вывода определенному игроку:
PHP:
CMD:sms(playerid, params[])
{
new target, text, sendername[MAX_PLAYER_NAME], str_[28-4 MAX_PLAYER_NAME 120];
if(sscanf(params, "us[145]", target, text))
return SendClientMessage(playerid, 0xFFFFFFFF, "Используйте: /sms [ID игрока/часть имени] [Text]");
GetPlayerName(playerid, sendername, sizeof(sendername));
format(str_ , sizeof(str_), "Игрок %s отправил вам текст: %s", sendername, text);
SendClientMessage(target, 0xFFFFFFFF, str_);
return 1;
}
Тут вы уже видите серьезную команду с записью имя игрока, текста, форматирования, много переменных, и уже наверное напугались
Но на самом деле не чего тут страшного нет, и самые обычные функции.
Разберем первую строку
по подробнее.
- target – записываем id игрока.
- text – записываем текст.
- sendername[MAX_PLAYER_NAME] – в нее будет записываться имя игрока.
- MAX_PLAYER_NAME – это макрос который определяет размер ячеек директивой #define по дефолту в a_samp.inc она имеет значение 24.
- А 24 это максимальное длина имени, можно написать за место MAX_PLAYER_NAME просто 24 разницы не будет.
- str_[28-4 MAX_PLAYER_NAME 120] – сюда как раз и будет записываться отформатированный текст.
- 28-4 MAX_PLAYER_NAME 120 – Это размер ячеек сколько можно будет поместить в эту переменную символов.
- Я сделал точный подсчет всего символов 28 не считая %s два раза. Именно поэтому я отнимаю 4 ибо % – 1 s – 2. и еще раз % – 1 s – 2.
- MAX_PLAYER_NAME – Ну думаю понятно максимальное длина имени.
- 120 – это и есть текст который будет передаваться в функцию SendClientMessage по дефолту в чат максимальная длина 144 нуль символ 145.
Теперь расскажу подробнее про эту
- u – ид игрока
- s[145] – сам текст и 145 ячеек.Так как всего максимальная длина 144 в чате нуль символ 1 получается 145.
Получения имени игрока:
[HR][/HR]
Теперь про форматирования, это будет отдельный урок, расскажу кратко.
Ну и здесь мы уже выводим отформатированный текст игроку.
Всем спасибо это был урок для новичков #1.
Урок #2 – Временно не доступен
§
Команды DC_CMD Sscanf2
[HR][/HR]
Команды в SA:MP существуют для того, чтобы можно было взаимодействовать с сервером.
Покупать оружее и т.п
Пример обработки команд стандартным способом:
Данный код при вводе команд /command и /command1 выводит соответствующие сообщения. При этом, если нужно будет сделать обработку параметров команд (например, получить число 4 из строки “/cmd1 4”), такой код придётся усложнить, в 2-3 раза.
Но есть другой способ обработки команд: командный процессор DC_CMD
[HR][/HR]Пример создания команд для DC_CMD:
[HR][/HR]
Преимущества DC_CMD:
- Более простой синтаксис команд.
- Команды можно расположить в любом участке скрипта (не только в OnPlayerCommandText).
- Не требуется вручную отделять параметры команд (уже отделённые параметры передаются в команду в строке params).
- Проще в освоении.
- Работает в разы быстрее других обработчиков, создавая меньшую нагрузку на сервер.
Теперь перейдём к обработке параметров.
Допустим, у нас есть команда “/ban”, которая банит на сервере игрока с указанным ID (пример: “/ban 65”).
Однако, кроме самой команды, потребуется ещё и обработать ID указанного игрока, а именно – извлечь этот ID из строки params (именно в ней обработчик DC_CMD передаёт параметры).
Стандартным способом это делается с помощью функции strval, которая преобразует содержимое строки в число:
new target = strval(params);
Но в данном способе есть много минусов
Чтобы избежать этих ошибок, придётся сделать дополнительные проверки на пустоту и подсчёт количества параметров (сосчитать все пробелы в строке и прибавить 1). Такая задача может оказаться слишком трудной для начинающих скриптеров.
Однако, есть иное решение: плагин sscanf2.
Использование:
– строка, из которой считываются нужные значения
– строка, в которой указывается, какого типа данные должны быть считаны из исходной строки (пример: “ds[40]”)
- d, i – целое число
- f – вещественное число (Float)
- u – игрок (ID или часть имени)
- s[размер] – строка с указанной макс. длиной
– переменные, в которые будут записаны значения, полученные из исходной строки
[HR][/HR]Для получения ID игрока в команде /ban плагин sscanf2 можно использовать следующим образом
В результате в переменной target будет получен ID игрока, которого нужно забанить.
[HR][/HR]Но что делать, если ID всё же не был введён игроком?
Здесь всё тоже предусмотрено: функция sscanf возвращает 1 в случае ошибки и 0 в случае успеха. Таким образом, проверку на неправильный ввод можно записать в виде ветвления if
Если функция sscanf не сможет правильно считать параметры, она вернёт 1 (при этом в условиях всем ненулевым числам соответствует значение true), условие выполнится, игроку будет выведена подсказка о правильном использовании и команда прервёт свою работу.
[HR][/HR]Теперь, когда ID игрока получен и все случаи неправильного ввода обработаны, можно доделать оставшуюся часть команды:
[HR][/HR]
Сделаем тестовую команду выдачу уровня:
Это команда отвечает за выдачу уровня определенного игрока.
И как вы успели заметить, тут мы используем 2 параметра это
- target – Сюда записываем id игрока.
- level – Записываем LVL который хотим дать игроку.
Разберем
по подробнее.
- SetPlayerScore – Функция отвечающая за число находящийся в TAB листе.
- targetid – переменная в которую мы записали ID игрока.
- GetPlayerScore(target) – Функция отвечающая за получения текущего числа в TAB листе.
- level – Так как мы уже получили текущее число которое уже есть и приплюсовываем к этому числу которое уже есть, ту переменную в которую записали число(Уровень).
[HR][/HR]
Давайте создадим еще одну тестовую команду, но уже будем записывать не число а текст вывода определенному игроку:
PHP:
CMD:sms(playerid, params[])
{
new target, text, sendername[MAX_PLAYER_NAME], str_[28-4 MAX_PLAYER_NAME 120];
if(sscanf(params, "us[145]", target, text))
return SendClientMessage(playerid, 0xFFFFFFFF, "Используйте: /sms [ID игрока/часть имени] [Text]");
GetPlayerName(playerid, sendername, sizeof(sendername));
format(str_ , sizeof(str_), "Игрок %s отправил вам текст: %s", sendername, text);
SendClientMessage(target, 0xFFFFFFFF, str_);
return 1;
}
Тут вы уже видите серьезную команду с записью имя игрока, текста, форматирования, много переменных, и уже наверное напугались
Но на самом деле не чего тут страшного нет, и самые обычные функции.
Разберем первую строку
по подробнее.
- target – записываем id игрока.
- text – записываем текст.
- sendername[MAX_PLAYER_NAME] – в нее будет записываться имя игрока.
- MAX_PLAYER_NAME – это макрос который определяет размер ячеек директивой #define по дефолту в a_samp.inc она имеет значение 24.
- А 24 это максимальное длина имени, можно написать за место MAX_PLAYER_NAME просто 24 разницы не будет.
- str_[28-4 MAX_PLAYER_NAME 120] – сюда как раз и будет записываться отформатированный текст.
- 28-4 MAX_PLAYER_NAME 120 – Это размер ячеек сколько можно будет поместить в эту переменную символов.
- Я сделал точный подсчет всего символов 28 не считая %s два раза. Именно поэтому я отнимаю 4 ибо % – 1 s – 2. и еще раз % – 1 s – 2.
- MAX_PLAYER_NAME – Ну думаю понятно максимальное длина имени.
- 120 – это и есть текст который будет передаваться в функцию SendClientMessage по дефолту в чат максимальная длина 144 нуль символ 145.
Теперь расскажу подробнее про эту
- u – ид игрока
- s[145] – сам текст и 145 ячеек.Так как всего максимальная длина 144 в чате нуль символ 1 получается 145.
Получения имени игрока:
[HR][/HR]
Теперь про форматирования, это будет отдельный урок, расскажу кратко.
Ну и здесь мы уже выводим отформатированный текст игроку.
Всем спасибо это был урок для новичков #1.
Урок #2 – Временно не доступен
Урок – команды (dc_cmd sscanf2)
Однако, кроме самой команды, потребуется ещё и обработать ID указанного игрока, а именно – извлечь этот ID из строки params (именно в ней обработчик DC_CMD передаёт параметры).
Стандартным способом это делается с помощью функции strval, которая преобразует содержимое строки в число:
Но в данном способе есть много минусов:
* Если игрок ничего не ввёл, строка params будет пустой и функция strval вернёт 0, из-за чего можно нечаянно забанить игрока ID 0 (а если под ID 0 находитесь вы – забаните сами себя).
* Для обработки более чем 1 параметра, извлечения ID игроков и т.п. приходится вставлять в скрипт и много раз использовать пользовательские функции strtok, IsNumeric, ReturnUser и т.д.
Чтобы избежать этих ошибок, придётся сделать дополнительные проверки на пустоту и подсчёт количества параметров (сосчитать все пробелы в строке и прибавить 1). Такая задача может оказаться слишком трудной для начинающих скриптеров.
Однако, есть иное решение: плагин sscanf2.
Использование: