|
Форум Программирование в Pawno Стандартные функции sparam, iparam, fparam |
sparam, iparam, fparam |
sparam(dest[], maxsize = sizeof(dest), source[], index = 0)
Объяснение: извлекает подстроку под указанным номером, по желанию и вместе с остатком строки. При вызове этой функции в ОЗУ выделяется не более 5 временных pawn ячеек (20 байт) Код sparam(dest[], maxsize = sizeof(dest), source[], index = 0) { dest[0] = 0; for(new cur, pre, i = -1; ; cur++ ) { switch (source[cur]) { case ' ': { if (++i == index) { strmid(dest, source, pre, cur, maxsize); return; } pre = cur + 1; } case 0: { if (++i == index) strmid(dest, source, pre, cur, maxsize); return; } } } } Макрос: Код #define m_sparam(%0,%1,%2,%3) %0[0]=0;for(new cur,pre,i=(-1);;cur++){switch(%2[cur];){case ' ':{if(++i==(%3)){strmid(%0,%2,pre,cur,(%1));break;}pre=cur+1;}case 0:{if(++i==%3)strmid(%0,%2,pre,cur,(%1));break;}}} Пример: Код if(strcmp(cmdtext, "/testcmd", true, 10 ) == 0) { new dest[128]; SendClientMessageToAll(-1, sparam(dest, sizeof(dest), cmdtext, 1)); //Функция отправит сообщение после первого пробела return 1; } iparam(source[], index = 0) Объяснение: извлекает подстроку под указанным номером и возвращает ее численное значение. При вызове этой функции в ОЗУ выделяется не более 16 временных pawn ячеек (64 байта) Код iparam(source[], index = 0) { for (new dest[12], cur, pre, i = -1; ; cur++) { switch (source[cur]) { case ' ': { if (++i == index) { strmid(dest, source, pre, cur, 12); return strval(dest); } pre = cur + 1; } case 0: { if (++i == index) strmid(dest, source, pre, cur, 12); return strval(dest); } } } } Пример: Код if(strcmp(cmdtext, "/testcmd", true, 10 ) == 0) { GivePlayerMoney(playerid, iparam(cmdtext, 1)); //Функция выдаст игроку число после первого пробела return 1; } Float:fparam(source[], index = 0) Объяснение: извлекает подстроку под указанным номером и возвращает ее дробное (Float) значение. При вызове этой функции в ОЗУ выделяется не более 44 временных pawn ячеек (220 байт) Код Float:fparam(source[], index = 0) { for(new dest[40], cur, pre, i = -1; ; cur++) { switch (source[cur]) { case ' ': { if(++i == index) { strmid dest, source, pre, cur, 40); return floatstr(dest); } pre = cur + 1; } case 0: { if(++i == index) strmid(dest, source, pre, cur, 40); return floatstr(dest); } } } } Пример: Код if(strcmp(cmdtext, "/testcmd", true, 10 ) == 0) { SetPlayerPos(playerid, fparam(cmdtext, 1), fparam(cmdtext, 2), fparam(cmdtext, 3)); //Функция установит игроку указанные координаты (/testcmd x y z) return 1; } Эти функции являются более быстрым аналогом strtok. Макрос по логике должен работать еще быстрее, т.к. это вовсе не функция. Автор: Неизвестен Программист любитель :) |
| |||
| |||