shape1
shape2
shape3
shape4
shape7
shape8

SendMes (Вместо format)


Статус
Закрыто для дальнейших ответов.

Qeeze

Освоившийся
Пользователь
04.10.2016
1
23
0
Здравствуйте,сразу к делу
Код

stock SendMes(playerid, color, fstring[], {Float, _}:...)
{
static const
STATIC_ARGS = 3;
new
n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
if (n)
{
new
message[128],
arg_start,
arg_end;
#emit CONST.alt fstring
#emit LCTRL 5
#emit ADD
#emit STOR.S.pri arg_start

#emit LOAD.S.alt n
#emit ADD
#emit STOR.S.pri arg_end
do
{
#emit LOAD.I
#emit PUSH.pri
arg_end -= BYTES_PER_CELL;
#emit LOAD.S.pri arg_end
}
while (arg_end > arg_start);

// Push the static format parameters.
#emit PUSH.S fstring
#emit PUSH.C 128
#emit PUSH.ADR message

n += BYTES_PER_CELL * 3;
#emit PUSH.S n
#emit SYSREQ.C format

n += BYTES_PER_CELL;
#emit LCTRL 4
#emit LOAD.S.alt n
#emit ADD
#emit SCTRL 4

return SendClientMessage(playerid, color, message);
}
else
{
return SendClientMessage(playerid, color, fstring);
}
}
stock SendMesToAll(color, fstring[], {Float, _}:...)
{
static const
STATIC_ARGS = 2;
new
n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
if (n)
{
new
message[145],
arg_start,
arg_end;
#emit CONST.alt fstring
#emit LCTRL 5
#emit ADD
#emit STOR.S.pri arg_start

#emit LOAD.S.alt n
#emit ADD
#emit STOR.S.pri arg_end
do
{
#emit LOAD.I
#emit PUSH.pri
arg_end -= BYTES_PER_CELL;
#emit LOAD.S.pri arg_end
}
while (arg_end > arg_start);

// Push the static format parameters.
#emit PUSH.S fstring
#emit PUSH.C 145
#emit PUSH.ADR message

n += BYTES_PER_CELL * 3;
#emit PUSH.S n
#emit SYSREQ.C format

n += BYTES_PER_CELL;
#emit LCTRL 4
#emit LOAD.S.alt n
#emit ADD
#emit SCTRL 4

return SendClientMessageToAll(color, message);
}
else
{
return SendClientMessageToAll(color, fstring);
}
}

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

//Вместо этого кода
new string[128];
format(string,sizeof(string),"Text %s",bla bla);
SendClientMessage(playerid,COLOR_WHITE,string);
//Используем нашу функцию
SendMes(playerid,COLOR_WHITE,"Text %s",bla bla);

//Тоже самое с SendClientMessageToAll

//Вместо этого кода
new string[128];
format(string,sizeof(string),"Text %s",bla bla);
SendClientMessageToAll(COLOR_WHITE,string);
//Используем нашу функцию
SendMesToAll(COLOR_WHITE,"Text %s",bla bla);


Спасибо за внимание)На форуме такого не видел,так что решил выложить

 

 
Последнее редактирование модератором:

enotik

Новичок
Пользователь
29.03.2016
48
8
0
Вообще эта дичь юзается давно в модах SA:MP.

Так-же хоть и удобна в использовании, но может вызывать краши.

 

Пикачу

Новичок
Пользователь
02.11.2016
0
1
0
Вот зачем все так сложно?

Можно ведь макросом сделать.

Да и по тестам выходит быстрее.

 
Статус
Закрыто для дальнейших ответов.