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

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

Закрытая тема
 
tgonta
Pixelated Sora Coder
offline
Опыт: 3,160
Активность:
Причина торможения спелла
Я хочу поинтересоваться, какова причина торможения этого спелла, хотя вроде я его хорошо отоптимизировал.
» Триггер 1
function Trig_DrakonaiUltCast_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A01E'
endfunction

function Trig_DrakonaiUltCast_Actions takes nothing returns nothing
    local integer i = 1
    set udg_DrakonaiCaster = GetTriggerUnit()
    call EnableTrigger(gg_trg_DrakonaiCreateFire)
    loop
        exitwhen i > 8
        set udg_DrakonaiDummy[i] = CreateUnit(GetOwningPlayer(udg_DrakonaiCaster),'h00I',GetUnitX(udg_DrakonaiCaster),GetUnitY(udg_Drak​onaiCaster),45 * i)        
        call SetUnitAbilityLevel(udg_DrakonaiDummy[i],'A01H',GetUnitAbilityLevel(udg_DrakonaiCaster,GetSpellAbili​tyId()))
        call SetUnitAbilityLevel(udg_DrakonaiDummy[i],'A01G',GetUnitAbilityLevel(udg_DrakonaiCaster,GetSpellAbili​tyId()))
        set i = i + 1
    endloop
    call EnableTrigger(gg_trg_PeriodicUltDrakonai)
    call TriggerSleepAction(.9)
    call DisableTrigger(gg_trg_PeriodicUltDrakonai)
    call DisableTrigger(gg_trg_DrakonaiCreateFire)
    set i = 1
    loop
        exitwhen i > 8
        call IssueImmediateOrder(udg_DrakonaiDummy[i], "stomp")
        set i = i + 1
    endloop
    call TriggerSleepAction(.4)
    set i = 1
    loop
        exitwhen i > 8
        call RemoveUnit(udg_DrakonaiDummy[i])
        set udg_DrakonaiDummy[i] = null
        set i = i + 1
    endloop
endfunction

//===========================================================================
function InitTrig_DrakonaiUltCast takes nothing returns nothing
    set gg_trg_DrakonaiUltCast = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_DrakonaiUltCast, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_DrakonaiUltCast, Condition( function Trig_DrakonaiUltCast_Conditions ) )
    call TriggerAddAction( gg_trg_DrakonaiUltCast, function Trig_DrakonaiUltCast_Actions )
endfunction
» Триггер 2
function Trig_DrakonaiDeleteFire_Conditions takes nothing returns boolean
    return GetUnitTypeId(GetDyingUnit()) == 'h00J'
endfunction

function Trig_DrakonaiDeleteFire_Actions takes nothing returns nothing
    call RemoveUnit( GetDyingUnit() )
endfunction

//===========================================================================
function InitTrig_DrakonaiDeleteFire takes nothing returns nothing
    set gg_trg_DrakonaiDeleteFire = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_DrakonaiDeleteFire, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddCondition( gg_trg_DrakonaiDeleteFire, Condition( function Trig_DrakonaiDeleteFire_Conditions ) )
    call TriggerAddAction( gg_trg_DrakonaiDeleteFire, function Trig_DrakonaiDeleteFire_Actions )
endfunction
» Триггер 3
function FireCreate takes nothing returns nothing
    local unit array u
    local integer i = 1
    loop
        exitwhen i > 8
        set u[i] = CreateUnit(GetOwningPlayer(udg_DrakonaiCaster),'h00J',GetUnitX(udg_DrakonaiDummy[i]),GetUnitY(udg_Dr​akonaiDummy[i]),270.)
        call SetUnitAbilityLevel(u[i],'A01F',GetUnitAbilityLevel(udg_DrakonaiCaster,GetSpellAbilityId()))
        call SetUnitAbilityLevel(u[i],'A01I',GetUnitAbilityLevel(udg_DrakonaiCaster,GetSpellAbilityId()))
        set u[i] = null
        set i = i + 1
    endloop
endfunction

//===========================================================================
function InitTrig_DrakonaiCreateFire takes nothing returns nothing
    local trigger firecreate = CreateTrigger()
    call TriggerRegisterTimerEventPeriodic(firecreate,.15)
    call TriggerAddAction(firecreate, function FireCreate)
    set firecreate = null
endfunction
» Триггер 4
function Trig_PeriodicUltDrakonai_Actions takes nothing returns nothing
    local location p = GetUnitLoc(udg_DrakonaiCaster)
    local real array a
    local integer i = 1
    loop
        exitwhen i > 8
        set a[i] = 45 * i
        call SetUnitX(udg_DrakonaiDummy[i],GetUnitX(udg_DrakonaiDummy[i]) + 30 * Cos(a[i] * .0174532))
        call SetUnitY(udg_DrakonaiDummy[i],GetUnitY(udg_DrakonaiDummy[i]) + 30 * Sin(a[i] * .0174532))
        set i = i + 1
    endloop
    call RemoveLocation(p)
    set p = null
endfunction

//===========================================================================
function InitTrig_PeriodicUltDrakonai takes nothing returns nothing
    local trigger drakultperiodic = CreateTrigger()
    call TriggerRegisterTimerEventPeriodic(drakultperiodic,.05)
    call TriggerAddAction(drakultperiodic, function Trig_PeriodicUltDrakonai_Actions )
    set drakultperiodic = null
endfunction
Этот спелл пускает в разные стороны огненные шары, но после удаления их он жутко тормозит.
Старый 25.10.2009, 14:57
Sebra

offline
Опыт: 5,603
Активность:
3 триггер создаёт ~264юнита в секунду и не удаляет их
Все локальные массивы в твоём примере лишние.
Старый 25.10.2009, 17:31
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
елси в способностях есть дамми каст то значит виновен он.
как исправить: создаем триггер с событием map initialization
и создаем воина даем ему способность дами, отнимаем у него способность ремувим вона
Bee добавил:
поможет если я с причиной угадал =P
Старый 25.10.2009, 19:49
Закрытая тема

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

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

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

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



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