Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±

    Ассемблерные вставки

    Вот ASSEMBLER'ские вставки. Они работают хорошо или смотря как. Просто я вырезал код(см. спойлер) и как он поведет себя? Как я понял - это типа заменитель форматирования и сенди^^ (SendClientMessage)
    PHP код:
    stock SendMes(playeridcolorfstring[], {Float_}:...)
    {
        static const
            
    STATIC_ARGS 3;
        new
            
    = (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

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

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

            
    return SendClientMessage(playeridcolormessage);
        }
        else
        {
            return 
    SendClientMessage(playeridcolorfstring);
        }

    PHP код:
    SendMes(playerid, -1"Твое имя - %s"pInfo[playerid][pName]); 
    Или лучше форматировать и сендить?

  2. #2
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    "форматировать и сендить" лучше.

  3. #3
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    "форматировать и сендить" лучше.
    Я просто хотел их заменить на "незначительное форматирование", когда выдаю админ права.
    PHP код:
    CMD:makeadmin(playeridparams[])
    {
        if(
    pAdmin[playerid][aLevel] >= || IsPlayerAdmin(playerid))
        {
            if(
    sscanf(params"ud"params[0], params[1])) return SendClientMessage(playerid, -1"Использование: /makeadmin [id] [уровень]");
            if(
    params[1] > || params[1] < 0) return SendClientMessage(playerid0xD3D3D3FF"Уровень не должен быть больше 5 и меньше 0");
            if(
    GetPVarInt(params[0], "Logged") == 0) return SendClientMessage(playerid0xD3D3D3FF"Игрок не подключен");
            
    pAdmin[playerid][aLevel] = params[1];
            
    pAdmin[playerid][aPassword] = 1337+playerid-228*random(321);
            
    pAdmin[playerid][aID] = 99999+random(999999)+playerid*2;
            
    FormatMessage(playerid, -1"{FFD700}Вы выдали {FFFFFF}%d {FFD700}уровень администрирования игроку {FFFFFF}%s"params[1], pInfo[params[0]][pName]);
            new 
    sendername[MAX_PLAYER_NAME];
            
    GetPlayerName(playeridsendernamesizeof(sendername));
            
    FormatMessage(params[0], -1"{FFD700}Администратор {FFFFFF}%s {FFD700}выдал вам {FFFFFF}%d {FFD700}уровень администрирования"sendernameparams[1]);
            
    FormatMessage(params[0], -1"{87CEFF}Ваш личный админ-пароль: {FFFFFF}%d"pAdmin[playerid][aPassword], params[1]);
        }
        return 
    1;

    FormatMessage - есть есть та функция, которую я выкину в шапке поста, только название понятное для себя сделал. В этих случаях можно использовать вставки или лучше форматировать и сендить? :D
    Последний раз редактировалось Desulaid; 25.04.2015 в 20:41.

  4. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Как вам удобнее. Но никакой оптимизации от этой функции не будет (более того, обычная комбинация format+SCM работает быстрее).
    Да и за стабильность функции вряд ли кто-то станет ручаться.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  5. #5
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Как вам удобнее. Но никакой оптимизации от этой функции не будет (более того, обычная комбинация format+SCM работает быстрее).
    Да и за стабильность функции вряд ли кто-то станет ручаться.
    А если использовать вот к примеру такой код

    PHP код:
    new format_string[228];
    #define FormatMessage(%0,%1,%2,%3)    format(format_string, sizeof(format_string),%2,%3) && SendClientMessage(%0, %1, format_string) 
    Он же ничем не отличается от простого форматирования и отправления в чат?

  6. #6
    Аватар для Mazzilla
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.11.2013
    Адрес
    Нижневартовск
    Сообщений
    256
    Репутация:
    63 ±
    stock, не?

  7. #7
    Аватар для NewGreen
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.09.2014
    Сообщений
    61
    Репутация:
    44 ±
    Цитата Сообщение от Darge Посмотреть сообщение
    А если использовать вот к примеру такой код

    PHP код:
    new format_string[228];
    #define FormatMessage(%0,%1,%2,%3)    format(format_string, sizeof(format_string),%2,%3) && SendClientMessage(%0, %1, format_string) 
    Он же ничем не отличается от простого форматирования и отправления в чат?
    #define - позволяет определять константы и макросы

    PHP код:
    // константа
    #define BUFFER_SIZE ( 512 )
     
    // макрос
    #define FormatMessage(%0,%1,%2,%3)    format(format_string, sizeof(format_string),%2,%3) && SendClientMessage(%0, %1, format_string) 
    В процессе компиляции, везде где в коде используется константа BUFFER_SIZE произойдет замена на 512,
    также и с макросом FormatMessage(%0,%1,%2,%3), будет замена на format(format_string, sizeof(format_string),%2,%3) && SendClientMessage(%0, %1, format_string).
    #define позволяет сэкономить время при написание рутинных операций.

  8. Пользователь сказал cпасибо:
    Desulaid (28.04.2015)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •