XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Munky0

offline
Опыт: 16
Активность:
JNGP + WC III TFT 1.26a : Не запускаются некоторые карты
Может быть немного не туда пишу, но все же.
Сразу скажу что дважды сохранять ПРОБОВАЛ И НЕ РАЗ, все нужные галочки стоят, ненужные отключены (пробовал и со включенными)! В поисковиках искал и не нашел!
Некоторые экземпляры vJass кода ломают карту. Подозреваю, что связано с использованием пользовательских константных функций либо геймкэша в vJass. Хотя могу ошибаться. Код точно правильный, пробовал несколько примеров в том числе с этого сайта - все одинаково компилируются без ошибок (хотя проверка синтаксиса упорно не видит глобальных переменных, не уверен что так и должно быть). если отключить триггер с кодом на vJass - все чудесно работает. Иначе - Ctrl+F9 выкидывает в главное меню, а при запуске вручную нет кланов/игроков и карта не запускается.
С другой стороны, в некоторых иных, простых случаях, карты с vJass`ом запускались нормально
vJass версии 0.A.2.A, обновил до 0.A.2.B - не помогло
WC 3 TFT 1.26.0.6401
JNGP 5d Exp2
» (Пытаюсь заставить работать карту с вот таким кодом)
constant function H2I takes handle h returns integer
    return h
    return 0
endfunction

constant function I2U takes integer H returns unit
    return H
    return null
endfunction

constant function I2TrA takes integer i returns triggeraction
    return i
    return null
endfunction    

constant function I2TrC takes integer i returns triggercondition
    return i
    return null
endfunction

function trig_Damaged takes nothing returns nothing
    local unit    DamageSource = GetEventDamageSource() // Атакующий
    local real    Damage       = GetEventDamage()       // Урон
    local unit    Attacked     = GetTriggerUnit()       // Атакованый 
    local trigger trig = GetTriggeringTrigger ()
    local texttag tt
    if DamageSource == I2U(GetStoredInteger(udg_cache, I2S(H2I(trig)), "Attacking")) then
    
        //... 
        if (Damage > 0.0) then
            set tt = CreateTextTagLocBJ( ( "-" + I2S(R2I(Damage)) ), GetUnitLoc(Attacked), 10.00, 10, 100, 50.00, 0.00, 0 )
            call SetTextTagVelocityBJ( tt, 64, 90 )
            call SetTextTagPermanentBJ( tt, false )
            call SetTextTagLifespanBJ( tt, 3.00 )
            call SetTextTagFadepointBJ( tt, 1.50 )
        elseif (Damage < 0.0) then
            set tt = CreateTextTagLocBJ( ( "+" + I2S(R2I(-Damage)) ), GetUnitLoc(Attacked), 12.00, 10, 0.00, 100.00, 0.00, 0 )
            call SetTextTagVelocityBJ( tt, 64, 90 )
            call SetTextTagPermanentBJ( tt, false )
            call SetTextTagLifespanBJ( tt, 3.00 )
            call SetTextTagFadepointBJ( tt, 1.50 )
        endif
        //...  
                                      
        call TriggerRemoveCondition(trig, I2TrC(GetStoredInteger(udg_cache, I2S(H2I(trig)), "TrC")))
        call TriggerRemoveAction   (trig, I2TrA(GetStoredInteger(udg_cache, I2S(H2I(trig)), "TrA")))
        call FlushStoredMission(udg_cache, I2S(H2I(trig)))
        call DestroyTrigger(trig)
    endif
    set trig = null            
endfunction                                                             

function trig_Conditions takes nothing returns boolean
    return true // поставить свои условия
endfunction

function trig_Attacked takes nothing returns nothing
    local trigger trig      = CreateTrigger ()
    local unit    Attacking = GetAttacker()
    local unit    Attacked  = GetTriggerUnit()
    local triggeraction TrA = TriggerAddAction         (trig,           function trig_Damaged    )
    local triggercondition TrC = TriggerAddCondition      (trig, Condition(function trig_Conditions)) 
    call                      TriggerRegisterUnitEvent (trig, Attacked, EVENT_UNIT_DAMAGED       )
    call StoreInteger(udg_cache, I2S(H2I(trig)), "Attacking", H2I(Attacking))
    call StoreInteger(udg_cache, I2S(H2I(trig)), "TrC"      , H2I(TrC      ))
    call StoreInteger(udg_cache, I2S(H2I(trig)), "TrA"      , H2I(TrA      ))            
    call TriggerSleepAction(3)
    if IsTriggerEnabled (trig) then
         call FlushStoredMission(udg_cache, I2S(H2I(trig)))
         call TriggerRemoveCondition(trig, TrC)
         call TriggerRemoveAction   (trig, TrA)                               
         call DestroyTrigger        (trig)
    endif
    set trig= null
    set TrA = null
    set TrC = null
endfunction

//===========================================================================
function InitTrig_Attacked takes nothing returns nothing
    set gg_trg_Attacked = CreateTrigger() 
    call TriggerAddAction             ( gg_trg_Attacked,           function trig_Attacked   )
    call TriggerAddCondition          ( gg_trg_Attacked, Condition(function trig_Conditions))
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Attacked, EVENT_PLAYER_UNIT_ATTACKED         )
endfunction
Подскажите как лечить? Танцы с нубо-бубнами типа закрыть редактор, 100 раз сохранить и тп - пробовал и не помогло.
Старый 16.01.2014, 10:37
ScorpioT1000
Работаем
online
Опыт: отключен
Munky0, читать целиком xgm.ru/forum/showthread.php?t=25760
Старый 16.01.2014, 11:05
xDanteZx

offline
Опыт: 989
Активность:
SCV (если это он, насколько я помню) не поддерживается в патчах выше 1.24 включительно
Старый 16.01.2014, 12:07
Hanabishi
COOL STATUS
offline
Опыт: отключен
Код точно правильный
Неправильный, Return Bug исправили в версии 1.24, все статьи по нему неактуальны
Читайте эту статью: xgm.ru/p/wc3/hashtable
Старый 22.01.2014, 22:51
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 16:26.