Создать акаунт
[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум pawno » Pawno » Стандартные функции » sparam, iparam, fparam
sparam, iparam, fparam
Дата: Четверг, 12.05.2016, 00:59 | Сообщение # 1
OFF
Администратор
288Сообщения:
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.
Макрос по логике должен работать еще быстрее, т.к. это вовсе не функция.

Автор: Неизвестен

Форум pawno » Pawno » Стандартные функции » sparam, iparam, fparam
  • Страница 1 из 1
  • 1
Поиск:

Старая форма входа