wraithseeker
Tired.
- Reaction score
- 122
JASS:
scope deathpact initializer Init
globals
private constant integer SPELL = 039;A00P039;
private constant string EFFECT = "Abilities\\Spells\\Other\\Doom\\DoomTarget.mdl"
private sound SLEEP
private constant string GHOST = "Objects\\Spawnmodels\\Undead\\UndeadDissipate\\UndeadDissipate.mdl"
private constant string UDEATH = "Objects\\Spawnmodels\\Undead\\UDeathMedium\\UDeath.mdl"
private boolexpr b
endglobals
private struct data
static data temp
unit caster
unit target
timer t
lightning p
integer ticks
implement AutoData
static method create takes nothing returns data
local data d = data.allocate()
set d.caster = GetTriggerUnit()
set d.target = GetSpellTargetUnit()
set d.t = NewTimer()
set d.ticks = 0
call StunUnit(d.target,3,false)
call AddTimedEffectTarget(EFFECT,d.target,"origin",9999)
return d
endmethod
method onDestroy takes nothing returns nothing
call ReleaseTimer(.t)
call DestroyLightning(.p)
endmethod
endstruct
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SPELL
endfunction
private function CheckEnemies takes nothing returns boolean
local data d = data.temp
return IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(d.caster)) and GetFilterUnit() != d.caster and GetWidgetLife(GetFilterUnit()) > 0.0451
endfunction
private function Loop takes nothing returns nothing
local data d = GetTimerData(GetExpiredTimer())
local real TLife = GetWidgetLife(d.target) * 0.10
local real TMana = GetUnitState(d.target,UNIT_STATE_MANA) *0.10
local real x = GetUnitX(d.target)
local real y = GetUnitY(d.target)
local unit u
call DestroyEffect(AddSpecialEffect(GHOST,x,y))
call SetWidgetLife(d.caster,GetWidgetLife(d.caster)+ TLife)
call SetUnitState(d.caster,UNIT_STATE_MANA,GetUnitState(d.caster,UNIT_STATE_MANA) + TMana)
call SetWidgetLife(d.target,GetWidgetLife(d.target)-TLife)
call SetUnitState(d.target,UNIT_STATE_MANA,GetUnitState(d.target,UNIT_STATE_MANA) - TMana)
set d.ticks = d.ticks + 1
if d.ticks == 3 then
call DestroyEffect(AddSpecialEffect(UDEATH,x,y))
call SetUnitOwner(d.target,GetOwningPlayer(d.caster),true)
call UnitApplyTimedLife(d.target,039;BUan039;,10)
call DelayedAttackSpeed(d.target,100,10)
set d.temp = d
call GroupEnumUnitsInRange(ENUM_GROUP,x,y,400,b)
loop
set u = FirstOfGroup(ENUM_GROUP)
exitwhen u == null
call StunUnit(u,GetRandomReal(2,3),false)
call GroupRemoveUnit(ENUM_GROUP,u)
endloop
endif
endfunction
private function Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local unit t = GetSpellTargetUnit()
local data d
local integer id = GetUnitId(u)
if GetTriggerEventId() == EVENT_PLAYER_UNIT_SPELL_EFFECT then
call StartSound(SLEEP)
call KillSoundWhenDone(SLEEP)
set d = data.create()
set d.p = AddLightning("AFOD",true,GetUnitX(u),GetUnitY(u),GetUnitX(t),GetUnitY(t))
set data<u> = d
call SetTimerData(d.t,d)
call TimerStart(d.t,1,true,function Loop)
set u = null
set t = null
elseif GetTriggerEventId() == EVENT_PLAYER_UNIT_SPELL_ENDCAST then
set d = data<u>
call StopStun(d.target)
call d.destroy()
set u = null
endif
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_ENDCAST)
call TriggerAddAction( t, function Actions )
call TriggerAddCondition(t,Condition(function Conditions))
set SLEEP = CreateSoundFromLabel("SleepBirth1",false,true,true,10,10)
set b = Filter(function CheckEnemies)
endfunction
endscope
</u></u>
Tell me why does the sound not play?