Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

SendClientMessage & SendClientMessageToAll

Статус
В этой теме нельзя размещать новые ответы.

Lucky_Drug

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