PDA

Просмотр полной версии : [Макрос/Define] get_str_arg(%0,%1,%2)



Smile
16.03.2014, 21:16
Для начала разберем функцию getarg.
Wiki Samp: getarg() - Получает указанный аргумент из функции, очень удобно использовать с функциями, которые имеют динамическое число аргументов.

С этим все понятно, но есть одно "НО"!
Wiki Samp: Важное замечание: НЕ работает с массивами в качестве параметра !

Недавно мне строчно нужно было сделать функцию с динамическим кол-вом аргументов и + ко всему, чтобы поддерживались массивы.

Вот такое решение придумал для себя:



#define get_str_arg(%0,%1,%2); \
for(new x = 0; x < (%2); ++x) { \
if((%1[x] = getarg((%0), x)) != EOS) continue; \
else %1[x] = EOS; break; \
}


пример использования:


stock BlaBla(...) {
new str[20];
for(new i = 0; i < numargs(); ++i) {
get_str_arg(i, str, sizeof(str)); // i - ID агргумента, значение которого вы хотите получить.
}
return print(str);
}
//numargs(); - функция возвращает число аргументов, переданных в функцию с динамическим числом аргументов.

BlaBla("Текст1","Текст 2","Текст3");
// вставим ее в OnGameModeInit и при старте сервера в консоль выведет текст последнего аргумента.




функция BlaBla чисто для примера, особо сверхестественного в ней ничего нету :)

Копюшон
20.03.2014, 22:44
Полезно!+