How to prevent infinite order loop?

LurkerAspect

Now officially a Super Lurker
Hi there, this time I have a really aggravating problem that's refusing all my attempts to fix it.

Basically I'm making a fear system, whereby a unit who is feared will ignore orders from it's controlling player, and walk around randomly. I've set it up so that it theoretically should work, but I can't prevent an infinite order loop when I order the unit to wander around.

Here's the code:
JASS:
scope Fear initializer init

globals
    private constant integer ABILCODE = 'Aslo'
    private constant integer BUFFCODE = 'B005'
    private constant real MOVE_INTERVAL = 1
    private constant real MOVE_AREA = 300
    
    private integer I = 0
    private unit array UNIT
    private real array MOVE_X
    private real array MOVE_Y
    private timer TIMER = CreateTimer()
    private boolean DENY = false //previous attempt at solving the problem; booleans in the conditions don't work.
    private trigger ORDER_DENIER = CreateTrigger() //I thought if I made this a trigger I could enable/disable, it would fix my problem... NOT
endglobals

private function Callback takes nothing returns nothing
    local integer i = 1
    local real r = GetRandomReal(0,360)
    
    //call DisableTrigger(ORDER_DENIER)
    loop
        exitwhen i > I
        if GetUnitAbilityLevel(UNIT<i>,BUFFCODE) == 0 then
            set UNIT<i> = UNIT<i>
            set MOVE_X<i> = MOVE_X<i>
            set MOVE_Y<i> = MOVE_Y<i>
            set I = I-1
            set i = i-1
            call BJDebugMsg(&quot;unit released&quot;)
        else
            set MOVE_X<i> = GetUnitX(UNIT<i>)+MOVE_AREA*Cos(r)
            set MOVE_Y<i> = GetUnitY(UNIT<i>)+MOVE_AREA*Sin(r)
            call IssuePointOrder(UNIT<i>,&quot;patrol&quot;,MOVE_X<i>,MOVE_Y<i>)
        endif
        set i = i+1
    endloop
    
    //call EnableTrigger(ORDER_DENIER)
    if I == 0 then
        call PauseTimer(TIMER)
        call BJDebugMsg(&quot;timer paused&quot;)
    endif
endfunction

private function Actions takes nothing returns nothing
    local unit u = GetSpellTargetUnit()
    local real r = GetRandomReal(0,360)
    
    //call DisableTrigger(ORDER_DENIER)
    set I = I+1
    set UNIT<i> = u
    set MOVE_X<i> = GetUnitX(u)+MOVE_AREA*Cos(r)
    set MOVE_Y<i> = GetUnitY(u)+MOVE_AREA*Sin(r)
    call IssuePointOrder(u,&quot;patrol&quot;,MOVE_X<i>,MOVE_Y<i>)
    //call EnableTrigger(ORDER_DENIER)
    
    if I == 1 then
        call TimerStart(TIMER,MOVE_INTERVAL,true,function Callback)
    endif
    
    set u = null
    call BJDebugMsg(&quot;unit added&quot;)
endfunction

private function Actions2 takes nothing returns nothing
    local integer i = 1
    
    //call DisableTrigger(ORDER_DENIER)
    loop
        exitwhen i &gt; I
        if GetTriggerUnit() == UNIT<i> then
            call IssuePointOrder(UNIT<i>,&quot;patrol&quot;,MOVE_X<i>,MOVE_Y<i>)
        endif
        set i = i+1
    endloop
    //call EnableTrigger(ORDER_DENIER)
    call BJDebugMsg(&quot;unit course corrected&quot;)
endfunction

private function Conditions takes nothing returns boolean
    return GetSpellAbilityId() == ABILCODE
endfunction

private function Conditions2 takes nothing returns boolean
    return GetUnitAbilityLevel(GetTriggerUnit(),BUFFCODE) &gt; 0 and OrderId2String(GetUnitCurrentOrder(GetTriggerUnit())) != &quot;patrol&quot;
endfunction

private function init takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_CAST)
    call TriggerAddCondition(t,Condition(function Conditions))
    call TriggerAddAction(t,function Actions)
    //=================================================================================
    call TriggerRegisterAnyUnitEventBJ(ORDER_DENIER,EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER)
    call TriggerRegisterAnyUnitEventBJ(ORDER_DENIER,EVENT_PLAYER_UNIT_ISSUED_UNIT_ORDER)
    call TriggerRegisterAnyUnitEventBJ(ORDER_DENIER,EVENT_PLAYER_UNIT_ISSUED_ORDER)
    call TriggerRegisterAnyUnitEventBJ(ORDER_DENIER,EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER)
    call TriggerAddCondition(ORDER_DENIER,Condition(function Conditions2))
    call TriggerAddAction(ORDER_DENIER,function Actions2)
    set t = null
endfunction

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

Commented out are some of my previous attempts, which did'nt work :/. I'm not interested in comments about how my code could be improved or how terrible it is, I just want comments relevant to the problem.
 

LurkerAspect

Now officially a Super Lurker
Thanks for the reply luorax but I've already solved my problem using a timer that periodically orders the unit to move, overriding any player input. +repped anyway :)
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • C Cherry.Grove:
    My boyfriend is super into Bethesda modding so I'm probably going to join him in that for a bit, then move on to making mobile/browser games.
  • C Cherry.Grove:
    I mostly just want to look at my old projects because I know I posted uploads on here somewhere.
  • C Cherry.Grove:
    My one game was basically Among Us but you sabotaged an entire medieval city simulated drastically inefficiently with dynamic NPCs :S
  • C Cherry.Grove:
    of course I never finished it x D
  • jonas jonas:
    xD
  • jonas jonas:
    I think you can still run the original game, just there's a chance your map won't work with the newer patches
  • jonas jonas:
    what development framework have you been looking at for mobile development?
  • jonas jonas:
    I'm currently creating (as a hobby) a space invaders like game for mobile using Xamarin, after starting a few larger projects that I also may not have finished :rolleyes::p
  • The Helper The Helper:
    Awesome! you should look at the Atari VCS platform it does not have a huge user base but the one it has is super active at around 11k and they have no games in there store
  • The Helper The Helper:
    basically it is linux
  • The Helper The Helper:
    OMG it is BanLord as Blackveiled on the forum
  • The Helper The Helper:
    what is up buddy
  • jonas jonas:
    thanks for the tip, that sounds cool. Never heard about the VCS before but seems like it should be a good match
  • tom_mai78101 tom_mai78101:
    The winter vacation left a toll on me. I missed staying up late and sleeping in late.
  • C Cherry.Grove:
    i haven't looked into it yet
  • C Cherry.Grove:
    If I could use something Python compatible it would save me some learning
  • C Cherry.Grove:
    But Unity might be easiest
  • C Cherry.Grove:
    looking at old posts here makes me happy. Makes me be all like "wow I was pretty smart in 2009"
  • C Cherry.Grove:
    mostly failing at life through adulthood really demotivated me for a while
  • C Cherry.Grove:
    ....what I don't get is why the fuck they would force us to permanently convert to a version of the game everyone fucking hated : \
  • C Cherry.Grove:
    Raid Shadow Legends texture pack smh
  • jonas jonas:
    Most people fail at life throughout their adulthood. Sometimes we get to learn from it. Usually it just feels like crap.
    +1
  • The Helper The Helper:
    What does not kill you makes you stronger is what they say
  • C Cherry.Grove:
    for real! :cool:

    Members online

    No members online now.

    Affiliates

    Hive Workshop NUON Dome
    Top