Ok damage stacking problem

killingdyl

Active Member
Reaction score
6
the damage is stacking over each attack, even though the actions arent activated. so after 4 attacks it does 4 times the damage when its not supposed to.
Spell info: Passive spell that does damage in a line when activated. dealing half to all units behind the main unit.

JASS:
function Conditions takes nothing returns boolean
    return (GetUnitAbilityLevel(GetEventDamageSource(), 'A00B') > 0) and (GetRandomInt(1, 100) < 50)
endfunction

function Trig_Test2_Actions takes nothing returns nothing
    local unit caster = GetEventDamageSource()
    local unit target = GetTriggerUnit()
    local unit dummy
    local unit fog
    local player p = GetOwningPlayer(caster)
    local real x = GetUnitX(caster)
    local real y = GetUnitY(caster)
    local real xx
    local real yy
    local real angle = GetUnitFacing(caster)
    local real damage = 200
    local integer i = 200
    local integer lvl = GetUnitAbilityLevel(caster, 'A00B')
    local group g = CreateGroup()
    local texttag text = CreateTextTag()
    set xx = x + 150 * Cos(angle * bj_DEGTORAD)
    set yy = y + 150 * Sin(angle * bj_DEGTORAD)
    set dummy = CreateUnit(p, 'h00K', xx, yy, angle)
    call KillUnit(dummy)
    call SetUnitAnimationByIndex(caster, 8)
    call UnitDamageTarget(caster, target, damage, true, true, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DEATH, WEAPON_TYPE_WHOKNOWS)
    loop
        exitwhen i > 400
        set xx = x + i * Cos(angle * bj_DEGTORAD)
        set yy = y + i * Sin(angle * bj_DEGTORAD)
        call GroupEnumUnitsInRange(g, xx, yy, 50, null)
        loop
            set fog = FirstOfGroup(g)
            exitwhen fog == null
            if fog == target then
            else
                call UnitDamageTarget(caster, fog, (damage/2), true, true, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DEATH, WEAPON_TYPE_WHOKNOWS)
            endif
            call GroupRemoveUnit(g, fog)
        endloop
        set i = i + 100
    endloop
    call SetTextTagText(text, I2S(R2I(damage)) + "!", 0.025)
    call SetTextTagPosUnit(text, caster, 10)
    call SetTextTagColor(text, 255, 0, 0, 255)
    call SetTextTagVelocity (text, 0.0355 * Cos(90. * bj_DEGTORAD), 0.0355 * Sin(90. * bj_DEGTORAD))
    call SetTextTagVisibility (text, true)
    call SetTextTagFadepoint (text, 2.00)
    call SetTextTagLifespan (text, 2.00)
    call SetTextTagPermanent (text, false)
    set caster = null
    set target = null
    set dummy = null
    set fog = null
    set g = null
    set p = null
    set text = null
endfunction

//===========================================================================
function InitTrig_Test2 takes nothing returns nothing
    local trigger Test2 = CreateTrigger(  )
    call Damage_RegisterEvent(Test2)
    call TriggerAddCondition( Test2, function Conditions )
    call TriggerAddAction( Test2, function Trig_Test2_Actions )
endfunction
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
JASS:
call Damage_EnableEvent(false)
    call UnitDamageTarget(caster, target, damage, true, true, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DEATH, WEAPON_TYPE_WHOKNOWS)
    loop
        exitwhen i > 400
        set xx = x + i * Cos(angle * bj_DEGTORAD)
        set yy = y + i * Sin(angle * bj_DEGTORAD)
        call GroupEnumUnitsInRange(g, xx, yy, 50, null)
        loop
            set fog = FirstOfGroup(g)
            exitwhen fog == null
            if fog == target then
            else
                call UnitDamageTarget(caster, fog, (damage/2), true, true, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DEATH, WEAPON_TYPE_WHOKNOWS)
            endif
            call GroupRemoveUnit(g, fog)
        endloop
        set i = i + 100
    endloop
call Damage_EnableEvent(true)
 

killingdyl

Active Member
Reaction score
6
so wat does turning it off then on do exactly? does it make sure that the trigger only runs once?
 

saw792

Is known to say things. That is all.
Reaction score
280
When you use UnitDamageTarget(...) within the actions of a unit takes damage event this fires the event again which damages the unit which fires the event again which damages the unit...

In this case it is causing the damage to stack progressively more each time. Disabling the event stops the UnitDamageTarget(...) calls from continuing infinitely and thus prevents the stacking behaviour you found.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top