Ребят, написала код абилки, но она жутко лагает при первом применение в куске выделенном фигурными скобками, начиная со второго, работает без подвисаний. Есть идеи по оптимизации или по решению проблемы?
++""{ Вызываемая функция
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
function HeroDefenderSkillBBase_LoseArmor takes nothing returns nothing
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
===========================================================================
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)
приказ можно менять только Каналу и книге заклинаний, у остальных способностей нет смысла
0
7
8 лет назад
0
Сколько уровней у 'DSB0'? если много, то все из-за неё, нужно выдать эту способность юниту и поставить его на карту, тогда способность будет грузиться во время загрузки карты
0
9
8 лет назад
0
5 уровней это много? =)
А если например я пихну её в дамми юнита ни как не относящегося к игре, и не являющегося тем самым глобальным HeroDefender?
0
7
8 лет назад
0
Обычно разовые лаги бывают при первом создании/добавлении юнита/способности. Если, то что я предложил выше, не поможет, тогда не знаю в чем дело(
0
9
8 лет назад
0
Оно может и поможет, но я не знаю как заставить юнита выполнить нестандартный приказ...
Вообщем это дико странно, каждому игроку пиходится юзать эту абилку по отдельность, тобишь сли абилку юзнул нейтрально пассивный, лагает только нейтрально пассивный.
0
7
8 лет назад
0
WakVellios, способность не нужно использовать, нужно просто дать её юниту в Редакторе объектов, а затем этого юнита поставить на карту) если это так сложно для тебя, то скинь мне карту с глючным спелом в личку
0
9
8 лет назад
0
Так я пробовала, не помогает.
0
7
8 лет назад
0
ладно, пробуем сделать иначе. Какой приказ у способности?
0
9
8 лет назад
0
852164
оно же roar и ему пофиг что в характеристика самой способности написано undestruction
1
7
8 лет назад
Отредактирован Ige
1
Рев? - тогда приказ без цели
native IssueImmediateOrderById takes unit whichUnit, integer order returns boolean
Создай юнитов по 1 на каждого игрока и прикажи им
call IssueImmediateOrderById(<твой юнит>, 852164)
приказ можно менять только Каналу и книге заклинаний, у остальных способностей нет смысла
Принятый ответ
0
9
8 лет назад
0
Придется кинематику пихать -_-'
1
7
8 лет назад
1
можно затемнять экран на пару секунд вначале игры)
1
20
8 лет назад
1
как вариант - вывести сообщение о загрузке карты и сделать все лагающие вещи
0
9
8 лет назад
0
УРА! Но это гемор...
function Trig_DeBugTrigger0_Actions takes nothing returns nothing
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
Чтобы оставить комментарий, пожалуйста, войдите на сайт.