function SpellPrizrak_Actions takes nothing returns nothing
    local unit U = GetSpellAbilityUnit()
    local unit U_D
    local real R = 0
    local real X, Y = 0
    local location L = GetSpellTargetLoc()
    local location T[]
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 36
    loop
    exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
    
        set X = GetLocationX(L) + 600 * Cos(R * bj_DEGTORAD)
        set Y = GetLocationY(L) + 600 * Sin(R * bj_DEGTORAD)
        set T[bj_forLoopAIndex] = Location(X, Y)
        set U_D = CreateUnit(GetOwningPlayer(U), 'uban', GetLocationX(T[bj_forLoopAIndex]), GetLocationY(T[bj_forLoopAIndex]), R )
        call SetUnitFlyHeight( U_D, -100.00, 0.00 )
        call SetUnitPathing( U_D, false )
        R = ( R + ( 360.00 / 36 ) )
        
    set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    SetUnitAnimation( U, "Death" )
    set U = null
    set U_D = null
    set L = null
    set T[bj_forLoopAIndex] = null
endfunction

function SpellPrizrak_Cond takes nothing returns boolean
    return GetSpellAbilityId()=='A01T'
endfunction


//===========================================================================
function InitTrig_SpellPrizrak takes nothing returns nothing
    set gg_trg_SpellPrizrak = CreateTrigger(  )
        local integer index

    set index = 0
    loop
            TriggerRegisterPlayerUnitEvent(gg_trg_SpellPrizrak, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)

        set index = index + 1
        exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
        TriggerAddCondition(gg_trg_SpellPrizrak,Condition(function SpellPrizrak_Cond))
        TriggerAddAction( gg_trg_SpellPrizrak, function SpellPrizrak_Actions )
endfunction

Принятый ответ

Ну если много юнитов создавать, особенно тяжелых юнитов вроде героев, то будет пролаг, т.к юниты весьма тяжелые обьекты по меркам движка.
Первый раз созавая юнитов движок будет подгружать все их данные из слк таблиц, что тоже вызывает пролаг.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
10
5 лет назад
0
ну ничего такого вроде нет. только вот лишний раз локации создаёшь, когда можно и координатами обойтись.
используй лучше GetSpellTargetX/Y
0
15
5 лет назад
0
Может, сама моделька юнита нагружает игру?
3
32
5 лет назад
3
Ну если много юнитов создавать, особенно тяжелых юнитов вроде героев, то будет пролаг, т.к юниты весьма тяжелые обьекты по меркам движка.
Первый раз созавая юнитов движок будет подгружать все их данные из слк таблиц, что тоже вызывает пролаг.
Принятый ответ
0
19
5 лет назад
0
Господа,научите триггерщика пользоваться bj_DEGTORAD,знаю,что это типа готовой формулы,но не умею им пользоваться
1
18
5 лет назад
1
SсRealm:
Господа,научите триггерщика пользоваться bj_DEGTORAD,знаю,что это типа готовой формулы,но не умею им пользоваться
deg - градусы, to - в, rad - радианы
360.00*bj_DEGTORAD = 6.28319
т.к Cos(...) и Sin(...) и т.д используют радианы
0
21
5 лет назад
0
SсRealm, cамо название говорит же ( bj_DEGTORAD == Degrees To Radians ). Если у вас углы в градусах, то умножаете на bj_DEGTORAD и получаете уже в радианах. Если же углы в радианах, то умножаете на bj_RADTODEG и получаете градусы.
1
18
5 лет назад
1
Pain_Greed, попробуй этот код
function SpellPrizrak_Actions takes nothing returns nothing
    local unit U = GetSpellAbilityUnit()
    local unit U_D
    local real R = 0.00
    local real X = 0.00
    local real Y = 0.00
    local real SPELL_X = GetSpellTargetX()
    local real SPELL_Y = GetSpellTargetY()
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 36
    loop
    exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
    
        set X = SPELL_X + 600.00 * Cos(R * bj_DEGTORAD)
        set Y = SPELL_Y + 600.00 * Sin(R * bj_DEGTORAD)
        set U_D = CreateUnit(GetOwningPlayer(U), 'uban', X, Y, R )
        call SetUnitFlyHeight( U_D, -100.00, 0.00 )
        call SetUnitPathing( U_D, false )
        set R = ( R + ( 360.00 / 36.00 ) )
        
    set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    call SetUnitAnimation( U, "Death" )
    set U = null
    set U_D = null
endfunction
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.