- Стандартное использование параметров
Чаще всего встречается такой формат объявления параметров, где в качестве их используются сами params. Если в команде используется 1 параметр, то это не страшно, но при множестве к params добавляется массив с его "номером". Массивы в какой-то степени грузят сервер.
if (sscanf(params, "is[32]", params[0], params[1])) return SendClientMessage(playerid, -1, !"Ошибка");
Где:
- i - целое число;
- s - элемент строки.
Пример команды:
CMD:test(playerid, params[]) { if (sscanf(params, "is[32]", params[0], params[1])) return SendClientMessage(playerid, -1, !"/test id message"); SendClientMessage(params[0], -1, params[1]); return 1; }
- i - целое число;
- Переменные как параметры
Также можно в начале команды создать переменные, и в дальнейшем использовать их как параметры.
new id, mes[32]; if (sscanf(params, "is[32]", id, mes)) return SendClientMessage(playerid, -1, !"Ошибка");
Пример команды:
CMD:test(playerid, params[]) { new id, mes[32]; if (sscanf(params, "is[32]", id, mes)) return SendClientMessage(playerid, -1, !"/test id message"); SendClientMessage(id, -1, mes); return 1; }
- extract params
Теперь о главном. extract params может создать переменные, которые заменят множество params[] и заодно проверять, правильно ли указаны параметры команды в дальнейшем использовании.
Для переменной с массивом есть специальный тег: string.
extract params -> new id, string:mes[32]; else return SendClientMessage(playerid, -1, !"Ошибка");
Это будет скомпилировано как:
new id, string:mes[32]; if (unformat(params, "is[32]", id, mes)) return SendClientMessage(playerid, -1, !"Ошибка");
Пример команды:
CMD:test(playerid, params[]) { extract params -> new id, string:mes[32]; else return SendClientMessage(playerid, -1, !"/test id message"); SendClientMessage(id, -1, mes); return 1; }
В основном это просто немного упрощает использование sscanf. Разницы в скорости нет никакой. "extract" - это обычный макрос.
#define extract%0->%1; EXTRN%1;unformat(_:EXTRZ:EXTRV:EXTRX:%0,##,%1,,);
Такой же, как и "unformat", который является функцией "sscanf".
native sscanf(const data[], const format[], {Float,_}:...); native unformat(const data[], const format[], {Float,_}:...) = sscanf;
Скачать sscanf2: https://yadi.sk/d/k5s9eLjYvrQjy
Автор урока: m1n1vv
Сообщение отредактировал m1n1vv: 19 января 2019 - 18:05
Вход
Регистрация
Помощь















