That AoE Astral Imprisonment (Again) (Re-made, hope it's cleaner and less leaky now.)

LearningCode

New Member
Reaction score
24
Yea..
I re-made it.
But this time, it's a new problem, hence, the new thread.

This time, When I enable the trigger, All my other triggers get disabled.
JASSHelper doesn't complain, but something is disabling every one of my triggers.

When I disable the AoE Astral Imprisonment trigger, all my other triggers work as though nothing bad has happened o.0

I am so confused =/

Neater version of trigger coming up:

JASS:

scope AstralCuratio initializer AstralTrig

private struct A
   private static A data = 0
   private static A data2 = 0
   private static hashtable ht = InitHashtable()
   unit caster
   unit hide
   integer A029Level
   integer INT
   integer NumberInGroup
   integer ArrayAmount
   integer ExitLoop
   group Hide
   group UnHide
   effect array AC[400]
   real TargetX
   real TargetY
   real Range
   real HP
   real damage
   timer t

   static method AstralUnHide takes nothing returns nothing
      local A a = A.data2
      local integer i
      set a.hide = GetEnumUnit()
      
      loop
      exitwhen i == a.ArrayAmount + 1
         if a.AC<i> != null then
            call DestroyEffect(a.AC<i>)
            set a.AC<i> = null
         endif
      set i = i+1
      endloop
      call ShowUnit(a.hide, true)
      call UnitDamageTarget(a.caster, a.hide, a.damage, false, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_MAGIC, null)
      call PauseUnit(a.hide, false)
      set a.hide = null
   endmethod
   
   static method AstralTimer takes nothing returns nothing
      local A a = LoadInteger(A.ht, GetHandleId(GetExpiredTimer()), 0)
      set A.data2 = a
      call ForGroup(a.UnHide, function A.AstralUnHide)
      call GroupClear(a.UnHide)
      call DestroyGroup(a.UnHide)
      set a.UnHide = null
   endmethod
   
   static method AstralGroup takes nothing returns nothing
      local A a = A.data
      local real x
      local real y
      set a.hide = GetEnumUnit()
      set x = GetUnitX(a.hide)
      set y = GetUnitY(a.hide)
      
      if IsUnitEnemy(a.hide, GetOwningPlayer(a.caster)) == true and IsUnitInGroup(a.hide, a.UnHide) == false then
         call PauseUnit(a.hide, true)
         call ShowUnit(a.hide, false)
         loop
         exitwhen a.ArrayAmount == 400
            if a.AC[a.ArrayAmount] == null then
               set a.AC[a.ArrayAmount] = AddSpecialEffect(&quot;Abilities\\Spells\\Undead\\ReplenishHealth\\ReplenishHealthCasterOverhead.mdl&quot;, x, y)
               set a.NumberInGroup = a.NumberInGroup + 1
               set a.ExitLoop = 1
            endif
         exitwhen a.ExitLoop == 1
         endloop
         set a.ExitLoop = 0
         call GroupAddUnit(a.UnHide, a.hide)
      endif
      set a.hide = null
   endmethod
   
   
   static method AstralAct takes nothing returns nothing
      local A a = A.allocate()
      set a.caster = GetTriggerUnit()
      set a.A029Level = GetUnitAbilityLevel(a.caster, &#039;A029&#039;)
      set a.INT = GetHeroInt(a.caster, true)
      set a.NumberInGroup = 0
      set a.ArrayAmount = 0
      set a.ExitLoop = 0
      set a.Hide = CreateGroup()
      set a.UnHide = CreateGroup()
      set a.TargetX = GetSpellTargetX()
      set a.TargetY = GetSpellTargetY()
      set a.Range = a.A029Level * 100.00
      set a.damage = (a.A029Level * 0.1) * a.NumberInGroup
      set a.HP = GetUnitState(a.caster, UNIT_STATE_LIFE) + a.damage
      set a.t = CreateTimer()
      set A.data = a
      
      call GroupEnumUnitsInRange(a.Hide, a.TargetX, a.TargetY, a.Range, null)
      call ForGroup(a.Hide, function A.AstralGroup)
      call GroupClear(a.Hide)
      call DestroyGroup(a.Hide)
      set a.Hide = null
      
      call SetUnitState(a.caster, UNIT_STATE_LIFE, a.HP)
      
      call TimerStart(a.t, 4.00, false, function A.AstralTimer)
      call SaveInteger(a.ht, GetHandleId(a.t), 0, a)
      
   endmethod
   
endstruct

private function AstralCond takes nothing returns boolean
   return GetSpellAbilityId() == &#039;A029&#039;
endfunction

private function AstralTrig takes nothing returns nothing
   local trigger t = CreateTrigger()
   local integer i
   loop
   exitwhen i == 8
   call TriggerRegisterPlayerUnitEvent( t, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
   set i = i+1
   endloop
   call TriggerAddCondition( t, Condition(function AstralCond))
   call TriggerAddAction( t, function A.AstralAct)
endfunction

endscope
</i></i></i>
 

Jesus4Lyf

Good Idea™
Reaction score
397
AoE astral imprisonment?
JASS:
struct AoEAstral extends SpellStruct
    implement SpellStruct
    private group g
    private method hide takes unit u returns nothing
        call ShowUnit(u,false)
    endmethod
    private method show takes unit u returns nothing
        call ShowUnit(u,true)
    endmethod
    private method onWait takes nothing returns nothing
        call this.forGroup(this.g,thistype.show)
        call DestroyGroup(this.g)
        call this.stopTimer(thistype.onWait)
    endmethod
    private method filter takes unit u returns boolean
        return GetWidgetLife(u)&gt;0 // should replace with UnitAlive.
    endmethod
    private method onEffect takes nothing returns nothing
        set this.g=CreateGroup()
        call this.enumUnitsInAoE(this.g,thistype.filter)
        call this.forGroup(this.g,thistype.hide)
        call this.startTimer(thistype.onWait,this.level*0.5+0.5)
    endmethod
    private static method onInit takes nothing returns nothing
        set thistype.abil=&#039;Axxx&#039;
        set thistype.defaultAoE=300.0
    endmethod
endstruct

Using SpellStruct (freehanded that code).
 

LearningCode

New Member
Reaction score
24
Yea,

Unit casts spell at a point
All enemy units within a certain range of that point become hidden and paused
A certain amount of time later, the units are un-hidden and unpaused xD

oo..
A system developed by you..
I'm gonna' try it, thanks
 
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