Lucky_Drug
Умник
- Добрый день, сейчас я расскажу, как оптимизировать:
SendClientMessage & SendClientMessageToAll
Для начала рассмотрим 2 стандартных примера использования SendClientMessage(со string и без):
1) со string:
SendClientMessageToAll
2) без:
playerid - игрок, которому бы вы хотели отобразить сообщение
-1 - цвет сообщения
в кавычках - текст, который вы хотите отобразить для игрока
- Теперь рассмотрим оптимизацию со string, она повышает быстро читать:
* КОД:
* ПРИМЕР ИСПОЛЬЗОВАНИЯ:
- Также идет и для SendClientMessageToAll:
* КОД:
* ПРИМЕР ИСПОЛЬЗОВАНИЯ:
- Далее, рассмотрим оптимизацию на миллисекунды SendClientMessage(без string):
* КОД:
* ПРИМЕР ИСПОЛЬЗОВАНИЯ:
- А для SendClientMessageToAll, если используется без string, можно просто уменьшить код:
- Пример:
- Спасибо с Вами был Lucky_Drug.
SendClientMessage & SendClientMessageToAll
Для начала рассмотрим 2 стандартных примера использования SendClientMessage(со string и без):
1) со string:
PHP:
format(string,sizeof(string),"%s, Вы идиот?",user);
SendClientMessage(playerid,COLOR_WHITE,string);
PHP:
format(string,sizeof(string),"%s, Вы идиот?",user);
SendClientMessageToAll(COLOR_WHITE,string);
PHP:
SendClientMessage(playerid,-1,"Добро пожаловать на портал P-I!");
-1 - цвет сообщения
в кавычках - текст, который вы хотите отобразить для игрока
- Теперь рассмотрим оптимизацию со string, она повышает быстро читать:
* КОД:
PHP:
stock SendMes(playerid, 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, -1, message);
}
else return SendClientMessage(playerid, -1, fstring);
}
PHP:
SendMes(playerid,-1,"%s, Вы идиот?",user);
* КОД:
PHP:
stock SendMesAll(fstring[], {Float, _}:...)
{
static const STATIC_ARGS = 2;
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 SendClientMessageToAll(-1, message);
}
else return SendClientMessageToAll(-1, fstring);
}
PHP:
SendMesAll(playerid,-1,"%s, Вы идиот?",user);
* КОД:
PHP:
#define SendMe(%0,%2,%1) SendClientMessage(%0, %2,%1)
PHP:
SendMe(playerid,-1,"Мой ник - Lucky_Drug.");
PHP:
#define SendMeAll SendClientMessageToAll
PHP:
SendMeAll(-1,"Мой логин в skype - lucky_drug");
