HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

I Need Help About Whirlwind Charge Move

01-24-2017, 05:46 AM#1
Royalflare
Collapse JASS:

globals
hashtable Ae=null
trigger gg_trg_Whirl_Wind=null
endglobals
function Trig_Whirl_Wind_Conditions takes nothing returns boolean
    return GetSpellAbilityId()=='A005'
endfunction
function WhirlWind takes nothing returns nothing
    local timer t=GetExpiredTimer()
    local unit caster=LoadUnitHandle(Ae,(StringHash(I2S(GetHandleId((t))))),StringHash("caster"))
    local real angle=LoadReal(Ae,(StringHash(I2S(GetHandleId((t))))),StringHash("Angle"))
    local real cx=LoadReal(Ae,(StringHash(I2S(GetHandleId((t))))),StringHash("cx"))
    local real cy=LoadReal(Ae,(StringHash(I2S(GetHandleId((t))))),StringHash("cy"))
    local group OldTargets=LoadGroupHandle(Ae,(StringHash(I2S(GetHandleId((t))))),StringHash("OldTargets"))
    local group NewTargets=LoadGroupHandle(Ae,(StringHash(I2S(GetHandleId((t))))),StringHash("NewTargets"))
    local unit group_unit=null
    local player p=null
    local integer damage=0

    if( GetUnitCurrentOrder(caster)==String2OrderIdBJ("Cyclone"))then
        set p=GetOwningPlayer(caster)
        call GroupEnumUnitsInRange(NewTargets,cx,cy,600.00,null)
        set damage=100*GetUnitAbilityLevel(caster,'A005')
        call GroupRemoveGroup(OldTargets,NewTargets)
        call GroupAddGroup(NewTargets,OldTargets)
        loop
            set group_unit=FirstOfGroup(NewTargets)
            exitwhen group_unit==null
            if( GetWidgetLife(group_unit)>0.405 and IsUnitEnemy(group_unit,p) and IsUnitType(group_unit, UNIT_TYPE_STRUCTURE)==false) then
                call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Stampede\\StampedeMissileDeath.mdl",GetUnitX(group_unit),GetUnitY(group_unit)))
                call UnitDamageTarget(caster,group_unit,(I2R(GetHeroAgi(caster,true))*(30.00*I2R(GetUnitAbilityLevel(caster,'A005')))),true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_ENHANCED,WEAPON_TYPE_WHOKNOWS)
            endif
            call GroupRemoveUnit(NewTargets,group_unit)
        endloop
        set angle =LoadReal(Ae,(StringHash(I2S(GetHandleId((t))))),StringHash("angle"))
        set cx = cx + 25 * Cos( angle )
        set cy = cy + 25 * Sin( angle )
        if(IsTerrainPathable(cx,cy,PATHING_TYPE_WALKABILITY)==false) and (IsTerrainPathable(cx,cy,PATHING_TYPE_FLYABILITY)==false) then
            call SetUnitX(caster,cx)
            call SetUnitY(caster,cy)
            call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl",cx,cy))
        endif
    else
        call DestroyGroup(OldTargets)
        call DestroyGroup(NewTargets)
        set OldTargets=null
        set NewTargets=null
        call SetUnitTimeScale(caster,1.00)
        call PauseTimer(t)
        call DestroyTimer(t)
        call FlushChildHashtable(Ae,GetHandleId(t))
    endif
        set t=null
        set caster=null
        set OldTargets=null
        set NewTargets=null
endfunction
function Trig_Whirl_Wind_Actions takes nothing returns nothing
    local unit caster = GetTriggerUnit()
    local location tp = GetSpellTargetLoc()
    local real cx = GetUnitX(caster)
    local real cy = GetUnitY(caster)
    local real tx = GetLocationX(tp)
    local real ty = GetLocationY(tp)
    local real angle =Atan2(ty-cy,tx-cx)
    local group NewTarget = CreateGroup()
    local group OldTarget = CreateGroup()
    local timer t
    call SetUnitTimeScale(caster,2.00)
    set t=CreateTimer()
    call SaveUnitHandle(Ae,(StringHash(I2S(GetHandleId((t))))),StringHash("caster"),caster)
    call SaveReal(Ae,(StringHash(I2S(GetHandleId((t))))),StringHash("angle"),angle)
    call SaveReal(Ae,(StringHash(I2S(GetHandleId((t))))),StringHash("cx"),cx)
    call SaveReal(Ae,(StringHash(I2S(GetHandleId((t))))),StringHash("cy"),cy)
    call SaveGroupHandle(Ae,(StringHash(I2S(GetHandleId((caster))))),StringHash("NewTargets"),NewTarget)
    call SaveGroupHandle(Ae,(StringHash(I2S(GetHandleId((caster))))),StringHash("OldTargets"),OldTarget)
    call TimerStart(t,0.03,true,function WhirlWind)
    call RemoveLocation(tp)
    set t=null
    set tp=null
endfunction
function InitTrig_Whirl_Wind takes nothing returns nothing
    set gg_trg_Whirl_Wind=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Whirl_Wind,EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(gg_trg_Whirl_Wind,Condition(function Trig_Whirl_Wind_Conditions))
    call TriggerAddAction(gg_trg_Whirl_Wind, function Trig_Whirl_Wind_Actions)
endfunction

I have this spell that moves a Hero periodically to a SpellTarget Location, picks enemy units around unit nears by, dealing damage to them, removing them from New Group, and adding them to Old group,so that they won't get damaged again times,Then Clear Hashtable and All Variable to avoid Leaks.
But When I Test This Ability In Game,This Spell Doesn't Have Any Damage Effect,Could Anyone Tell Me Why? I am Very Noobs in Jass,So Please Help Me!