Ребят, написала код абилки, но она жутко лагает при первом применение в куске выделенном фигурными скобками, начиная со второго, работает без подвисаний. Есть идеи по оптимизации или по решению проблемы?
++""{ Вызываемая функция
function HeroDefenderSkillBBase_SelectGroup takes nothing returns nothing
if ( ( GetUnitAbilityLevel(GetEnumUnit(), 'B000') > 0 ) == true ) then
call GroupAddUnit( udg_HeroDefenderBuffGroup , GetEnumUnit() )
endif
endfunction
}""++
function HeroDefenderSkillBBase_SelectGroup takes nothing returns nothing
if ( ( GetUnitAbilityLevel(GetEnumUnit(), 'B000') > 0 ) == true ) then
call GroupAddUnit( udg_HeroDefenderBuffGroup , GetEnumUnit() )
endif
endfunction
}""++
function HeroDefenderSkillBBase_AddArmor takes nothing returns nothing
call DisplayTimedTextToForce( GetPlayersAll(), 1.00, R2S( I2R( udg_HeroDefenderStats[0] ) / (10.00 - ( I2R (AbilityLevel) - 1 ) ) ) )
set HeroDefenderSkllBLevel = GetUnitAbilityLevel( udg_HeroDefender, 'DSkB' )
set Bonus = ( I2R( udg_HeroDefenderStats[0] ) / (10.00 - ( I2R (HeroDefenderSkllBLevel) - 1 ) ) )
call UnitAddAbility( GetEnumUnit() , 'DSB0' )
call SetUnitAbilityLevel( GetEnumUnit() , 'DSB0' , ( R2I( Bonus ) ) )
endfunction
call DisplayTimedTextToForce( GetPlayersAll(), 1.00, R2S( I2R( udg_HeroDefenderStats[0] ) / (10.00 - ( I2R (AbilityLevel) - 1 ) ) ) )
set HeroDefenderSkllBLevel = GetUnitAbilityLevel( udg_HeroDefender, 'DSkB' )
set Bonus = ( I2R( udg_HeroDefenderStats[0] ) / (10.00 - ( I2R (HeroDefenderSkllBLevel) - 1 ) ) )
call UnitAddAbility( GetEnumUnit() , 'DSB0' )
call SetUnitAbilityLevel( GetEnumUnit() , 'DSB0' , ( R2I( Bonus ) ) )
endfunction
function HeroDefenderSkillBBase_LoseArmor takes nothing returns nothing
call UnitRemoveAbility ( GetEnumUnit(), 'DSB0' )
endfunction
call UnitRemoveAbility ( GetEnumUnit(), 'DSB0' )
endfunction
function HeroDefenderSkillBBase_Actions takes nothing returns nothing
set Bonus = 0
call TriggerSleepAction( 0.05 )
++""{ Сам кусок
call ForGroup( GetUnitsInRangeOfLocAll ( ( 400.00 + ( 25.00 * ( I2R ( GetUnitAbilityLevel ( udg_HeroDefender , 'DSkB' ) ) - 1.00 ) ) ), GetUnitLoc( udg_HeroDefender ) ), function HeroDefenderSkillBBase_SelectGroup )
}""++
call ForGroup( udg_HeroDefenderBuffGroup, function HeroDefenderSkillBBase_AddArmor )
call TriggerSleepAction( 10.00 + I2R ( ( HeroDefenderSkllBLevel - 1 ) * 2 ) )
call ForGroup( udg_HeroDefenderBuffGroup, function HeroDefenderSkillBBase_LoseArmor )
call GroupClear( udg_HeroDefenderBuffGroup )
endfunction
set Bonus = 0
call TriggerSleepAction( 0.05 )
++""{ Сам кусок
call ForGroup( GetUnitsInRangeOfLocAll ( ( 400.00 + ( 25.00 * ( I2R ( GetUnitAbilityLevel ( udg_HeroDefender , 'DSkB' ) ) - 1.00 ) ) ), GetUnitLoc( udg_HeroDefender ) ), function HeroDefenderSkillBBase_SelectGroup )
}""++
call ForGroup( udg_HeroDefenderBuffGroup, function HeroDefenderSkillBBase_AddArmor )
call TriggerSleepAction( 10.00 + I2R ( ( HeroDefenderSkllBLevel - 1 ) * 2 ) )
call ForGroup( udg_HeroDefenderBuffGroup, function HeroDefenderSkillBBase_LoseArmor )
call GroupClear( udg_HeroDefenderBuffGroup )
endfunction
===========================================================================
function InitTrig_HeroDefenderSkillBBase takes nothing returns nothing
set gg_trg_HeroDefenderSkillBBase = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_HeroDefenderSkillBBase, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddAction( gg_trg_HeroDefenderSkillBBase, function HeroDefenderSkillBBase_Actions )
endfunction
function InitTrig_HeroDefenderSkillBBase takes nothing returns nothing
set gg_trg_HeroDefenderSkillBBase = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_HeroDefenderSkillBBase, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddAction( gg_trg_HeroDefenderSkillBBase, function HeroDefenderSkillBBase_Actions )
endfunction
Принятый ответ
Рев? - тогда приказ без цели
native IssueImmediateOrderById takes unit whichUnit, integer order returns boolean
Создай юнитов по 1 на каждого игрока и прикажи им
call IssueImmediateOrderById(<твой юнит>, 852164)
приказ можно менять только Каналу и книге заклинаний, у остальных способностей нет смысла
call IssueImmediateOrderById(<твой юнит>, 852164)
приказ можно менять только Каналу и книге заклинаний, у остальных способностей нет смысла
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Вообщем это дико странно, каждому игроку пиходится юзать эту абилку по отдельность, тобишь сли абилку юзнул нейтрально пассивный, лагает только нейтрально пассивный.
оно же roar и ему пофиг что в характеристика самой способности написано undestruction
Ред. Ige
call IssueImmediateOrderById(<твой юнит>, 852164)
приказ можно менять только Каналу и книге заклинаний, у остальных способностей нет смысла
if (PlayerNumber < 7) then
call SetUnitOwner( udg_HeroDefender, ConvertedPlayer(PlayerNumber), true )
call IssueImmediateOrderById( udg_HeroDefender, 852164 )
call TriggerSleepAction( 1.00 )
call UnitResetCooldown( udg_HeroDefender )
set PlayerNumber = ( PlayerNumber + 1 )
call TriggerSleepAction( 1.00 )
call TriggerExecute( gg_trg_DeBugTrigger0 )
else
KillUnit (udg_HeroDefender)
RemoveUnit (udg_HeroDefender)
set udg_HeroDefender = gg_unit_H000_0001
set udg_HeroDefenderStats[0] = GetHeroStatBJ(bj_HEROSTAT_STR, udg_HeroDefender, true)
set udg_HeroDefenderStats[1] = GetHeroStatBJ(bj_HEROSTAT_AGI, udg_HeroDefender, true)
set udg_HeroDefenderStats[2] = GetHeroStatBJ(bj_HEROSTAT_INT, udg_HeroDefender, true)
endif
endfunction
function InitTrig_DeBugTrigger0 takes nothing returns nothing
set gg_trg_DeBugTrigger0 = CreateTrigger( )
call TriggerAddAction( gg_trg_DeBugTrigger0, function Trig_DeBugTrigger0_Actions )
endfunction