Дата: Четверг, 12.05.2016, 00:59 | Сообщение # 1
|
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. Макрос по логике должен работать еще быстрее, т.к. это вовсе не функция.
Автор: Неизвестен
|
| |