WolfieeifloW
WEHZ Helper
- Reaction score
- 372
I have a spell cast by a dummy that gives a debuff that deals damage over time.
The unit dies from this debuff and then my "EVENT_PLAYER_UNIT_DEATH" function doesn't seem to run...
It's quite a long trigger but here it is:
The unit dies from this debuff and then my "EVENT_PLAYER_UNIT_DEATH" function doesn't seem to run...
It's quite a long trigger but here it is:
JASS:
scope DoomsDay initializer DDInit
// +-------------------------------------+
// | -=-=- MODIFY HERE -=-=- |
// | -=-=- MODIFY HERE -=-=- |
// | -=-=- MODIFY HERE -=-=- |
// +-------------------------------------+
globals
private constant integer DD_ID = 039;A000039;
private constant integer DOT_ID = 039;A002039;
private constant integer DUM_ID = 039;n000039;
private constant integer SFXU_ID = 039;n001039;
private constant integer DOT_BUFF = 039;B000039;
private constant real MAXAOE = 600
private constant real FLAMEAOE = 150
private constant real EXPRADIUS = 300
private constant string DOTORDER = "acidbomb"
private constant attacktype ATKTYPE = ATTACK_TYPE_HERO
private constant damagetype DMGTYPE = DAMAGE_TYPE_FIRE
private constant string DDSFX = "Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl"
private constant string DDATTACH = "origin"
endglobals
private function FLAMEDMG takes integer level returns integer
return (level * 200)
endfunction
private function NUMFLAMES takes integer level returns integer
return (level * 2) + 4
endfunction
private function EXPLODEDMG takes integer level returns integer
return (level * 100)
endfunction
// +----------------------------------------------+
// | -=-=- NO TOUCHIE PAST HERE -=-=- |
// | -=-=- NO TOUCHIE PAST HERE -=-=- |
// | -=-=- NO TOUCHIE PAST HERE -=-=- |
// +----------------------------------------------+
private function DDConditions takes nothing returns boolean
return (GetSpellAbilityId() == DD_ID)
endfunction
private function FlameConditions takes nothing returns boolean
return (IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false) and (GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) >= 1) and (IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit()))) and (GetUnitAbilityLevel(GetFilterUnit(), DOT_BUFF) <= 0)
endfunction
private function FlameActions takes nothing returns nothing
local unit eu = GetEnumUnit()
local unit u
set u = CreateUnit(GetOwningPlayer(GetTriggerUnit()), DUM_ID, GetUnitX(eu), GetUnitY(eu), bj_UNIT_FACING)
call UnitAddAbility(u, DOT_ID)
call SetUnitAbilityLevel(u, DOT_ID, GetUnitAbilityLevel(GetTriggerUnit(), DD_ID))
call IssueTargetOrder(u, DOTORDER, eu)
call UnitDamageTarget(u, eu, FLAMEDMG(GetUnitAbilityLevel(GetTriggerUnit(), DD_ID)), true, true, ATKTYPE, DMGTYPE, WEAPON_TYPE_WHOKNOWS)
call UnitApplyTimedLife(u, 039;BTLF039;, 2.00)
set u = null
set eu = null
endfunction
private function DDActions takes nothing returns nothing
local unit tu = GetTriggerUnit()
local real dist = GetRandomReal(0, MAXAOE)
local real angle = GetRandomReal(0, 360)
local location tuloc = GetUnitLoc(tu)
local group flamed = CreateGroup()
local integer i = 0
local unit sfxu
loop
exitwhen i == NUMFLAMES(GetUnitAbilityLevel(tu, DD_ID))
set sfxu = CreateUnit(GetOwningPlayer(tu), SFXU_ID, GetLocationX(tuloc) + dist * Cos(angle * bj_DEGTORAD), GetLocationY(tuloc) + dist * Sin(angle * bj_DEGTORAD), bj_UNIT_FACING)
call GroupEnumUnitsInRange(flamed, GetUnitX(sfxu), GetUnitY(sfxu), FLAMEAOE, Condition(function FlameConditions))
call ForGroup(flamed, function FlameActions)
call GroupClear(flamed)
set i = i + 1
endloop
call RemoveLocation(tuloc)
call DestroyGroup(flamed)
set tuloc = null
set sfxu = null
set tu = null
endfunction
//====================================================================================================
private function ExplodeConditions takes nothing returns boolean
return (GetUnitAbilityLevel(GetTriggerUnit(), DOT_BUFF) > 0)
endfunction
private function ExpGrpConditions takes nothing returns boolean
return (IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false) and (GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) >= 1) and (IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetKillingUnit())))
endfunction
private function ExpGrpActions takes nothing returns nothing
local unit eu = GetEnumUnit()
local unit ku = GetKillingUnit()
local unit u
set u = CreateUnit(GetOwningPlayer(ku), DUM_ID, GetUnitX(eu), GetUnitY(eu), bj_UNIT_FACING)
call UnitDamageTarget(u, eu, EXPLODEDMG(GetUnitAbilityLevel(ku, DD_ID)), true, false, ATKTYPE, DMGTYPE, WEAPON_TYPE_WHOKNOWS)
call UnitApplyTimedLife(u, 039;BTLF039;, 1.00)
set u = null
set ku = null
set eu = null
endfunction
private function ExplodeActions takes nothing returns nothing
local unit du = GetDyingUnit()
local group exploded = CreateGroup()
local effect sfx
local unit u
set u = CreateUnit(GetOwningPlayer(GetKillingUnit()), DUM_ID, GetUnitX(du), GetUnitY(du), bj_UNIT_FACING)
set sfx = AddSpecialEffect(DDSFX, GetUnitX(du), GetUnitY(du))
call GroupEnumUnitsInRange(exploded, GetUnitX(u), GetUnitY(u), EXPRADIUS, Condition(function ExpGrpConditions))
call UnitApplyTimedLife(u, 039;BTLF039;, 1.00)
call ForGroup(exploded, function ExpGrpActions)
call DestroyEffect(sfx)
call GroupClear(exploded)
call DestroyGroup(exploded)
set u = null
set du = null
endfunction
//====================================================================================================
private function DDInit takes nothing returns nothing
local trigger t = CreateTrigger()
local integer i = 0
loop
call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set i = i + 1
exitwhen i == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(t, Condition(function DDConditions))
call TriggerAddAction(t, function DDActions)
set t = CreateTrigger()
set i = 0
loop
call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_DEATH, null)
set i = i + 1
exitwhen i == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(t, Condition(function ExplodeConditions))
call TriggerAddAction(t, function ExplodeActions)
endfunction
endscope