Активный
- Тема Автор
- #1
sscanf упрощает парсинг параметров команд. Разберем использование.
Установка
1. Скачайте sscanf2.dll
2. Поместите в папку plugins
3. Добавьте в server.cfg: plugins sscanf2
Подключение
Базовое использование
Спецификаторы:
- i - целое число
- d - целое число
- h - шестнадцатеричное число
- o - восьмеричное число
- x - шестнадцатеричное число
- c - символ
- f - число с плавающей точкой
- s - строка
- u - ID игрока (с проверкой)
- q - строка в кавычках
- r - цвет в формате RGB
Примеры использования
Опциональные параметры
Массивы параметров
Проверка параметров
Комбинирование спецификаторов
Обработка ошибок
Важные моменты:
- Всегда проверяйте результат sscanf
- Используйте правильные спецификаторы
- Указывайте размеры для строковых массивов
- Тестируйте парсинг различных входных данных
sscanf упрощает работу с параметрами команд!
Установка
1. Скачайте sscanf2.dll
2. Поместите в папку plugins
3. Добавьте в server.cfg: plugins sscanf2
Подключение
Код:
#include <sscanf2>
Базовое использование
Код:
CMD:give(playerid, params[])
{
new targetid, amount;
if(sscanf(params, "ui", targetid, amount))
{
SendClientMessage(playerid, -1, "Использование: /give [id] [сумма]");
return 1;
}
GivePlayerMoney(targetid, amount);
return 1;
}
Спецификаторы:
- i - целое число
- d - целое число
- h - шестнадцатеричное число
- o - восьмеричное число
- x - шестнадцатеричное число
- c - символ
- f - число с плавающей точкой
- s - строка
- u - ID игрока (с проверкой)
- q - строка в кавычках
- r - цвет в формате RGB
Примеры использования
Код:
// Парсинг одного параметра
CMD:kick(playerid, params[])
{
new targetid;
if(sscanf(params, "u", targetid))
{
SendClientMessage(playerid, -1, "Использование: /kick [id]");
return 1;
}
Kick(targetid);
return 1;
}
// Парсинг нескольких параметров
CMD:teleport(playerid, params[])
{
new Float:x, Float:y, Float:z;
if(sscanf(params, "fff", x, y, z))
{
SendClientMessage(playerid, -1, "Использование: /teleport [x] [y] [z]");
return 1;
}
SetPlayerPos(playerid, x, y, z);
return 1;
}
// Парсинг строки
CMD:say(playerid, params[])
{
new text[128];
if(sscanf(params, "s[128]", text))
{
SendClientMessage(playerid, -1, "Использование: /say [текст]");
return 1;
}
SendClientMessageToAll(-1, text);
return 1;
}
// Парсинг строки в кавычках
CMD:announce(playerid, params[])
{
new text[256];
if(sscanf(params, "q", text))
{
SendClientMessage(playerid, -1, "Использование: /announce \"текст\"");
return 1;
}
SendClientMessageToAll(-1, text);
return 1;
}
// Парсинг цвета
CMD:setcolor(playerid, params[])
{
new color;
if(sscanf(params, "r", color))
{
SendClientMessage(playerid, -1, "Использование: /setcolor [RGB]");
return 1;
}
// использование цвета
return 1;
}
Опциональные параметры
Код:
CMD:heal(playerid, params[])
{
new targetid = playerid, Float:amount = 100.0;
if(sscanf(params, "uF(-1.0)", targetid, amount))
{
SendClientMessage(playerid, -1, "Использование: /heal [id] [количество]");
return 1;
}
if(targetid == INVALID_PLAYER_ID)
{
targetid = playerid;
}
SetPlayerHealth(targetid, amount);
return 1;
}
Массивы параметров
Код:
CMD:giveweapons(playerid, params[])
{
new targetid, weapons[10], count;
if(sscanf(params, "ua<i>", targetid, weapons, count))
{
SendClientMessage(playerid, -1, "Использование: /giveweapons [id] [оружие1] [оружие2] ...");
return 1;
}
for(new i = 0; i < count; i++)
{
GivePlayerWeapon(targetid, weapons[i], 500);
}
return 1;
}
Проверка параметров
Код:
CMD:setlevel(playerid, params[])
{
new targetid, level;
if(sscanf(params, "ui", targetid, level))
{
SendClientMessage(playerid, -1, "Использование: /setlevel [id] [уровень]");
return 1;
}
if(level < 1 || level > 100)
{
SendClientMessage(playerid, -1, "Уровень должен быть от 1 до 100");
return 1;
}
PlayerInfo[targetid][pLevel] = level;
return 1;
}
Комбинирование спецификаторов
Код:
CMD:complex(playerid, params[])
{
new targetid, Float:x, Float:y, Float:z, text[64];
if(sscanf(params, "ufffs[64]", targetid, x, y, z, text))
{
SendClientMessage(playerid, -1, "Использование: /complex [id] [x] [y] [z] [текст]");
return 1;
}
SetPlayerPos(targetid, x, y, z);
SendClientMessage(targetid, -1, text);
return 1;
}
Обработка ошибок
Код:
CMD:safe(playerid, params[])
{
new targetid, amount;
new result = sscanf(params, "ui", targetid, amount);
if(result)
{
switch(result)
{
case SSCANF_QUOTE_OPEN:
SendClientMessage(playerid, -1, "Незакрытая кавычка");
case SSCANF_NO_MATCH:
SendClientMessage(playerid, -1, "Неверный формат параметров");
default:
SendClientMessage(playerid, -1, "Ошибка парсинга");
}
return 1;
}
// Обработка успешного парсинга
return 1;
}
Важные моменты:
- Всегда проверяйте результат sscanf
- Используйте правильные спецификаторы
- Указывайте размеры для строковых массивов
- Тестируйте парсинг различных входных данных
sscanf упрощает работу с параметрами команд!