XeNiM666
I lurk for pizza
- Reaction score
- 138
yeah, I have this trigger:
Basically, a 3 second cast time, point-targeted thunder clap spell. After 3 seconds of casting, slows enemies in the targeted AOE, and if the enemy has been hit 6 times (in another spell), it will be entangled..
The Problem is: dummies wont cast the spell!
this part.
I've put in some debug messages and it shows, but they dont cast it. the spell has 0 sec cooldown, 0 mana cost and 99999 cast range.
so i dont see anything wrong with it but it bugs... anyone help?
TIA!
JASS:
scope GlacialBlast initializer onInit
globals
private constant integer SPELL_ID = 039;A00A039;
private constant integer SLOW_ID = 039;A00C039;
private constant integer STUN_ID = 039;A00B039;
private constant real AOE = 200.00
private constant real EFFECT_INTERVAL = 1.00
private constant real CASTING_TIME = 3.00
private constant string CAST_TIME_EFFECT = "war3mapImported\\Shiva039;sEnchantment.mdx"
private constant string DAMAGE_EFFECT = "war3mapImported\\Shiva039;sWrath.mdx"
endglobals
private function Damage_Per_Level takes integer lvl returns real
return 50.00 + ( 50.00 * lvl )
endfunction
private function Conditions takes nothing returns boolean
return GetWidgetLife( GetFilterUnit() ) > 0.408 and IsUnitType( GetFilterUnit(), UNIT_TYPE_FLYING ) == false and IsUnitType( GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE ) == false and IsUnitType( GetFilterUnit(), UNIT_TYPE_STRUCTURE ) == false
endfunction
private struct Cast
unit caster
integer lvl
unit dummy
effect ef
real dmg = 0.00
real maxdmg
real tx
real ty
real t = 0.00
real int = 0.00
static method Time takes nothing returns boolean
local Cast c = KT_GetData()
local unit u = null
local unit d = null
set c.t = c.t + TIMER_PERIOD
set c.dmg = c.dmg + ( c.maxdmg / CASTING_TIME * TIMER_PERIOD )
if c.t < CASTING_TIME and GetUnitCurrentOrder( c.caster ) == OrderId( "frostnova" ) then
if c.t >= c.int then
if c.ef != null then
call DestroyEffect( c.ef )
endif
set c.ef = AddSpecialEffectTarget( CAST_TIME_EFFECT, c.dummy, "origin" )
set c.int = c.int + EFFECT_INTERVAL
endif
elseif c.t >= CASTING_TIME or GetUnitCurrentOrder( c.caster ) != OrderId( "frostnova" ) then
call DestroyEffect( AddSpecialEffectTarget( DAMAGE_EFFECT, c.dummy, "origin" ) )
call GroupEnumUnitsInRange( GROUP, c.tx, c.ty, AOE, Condition( function Conditions ) )
loop
set u = FirstOfGroup( GROUP )
exitwhen u == null
if IsUnitEnemy( u, GetOwningPlayer( c.caster ) ) == true then
call UnitDamageTarget( c.caster, u, c.dmg, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
set d = CreateUnit( GetOwningPlayer( c.caster ), DUMMY, GetUnitX( u ), GetUnitY( u ), 270.00 )
call UnitApplyTimedLife( d, 039;BTLF039;, 1.00 )
call UnitAddAbility( d, SLOW_ID )
call SetUnitAbilityLevel( d, SLOW_ID, c.lvl )
call IssueTargetOrder( d, "slow", u )
if HitNum[ GetUnitId( u ) ] >= 6 then
set d = CreateUnit( GetOwningPlayer( c.caster ), DUMMY, GetUnitX( u ), GetUnitY( u ), 270.00 )
call UnitApplyTimedLife( d, 039;BTLF039;, 1.00 )
call UnitAddAbility( d, STUN_ID )
call SetUnitAbilityLevel( d, STUN_ID, c.lvl )
call IssueTargetOrder( d, "entanglingroots", u )
endif
set d = null
endif
call GroupRemoveUnit( GROUP, u )
endloop
set u = null
call c.destroy()
return true
endif
return false
endmethod
method onDestroy takes nothing returns nothing
call DestroyEffect( .ef )
set .ef = null
set .dummy = null
set .caster = null
endmethod
endstruct
private function GB_Actions takes nothing returns boolean
local Cast c = Cast.create()
set c.caster = GetTriggerUnit()
set c.tx = GetSpellTargetX()
set c.ty = GetSpellTargetY()
set c.dummy = CreateUnit( GetOwningPlayer( c.caster ), DUMMY, c.tx, c.ty, 270.00 )
call UnitApplyTimedLife( c.dummy, 039;BTLF039;, 5.00 )
call SetUnitScale( c.dummy, 1.50, 1.50, 1.50 )
call SetUnitFlyHeight( c.dummy, 50.00, 0.00 )
set c.lvl = GetUnitAbilityLevel( c.caster, SPELL_ID )
set c.maxdmg = Damage_Per_Level( c.lvl )
call KT_Add( function Cast.Time, c, TIMER_PERIOD )
return false
endfunction
private function onInit takes nothing returns nothing
local unit u = CreateUnit( Player( 15 ), DUMMY, 0.00, 0.00, 0.00 )
call UnitAddAbility( u, STUN_ID )
call UnitRemoveAbility( u, STUN_ID )
call UnitAddAbility( u, SLOW_ID )
call UnitRemoveAbility( u, SLOW_ID )
call RemoveUnit( u )
set u = null
call GT_AddStartsEffectAction( function GB_Actions, SPELL_ID )
call Preload( CAST_TIME_EFFECT )
call Preload( DAMAGE_EFFECT )
call PreloadStart()
endfunction
endscope
Basically, a 3 second cast time, point-targeted thunder clap spell. After 3 seconds of casting, slows enemies in the targeted AOE, and if the enemy has been hit 6 times (in another spell), it will be entangled..
The Problem is: dummies wont cast the spell!
JASS:
set d = CreateUnit( GetOwningPlayer( c.caster ), DUMMY, GetUnitX( u ), GetUnitY( u ), 270.00 )
call UnitApplyTimedLife( d, 039;BTLF039;, 1.00 )
call UnitAddAbility( d, SLOW_ID )
call SetUnitAbilityLevel( d, SLOW_ID, c.lvl )
call IssueTargetOrder( d, "slow", u )
if HitNum[ GetUnitId( u ) ] >= 6 then
set d = CreateUnit( GetOwningPlayer( c.caster ), DUMMY, GetUnitX( u ), GetUnitY( u ), 270.00 )
call UnitApplyTimedLife( d, 039;BTLF039;, 1.00 )
call UnitAddAbility( d, STUN_ID )
call SetUnitAbilityLevel( d, STUN_ID, c.lvl )
call IssueTargetOrder( d, "entanglingroots", u )
endif
this part.
I've put in some debug messages and it shows, but they dont cast it. the spell has 0 sec cooldown, 0 mana cost and 99999 cast range.
so i dont see anything wrong with it but it bugs... anyone help?
TIA!