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:
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:
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:
The Attack Flee Trigger is done with Jass:
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.
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>)
- Events
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)
- Events
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)
- Events
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.