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

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

Закрытая тема
 
truth troll
Silenced by truth troll
offline
Опыт: 7,396
Активность:
Новичок на тропе войны с Jass
Всем здарова. Помогите новичку... Я создаю эту тему для своих глупых вопросов =)
И вот первый:
Меня интересует как можно отловить таймер, который при окончании является событием (TriggerRegisterTimerExpireEvent(trigger, timer)) на которое срабатывает триггер...
Старый 15.05.2009, 19:27
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
truth troll, GetExpiredTimer() пробывал?
Старый 15.05.2009, 19:42
truth troll
Silenced by truth troll
offline
Опыт: 7,396
Активность:
Hellfim Спс, это оно...

И так, предоставляю вашему вниманию мой первый код. Это спелл на основе абилы "зелья невидимости", который действует по типу абилы "стремительность". Только при атаке кастер оглушает цель.
Помогите оптимизировать... На счёт БЖ ф-ций: я их вскоре сменю... Меня интересует надо ли обнулять интегеры (я читал у ADOLF'a, что интегеры, реалы и ещё что-то можно не обнулять). И вообще меня интересует ваши замечания по коду...


» Триггер Spell01a

Код:
function Trig_Spell01a_Conditions takes nothing returns boolean
    if GetSpellAbilityId() == 'A001'  then
        return true
    endif
    return false
endfunction

function Trig_Spell01a_Actions takes nothing returns nothing
    local integer i
    local integer j
    local integer k=0
    
    set i=udg_Sp01_num
    set j = 1
    loop
        exitwhen j > i
    if  ( GetSpellAbilityUnit() == udg_Sp01_castunits[j] )  then
        set k=j
    else
    endif
        set j = j + 1
    endloop

    if  ( k == 0 )  then
        set i=i+1
    else
        return
    endif  
    
    set udg_Sp01_num=i
    set udg_Sp01_castunits[i] = GetSpellAbilityUnit()
    call StartTimerBJ( udg_Sp01_timer[i], false, 20.00 ) 
    
    call DestroyTrigger(udg_Sp01_trigs[i])
    set udg_Sp01_trigs[i] = CreateTrigger(  )
    call TriggerRegisterTimerExpireEvent(udg_Sp01_trigs[i], udg_Sp01_timer[i])
    call TriggerAddAction( udg_Sp01_trigs[i], function Sp01c_Trig_Actions )
    
    
    
 endfunction

//===========================================================================
function InitTrig_Spell01a takes nothing returns nothing
    set gg_trg_Spell01a = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Spell01a, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Spell01a, Condition( function Trig_Spell01a_Conditions ) )
    call TriggerAddAction( gg_trg_Spell01a, function Trig_Spell01a_Actions )
endfunction



» Триггер Spell01b

Код:
function Trig_Spell01b_Conditions takes nothing returns boolean
    local integer A =1
    loop 
    exitwhen A > 50
    if  GetAttacker() == udg_Sp01_castunits[A] then
        return true
    endif
    set A=A+1
    endloop
    return false
endfunction


function Trig_Spell01b_Actions takes nothing returns nothing
    local integer i
    local integer j
    local integer k=0
    local unit u
    local unit y
    set y= GetTriggerUnit()
    set u = GetAttacker()
    set i = udg_Sp01_num
    set j = 1
    loop
        exitwhen j > i
    if  ( u == udg_Sp01_castunits[j] )  then
        set k=j
    else
    endif
        set j = j + 1
    endloop
    if k==0 then 
    return 
    else
    if (udg_Sp01_effect[k] == null) then
    set udg_Sp01_atkedunits[k] = y
    call AddSpecialEffectTargetUnitBJ( "overhead", udg_Sp01_atkedunits[k], "Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget.mdl" )
    set udg_Sp01_effect[k] = GetLastCreatedEffectBJ()
    call StartTimerBJ( udg_Sp01_timer[k], false, 1.80 )
    call PauseUnit( udg_Sp01_atkedunits[k], true ) 
    endif
    endif
    set y= null
    set u = null
endfunction

//===========================================================================
function InitTrig_Spell01b takes nothing returns nothing
    set gg_trg_Spell01b = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Spell01b, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_Spell01b, Condition( function Trig_Spell01b_Conditions ) )
    call TriggerAddAction( gg_trg_Spell01b, function Trig_Spell01b_Actions )
endfunction



» Функция Sp01c_Trig_Actions

Код:
function Sp01c_Trig_Actions takes nothing returns nothing
    local integer i
    local integer j
    local integer k=0
    local timer t
    set t = GetExpiredTimer()
    set i = udg_Sp01_num
    set j = 1
    loop
        exitwhen j > i
    if  ( t == udg_Sp01_timer[j] )  then
        set k=j
    else
    endif
        set j = j + 1
    endloop
    if udg_Sp01_atkedunits[k]!= null then
    call PauseUnit( udg_Sp01_atkedunits[k], false )
    call DestroyEffect(udg_Sp01_effect[k])
    set udg_Sp01_effect[k] = null
    endif
        set udg_Sp01_effect[k] = udg_Sp01_effect[i]
        set udg_Sp01_trigs[k] = udg_Sp01_trigs[i]
        set udg_Sp01_atkedunits[k] = udg_Sp01_atkedunits[i]
        set udg_Sp01_castunits[k] = udg_Sp01_castunits[i]
        set udg_Sp01_timer[k] = udg_Sp01_timer[i]
        set udg_Sp01_num = udg_Sp01_num - 1
endfunction


А, да... подскажите какую абилу можно использовать вместо абилы "зелья невидимости", а точнее мне надо, что бы кастер мгновенно становился невидимым...

пофиксил теги [code]. © swdn

Отредактировано ShadoW DaemoN, 16.05.2009 в 12:24.
Старый 15.05.2009, 22:01
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
на основе "канал"
Старый 15.05.2009, 23:57
truth troll
Silenced by truth troll
offline
Опыт: 7,396
Активность:
Bee Сорри за нубовский вопрос =) а где этот "канал" находится? Или дай ссылку где про него по подробней рассказывается....
Старый 16.05.2009, 00:41
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
truth troll
РО -> Способности -> Нейтрально-враждебные -> Герои -> Канал
Старый 16.05.2009, 00:45
truth troll
Silenced by truth troll
offline
Опыт: 7,396
Активность:
Hellfim о, спс... Как код? Утечек много?
Старый 16.05.2009, 00:53
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
truth troll, хватает =) Чтоб устранить утечки, посмотри в common.j типы переменных, которые имеют родительский класс handle. И, прям после всех нужных действий, обнуляй их, например:
» code

Код:
function Z takes nothing returns nothing
    local timer tim=GetExpiredTimer()
    //-->
    call DestroyTimer(tim)
    //-->
    set tim=null
endfunction


» Не утечка, но все же

Код:
function Trig_Spell01a_Conditions takes nothing returns boolean
    if GetSpellAbilityId() == 'A001'  then
        return true
    endif
    return false
endfunction

Мановением руки преобразовывается в
Код:
function Trig_Spell01a_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A001'
endfunction

Старый 16.05.2009, 01:12
truth troll
Silenced by truth troll
offline
Опыт: 7,396
Активность:
Hellfim Спс...
Учиться, учиться, учиться... =)))))
Старый 16.05.2009, 01:21
Закрытая тема

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

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

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

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



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