Need Help with Loop! Unitgroup function error

Linconius

New Member
Reaction score
0
SO, I have a unit group, and I used a loop to pick each unit and do the action, and then remove it. But the loop seems to be endless once active, and doesn't reach the ext actions.


DUDamage just creates a dummy to damage the picked unit, and h is the distance from the unit to the centre of the AoE.
Code:
        call GroupEnumUnitsInRange(g, FFData.TargetX, FFData.TargetY, 250, null)
        loop
            //call GroupRefresh(g)
            set u = FirstOfGroup(g)
            exitwhen u == null
            if not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MECHANICAL) and IsUnitAlive(u) and not IsUnitAlly(u, FFData.TrigPlayer) then
                set h = GetDistanceXY(GetUnitX(u) - FFData.TargetX, GetUnitY(u) - FFData.TargetY)
                set i = i + 1
                if FFData.Level == 1 then
                    if h <= 100.00 then
                        set d = 400.00
                    else
                        set d = 400.00 - (1.33 * (h - 100))
                    endif
                else
                    if FFData.Level == 2 then
                        if h <= 100.00 then
                            set d = 600.00
                        else
                            set d = 600.00 - (2 * (h - 100))
                        endif
                    else
                        if h <= 100.00 then
                            set d = 800.00
                        else
                            set d = 800.00 - (2.66 * (h - 100))
                        endif
                    endif
                endif
            endif
            call DUDamage(FFData.TrigPlayer, u, 1.00, d, false, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS)
            call GroupRemoveUnit(g, u)
        endloop
 

GFreak45

I didnt slap you, i high 5'd your face.
Reaction score
130
JASS:
        call GroupEnumUnitsInRange(g, FFData.TargetX, FFData.TargetY, 250, null)
        loop
            //call GroupRefresh(g) &lt;------------------------ Whats this?
            set u = FirstOfGroup(g)
            exitwhen u == null
            if not IsUnitType(u, UNIT_TYPE_STRUCTURE) and /*
             */not IsUnitType(u, UNIT_TYPE_MECHANICAL) and /*
             */not IsUnitAlly(u, FFData.TrigPlayer) and /*
             */not GetUnitState(u, UNIT_STATE_LIFE) &lt;= 0  then //&lt;----- this is to make it more read-able
                set h = SquareRoot(Pow(GetUnitX(u) - FFData.TargetX, 2) + Pow(GetUnitY(u) - FFData.TargetY, 2))
                set i = i + 1
                if h &lt;= 100.00 then
                    set d = 200 * I2R(FFData.Level + 1)
                else//           &lt;---------------- here we do the math for each level rather than use ifs
                    set d = (200 * I2R(FFData.Level + 1)) - (2 * I2R(FFData.Level + 1) / 3 * (h - 100))
                endif
            endif
            call DUDamage(FFData.TrigPlayer, u, 1.00, d, false, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS)//&lt;------------------------------------------------ is this adding the unit to the group again? although i doubt it
            call GroupRemoveUnit(g, u)
        endloop


thats a slightly more optimized version, you could add a condition that FFData.Level <= 3 and >= 1 if you wanted, but this way there arent a trillion ifs and its faster
post the whole code please, i dont see a problem here...
 

Linconius

New Member
Reaction score
0
Wow, that is SO much neater :) ty for that.

GroupRefresh just optimises the group, it removed some errors that can occur when removing units from groups.

The problem I get with this code is when DUDamage is called. DUDamage creats a dummy, at the location of unit u, with an expiration timer, and damages unit u. I error checked this code using messages, and the loop freezes at that call.

I will post the full code when I can, but right now I dont have a computer which can open World editor... :-O

TY for the help :D
 
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