vJASS Spell Doesn't Work

Blackrage

Ultra Cool Member
Reaction score
25
Heres a spell that is like Tinki's GUI Time Stop, but its in vJASS and actually makes a effect at the enemy units inside the AoE.

Time Stop - Freezes the passage of time for enemy units inside a AoE, causing them to be unable to move.

The problem is, it doesnt work. The AbilId is correct and I've checked the ability a bunch of times now.. If anyone helps, +rep.
JASS:
    scope TimeStop
    globals
        private constant integer AbilId = 'A00B'
    endglobals
    
    private function Conditions takes nothing returns boolean
        return GetSpellAbilityId() == AbilId
    endfunction
    
    private function TimeStopConditions takes nothing returns boolean
        return IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE) == false and IsUnitType(GetFilterUnit(),UNIT_TYPE_DEAD) == false
    endfunction
    
    private function Callback takes nothing returns nothing
    endfunction
    
    private function TimeStop_Actions takes nothing returns nothing
        local group g
        local group g2
        local unit c = GetTriggerUnit()
        local unit PickedUnit
        local location Loc = GetSpellTargetLoc()
        local real x = GetLocationX(Loc)
        local real y = GetLocationY(Loc)
        local real PickedUnitX
        local real PickedUnitY
        local integer Level = GetUnitAbilityLevel(c, AbilId)
        
        call GroupEnumUnitsInRange(g, x, y, 200,Condition(function TimeStopConditions))
        loop
            set PickedUnit = FirstOfGroup(g)
            exitwhen PickedUnit == null
            if IsUnitEnemy(PickedUnit,GetOwningPlayer(c)) then
                set PickedUnitX = GetUnitX(PickedUnit)
                set PickedUnitY = GetUnitY(PickedUnit)
                call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\WingedSerpentMissile\\WingedSerpentMissile.mdl", PickedUnitX, PickedUnitY))
                call SetUnitTimeScale(PickedUnit, 0)
                call PauseUnit(PickedUnit, true)
                call GroupAddUnit(g2, PickedUnit)
            endif
            call GroupRemoveUnit(g, PickedUnit)
        endloop
        set PickedUnit = null
        call TriggerSleepAction(2+Level)
        call ForGroup(g2,function Callback)
        loop
            set PickedUnit = FirstOfGroup(g2)
            exitwhen PickedUnit == null
            set PickedUnitX = GetUnitX(PickedUnit)
            set PickedUnitY = GetUnitY(PickedUnit)
            call SetUnitTimeScale(PickedUnit, 100)
            call PauseUnit(PickedUnit, false)
            call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\WingedSerpentMissile\\WingedSerpentMissile.mdl", PickedUnitX, PickedUnitY))
            call GroupRemoveUnit(g2, PickedUnit)
        endloop
        set PickedUnit = null
    endfunction
//===========================================================================
    function InitTrig_Time_Stop takes nothing returns nothing
        local trigger Time_Stop = CreateTrigger(  )
        call TriggerRegisterAnyUnitEventBJ(Time_Stop, EVENT_PLAYER_UNIT_SPELL_EFFECT)
        call TriggerAddCondition( Time_Stop,Condition(function Conditions))
        call TriggerAddAction( Time_Stop, function TimeStop_Actions )
    endfunction
endscope
 

Joker(Div)

Always Here..
Reaction score
86
Try putting BJDebug msgs around the code to see where its stopping.

p.s. Your method for this spell is terrible. Stay away from TriggerSleepAction and use timers!
 

cr4xzZz

Also known as azwraith_ftL.
Reaction score
51
You never create group g and group g2, plus you have no actions in Callback function.

> if IsUnitEnemy(PickedUnit,GetOwningPlayer(c)) then
Instead, why not put this in the TimeStopConditions function?

You need to remove your location and group at the end or it will leak. :)

> Stay away from TriggerSleepAction and use timers!
True, but in this situation (2+ seconds wait) TriggerSleepAction is fine. No need to create a struct, store data and such...

Here's your code. It should work now.. Haven't tested it.
JASS:

scope TimeStop

globals
    private constant integer AbilId = 'A00B'
endglobals
    
private function Conditions takes nothing returns boolean
    return GetSpellAbilityId() == AbilId
endfunction
    
private function TimeStopConditions takes nothing returns boolean
    return IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE) == false and IsUnitType(GetFilterUnit(),UNIT_TYPE_DEAD) == false and IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(GetTriggerUnit())) == true
endfunction

private function Actions takes nothing returns nothing
    local group g = CreateGroup()
    local group g2 = CreateGroup()
    local unit c = GetTriggerUnit()
    local unit pickedunit
    local location loc = GetSpellTargetLoc()
    local real x
    local real y
    local integer level = GetUnitAbilityLevel(c, AbilId)
    call GroupEnumUnitsInRangeOfLoc(g, loc, 200,Condition(function TimeStopConditions))
    call RemoveLocation(loc)
    loop
        set pickedunit = FirstOfGroup(g)
        exitwhen pickedunit == null
        set x = GetUnitX(pickedunit)
        set y = GetUnitY(pickedunit)
        call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\WingedSerpentMissile\\WingedSerpentMissile.mdl", x, y))
        call SetUnitTimeScale(pickedunit, 0)
        call PauseUnit(pickedunit, true)
        call GroupAddUnit(g2, pickedunit)
        call GroupRemoveUnit(g, pickedunit)
    endloop
    call DestroyGroup(g)
    call TriggerSleepAction(2+level)
    loop
        set pickedunit = FirstOfGroup(g2)
        exitwhen pickedunit == null
        set x = GetUnitX(pickedunit)
        set x = GetUnitY(pickedunit)
        call SetUnitTimeScale(pickedunit, 100)
        call PauseUnit(pickedunit, false)
        call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\WingedSerpentMissile\\WingedSerpentMissile.mdl", x, y))
        call GroupRemoveUnit(g2, pickedunit)
    endloop
    call DestroyGroup(g2)
    set pickedunit = null
    set c = null
     set loc = null
    set g = null
     set g2 = null
endfunction

function InitTrig_Time_Stop takes nothing returns nothing
    local trigger trig = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(trig, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(trig,Condition(function Conditions))
    call TriggerAddAction(trig, function Actions)
endfunction

endscope
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top