Ребят, написала код абилки, но она жутко лагает при первом применение в куске выделенном фигурными скобками, начиная со второго, работает без подвисаний. Есть идеи по оптимизации или по решению проблемы?
++""{ Вызываемая функция
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)
приказ можно менять только Каналу и книге заклинаний, у остальных способностей нет смысла
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
А если например я пихну её в дамми юнита ни как не относящегося к игре, и не являющегося тем самым глобальным HeroDefender?
Вообщем это дико странно, каждому игроку пиходится юзать эту абилку по отдельность, тобишь сли абилку юзнул нейтрально пассивный, лагает только нейтрально пассивный.
оно же 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