Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


 
IP:176.32.36.96:7777 Ha6op adm,liderov + bonuse.

**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 100руб/мес, Текстовая 50руб/мес.
Страница 4 из 4 ПерваяПервая ... 234
Показано с 31 по 32 из 32

Тема: /cc (ZCMD/DC_CMD)

  1. #31
    Аватар для VVWVV
    Проверенный

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    509
    Репутация:
    219 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Исправлен краш, возникавший при использовании стандартного компилятора Pawn (до этого я использовал при тестировании только модифицированный компилятор от Zeex). Суть в том, что если использовать #emit сразу же после блока if, то созданные с помощью #emit инструкции почему-то попадают в тот блок.
    Иными словами, код
    PHP код:
            if(i==0)
                
    SendClientMessageToAll(0str);
            
    #emit    push.c        str
            #emit    push.c        0xFFFFFFFF
            #emit    push.c        8 
    превращается компилятором в
    PHP код:
        if(i==0)
        {
            
    SendClientMessageToAll(0str);
            
    #emit    push.c        str
            #emit    push.c        0xFFFFFFFF
            #emit    push.c        8
        

    Zeex уже знает об этом баге, но ещё не исправил его в своей версии компилятора.

    Проблема проявлялась только при использовании стандартного компилятора, т.к. только при его использовании компилировался блок if. Решена она была следующим образом: после блока if я добавил "i = 100;" - это действие не имеет никакого смысла (т.к. переменная i уже создаётся с изначальным значением 100), но позволяет отделить #emit от if.
    PHP код:
        if(i==0)
            
    SendClientMessageToAll(0str);
        
    100;
        
    #emit    push.c        str
        #emit    push.c        0xFFFFFFFF
        #emit    push.c        8 
    Это ещё можно исправить таким образом:
    PHP код:
        if (== 0)
        {
            
    SendClientMessageToAll(0str);
        } {} 
    Не будет генерироваться лишних инструкций.

    Что было:
    PHP код:
        zero.pri
        push
    .pri
        push
    .c 8
        sysreq
    .c 2    SendClientMessageToAll
        stack c
    l.4
        
    const.pri 64
        stor
    .s.pri fffffffc

        push
    .c 4
        push
    .c ffffffff
        push
    .c 8 
    Что стало:
    PHP код:
        zero.pri
        push
    .pri
        push
    .c 8
        sysreq
    .c 2    SendClientMessageToAll
        stack c
    l.4
        push
    .c 4
        push
    .c ffffffff
        push
    .c 8 
    Последний раз редактировалось VVWVV; 23.11.2016 в 15:10.

  2. Пользователь сказал cпасибо:
    Geebrox (28.11.2016)
  3. #32
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,527
    Репутация:
    2049 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Это ещё можно исправить таким образом:
    PHP код:
        if (== 0)
        {
            
    SendClientMessageToAll(0str);
        } {} 
    Или так:
    PHP код:
    { if(== iSendClientMessageToAll(0str); } 
    ИМХО, более эстетичный способ, но да, суть всё та же: нужен пустой локальный блок, чтобы обойти баг с наименьшими потерями.

    Обновил 1-й пост.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

 

 
Страница 4 из 4 ПерваяПервая ... 234

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

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

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

Метки этой темы

Ваши права

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