OFPEC Forum
Editors Depot - Mission Editing and Scripting => OFP - Editing/Scripting General => Topic started by: mjb on 11 Dec 2005, 04:50:30
-
G'day again,
Anyone with a suggestion feel free to chime in.
I got a spwan script up and running with a bit of help, but my spawned group is then not conducting the patrol I'm trying to get it to do.
My patrol script is pretty much a blatant rip-off from Dr Strangelove's Spawnmanager2 (thanks!!!) but attempted to be tailored for my needs.
The background of this script is that it spawns a random group and then they patrol to a random waypoint with a given radius of their spawn point.
*The spawn part is working*
*The patrol part is not - the group just stands there, even after I observe them for a few minutes to see if they a pausing*
Here is the script:
; init command line is: [0,1,2,3,4] exec "patrolteamday.sqs"
; where:
; value 0 is name of group, e.g. teamy
; value 1 is the marker position where troops are spawned (x,y,z), e.g getMarker Pos "markery"
; value 2 is the number of units to be spawned, from 2-12, e.g. 4
; values 3 the patrol radius from spawn point in m, e.g. 200
; value 4 is the pause at each waypoint in sec, e.g. 40
; so e.g. would be [teamy, getMarkerPos "markery", 4, 200, 40] exec "patrolteamday.sqs"
;=================GET PARAMETERS========================
;get parameters
_team = grpNull
_team = _this select 0
_base = _this select 1
_scale = _this select 2
_range = _this select 3
_pause = _this select 4
;============INIT VALUES================================
_cycle = 0
_types=["BAS_RebelOfficerHD","BAS_RebelSoldierHD","BAS_RebelSoldier2HD","BAS_RebelSoldier3HD","BAS_RebelSoldier4HD","BAS_RebelSoldier5HD","BAS_RebelMGunnerHD","BAS_RebelRPGSoldierHD","BAS_RebelRTOHD","BAS_RebelMedicHD","BAS_MilitiaAKMHD", "BAS_MilitiaSKSHD","BAS_MilitiaFALHD","BAS_MilitiaG3HD","BAS_MilitiaRPDHD","BAS_MilitiaPKMHD","BAS_MilitiaRPGHD", "BAS_MilitiaRPGAAHD","BAS_MilitiaRPGAPHD","BAS_MilitiaWAKMHD","BAS_MilitiaWSKSHD","BAS_MilitiaWFALHD","BAS_MilitiaWG3HD","BAS_MilitiaWRPDHD","BAS_MilitiaWPKMHD","BAS_MilitiaWRPGHD","BAS_MilitiaWRPGAAHD","BAS_MilitiaWRPGAPHD"]
;=============================SPAWN TEAM=====================
#spawnteam
_z = (random (count _types))
_z = (_z -(_z mod 1))
_guy = _types select _z
_guy createUnit [_base, _team, "", 0.1]
_cycle = _cycle + 1
?(_cycle < _scale):goto "spawnteam"
_team setBehaviour "SAFE"
formLeader (units _team select 0)
;===========PATROLLING=========================
#moveout
_team setSpeedMode "NORMAL"
#patrol_again
({_x setBehaviour "SAFE"} forEach units _team)
units _team commandMove [(_base select 0) - _range + (random (2 * _range)), (_base select 1) - _range + (random (2 * _range))]
;go on if group has reached WP
@(unitready leader _team)
({_x setBehaviour "AWARE"} forEach units _team)
~_pause
goto "patrol again"
#exit
exit;
Note in the =spawnteam= section I created a leader (well no error message came up). I did this in the hope it would help get a group to move to its random waypoint easier if I'm using commandMove. I think DrStrangelove's spawn script creates a leader too, so I just copied using my noob script skillz.
Note in the =patrolling= section, I've attempted iterations of group move position and unit doMove as well, but no success.
Anyone see where I'm going wrong?
EDIT: I spotted the #patrol again and goto "patrol_again" anomoly and it didn't fix.
-
#patrol_again
({_x setBehaviour "SAFE"} forEach units _team)
units _team commandMove [(_base select 0) - _range + (random (2 * _range)), (_base select 1) - _range + (random (2 * _range))]
I could be mistaken, but that seems like it wouldn't work. Either use a forEach to iterate through each team member, or simply assign the move command to the group leader. The rest of the group should follow along happily.
-
Thanks LoTekk, I got the script working.
I added a few extra parameters to see if I could kick start some reactions out of the AI (see below)
; init command line is: [0,1,2,3,4] exec "patrolteamday.sqs"
; where:
; value 0 is name of group, e.g. teamy
; value 1 is the marker position where troops are spawned (x,y,z), e.g getMarker Pos "markery"
; value 2 is the number of units to be spawned, from 2-12, e.g. 4
; values 3 the patrol radius from spawn point in m, e.g. 200
; value 4 is the pause at each waypoint in sec, e.g. 40
; so e.g. would be [teamy, getMarkerPos "markery", 4, 200, 40] exec "patrolteamday.sqs"
;=================GET PARAMETERS========================
;get parameters
_team = grpNull
_team = _this select 0
_base = _this select 1
_scale = _this select 2
_range = _this select 3
_pause = _this select 4
;============INIT VALUES================================
_cycle = 0
_types=["BAS_RebelOfficerHD","BAS_RebelSoldierHD","BAS_RebelSoldier2HD","BAS_RebelSoldier3HD","BAS_RebelSoldier4HD","BAS_RebelSoldier5HD","BAS_RebelMGunnerHD","BAS_RebelRPGSoldierHD","BAS_RebelRTOHD","BAS_RebelMedicHD","BAS_MilitiaAKMHD", "BAS_MilitiaSKSHD","BAS_MilitiaFALHD","BAS_MilitiaG3HD","BAS_MilitiaRPDHD","BAS_MilitiaPKMHD","BAS_MilitiaRPGHD", "BAS_MilitiaRPGAAHD","BAS_MilitiaRPGAPHD","BAS_MilitiaWAKMHD","BAS_MilitiaWSKSHD","BAS_MilitiaWFALHD","BAS_MilitiaWG3HD","BAS_MilitiaWRPDHD","BAS_MilitiaWPKMHD","BAS_MilitiaWRPGHD","BAS_MilitiaWRPGAAHD","BAS_MilitiaWRPGAPHD"]
;========================SPAWN LEADER==================
#spawnleader
_z = (random (count _types))
_z = (_z -(_z mod 1))
_guy = _types select _z
_guy createUnit [_base, _team, "", 0.1, "CAPTAIN"]
_leader = (units _team select 0)
formLeader _leader
_cycle = _cycle + 1
;=============================SPAWN TEAM=====================
#spawnteam
_z = (random (count _types))
_z = (_z -(_z mod 1))
_guy = _types select _z
_guy createUnit [_base, _team, "", 0.1]
_cycle = _cycle + 1
?(_cycle < _scale):goto "spawnteam"
;===========PATROLLING=========================
#moveout
_team setBehaviour "SAFE"
_team setSpeedMode "LIMITED"
_team setCombatMode "RED"
_team setFormation "WEDGE"
#patrolagain
({_x setBehaviour "SAFE"} forEach units _team)
_team move [(_base select 0) - _range + (random (2 * _range)), (_base select 1) - _range + (random (2 * _range))]
;go on if group has reached WP
@(unitready _leader)
({_x setBehaviour "AWARE"} forEach units _team)
~_pause
goto "patrolagain"
#exit
exit;
This worked, but only after some massaging: I had put the spawning marker too close to some buildings and the group got stuck within the built-up area.
By moving the marker to an open area, it got things moving.
I noticed in the preview, if I shot a leader, they lost coherence.
I might add a check if _leader is alive subroutine and if != then appoint a new one.