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

Ну если много юнитов создавать, особенно тяжелых юнитов вроде героев, то будет пролаг, т.к юниты весьма тяжелые обьекты по меркам движка.
Первый раз созавая юнитов движок будет подгружать все их данные из слк таблиц, что тоже вызывает пролаг.
`
ОЖИДАНИЕ РЕКЛАМЫ...
10
ну ничего такого вроде нет. только вот лишний раз локации создаёшь, когда можно и координатами обойтись.
используй лучше GetSpellTargetX/Y
32
Ну если много юнитов создавать, особенно тяжелых юнитов вроде героев, то будет пролаг, т.к юниты весьма тяжелые обьекты по меркам движка.
Первый раз созавая юнитов движок будет подгружать все их данные из слк таблиц, что тоже вызывает пролаг.
Принятый ответ
21
Господа,научите триггерщика пользоваться bj_DEGTORAD,знаю,что это типа готовой формулы,но не умею им пользоваться
18
SсRealm:
Господа,научите триггерщика пользоваться bj_DEGTORAD,знаю,что это типа готовой формулы,но не умею им пользоваться
deg - градусы, to - в, rad - радианы
360.00*bj_DEGTORAD = 6.28319
т.к Cos(...) и Sin(...) и т.д используют радианы
21
SсRealm, cамо название говорит же ( bj_DEGTORAD == Degrees To Radians ). Если у вас углы в градусах, то умножаете на bj_DEGTORAD и получаете уже в радианах. Если же углы в радианах, то умножаете на bj_RADTODEG и получаете градусы.
18
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
26
Почему вот так:
set R = ( R + ( 360.00 / 36.00 ) )
а не:
set R = ( R + 10.00 )
30
8gabriel8, плохо вы оптимизируетуе))
set R = R + 10.
33
NazarPunk, меньше символов подрубаем cJass
R++
жаль что на 1, а так R=R+10
30
жаль что на 1, а так R=R+10
Вроди бы можно R+=10 Но это не точно
18
set U_D = CreateUnit(GetOwningPlayer(U), 'uban', X, Y, (bj_forLoopAIndex-1)*10.00 )
Загруженные файлы
3 комментария удалено
Чтобы оставить комментарий, пожалуйста, войдите на сайт.