Добавлен Arlando
Тут есть пару вопросов мой триггер почему то срабатывает иногда дважды. Его суть что юнит с шансом наносит урон по области. Первый вопрос можно ли изначально выключенные приватные триггеры включить(чет не включаются). Второе по самому триггеру видно что иногда она срабатывает дважды, а может и более.(Система получения урона подключена, надо будет скину)
Сам код:
Сам код:
scope Retrebiution initializer OnInit
globals
private constant integer SpellId = 'A00W'
private unit Caster
private boolexpr EnemyFilter
endglobals
private function IsAlive takes unit whichUnit returns boolean
return GetUnitTypeId( whichUnit ) > 0 and not IsUnitType( whichUnit, UNIT_TYPE_DEAD ) and not IsUnitType( whichUnit, UNIT_TYPE_STRUCTURE )
endfunction
private function EnemyFilterFunc takes nothing returns boolean
return IsAlive( GetFilterUnit() ) and IsUnitEnemy( GetFilterUnit(), GetOwningPlayer( Caster ) )
endfunction
private function GroupFilter takes unit caster returns boolexpr
set Caster = caster
return EnemyFilter
endfunction
private function Actions takes nothing returns nothing
local unit caster = GetEventDamageSource()
local integer level = GetUnitAbilityLevel(caster, SpellId)
local real radius = 100 + level * 25
local real damage = 10 + 25 * level
local integer chance = 19 + level * 1
local integer random
local group g
local unit u
set random = GetRandomInt(1, 100)
if chance > random then
set g = CreateGroup()
call GroupEnumUnitsInRange(g, GetUnitX(caster),GetUnitY(caster), radius, GroupFilter( caster ))
loop
set u = FirstOfGroup(g)
exitwhen u == null
call UnitDamageTarget( caster, u, damage, false, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, null)
call DestroyEffect( AddSpecialEffectTarget ( "Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl", u, "origin" ) )
call GroupRemoveUnit(g, u)
endloop
call DestroyGroup(g)
endif
set g = null
set caster = null
endfunction
private function Conditions takes nothing returns boolean
return GetEventDamage() > 0.00 and not IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) and GetUnitAbilityLevel(GetEventDamageSource(), SpellId) > 0
endfunction
private function OnInit takes nothing returns nothing
set gg_trg_Retrebiution = CreateTrigger( )
//call DisableTrigger( gg_trg_Retrebiution )
call TriggerAddCondition( gg_trg_Retrebiution, Condition( function Conditions ) )
call TriggerAddAction( gg_trg_Retrebiution, function Actions )
set EnemyFilter = Filter( function EnemyFilterFunc )
endfunction
endscope
Принятый ответ
Перед тем как нанести урон отключай тригер gg_trg_Retrebiution, после включай его
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Borodach
Если switchDamage == true
switchDamage = false
return
А перед нанесением урона ставить switchDamage = true