dummies wont cast spell

XeNiM666

I lurk for pizza
Reaction score
138
yeah, I have this trigger:
JASS:
scope GlacialBlast initializer onInit

    globals
        private constant integer SPELL_ID = 'A00A'
        
        private constant integer SLOW_ID = 'A00C'
        private constant integer STUN_ID = 'A00B'
        
        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\\Shiva'sEnchantment.mdx"
        private constant string DAMAGE_EFFECT = "war3mapImported\\Shiva'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, 'BTLF', 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, 'BTLF', 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, 'BTLF', 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, 'BTLF', 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, 'BTLF', 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!
 

FhelZone

Have a drink of a nice cold mellowberry juice!
Reaction score
103
Have you checked the dummy itself? Mana cost? Bakswing Point?
 

XeNiM666

I lurk for pizza
Reaction score
138
yes, 0.000 cast backswing, 100000 maximum mana, 1000 mana regen.
spell has the correct target's allowed, 0 mana cost, cd and 99999 cast range..
 

FhelZone

Have a drink of a nice cold mellowberry juice!
Reaction score
103
Shouldn't you at least have a value for the backswing point, as far as I remember the backswing point in 0 made my dummy not to ast any spell.
 

XeNiM666

I lurk for pizza
Reaction score
138
LOL, mapsize is too big.. :(

OK, I tried to rewrite the whole thing, same problem, only it casts the dummy spells RARELY..
 

FhelZone

Have a drink of a nice cold mellowberry juice!
Reaction score
103
Set the backswing to 0.001 and the turn rate to .10 thats my setting for my dummy. 0.001 for he damage point too.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top