/*
Выдёргивает из строки source[], разделенной пробелами,
подстроку под указанным индексом index и помещает ее
в dest[]
Фактически это шустрая замена strtok и похожих функций
maxsize это максимальная длина подстроки,
если подстрока больше этой длина,
то она будет урезана
При вызове этой функции в ОЗУ выделяется
не более 5 временных pawn ячеек (20 байт)
ПРИМЕРЫ
new dest[20], source[] = "/givecash 17 50000";
sparam( dest, 20, source, -1 ); // в dest будет помещено "", т.к. такой индекс не существует
sparam( dest, 20, source, 0 ); // в dest будет помещено "/givecash"
sparam( dest, 20, source, 1 ); // в dest будет помещено "17"
sparam( dest, 20, source, 2 ); // в dest будет помещено "50000"
sparam( dest, 20, source, 3 ); // в dest будет помещено "", т.к. такой индекс не существует
*/
stock 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;
}
}
}
}
/*
А это макрос, аналогичный функции sparam,
который по логике должен работать еще быстрее,
т.к. это вовсе не функция.
Параметры и их порядок такой же как у функции sparam.
При вызове этого макроса в ОЗУ выделяется
не более 3 временных pawn ячеек (12 байт)
*/
#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;}}}
/*
Выдёргивает из строки source[], разделенную пробелами,
подстроку под указанным индексом index и возвращает ее
числовое значение
При вызове этой функции в ОЗУ выделяется
не более 16 временных pawn ячеек (64 байта)
ПРИМЕРЫ
new targetPlayerID, sendMoney,
source[] = "/givecash 17 50000";
targetPlayerID = iparam( source, 1 ); // в targetPlayerID будет помещено 17
sendMoney = iparam( source, 2 ); // в sendMoney будет помещено 50000
*/
stock 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);
}
}
}
}
/*
Выдёргивает из строки source[], разделенную пробелами,
подстроку под указанным индексом index и возвращает ее
дробное значение
При вызове этой функции в ОЗУ выделяется
не более 44 временных pawn ячеек (220 байт)
ПРИМЕРЫ
new targetPlayerID, Float:newHealth,
source[] = "/sethealth 12 77.0";
targetPlayerID = iparam( source, 1 ); // в targetPlayerID будет помещено 12
newHealth = fparam( source, 2 ); // в sendMoney будет помещено 77.0
*/
stock 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);
}
}
}
}

stock mktime(uhour,uminute,usecond,uday,umonth,uyear) {
new timestamp2;
timestamp2 = usecond + (uminute * 60) + (uhour * 3600);
new days_of_month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if ( ((uyear % 4 == 0) && (uyear % 100 != 0)) || (uyear % 400 == 0) ) {
days_of_month[1] = 29;
} else {
days_of_month[1] = 28;
}
new days_this_year = 0;
days_this_year = --uday;
if(umonth > 1) {
for(new i=0; i<umonth-1;i++) {
days_this_year += days_of_month[i];
}
}
timestamp2 += days_this_year * 86400;
for(new j=1970;j<uyear;j++) {
timestamp2 += 31536000;
if ( ((j % 4 == 0) && (j % 100 != 0)) || (j % 400 == 0) ) timestamp2 += 86400;
}
return timestamp2;
}
// сорц строка, двумерный массив, разделитель
// разделяет строку по символу на куски в массив.
stock split(const strsrc[], strdest[][], delimiter)
{
new i, li;
new aNum;
new len;
while(i <= strlen(strsrc))
{
if(strsrc[i]==delimiter || i==strlen(strsrc))
{
len = strmid(strdest[aNum], strsrc, li, i, 128);
strdest[aNum][len] = 0;
li = i+1;
aNum++;
}
i++;
}
return 1;
}
// создать хэш таблицу
stock hmake(const name[]) return HLoad(name,"All");
// очистить хэш таблицу
stock hfree(const name[]) { HClose(name), HLoad(name, "All"); }
// узнать данные в хт, единица данных какой номер
stock hgetv(const name[], const item[], value) {
if(value > 0 && value < 11) {
new ret[256];
HGet(name, item, ret);
new rst[11][10];
split(ret,rst,',');
return rst[value-1];
}
}
добавить в хт, в ещё таблицу, и под номером таким та
stock haddv(const name[], const item[], value, const data[]) {
if(value > 0 && value < 11) {
new ret[512];
HGet(name, item, ret);
if(!equal(ret,"")) {
new rst[11][50];
split(ret,rst,',');
strdel(ret,0,512);
for(new i;i<11;i++) {
if(i == value) format(ret,sizeof(ret),"%s,%s",ret,data);
else if(i == 0) format(ret,sizeof(ret),"%s",rst[i]);
else format(ret,sizeof(ret),"%s,%s",ret,rst[i]);
}
} else { format(ret,sizeof(ret),"%s",data); }
HAdd(name, item, ret);
return ret;
}
return ret;
}
; установить значение rgba в цвете.
stock setrgba(res,r,g,b,a)
{
if(r != 0x00) { res = (res & 0x00ffffff) | (r << 24); }
if(g != 0x00) { res = (res & 0xff00ffff) | (g << 16); }
if(b != 0x00) { res = (res & 0xffff00ff) | (b << 8); }
if(a != 0x00) { res = (res & 0xffffff00) | a; }
return res;
}
// поставить значение альфа
stock seta(color,a)
return color & 0xffffff00 | a;
; хз чо такое :)
// а ну, прибавить к альфе ещё маленька альфы :)
stock givea(color,a)
return color | a;
;кол-во цифорок в числе
stock num(numb)
{
new i = 10, d = 1;
while(i<=numb) i*=10, d++;
return d;
}
;узнать из цвета r g b a
stock getr(color)
return (color & 0xFF000000) >> 24;
stock getg(color)
return (color & 0x00FF0000) >> 16;
stock getb(color)
return (color & 0x0000FF00) >> 8;
stock geta(color)
return color & 0x000000FF;
;удаляем в строке от start до end
stock strdel2(str[], start, end)
{
new str2[256];
for(new i;i<start-1;i++) str2[i] = str[i];
for(new i = end-1;i<strlen2(str);i++) str2[i - end + start] = str[i];
return str2;
}
// копируем в dest из source данные от start, и len символов.
stock strmid3(dest[], source[], start, len) {
for(new i = start;i < strlen(source) - (start - len + 1);i++) dest[i-start] = source[i];
}
// сортировка пузырьком.. ^^
stock BubbleSort(mass[])
{
new top = 4 - 1;
while(top != 0)
{
for(new i;i < top;i++)
{
if(mass[i] > mass[i+1])
{
new temp = mass[i];
mass[i] = mass[i+1];
mass[i+1] = temp;
}
}
top--;
}
}
// соединение строк
stock TooStrings(str[],str2[]) {
new string2[256];
format(string2,256,"%s%s",str,str2);
return string2;
}
/*
-----------------------
это типа вставить строку string в source с pos'a(в соурс)
By Aleksey
-----------------------
*/
stock strins2(string[], source[], pos) {
new len = strlen2(string);
new str[256];
for(new i = 0;i < pos;i++) str[i] = source[i];
for(new i = pos;i < pos+len;i++) str[i] = string[i-pos];
for(new i = pos+len;i < strlen2(source)+len;i++) str[i] = source[i-len];
return str;
}
/*
-----------------------
возвращает N правых символов, если N < 0, то вовзращает символы от strlen2(string)+N до strlen2(string)
это м.. возвращает n правый символов(мона юзать -n)
By Aleksey
-----------------------
*/
stock right(string[],N) {
new dest[256];
if (N > 0) { for(new i = strlen2(string) - N;i < strlen2(string);i++) dest[i-(strlen2(string)-N)] = string[i]; }
if (N < 0) { for(new i = strlen2(string) + N;i < strlen2(string);i++) dest[i-(strlen2(string)+N)] = string[i]; }
return dest;
}
/*
-----------------------
возвращает N левых символов, если N < 0, то вовзращает символы от 0 до strlen2(string)+N
возвращает n левых символов, мона юзать -n
By Aleksey
-----------------------
*/
stock left(string[],N) {
new dest[256];
if (N > 0) { for(new i;i < N;i++) dest[i] = string[i]; }
if (N < 0) { for(new i;i < strlen2(string)+N;i++) dest[i] = string[i]; }
return dest;
}
/*
-----------------------
поиск findtext в source, с позиции pos(по умолчанию = 0)
находит позицию строки findtext в source с pos
By Aleksey
-----------------------
*/
stock strfind2(source[],findtext[],pos = 0) {
new n;
for(new i = pos;i < strlen2(source);i++) {
for(new m;m < strlen2(findtext);m++) {
if (source[i+m] == findtext[m] && n < strlen2(findtext)) n++;
if (n == strlen2(findtext)) return i;
}
n=0;
}
return -1;
}
/*
-----------------------
возвращает длину строки
длина строки?
By Aleksey
-----------------------
*/
stock strlen2(str[]) {
new c; while(str[c++]!=0) {}
return c-1;
}
/*
-----------------------
копирование символов из source в dest, maxlength - макс. длина dest
эм..
соурс приравнивает в дест..
By Aleksey
-----------------------
*/
stock strcat2(dest[], source[],maxlength = sizeof(dest)) { for(new i;i<maxlength;i++) dest[i] = source[i]; }
/*
-----------------------
в dest копируются символы с source со start до end, maxlength - макс. длина dest
в дест копируется символы c source со start до end
By Aleksey
-----------------------
*/
stock strmid2(dest[], source[], start, end, maxlength = sizeof(dest)) {
for(new i = start;i < end;i++) { if (strlen2(dest) < maxlength) dest[i-start] = source[i]; else break; }
}
/*
-----------------------
Конвентирует число s из fs системы счисления в fd систему счисления
строка, все числа в строке, конвентирует из fs системы счисления в fd.
By Aleksey
-----------------------
*/
stock conv(s[], fs, fd)
{
new A, sd[256];
for (new i; i < strlen2(s); i++)
{
new a = strval2(s[i]);
if ((a >= 0) && (a <= fs)) A = A * fs + a;
else break;
}
while (A != 0)
{
format(sd,sizeof(sd),"%s%s",valstr2(A % fd),sd);
A /= fd;
}
return sd;
}
/*
-----------------------
Возвращает номер символа из таблицы ASCII
возвращает номер символа по ASCII
By Aleksey
-----------------------
*/
stock asc(S)
return S;
/*
-----------------------
Возвращает символ по номеру в таблице ASCII
возвращает символ из номера символа по ASCII
By Aleksey
-----------------------
*/
stock chr(N) {
new str[1];
format(str,sizeof(str),"%s",N);
return str;
}
#include <a_samp>
#define INTEGER_MACRO 1234
#define FLOAT_MACRO 3.1416
#define STRING_MACRO "abc"
main()
{
print
(
"INTEGER_MACRO = " #INTEGER_MACRO #\n\
"FLOAT_MACRO = " #FLOAT_MACRO #\n\
"STRING_MACRO = " STRING_MACRO #\n\
#\n\
# Hello\, World! Русские идут!
);
}
|
Originally Posted by ^Psycho^
MX_Master ты конечно крут, базара нет.. но многим ли людям это пригодиться?
... |
if ( strcmp( cmdtext, "/goto_xyz", true, 9 ) == 0 )
{
SetPlayerPos( playerid, fparam(cmdtext, _, 1), fparam(cmdtext, _, 2), fparam(cmdtext, _, 3) );
return 1;
}
if ( strcmp( cmdtext, "/givemoney", true, 10 ) == 0 )
{
GivePlayerMoney( iparam(cmdtext, _, 1), iparam(cmdtext, _, 2) );
return 1;
}
|
Originally Posted by MX_Master
более мощные версии трёх моих же функций для извлечения праметров из строк, разделенных каким-то символом
sparam - извлекает подстроку под указанным номером, по желанию и вместе с остатком строки iparam - извлекает подстроку под указанным номером и возвращает ее численное значение fparam - извлекает подстроку под указанным номером и возвращает ее дробное (Float) значение даю код. в коде размер табуляции = 4. Code:
/*
ОПИСАНИЕ
Строка source[] будет разделена на несколько подстрок
с помощью символа delimiter. Нужная подстрока под номером (индексом)
substrIndex будет помещена в строку dest[]
ПАРАМЕТРЫ
dest[] сюда будет помещена нужная подстрока
maxSize макс. размер подстроки, которая будет помещена в dest[]
если длина подстроки больше maxSize, то она урежется
source[] исходная строка для разбиения и поиска в ней подстрок
delimiter символ, который будет делить исходную строку на подстроки
substrIndex порядковый номер (индекс) подстроки в исходной строке
withRest это логический флаг, если равен 1, то в dest[]
будут помещены все подстроки, начиная с указанного
индекса substrIndex. В том числе и все символы delimiter,
которые стоят между подстроками также будут включены в dest[]
ВОЗВРАЩАЕТ
ничего
ПРИМЕРЫ
new dest[128] = "something";
sparam( dest, 20, "/register 123456", ' ', 0 ); // dest = "/register"
sparam( dest, 20, "/register 123456", ' ', 1 ); // dest = "123456"
sparam( dest, 5, "/register 123456", ' ', 0 ); // dest = "/reg"
sparam( dest, 4, "/register 123456", ' ', 1 ); // dest = "123"
sparam( dest, 20, "/pm 29 Как дела, бро?", ' ', 0 ); // dest = "/pm"
sparam( dest, 4, "/pm 29 Как дела, бро?", ' ', 1 ); // dest = "29"
sparam( dest, 10, "/pm 29 Как дела, бро?", ' ', 2 ); // dest = "Как"
sparam( dest, 50, "/pm 29 Как дела, бро?", ' ', 2, 1 ); // dest = "Как дела, бро?"
sparam( dest, 10, "/pm 29 Как дела, бро?", ' ', 3 ); // dest = "дела,"
sparam( dest, 50, "/pm 29 Как дела, бро?", ' ', 3, 1 ); // dest = "дела, бро?"
sparam( dest, 10, "/pm 29 Как дела, бро?", ' ', 4 ); // dest = "бро?"
sparam( dest, 20, "91.235.141.89", '.', 0 ); // dest = "91"
sparam( dest, 20, "91.235.141.89", '.', 1 ); // dest = "235"
sparam( dest, 20, "91.235.141.89", '.', 2 ); // dest = "141"
sparam( dest, 20, "91.235.141.89", '.', 3 ); // dest = "89"
sparam( dest, 20, "91.235.141.89", '.', 1, 1 ); // dest = "235.141.89"
sparam( dest, 20, "91.235.141.89", '.', 2, 1 ); // dest = "141.89"
sparam( dest, 20, "/register 123456", ' ', -1 ); // dest = "", т.к. подстроки с таким индексом нет
sparam( dest, 20, "/register 123456", ' ', 7 ); // dest = "", т.к. подстроки с таким индексом нет
*/
stock sparam
(
dest[], maxSize = sizeof(dest),
const source[], delimiter = ' ',
substrIndex = 0, withRest = 0
)
{
dest[0] = 0; // очистим строку назначения
for ( new cur, pre, i = -1; ; cur++ ) // пробежимся по каждому символу в строке source
{
if ( source[cur] == 0 ) // если текущий символ в source - это символ конца строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
// скопируем в dest нужную подстроку из source
strmid( dest, source, pre, ( withRest ? strlen(source) : cur ), maxSize );
return; // завершим работу функции
}
if ( source[cur] == delimiter ) // если текущий символ в source - это символ для разделения строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
{
// скопируем в dest нужную подстроку из source
strmid( dest, source, pre, ( withRest ? strlen(source) : cur ), maxSize );
return; // завершим работу функции
}
pre = cur + 1;
}
}
}
/*
ОПИСАНИЕ
Строка source[] будет разделена на несколько подстрок
с помощью символа delimiter. И нужная подстрока под номером (индексом)
substrIndex будет возвращена функцией как число
ПАРАМЕТРЫ
source[] исходная строка для разбиения и поиска в ней подстрок
delimiter символ, который будет делить исходную строку на подстроки
substrIndex порядковый номер (индекс) подстроки в исходной строке
ВОЗВРАЩАЕТ
целочисленное значение подстроки
ПРИМЕРЫ
new number = 555;
number = iparam( "/givecash 23 50000", ' ', -1 ); // number = 0, т.к. подстроки с таким индексом нет
number = iparam( "/givecash 23 50000", ' ', 0 ); // number = 0
number = iparam( "/givecash 23 50000", ' ', 1 ); // number = 23
number = iparam( "/givecash 23 50000", ' ', 2 ); // number = 50000
number = iparam( "/givecash 23 50000", ' ', 3 ); // number = 0, т.к. подстроки с таким индексом нет
*/
stock iparam ( const source[], delimiter = ' ', substrIndex = 0 )
{
for ( new dest[12], cur, pre, i = -1; ; cur++ ) // пробежимся по каждому символу в строке source
{
if ( source[cur] == 0 ) // если текущий символ в source - это символ конца строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
strmid( dest, source, pre, cur, 12 ); // скопируем в dest нужную подстроку из source
return strval(dest); // завершим работу функции и вернем целочисленное значение подстроки
}
if ( source[cur] == delimiter ) // если текущий символ в source - это символ для разделения строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
{
strmid( dest, source, pre, cur, 12 );// скопируем в dest нужную подстроку из source
return strval(dest); // завершим работу функции и вернем целочисленное значение подстроки
}
pre = cur + 1;
}
}
}
/*
ОПИСАНИЕ
Строка source[] будет разделена на несколько подстрок
с помощью символа delimiter. И нужная подстрока под номером (индексом)
substrIndex будет возвращена функцией как дробное число
ПАРАМЕТРЫ
source[] исходная строка для разбиения и поиска в ней подстрок
delimiter символ, который будет делить исходную строку на подстроки
substrIndex порядковый номер (индекс) подстроки в исходной строке
ВОЗВРАЩАЕТ
дробное численное значение подстроки
ПРИМЕРЫ
new Float: float = 555.5;
float = iparam( "/goto -157.2 1248.25 10", ' ', -1 ); // float = 0.0, т.к. подстроки с таким индексом нет
float = iparam( "/goto -157.2 1248.25 10", ' ', 0 ); // float = 0.0, т.к. подстрока "/goto" это не число
float = iparam( "/goto -157.2 1248.25 10", ' ', 1 ); // float = -157.2
float = iparam( "/goto -157.2 1248.25 10", ' ', 2 ); // float = 1248.25
float = iparam( "/goto -157.2 1248.25 10", ' ', 3 ); // float = 10.0
float = iparam( "/goto -157.2 1248.25 10", ' ', 4 ); // float = 0.0, т.к. подстроки с таким индексом нет
*/
stock Float: fparam ( const source[], delimiter = ' ', substrIndex = 0 )
{
for ( new dest[40], cur, pre, i = -1; ; cur++ ) // пробежимся по каждому символу в строке source
{
if ( source[cur] == 0 ) // если текущий символ в source - это символ конца строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
strmid( dest, source, pre, cur, 40 ); // скопируем в dest нужную подстроку из source
return floatstr(dest); // завершим работу функции и вернем дробное численное значение подстроки
}
if ( source[cur] == delimiter ) // если текущий символ в source - это символ для разделения строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
{
strmid( dest, source, pre, cur, 40 );// скопируем в dest нужную подстроку из source
return floatstr(dest); // завершим работу функции и вернем дробное численное значение подстроки
}
pre = cur + 1;
}
}
}
|

|
Originally Posted by CrunkBankS
return поставь
|

|
Originally Posted by Alone_MAF1A
return в самый низ функции какбы -_-
|
|
Originally Posted by Konsul
...
*Использую: getdata = dini_Get(fcoords,"coord"); CP[0] = fparam(getdata,',',0); CP[1] = fparam(getdata,',',1); CP[2] = fparam(getdata,',',2); SetPlayerPos(playerid,CP[0],CP[1],CP[2]); |
getdata = dini_Get( fcoords, "coord" ); SetPlayerPos( playerid, fparam(getdata,',',0), fparam(getdata,',',1), fparam(getdata,',',2) );
stock Float: fparam ( const source[], delimiter = ' ', substrIndex = 0 )
{
new dest[40];
for ( new cur, pre, i = -1; ; cur++ ) // пробежимся по каждому символу в строке source
{
if ( source[cur] == 0 ) // если текущий символ в source - это символ конца строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
strmid( dest, source, pre, cur, 40 ); // скопируем в dest нужную подстроку из source
break;
}
else if ( source[cur] == delimiter ) // если текущий символ в source - это символ для разделения строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
{
strmid( dest, source, pre, cur, 40 );// скопируем в dest нужную подстроку из source
break;
}
pre = cur + 1;
}
}
return floatstr(dest);
}
stock Float:fparam2(const source[], delimiter = ' ', substrIndex = 0)
{
new dest[40];
sparam(dest, sizeof(dest), source, delimiter, substrIndex);
return floatstr(dest);
}
#include <a_samp>
#define NOS_MULTIPLIER 1.15
public OnPlayerKeyStateChange ( playerid, newkeys, oldkeys )
{
static veh, Float: velX, Float: velY, Float: velZ;
if ( (newkeys & KEY_FIRE) && IsPlayerInAnyVehicle(playerid) )
{
veh = GetPlayerVehicleID(playerid);
GetVehicleVelocity( veh, velX, velY, velZ );
SetVehicleVelocity( veh, velX * NOS_MULTIPLIER, velY * NOS_MULTIPLIER, velZ * NOS_MULTIPLIER );
}
return 1;
}
|
ReturnPreviousID(playerid,fromid) { new tmp,tmp2; for(new i = fromid; i < GetMaxPlayers(); i--) { if(IsPlayerConnected(i) && i != playerid) { if(tmp == 0) { tmp = 1; tmp2 = i; } } } return tmp2; } |
|
ReturnNextID(playerid,fromid) { new tmp,tmp2; for(new i = fromid; i < GetMaxPlayers(); i++) { if(IsPlayerConnected(i) && i != playerid) { if(tmp == 0) { tmp = 1; tmp2 = i; } } } return tmp2; } |
|
GetHighestID(playerid) { new tmp,tmp2; for(new i = GetMaxPlayers(); i >= 0; i--) { if(IsPlayerConnected(i) && PlayerSpawned[i] == 1 && i != playerid) { if(tmp == 0) { tmp = 1; tmp2 = i; } } } return tmp2; } |
|
GetLowestID(playerid) { new tmp; new tmp2; for(new i = 0; i < GetMaxPlayers(); i++) { if(IsPlayerConnected(i) && PlayerSpawned[i] == 1 && i != playerid) { if(tmp == 0) { tmp = 1; tmp2 = i; } } } return tmp2; } |
|
Originally Posted by [JIeXa
]
... опять же функция format чрезвычайно сложная(примерно такая же как scanff by *****). ... |
|
Originally Posted by Y_Leѕѕ
...
More than one function call - save it in a variable ... |
/*
Сплиттер.. отличия от стандартного - значительная оптимизация
( по тестам для одной и той же задачи требует 46-48 процентов от времени оригинальной функции)
*/
split(const strsrc[], strdest[][], delimiter)
{
new i, li;
new aNum;
new len;
new length = strlen(strsrc);
while(i < length)
{
if(strsrc[i]==delimiter)
{
len = strmid(strdest[aNum], strsrc, li, i, 255);
strdest[aNum][len] = 0;
li = i+1;
aNum++;
}
i++;
}
len = strmid(strdest[aNum], strsrc, li, length, 255);
strdest[aNum][len] = 0;
return 1;
}
|
ConvertSeconds(seconds) { new m = seconds/60,s = seconds%60,string[32]; format(string,32,"%02d:%02d",m,s); return string; } |
|
IsVehicleConnected(vehicleid){ new Float ,Float:y,Float:z;GetVehiclePos(vehicleid,x,y,z); if(x == 0.0 && y == 0.0 && z == 0.0){ return 0; } return 1; } |
|
CountServerVehicles(){ new c = 0; for(new i = 0; i < MAX_VEHICLES; i++){ if(IsVehicleConnected(i)){ c++; } } return c; } |