Neutral Passive Unit Patrol Problem

nandosman

New Member
Reaction score
4
I've a unit that belongs to neutral passive player, lets call it 'Roger'. I need it to patrol the whole map (in a defined route i have). Now, if it's attacked, i want it to attack back to its attacker, until the unit is dead, or flees, then going back to its patrol route. So, I'm using several triggers for this:

1) First I created 6 regions and created 1 trigger for each one:

Trigger:
  • Trigger
    • Events
      • Unit - A unit enters <region 1>
    • Conditions
      • (Triggering unit) Equal to <Roger>
    • Actions
      • Unit - Order <Roger> to Move To (Center of <region 2>)
      • Set Roger_CurrentDestiny = (Center of <region 2>)


And so on, until i complete a circular route for the patrol, that should work fine.

Roger_CurrentDestin is a global variable that tells me where is roger going right now (Variable of type Point).

now, for the attack, i only figured out this solution:

Trigger:
  • Attack
    • Events
      • Unit - <Roger> Is attacked
    • Conditions
      • (Owner of (Attacking unit)) Not equal to Neutral Hostile
    • Actions
      • Unit - <Roger> to Attack (Attacking unit)
      • Set Roger_CurrentPos = (Position of <Roger>)
      • Trigger - Turn on Attack_Finish <gen>
      • Trigger - Turn on Attack_Flee <gen>
      • Trigger - Turn off (This trigger)


Roger_CurrentPos is a global variable that I use to save the Point where Roger was first attacked.

So, every time a unit that belongs to a player attacks roger, roger will attack back the unit. The attack command will stop when the attacker dies or the attacker flees. Its controled by this:

Trigger:
  • Attack_Finish
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Killing unit) Equal to <Roger>
    • Actions
      • Unit - Order <Roger> to Move To Roger_CurrentDestiny
      • Trigger - Turn on Attack <gen>
      • Trigger - Turn off Attack_Flee <gen>
      • Trigger - Turn off (This trigger)


The Attack Flee Trigger is done with Jass:

JASS:
function Trig_Attacker_Flee_Conditions takes nothing returns boolean
    if (GetTriggerUnit() == <Roger> ) then
        return true
    endif
    return false
endfunction

function Trig_Attacker_Flee_Actions takes nothing returns nothing
    call IssuePointOrderLoc( <Roger>, "move", udg_Roger_CurrentDestiny)    
endfunction

//===========================================================================
function InitTrig_Attacker_Flee takes nothing returns nothing
    set gg_trg_Attacker_Flee = CreateTrigger(  )
    call TriggerRegisterLeaveRectSimple( gg_trg_Attacker_Flee, RectFromCenterSizeBJ(udg_Roger_CurrentPos, 1000.00, 1000.00) )
    call TriggerAddCondition( gg_trg_Attacker_Flee, Condition( function Trig_Attacker_Flee_Conditions ) )
    call TriggerAddAction( gg_trg_Attacker_Flee, function Trig_Attacker_Flee_Actions )
endfunction


What I do here is ask if Roger walked certain distance from the initial point he was attacked, and if he did, order him to continue with his patrol.


Now, The Problem: The reason I'm posting this is becouse none of this is properly working:

1) When I assign Roger to Neutral Passive Player, he just ignores the orders of moving to the regions. This can be fixed by assign Roger to an unused player, but i want Roger to be Passive Neutral.

2) Supposing Roger is doing fine with his patrol, I need to figure out how to make him stay and fight with a whole army if he's attacked by it, not just until a single unit dies, but until the whole army dies :S.

3) There's something wrong with the flee system, becouse he just runs after the attacking unit and never stops until its dead :S.

4) If anyone can give me some advise about improving this methods, welcome.

Any help is appreciated, thx.
 

jig7c

Stop reading me...-statement
Reaction score
123
wrong
Trigger:
  • Trigger
    • Events
      • Unit - A unit enters <region 1>
    • Conditions
      • (Triggering unit) Equal to <Roger>
    • Actions
      • Unit - Order <Roger> to Move To (Center of <region 2>)
      • Set Roger_CurrentDestiny = (Center of <region 2>)


right
Trigger:
  • Trigger
    • Events
      • Unit - A unit enters <region 1>
    • Conditions
      • (Triggering unit) Equal to <Roger>
    • Actions
      • Set Point = (Center of <region 2>)
      • Unit - Order <Roger> to Attack-Move To Point
      • Set Roger_CurrentDestiny = (Center of <region 2>)
      • custom script: call RemoveLocation (udg_Point)


try setting it so that every 1 second, it tells Roger to attack-move to another region...
 

nandosman

New Member
Reaction score
4
whats that Point variable for?? it cant be attack-move, becouse the idea is to make roger patrol the area without causing trouble, unless someone else attakcs him
 

nandosman

New Member
Reaction score
4
mmm then what about this:
Trigger:
  • Trigger
    • Events
      • Unit - A unit enters <region 1>
    • Conditions
      • (Triggering unit) Equal to <Roger>
    • Actions
      • Set Roger_CurrentDestiny = (Center of <region 2>)
      • Unit - Order <Roger> to Move To Roger_CurrentDestiny
 

Accname

2D-Graphics enthusiast
Reaction score
1,462
1)
neutral passive/hostile units cannot be ordered because they are owned by an AI player (yes neutral counts as AI) but you can switch the AI off for specific units using this action:
Trigger:
  • AI - Ignore Roger's guard position


2-4)
Using Attack/Move will make your unit automatically attack enemy units if they are close. Because you use neutral passive as owner the attacking player will most probably be allied to Roger. Try to set the alliance towards the attacking player to hostile if Roger is attacked and back to allied if the battle is over.
 

nandosman

New Member
Reaction score
4
1)
neutral passive/hostile units cannot be ordered because they are owned by an AI player (yes neutral counts as AI) but you can switch the AI off for specific units using this action:
Trigger:
  • AI - Ignore Roger's guard position

Let me try :thup:

2-4)
Using Attack/Move will make your unit automatically attack enemy units if they are close. Because you use neutral passive as owner the attacking player will most probably be allied to Roger. Try to set the alliance towards the attacking player to hostile if Roger is attacked and back to allied if the battle is over.

yes i understand your point, but i dont want roger to attack units that comes close. I just want roger to attack units ONLY if he's attacked first, but if he's drafted too far away from his patrol route following some attacker, make him give up with the attack and go back to his patrol. Thats the reason for the other triggers. Also, other thing i need help to, if roger is attacked by more than a single unit (an army for example), make him battle the whole army, and not just the first unit who attacked him first, as it's stated in the triggers i made :(
 

nandosman

New Member
Reaction score
4
1)
neutral passive/hostile units cannot be ordered because they are owned by an AI player (yes neutral counts as AI) but you can switch the AI off for specific units using this action:
Trigger:
  • AI - Ignore Roger's guard position

Didn't Work :(
 

nandosman

New Member
Reaction score
4
I'm giving Roger the order to go to one of the regions in the map initialization trigger, and when the map starts, he walks to the region, but before arriving to its destiny, he returns to the original position he started, and stays there :S

If I change from neutral Passive to any of the other players, then it works, but i want it to be neutral passive :S
 
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