see readme
This commit is contained in:
Teh Dango 2017-11-11 22:46:01 -05:00
parent b12e947cdb
commit 30a42e6e63
10 changed files with 721 additions and 488 deletions

View File

@ -1,10 +1,18 @@
#### 3.0 Rolling
- Small code improvements.
- No longer developed soley for Exile mod.
- Possible move to Arma 3 Workshop.
- Loot spawn added for Animated Crash Sites.
#### 2.2.9
- [Fix] Fixed a bug causing friendly AI to have head wraps.
- [New] AI women have been added to the spawn function.
- [Change] AI Skills decreased to 10% multiplied by a maximum of 2 bringing the highest possible skill level to 20%.
- [Change] AI loadout variable names were changed to a more uniform template to simplify the customization process.
- [Change] Major changes to code blocks and variables were done to make customizing more intuitive for server owners.
- [Change] AI are tied to nuisance, rewarding players an +10 points for bandit kills and -20 points for friendly kills.
#### 2.2.3 Current
Known Issues
- Error Undefined variable in expression: upsmon_guer_total
#### 2.2.8
- [Change] UPSMON scripts are now located in the mission PBO as was intended by the creator to remove instability issues with AI logic.
#### 2.2.3
- [Fix] Static infantry now spawn as intended.
- [Update] UPSMON scripts have been merged with the Sarge PBO.

View File

@ -12,27 +12,33 @@
https://www.hod-servers.com
*/
private ["_sizeOfBase","_authorizedGateCodes","_authorizedUID","_flagPole","_leadername","_type","_patrol_area_name","_grouptype","_snipers","_riflemen","_action","_side","_leaderList","_riflemenlist","_sniperlist","_rndpos","_group","_leader","_cond","_respawn","_leader_weapon_names","_leader_items","_leader_tools","_soldier_weapon_names","_soldier_items","_soldier_tools","_sniper_weapon_names","_sniper_items","_sniper_tools","_leaderskills","_riflemanskills","_sniperskills","_ups_para_list","_respawn_time","_argc","_ai_type"];
private ["_sizeOfBase","_authorizedUID","_flagPole","_leadername","_type","_patrol_area_name","_grouptype","_snipers","_riflemen","_action","_side","_leaderList","_riflemenlist","_sniperlist","_rndpos","_group","_leader","_cond","_respawn","_leader_weapon_names","_leader_items","_leader_tools","_soldier_weapon_names","_soldier_items","_soldier_tools","_sniper_weapon_names","_sniper_items","_sniper_tools","_leaderskills","_riflemanskills","_sniperskills","_ups_para_list","_respawn_time","_argc","_ai_type"];
//if (!isServer) exitWith {};
diag_log "Sarge AI System: Territory gaurds are initializing now.";
diag_log "Sarge AI System: Base gaurds are initializing now.";
_argc = count _this;
_flagPole = _this select 0;
_patrol_area_name = _this select 1;
_grouptype = _this select 2;
_snipers = _this select 3;
_riflemen = _this select 4;
_action = tolower (_this select 5);
_respawn = _this select 6;
_argc = count _this;
_flagPole = _this select 0;
_patrol_area_name = _this select 1;
_grouptype = _this select 2;
_snipers = _this select 3;
_riflemen = _this select 4;
_action = tolower (_this select 5);
_respawn = _this select 6;
if (_argc > 7) then {
_respawn_time = _this select 7;
_respawn_time = _this select 7;
} else {
_respawn_time = SAR_respawn_waittime;
_respawn_time = SAR_respawn_waittime;
};
_authorizedUID = _flagPole getVariable ["ExileTerritoryBuildRights", []];
{
_baseOwner = _flagPole getVariable ["BUILD_OWNER", 0];
if (_baseOwner in _x) then {
_authorizedUID = _x;
};
} forEach allGroups;
switch (_grouptype) do
{
@ -83,6 +89,25 @@ _leader_tools = ["leader",_type] call SAR_unit_loadout_tools;
[_leader,_leader_weapon_names,_leader_items,_leader_tools] call SAR_unit_loadout;
switch (side _leader) do {
case SAR_AI_friendly_side:
{
if ((headGear _leader) isEqualTo "Shemag") then {
removeHeadgear _leader;
};
};
case SAR_AI_unfriendly_side:
{
removeHeadgear _leader;
sleep 0.1;
_leader addHeadGear "H_Shemag_olive";
};
default
{
diag_log "Sarge AI: Something went wrong when attempting to determine AI side to change headgear!";
};
};
[_leader] spawn SAR_fnc_AI_trace_base;
_leader setIdentity "id_SAR_sold_lead";
[_leader] spawn SAR_fnc_AI_refresh;
@ -121,6 +146,25 @@ for "_i" from 0 to (_snipers - 1) do
[_this,_sniper_weapon_names,_sniper_items,_sniper_tools] call SAR_unit_loadout;
switch (side _this) do {
case SAR_AI_friendly_side:
{
if ((headGear _this) isEqualTo "Shemag") then {
removeHeadgear _this;
};
};
case SAR_AI_unfriendly_side:
{
removeHeadgear _this;
sleep 0.1;
_this addHeadGear "H_Shemag_olive";
};
default
{
diag_log "Sarge AI: Something went wrong when attempting to determine AI side to change headgear!";
};
};
[_this] spawn SAR_fnc_AI_trace_base;
_this setIdentity "id_SAR";
[_this] spawn SAR_fnc_AI_refresh;
@ -161,7 +205,24 @@ for "_i" from 0 to (_riflemen - 1) do
[_this,_soldier_weapon_names,_soldier_items,_soldier_tools] call SAR_unit_loadout;
if (_side == SAR_AI_unfriendly_side) then {removeHeadgear _this; _this addHeadGear (["H_Shemag_olive","H_Shemag_olive_hs","H_ShemagOpen_khk","H_ShemagOpen_tan"] call BIS_fnc_selectRandom);};
switch (side _this) do {
case SAR_AI_friendly_side:
{
if ((headGear _this) isEqualTo "Shemag") then {
removeHeadgear _this;
};
};
case SAR_AI_unfriendly_side:
{
removeHeadgear _this;
sleep 0.1;
_this addHeadGear "H_Shemag_olive";
};
default
{
diag_log "Sarge AI: Something went wrong when attempting to determine AI side to change headgear!";
};
};
[_this] spawn SAR_fnc_AI_trace_base;
_this setIdentity "id_SAR_sold_man";

View File

@ -12,7 +12,7 @@
https://www.hod-servers.com
*/
private ["_ai_type","_riflemenlist","_side","_leader_group","_patrol_area_name","_rndpos","_groupheli","_heli","_leader","_man2heli","_man3heli","_argc","_grouptype","_respawn","_leader_weapon_names","_leader_items","_leader_tools","_soldier_weapon_names","_soldier_items","_soldier_tools","_leaderskills","_sniperskills","_ups_para_list","_type","_error","_respawn_time","_leadername"];
private ["_ai_type","_riflemanGender","_side","_leader_group","_patrol_area_name","_rndpos","_groupheli","_heli","_leader","_man2heli","_man3heli","_argc","_grouptype","_respawn","_leaderPrimary","_leaderItems","_leaderTools","_riflemanPrimary","_riflemanItems","_riflemanTools","_leaderskills","_sniperskills","_ups_para_list","_type","_error","_respawn_time","_leadername"];
//if (!isServer) exitWith {};
@ -64,16 +64,6 @@ if (_argc > 3) then {
if (_error) exitWith {diag_log "SAR_fnc_AI_infantry: Heli patrol setup failed, wrong parameters passed!";};
_leaderNPC = call compile format ["SAR_leader_%1_list",_type];
_riflemenlist = call compile format ["SAR_soldier_%1_list",_type];
_leaderskills = call compile format ["SAR_leader_%1_skills",_type];
_sniperskills = call compile format ["SAR_sniper_%1_skills",_type];
_leader_weapon_names = ["leader",_type] call SAR_unit_loadout_weapons;
_leader_items = ["leader",_type] call SAR_unit_loadout_items;
_leader_tools = ["leader",_type] call SAR_unit_loadout_tools;
// get a random starting position that is on land
if (SAR_useBlacklist) then {
_rndpos = [_patrol_area_name,0,SAR_Blacklist] call UPSMON_pos;
@ -96,11 +86,42 @@ _heli setVehicleAmmo 1;
[_heli] joinSilent _groupheli;
sleep 1;
_leader = _groupheli createunit [(_leaderNPC call BIS_fnc_selectRandom), [(_rndpos select 0) + 10, _rndpos select 1, 0], [], 0.5, "CAN_COLLIDE"];
// Prepare leader AI loadout options
_leaderGender = call compile format ["SAR_%1_leader_gender", _type];
_leaderSkills = call compile format ["SAR_%1_leader_skills", _type];
_leaderUniform = call compile format ["SAR_%1_leader_uniform", _type];
_leaderPrimary = ["leader",_type] call SAR_unit_loadout_weapons;
_leaderItems = ["leader",_type] call SAR_unit_loadout_items;
_leaderTools = ["leader",_type] call SAR_unit_loadout_tools;
[_leader,_leader_weapon_names,_leader_items,_leader_tools] call SAR_unit_loadout;
_leader = _groupheli createunit [_leaderGender call BIS_fnc_selectRandom, [(_rndpos select 0) + 10, _rndpos select 1, 0], [], 0.5, "CAN_COLLIDE"];
if (_side == SAR_AI_unfriendly_side) then {removeHeadgear _leader; _leader addHeadGear (["H_Shemag_olive","H_Shemag_olive_hs","H_ShemagOpen_khk","H_ShemagOpen_tan"] call BIS_fnc_selectRandom);};
_leader moveInDriver _heli;
_leader assignAsDriver _heli;
_genderUniform = (_leaderUniform select 0) call BIS_fnc_selectRandom;
if (_leader isKindOf "Epoch_Female_F") then {_genderUniform = (_leaderUniform select 1) call BIS_fnc_selectRandom;};
[_leader,_leaderPrimary,_genderUniform,_leaderItems,_leaderTools] call SAR_unit_loadout;
switch (side _leader) do {
case SAR_AI_friendly_side:
{
if ((headGear _leader) isEqualTo "Shemag") then {
removeHeadgear _leader;
};
};
case SAR_AI_unfriendly_side:
{
removeHeadgear _leader;
sleep 0.1;
_leader addHeadGear "H_Shemag_olive";
};
default
{
diag_log "Sarge AI: Something went wrong when attempting to determine AI side to change headgear!";
};
};
[_leader] spawn SAR_fnc_AI_trace_vehicle;
switch (_grouptype) do
@ -114,15 +135,12 @@ switch (_grouptype) do
_leader addMPEventHandler ["MPkilled", {Null = _this spawn SAR_fnc_AI_killed;}];
_leader addMPEventHandler ["MPHit", {Null = _this spawn SAR_fnc_AI_hit;}];
_leader moveInDriver _heli;
_leader assignAsDriver _heli;
[_leader] joinSilent _groupheli;
// set skills of the leader
{
_leader setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
} foreach _leaderskills;
_leader setskill [_x select 0,((_x select 1) * (_x select 2))];
} foreach _leaderSkills;
// store AI type on the AI
_leader setVariable ["SAR_AI_type",_ai_type + " Leader",false];
@ -130,23 +148,43 @@ _leader setVariable ["SAR_AI_type",_ai_type + " Leader",false];
// store experience value on AI
_leader setVariable ["SAR_AI_experience",0,false];
// set behaviour & speedmode
_leader setspeedmode "FULL";
_leader setBehaviour "AWARE";
// Establish rifleman unit type and skills
_riflemanGender = call compile format ["SAR_%1_rifleman_gender", _type];
_riflemanSkills = call compile format ["SAR_%1_rifleman_skills", _type];
_riflemanUniform = call compile format ["SAR_%1_rifleman_uniform", _type];
_riflemanPrimary = ["rifleman",_type] call SAR_unit_loadout_weapons;
_riflemanItems = ["rifleman",_type] call SAR_unit_loadout_items;
_riflemanTools = ["rifleman",_type] call SAR_unit_loadout_tools;
// Gunner 1
_man2heli = _groupheli createunit [_riflemenlist call BIS_fnc_selectRandom, [(_rndpos select 0) - 30, _rndpos select 1, 0], [], 0.5, "CAN_COLLIDE"];
_soldier_weapon_names = ["rifleman",_type] call SAR_unit_loadout_weapons;
_soldier_items = ["rifleman",_type] call SAR_unit_loadout_items;
_soldier_tools = ["rifleman",_type] call SAR_unit_loadout_tools;
[_man2heli,_soldier_weapon_names,_soldier_items,_soldier_tools] call SAR_unit_loadout;
if (_side == SAR_AI_unfriendly_side) then {removeHeadgear _man2heli; _man2heli addHeadGear (["H_Shemag_olive","H_Shemag_olive_hs","H_ShemagOpen_khk","H_ShemagOpen_tan"] call BIS_fnc_selectRandom);};
_man2heli = _groupheli createunit [_riflemanGender call BIS_fnc_selectRandom, [(_rndpos select 0) - 30, _rndpos select 1, 0], [], 0.5, "CAN_COLLIDE"];
_man2heli moveInTurret [_heli,[0]];
_genderUniform = (_riflemanUniform select 0) call BIS_fnc_selectRandom;
if (_man2heli isKindOf "Epoch_Female_F") then {_genderUniform = (_riflemanUniform select 1) call BIS_fnc_selectRandom;};
[_man2heli,_genderUniform,_riflemanPrimary,_riflemanItems,_riflemanTools] call SAR_unit_loadout;
switch (side _man2heli) do {
case SAR_AI_friendly_side:
{
if ((headGear _man2heli) isEqualTo "Shemag") then {
removeHeadgear _man2heli;
};
};
case SAR_AI_unfriendly_side:
{
removeHeadgear _man2heli;
sleep 0.1;
_man2heli addHeadGear "H_Shemag_olive";
};
default
{
diag_log "Sarge AI: Something went wrong when attempting to determine AI side to change headgear!";
};
};
[_man2heli] spawn SAR_fnc_AI_trace_vehicle;
switch (_grouptype) do
{
@ -163,8 +201,8 @@ _man2heli addMPEventHandler ["MPHit", {Null = _this spawn SAR_fnc_AI_hit;}];
// set skills
{
_man2heli setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
} foreach _sniperskills;
_man2heli setskill [_x select 0,((_x select 1) * (_x select 2))];
} foreach _riflemanSkills;
// store AI type on the AI
_man2heli setVariable ["SAR_AI_type",_ai_type,false];
@ -173,18 +211,34 @@ _man2heli setVariable ["SAR_AI_type",_ai_type,false];
_man2heli setVariable ["SAR_AI_experience",0,false];
//Gunner 2
_man3heli = _groupheli createunit [_riflemenlist call BIS_fnc_selectRandom, [_rndpos select 0, (_rndpos select 1) + 30, 0], [], 0.5, "CAN_COLLIDE"];
_soldier_weapon_names = ["rifleman",_type] call SAR_unit_loadout_weapons;
_soldier_items = ["rifleman",_type] call SAR_unit_loadout_items;
_soldier_tools = ["rifleman",_type] call SAR_unit_loadout_tools;
[_man3heli,_soldier_weapon_names,_soldier_items,_soldier_tools] call SAR_unit_loadout;
if (_side == SAR_AI_unfriendly_side) then {removeHeadgear _man3heli; _man3heli addHeadGear (["H_Shemag_olive","H_Shemag_olive_hs","H_ShemagOpen_khk","H_ShemagOpen_tan"] call BIS_fnc_selectRandom);};
_man3heli = _groupheli createunit [_riflemanGender call BIS_fnc_selectRandom, [_rndpos select 0, (_rndpos select 1) + 30, 0], [], 0.5, "CAN_COLLIDE"];
_man3heli moveInTurret [_heli,[1]];
_genderUniform = (_riflemanUniform select 0) call BIS_fnc_selectRandom;
if (_man3heli isKindOf "Epoch_Female_F") then {_genderUniform = (_riflemanUniform select 1) call BIS_fnc_selectRandom;};
[_man3heli,_genderUniform,_riflemanPrimary,_riflemanItems,_riflemanTools] call SAR_unit_loadout;
switch (side _man3heli) do {
case SAR_AI_friendly_side:
{
if ((headGear _man3heli) isEqualTo "Shemag") then {
removeHeadgear _man3heli;
};
};
case SAR_AI_unfriendly_side:
{
removeHeadgear _man3heli;
sleep 0.1;
_man3heli addHeadGear "H_Shemag_olive";
};
default
{
diag_log "Sarge AI: Something went wrong when attempting to determine AI side to change headgear!";
};
};
[_man3heli] spawn SAR_fnc_AI_trace_vehicle;
switch (_grouptype) do
{
@ -201,8 +255,8 @@ _man3heli addMPEventHandler ["MPHit", {Null = _this spawn SAR_fnc_AI_hit;}];
// set skills
{
_man3heli setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
} foreach _sniperskills;
_man3heli setskill [_x select 0,((_x select 1) * (_x select 2))];
} foreach _riflemanskills;
// store AI type on the AI
_man3heli setVariable ["SAR_AI_type",_ai_type,false];

View File

@ -12,7 +12,7 @@
https://www.hod-servers.com
*/
private ["_leadername","_type","_patrol_area_name","_grouptype","_snipers","_riflemen","_action","_side","_leaderList","_riflemenlist","_sniperlist","_rndpos","_group","_leader","_cond","_respawn","_leader_weapon_names","_leader_items","_leader_tools","_soldier_weapon_names","_soldier_items","_soldier_tools","_sniper_weapon_names","_sniper_items","_sniper_tools","_leaderskills","_riflemanskills","_sniperskills","_ups_para_list","_respawn_time","_argc","_ai_type"];
private ["_leadername","_type","_patrol_area_name","_grouptype","_snipers","_riflemen","_action","_side","_leaderList","_riflemanGender","_sniperGender","_rndpos","_group","_leader","_cond","_respawn","_leaderPrimary","_leaderItems","_leaderTools","_riflemanPrimary","_riflemanItems","_riflemanTools","_sniperPrimary","_sniperItems","_sniperTools","_leaderskills","_riflemanSkills","_sniperSkills","_ups_para_list","_respawn_time","_argc","_ai_type"];
//if (!isServer) exitWith {};
@ -52,9 +52,6 @@ switch (_grouptype) do
};
};
_leaderList = call compile format ["SAR_leader_%1_list", _type];
_leaderskills = call compile format ["SAR_leader_%1_skills", _type];
// get a random starting position that is on land
if (SAR_useBlacklist) then {
_rndpos = [_patrol_area_name,0,SAR_Blacklist] call UPSMON_pos;
@ -62,23 +59,48 @@ if (SAR_useBlacklist) then {
_rndpos = [_patrol_area_name] call UPSMON_pos;
};
// Create group for AI
_group = createGroup _side;
// Prepare leader AI loadout options
_leaderGender = call compile format ["SAR_%1_leader_gender", _type];
_leaderSkills = call compile format ["SAR_%1_leader_skills", _type];
_leaderUniform = call compile format ["SAR_%1_leader_uniform", _type];
_leaderPrimary = ["leader",_type] call SAR_unit_loadout_weapons;
_leaderItems = ["leader",_type] call SAR_unit_loadout_items;
_leaderTools = ["leader",_type] call SAR_unit_loadout_tools;
// create leader of the group
_leader = _group createunit [_leaderList call BIS_fnc_selectRandom, [(_rndpos select 0) , _rndpos select 1, 0], [], 0.5, "NONE"];
_leader = _group createunit [_leaderGender call BIS_fnc_selectRandom, [(_rndpos select 0) , _rndpos select 1, 0], [], 0.5, "NONE"];
_leader setVariable ["SAR_protect",true,true];
[_leader] joinSilent _group;
sleep 1;
sleep 0.5;
_leader_weapon_names = ["leader",_type] call SAR_unit_loadout_weapons;
_leader_items = ["leader",_type] call SAR_unit_loadout_items;
_leader_tools = ["leader",_type] call SAR_unit_loadout_tools;
_genderUniform = (_leaderUniform select 0) call BIS_fnc_selectRandom;
if (_leader isKindOf "Epoch_Female_F") then {_genderUniform = (_leaderUniform select 1) call BIS_fnc_selectRandom;};
[_leader,_leader_weapon_names,_leader_items,_leader_tools] call SAR_unit_loadout;
[_leader,_genderUniform,_leaderPrimary,_leaderItems,_leaderTools] call SAR_unit_loadout;
if (_side == SAR_AI_unfriendly_side) then {removeHeadgear _leader; _leader addHeadGear (["H_Shemag_olive","H_Shemag_olive_hs","H_ShemagOpen_khk","H_ShemagOpen_tan"] call BIS_fnc_selectRandom);};
switch (side _leader) do {
case SAR_AI_friendly_side:
{
if ((headGear _leader) isEqualTo "Shemag") then {
removeHeadgear _leader;
};
};
case SAR_AI_unfriendly_side:
{
removeHeadgear _leader;
sleep 0.1;
_leader addHeadGear "H_Shemag_olive";
};
default
{
diag_log "Sarge AI: Something went wrong when attempting to determine AI side to change headgear!";
};
};
[_leader] spawn SAR_fnc_AI_trace;
_leader setIdentity "id_SAR_sold_lead";
@ -89,14 +111,14 @@ _leader addMPEventHandler ["MPHit", {Null = _this spawn SAR_fnc_AI_hit;}];
_leader addEventHandler ["HandleDamage",{if (_this select 1 != "") then {_unit = _this select 0; damage _unit + ((_this select 2) - damage _unit) * SAR_leader_health_factor}}];
[_leader, ["Wait Here!", {"\addons\sarge\SAR_interact.sqf","",1,true,true,"","((side _leader != east) && (alive _leader))"}]] remoteExec ["addAction", 0, true];
//[_leader, ["Wait Here!", {"\addons\sarge\SAR_interact.sqf","",1,true,true,"","((side _leader != east) && (alive _leader))"}]] remoteExec ["addAction", 0, true];
//["I need assistance!",{"sarge\SAR_interact.sqf","",1,true,true,"","(side _target != EAST)"}]
//_leader addaction ["Help Me!", {"sarge\SAR_interact.sqf" remoteExec [ "BIS_fnc_execVM",0]}];
// set skills of the leader
{
_leader setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
_leader setskill [_x select 0,((_x select 1) * (_x select 2))];
} foreach _leaderskills;
SAR_leader_number = SAR_leader_number + 1;
@ -111,69 +133,44 @@ _leader setVariable ["SAR_AI_type",_ai_type + " Leader",false];
// store experience value on AI
_leader setVariable ["SAR_AI_experience",0,false];
// set behaviour & speedmode
/* _leader setspeedmode "FULL";
_leader setBehaviour "AWARE"; */
// Establish siper unit type and skills
_sniperlist = call compile format ["SAR_sniper_%1_list", _type];
_sniperskills = call compile format ["SAR_sniper_%1_skills", _type];
// create crew
for "_i" from 0 to (_snipers - 1) do
{
_this = _group createunit [_sniperlist call BIS_fnc_selectRandom, [(_rndpos select 0), _rndpos select 1, 0], [], 0.5, "NONE"];
[_this] joinSilent _group;
sleep 1;
_sniper_weapon_names = ["sniper",_type] call SAR_unit_loadout_weapons;
_sniper_items = ["sniper",_type] call SAR_unit_loadout_items;
_sniper_tools = ["sniper",_type] call SAR_unit_loadout_tools;
[_this,_sniper_weapon_names,_sniper_items,_sniper_tools] call SAR_unit_loadout;
if (_side == SAR_AI_unfriendly_side) then {removeHeadgear _this; _this addHeadGear (["H_Shemag_olive","H_Shemag_olive_hs","H_ShemagOpen_khk","H_ShemagOpen_tan"] call BIS_fnc_selectRandom);};
[_this] spawn SAR_fnc_AI_trace;
_this setIdentity "id_SAR";
[_this] spawn SAR_fnc_AI_refresh;
_this addMPEventHandler ["MPkilled", {Null = _this spawn SAR_fnc_AI_killed;}];
_this addMPEventHandler ["MPHit", {Null = _this spawn SAR_fnc_AI_hit;}];
_this addEventHandler ["HandleDamage",{if (_this select 1!="") then {_unit=_this select 0;damage _unit+((_this select 2)-damage _unit)*1}}];
// set skills
{
_this setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
} foreach _sniperskills;
// store AI type on the AI
_this setVariable ["SAR_AI_type",_ai_type,false];
// store experience value on AI
_this setVariable ["SAR_AI_experience",0,false];
};
// Establish rifleman unit type and skills
_riflemenlist = call compile format ["SAR_soldier_%1_list", _type];
_riflemanskills = call compile format ["SAR_soldier_%1_skills", _type];
_riflemanGender = call compile format ["SAR_%1_rifleman_gender", _type];
_riflemanSkills = call compile format ["SAR_%1_rifleman_skills", _type];
_riflemanUniform = call compile format ["SAR_%1_rifleman_uniform", _type];
_riflemanPrimary = ["rifleman",_type] call SAR_unit_loadout_weapons;
_riflemanItems = ["rifleman",_type] call SAR_unit_loadout_items;
_riflemanTools = ["rifleman",_type] call SAR_unit_loadout_tools;
for "_i" from 0 to (_riflemen - 1) do
{
_this = _group createunit [_riflemenlist call BIS_fnc_selectRandom, [(_rndpos select 0) , _rndpos select 1, 0], [], 0.5, "NONE"];
_this = _group createunit [_riflemanGender call BIS_fnc_selectRandom, [(_rndpos select 0) , _rndpos select 1, 0], [], 0.5, "NONE"];
[_this] joinSilent _group;
sleep 1;
sleep 0.5;
_soldier_items = ["rifleman",_type] call SAR_unit_loadout_items;
_soldier_tools = ["rifleman",_type] call SAR_unit_loadout_tools;
_soldier_weapon_names = ["rifleman",_type] call SAR_unit_loadout_weapons;
_genderUniform = (_riflemanUniform select 0) call BIS_fnc_selectRandom;
if (_this isKindOf "Epoch_Female_F") then {_genderUniform = (_riflemanUniform select 1) call BIS_fnc_selectRandom;};
[_this,_genderUniform,_riflemanPrimary,_riflemanItems,_riflemanTools] call SAR_unit_loadout;
[_this,_soldier_weapon_names,_soldier_items,_soldier_tools] call SAR_unit_loadout;
if (_side == SAR_AI_unfriendly_side) then {removeHeadgear _this; _this addHeadGear (["H_Shemag_olive","H_Shemag_olive_hs","H_ShemagOpen_khk","H_ShemagOpen_tan"] call BIS_fnc_selectRandom);};
switch (side _this) do {
case SAR_AI_friendly_side:
{
if ((headGear _this) isEqualTo "Shemag") then {
removeHeadgear _this;
};
};
case SAR_AI_unfriendly_side:
{
removeHeadgear _this;
sleep 0.1;
_this addHeadGear "H_Shemag_olive";
};
default
{
diag_log "Sarge AI: Something went wrong when attempting to determine AI side to change headgear!";
};
};
[_this] spawn SAR_fnc_AI_trace;
_this setIdentity "id_SAR_sold_man";
@ -186,8 +183,8 @@ for "_i" from 0 to (_riflemen - 1) do
// set skills
{
_this setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
} foreach _riflemanskills;
_this setskill [_x select 0,((_x select 1) * (_x select 2))];
} foreach _riflemanSkills;
// store AI type on the AI
_this setVariable ["SAR_AI_type",_ai_type,false];
@ -196,6 +193,67 @@ for "_i" from 0 to (_riflemen - 1) do
_this setVariable ["SAR_AI_experience",0,false];
};
// Prepare sniper AI loadout options
_sniperGender = call compile format ["SAR_%1_sniper_gender", _type];
_sniperSkills = call compile format ["SAR_%1_sniper_skills", _type];
_sniperUniform = call compile format ["SAR_%1_sniper_uniform", _type];
_sniperPrimary = ["sniper",_type] call SAR_unit_loadout_weapons;
_sniperItems = ["sniper",_type] call SAR_unit_loadout_items;
_sniperTools = ["sniper",_type] call SAR_unit_loadout_tools;
// create crew
for "_i" from 0 to (_snipers - 1) do
{
_this = _group createunit [_sniperGender call BIS_fnc_selectRandom, [(_rndpos select 0), _rndpos select 1, 0], [], 0.5, "NONE"];
[_this] joinSilent _group;
sleep 0.5;
_genderUniform = (_sniperUniform select 0) call BIS_fnc_selectRandom;
if (_this isKindOf "Epoch_Female_F") then {_genderUniform = (_sniperUniform select 1) call BIS_fnc_selectRandom;};
[_this,_genderUniform,_sniperPrimary,_sniperItems,_sniperTools] call SAR_unit_loadout;
switch (side _this) do {
case SAR_AI_friendly_side:
{
if ((headGear _this) isEqualTo "Shemag") then {
removeHeadgear _this;
};
};
case SAR_AI_unfriendly_side:
{
removeHeadgear _this;
sleep 0.1;
_this addHeadGear "H_Shemag_olive";
};
default
{
diag_log "Sarge AI: Something went wrong when attempting to determine AI side to change headgear!";
};
};
[_this] spawn SAR_fnc_AI_trace;
_this setIdentity "id_SAR";
[_this] spawn SAR_fnc_AI_refresh;
_this addMPEventHandler ["MPkilled", {Null = _this spawn SAR_fnc_AI_killed;}];
_this addMPEventHandler ["MPHit", {Null = _this spawn SAR_fnc_AI_hit;}];
_this addEventHandler ["HandleDamage",{if (_this select 1!="") then {_unit=_this select 0;damage _unit+((_this select 2)-damage _unit)*1}}];
// set skills
{
_this setskill [_x select 0,((_x select 1) * (_x select 2))];
} foreach _sniperSkills;
// store AI type on the AI
_this setVariable ["SAR_AI_type",_ai_type,false];
// store experience value on AI
_this setVariable ["SAR_AI_experience",0,false];
};
// initialize upsmon for the group
_ups_para_list = [_leader,_patrol_area_name,"NOSHARE","NOFOLLOW","SPAWNED","DELETE:",SAR_DELETE_TIMEOUT];

View File

@ -12,7 +12,7 @@
https://www.hod-servers.com
*/
private ["_riflemenlist","_side","_leader_group","_patrol_area_name","_rndpos","_argc","_grouptype","_respawn","_leader_weapon_names","_leader_items","_leader_tools","_soldier_weapon_names","_soldier_items","_soldier_tools","_leaderskills","_sniperskills","_ups_para_list","_sniperlist","_riflemanskills","_vehicles","_error","_vehicles_crews","_leader","_leadername","_snipers","_riflemen","_veh","_veh_setup","_forEachIndex","_groupvehicles","_sniper_weapon_names","_sniper_items","_sniper_tools","_leader_veh_crew","_type","_respawn_time","_ai_type"];
private ["_riflemenlist","_side","_leader_group","_patrol_area_name","_rndpos","_argc","_grouptype","_respawn","_leaderPrimary","_leaderItems","_leaderTools","_riflemanPrimary","_riflemanItems","_riflemanTools","_leaderskills","_sniperskills","_ups_para_list","_riflemanTools","_riflemanskills","_vehicles","_error","_vehicles_crews","_leader","_leadername","_snipers","_riflemen","_veh","_veh_setup","_forEachIndex","_groupvehicles","_sniperPrimary","_sniperItems","_sniperTools","_leader_veh_crew","_type","_respawn_time","_ai_type"];
//if (!isServer) exitWith {};
@ -88,11 +88,6 @@ if (_argc > 5) then {
if(_error) exitWith {diag_log "SAR_fnc_AI_infantry: Vehicle patrol setup failed, wrong parameters passed!";};
_leaderskills = call compile format ["SAR_leader_%1_skills",_type];
_riflemanskills = call compile format ["SAR_soldier_%1_skills",_type];
_sniperskills = call compile format ["SAR_sniper_%1_skills",_type];
// get a random starting position that is on land
if (SAR_useBlacklist) then {
_rndpos = [_patrol_area_name,0,SAR_Blacklist] call UPSMON_pos;
@ -117,21 +112,43 @@ _groupvehicles = createGroup _side;
// read the crew definition
_veh_setup = _vehicles_crews select _forEachIndex;
_leaderNPC = call compile format ["SAR_leader_%1_list",_type];
// Prepare leader AI loadout options
_leaderGender = call compile format ["SAR_%1_leader_gender", _type];
_leaderSkills = call compile format ["SAR_%1_leader_skills", _type];
_leaderUniform = call compile format ["SAR_%1_leader_uniform", _type];
_leaderPrimary = ["leader",_type] call SAR_unit_loadout_weapons;
_leaderItems = ["leader",_type] call SAR_unit_loadout_items;
_leaderTools = ["leader",_type] call SAR_unit_loadout_tools;
// vehicle is defined to carry the group leader
if((_veh_setup select 0) == 1) then {
if ((_veh_setup select 0) == 1) then {
_leader = _groupvehicles createunit [_leaderNPC call BIS_fnc_selectRandom, [(_rndpos select 0) + 10, _rndpos select 1, 0], [], 0.5, "CAN_COLLIDE"];
_leader = _groupvehicles createunit [_leaderGender call BIS_fnc_selectRandom, [(_rndpos select 0) + 10, _rndpos select 1, 0], [], 0.5, "CAN_COLLIDE"];
_leader_weapon_names = ["leader",_type] call SAR_unit_loadout_weapons;
_leader_items = ["leader",_type] call SAR_unit_loadout_items;
_leader_tools = ["leader",_type] call SAR_unit_loadout_tools;
_genderUniform = (_leaderUniform select 0) call BIS_fnc_selectRandom;
if (_leader isKindOf "Epoch_Female_F") then {_genderUniform = (_leaderUniform select 1) call BIS_fnc_selectRandom;};
[_leader,_genderUniform,_leaderPrimary,_leaderItems,_leaderTools] call SAR_unit_loadout;
[_leader,_leader_weapon_names,_leader_items,_leader_tools] call SAR_unit_loadout;
if (_side == SAR_AI_unfriendly_side) then {removeHeadgear _leader; _leader addHeadGear (["H_Shemag_olive","H_Shemag_olive_hs","H_ShemagOpen_khk","H_ShemagOpen_tan"] call BIS_fnc_selectRandom);};
switch (side _leader) do {
case SAR_AI_friendly_side:
{
if ((headGear _leader) isEqualTo "Shemag") then {
removeHeadgear _leader;
};
};
case SAR_AI_unfriendly_side:
{
removeHeadgear _leader;
sleep 0.1;
_leader addHeadGear "H_Shemag_olive";
};
default
{
diag_log "Sarge AI: Something went wrong when attempting to determine AI side to change headgear!";
};
};
[_leader] spawn SAR_fnc_AI_trace_vehicle;
switch (_grouptype) do
@ -152,8 +169,8 @@ _groupvehicles = createGroup _side;
// set skills of the leader
{
_leader setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
} foreach _leaderskills;
_leader setskill [_x select 0,((_x select 1) * (_x select 2))];
} foreach _leaderSkills;
// store AI type on the AI
_leader setVariable ["SAR_AI_type",_ai_type + " Leader",false];
@ -162,20 +179,111 @@ _groupvehicles = createGroup _side;
_leader setVariable ["SAR_AI_experience",0,false];
};
_riflemen = _veh_setup select 2;
// Establish rifleman unit type and skills
_riflemanGender = call compile format ["SAR_%1_rifleman_gender", _type];
_riflemanSkills = call compile format ["SAR_%1_rifleman_skills", _type];
_riflemanUniform = call compile format ["SAR_%1_rifleman_uniform", _type];
_riflemanPrimary = ["rifleman",_type] call SAR_unit_loadout_weapons;
_riflemanItems = ["rifleman",_type] call SAR_unit_loadout_items;
_riflemanTools = ["rifleman",_type] call SAR_unit_loadout_tools;
for "_i" from 0 to (_riflemen - 1) do
{
_this = _groupvehicles createunit [_riflemanGender call BIS_fnc_selectRandom, [(_rndpos select 0) + 30, _rndpos select 1, 0], [], 0.5, "FORM"];
_genderUniform = (_riflemanUniform select 0) call BIS_fnc_selectRandom;
if (_this isKindOf "Epoch_Female_F") then {_genderUniform = (_riflemanUniform select 1) call BIS_fnc_selectRandom;};
[_this,_genderUniform,_riflemanPrimary,_riflemanItems,_riflemanTools] call SAR_unit_loadout;
switch (side _this) do {
case SAR_AI_friendly_side:
{
if ((headGear _this) isEqualTo "Shemag") then {
removeHeadgear _this;
};
};
case SAR_AI_unfriendly_side:
{
removeHeadgear _this;
sleep 0.1;
_this addHeadGear "H_Shemag_olive";
};
default
{
diag_log "Sarge AI: Something went wrong when attempting to determine AI side to change headgear!";
};
};
[_this] spawn SAR_fnc_AI_trace_vehicle;
switch (_grouptype) do
{
case 1:{_this setIdentity "id_SAR_sold_man";};
case 2:{_this setIdentity "id_SAR_surv_lead";};
case 3:{_this setIdentity "id_SAR_band";};
};
[_this] spawn SAR_fnc_AI_refresh;
_this addMPEventHandler ["MPkilled", {Null = _this spawn SAR_fnc_AI_killed;}];
_this addMPEventHandler ["MPHit", {Null = _this spawn SAR_fnc_AI_hit;}];
[_this] joinSilent _groupvehicles;
// move in vehicle
_this moveInCargo _veh;
_this assignAsCargo _veh;
// set skills
{
_this setskill [_x select 0,((_x select 1) * (_x select 2))];
} foreach _riflemanSkills;
// store AI type on the AI
_this setVariable ["SAR_AI_type",_ai_type,false];
// store experience value on AI
_this setVariable ["SAR_AI_experience",0,false];
};
_snipers = _veh_setup select 1;
_sniperlist = call compile format ["SAR_sniper_%1_list",_type];
// Prepare sniper AI loadout options
_sniperGender = call compile format ["SAR_%1_sniper_gender", _type];
_sniperSkills = call compile format ["SAR_%1_sniper_skills", _type];
_sniperUniform = call compile format ["SAR_%1_sniper_uniform", _type];
_sniperPrimary = ["sniper",_type] call SAR_unit_loadout_weapons;
_sniperItems = ["sniper",_type] call SAR_unit_loadout_items;
_sniperTools = ["sniper",_type] call SAR_unit_loadout_tools;
for "_i" from 0 to (_snipers - 1) do
{
_this = _groupvehicles createunit [_sniperlist call BIS_fnc_selectRandom, [(_rndpos select 0) - 30, _rndpos select 1, 0], [], 0.5, "FORM"];
_this = _groupvehicles createunit [_sniperGender call BIS_fnc_selectRandom, [(_rndpos select 0) - 30, _rndpos select 1, 0], [], 0.5, "FORM"];
_genderUniform = (_sniperUniform select 0) call BIS_fnc_selectRandom;
if (_this isKindOf "Epoch_Female_F") then {_genderUniform = (_sniperUniform select 1) call BIS_fnc_selectRandom;};
[_this,_genderUniform,_sniperPrimary,_sniperItems,_sniperTools] call SAR_unit_loadout;
_sniper_weapon_names = ["sniper",_type] call SAR_unit_loadout_weapons;
_sniper_items = ["sniper",_type] call SAR_unit_loadout_items;
_sniper_tools = ["sniper",_type] call SAR_unit_loadout_tools;
[_this,_sniper_weapon_names,_sniper_items,_sniper_tools] call SAR_unit_loadout;
if (_side == SAR_AI_unfriendly_side) then {removeHeadgear _this; _this addHeadGear (["H_Shemag_olive","H_Shemag_olive_hs","H_ShemagOpen_khk","H_ShemagOpen_tan"] call BIS_fnc_selectRandom);};
switch (side _this) do {
case SAR_AI_friendly_side:
{
if ((headGear _this) isEqualTo "Shemag") then {
removeHeadgear _this;
};
};
case SAR_AI_unfriendly_side:
{
removeHeadgear _this;
sleep 0.1;
_this addHeadGear "H_Shemag_olive";
};
default
{
diag_log "Sarge AI: Something went wrong when attempting to determine AI side to change headgear!";
};
};
[_this] spawn SAR_fnc_AI_trace_vehicle;
switch (_grouptype) do
@ -202,53 +310,8 @@ _groupvehicles = createGroup _side;
// set skills
{
_this setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
} foreach _sniperskills;
// store AI type on the AI
_this setVariable ["SAR_AI_type",_ai_type,false];
// store experience value on AI
_this setVariable ["SAR_AI_experience",0,false];
};
_riflemen = _veh_setup select 2;
_riflemenlist = call compile format ["SAR_soldier_%1_list",_type];
for "_i" from 0 to (_riflemen - 1) do
{
_this = _groupvehicles createunit [_riflemenlist call BIS_fnc_selectRandom, [(_rndpos select 0) + 30, _rndpos select 1, 0], [], 0.5, "FORM"];
_soldier_items = ["rifleman",_type] call SAR_unit_loadout_items;
_soldier_tools = ["rifleman",_type] call SAR_unit_loadout_tools;
_soldier_weapon_names = ["rifleman",_type] call SAR_unit_loadout_weapons;
[_this,_soldier_weapon_names,_soldier_items,_soldier_tools] call SAR_unit_loadout;
if (_side == SAR_AI_unfriendly_side) then {removeHeadgear _this; _this addHeadGear (["H_Shemag_olive","H_Shemag_olive_hs","H_ShemagOpen_khk","H_ShemagOpen_tan"] call BIS_fnc_selectRandom);};
[_this] spawn SAR_fnc_AI_trace_vehicle;
switch (_grouptype) do
{
case 1:{_this setIdentity "id_SAR_sold_man";};
case 2:{_this setIdentity "id_SAR_surv_lead";};
case 3:{_this setIdentity "id_SAR_band";};
};
[_this] spawn SAR_fnc_AI_refresh;
_this addMPEventHandler ["MPkilled", {Null = _this spawn SAR_fnc_AI_killed;}];
_this addMPEventHandler ["MPHit", {Null = _this spawn SAR_fnc_AI_hit;}];
[_this] joinSilent _groupvehicles;
// move in vehicle
_this moveInCargo _veh;
_this assignAsCargo _veh;
// set skills
{
_this setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
} foreach _riflemanskills;
_this setskill [_x select 0,((_x select 1) * (_x select 2))];
} foreach _sniperSkills;
// store AI type on the AI
_this setVariable ["SAR_AI_type",_ai_type,false];

View File

@ -187,18 +187,18 @@ SAR_unit_loadout_weapons = {
_unittype = _this select 0;
_side = _this select 1;
_unit_weapon_list = call compile format["SAR_%2_%1_weapon_list",_unittype,_side];
_unit_pistol_list = call compile format["SAR_%2_%1_pistol_list",_unittype,_side];
_unit_weapon_list = call compile format ["SAR_%2_%1_primary",_unittype,_side];
_unit_pistol_list = call compile format ["SAR_%2_%1_pistol",_unittype,_side];
_unit_weapon_names = [];
_unit_weapon_name = "";
_unit_pistol_name = "";
if(count _unit_weapon_list > 0) then {
_unit_weapon_name = _unit_weapon_list select (floor(random (count _unit_weapon_list)));
if (count _unit_weapon_list > 0) then {
_unit_weapon_name = _unit_weapon_list call BIS_fnc_SelectRandom;
};
if(count _unit_pistol_list > 0) then {
_unit_pistol_name = _unit_pistol_list select (floor(random (count _unit_pistol_list)));
if (count _unit_pistol_list > 0) then {
_unit_pistol_name = _unit_pistol_list call BIS_fnc_SelectRandom;
};
_unit_weapon_names set [0, _unit_weapon_name];
_unit_weapon_names set [1, _unit_pistol_name];
@ -209,26 +209,23 @@ SAR_unit_loadout_weapons = {
SAR_unit_loadout = {
// Parameters:
// _unit (Unit to apply the loadout to)
// _weapons (array with weapons for the loadout)
// _uniform (_uniform to apply the loadout to)
// _primary (array with weapons for the loadout)
// _items (array with items for the loadout)
// _tools (array with tools for the loadout)
private ["_unit","_weapons","_weapon","_items","_unit_magazine_name","_item","_tool","_tools","_forEachIndex"];
private ["_unit","_primary","_uniform","_weapon","_items","_unit_magazine_name","_item","_tool","_tools","_forEachIndex"];
_unit = _this select 0;
_weapons = _this select 1;
_items = _this select 2;
_tools = _this select 3;
removeAllWeapons _unit;
removeAllItems _unit;
removeAllAssignedItems _unit;
removeGoggles _unit;
_unit enableFatigue false;
_uniform = _this select 1;
_primary = _this select 2;
_items = _this select 3;
_tools = _this select 4;
_unit addUniform _uniform;
{
_weapon = _weapons select _forEachIndex;
_weapon = _primary select _forEachIndex;
if (_weapon !="") then
{
@ -236,7 +233,7 @@ SAR_unit_loadout = {
_unit addMagazine _unit_magazine_name;
_unit addWeapon _weapon;
};
} foreach _weapons;
} foreach _primary;
{
_item = _items select _forEachIndex;

View File

@ -12,59 +12,42 @@
https://www.hod-servers.com
*/
private["_sizeX","_sizeY","_snipers","_rifleMen","_sizeOfBase","_marker","_markername","_tMark","_flagPoles","_baseLevel","_baseName"];
private["_sizeX","_sizeY","_snipers","_rifleMen","_marker","_markername","_tMark","_jammer","_baseLevel","_baseName","_spawnRadius","_cfgEpochClient"];
//if (!isServer) exitWith {};
_flagPoles = nearestObjects [getArray (configFile >> "CfgWorlds" >> worldName >> "centerPosition"), ["Exile_Construction_Flag_Static"], 25000];
_jammer = nearestObjects [getArray (configFile >> "CfgWorlds" >> worldName >> "centerPosition"), ["PlotPole_EPOCH"], 25000];
diag_log format ["Sarge AI System: Starting territory guards for %1!",worldName];
diag_log format ["Sarge AI System: Starting b guards for %1!",worldName];
{
_baseName = _x getVariable ["ExileTerritoryName",""];
_sizeOfBase = _x getVariable ["ExileTerritorySize",0];
_fakeFlag = _x getVariable ["ExileDatabaseID", 0];
_cfgEpochClient = 'CfgEpochClient' call EPOCH_returnConfig;
_spawnRadius = getNumber(_cfgEpochClient >> "buildingJammerRange");
_rifleMen = 2;
_snipers = 1;
_sizeX = _spawnRadius;
_sizeY = _spawnRadius;
if (_fakeFlag == 0) then {
} else {
_padding = 5;
_spawnRadius = _sizeOfBase + _padding;
switch (_sizeOfBase) do {
case default {_rifleMen = 1; _snipers = 0; _sizeX = _spawnRadius; _sizeY = _spawnRadius;};
case 15: {_rifleMen = 1; _snipers = 0; _sizeX = _spawnRadius; _sizeY = _spawnRadius;};
case 30: {_rifleMen = 1; _snipers = 0; _sizeX = _spawnRadius; _sizeY = _spawnRadius;};
case 45: {_rifleMen = 2; _snipers = 0; _sizeX = _spawnRadius; _sizeY = _spawnRadius;};
case 60: {_rifleMen = 2; _snipers = 0; _sizeX = _spawnRadius; _sizeY = _spawnRadius;};
case 75: {_rifleMen = 1; _snipers = 1; _sizeX = _spawnRadius; _sizeY = _spawnRadius;};
case 90: {_rifleMen = 1; _snipers = 1; _sizeX = _spawnRadius; _sizeY = _spawnRadius;};
case 105: {_rifleMen = 2; _snipers = 1; _sizeX = _spawnRadius; _sizeY = _spawnRadius;};
case 120: {_rifleMen = 2; _snipers = 1; _sizeX = _spawnRadius; _sizeY = _spawnRadius;};
case 135: {_rifleMen = 2; _snipers = 2; _sizeX = _spawnRadius; _sizeY = _spawnRadius;};
case 150: {_rifleMen = 2; _snipers = 2; _sizeX = _spawnRadius; _sizeY = _spawnRadius;};
};
if (SAR_debug) then {
diag_log format ["Sarge AI System: Now Processing Territory %1 at Location %2 with a size of %3.",_baseName,(getPosATL _x),_sizeOfBase];
};
_baseMarker = format["Gaurd_Marker_%1",_baseName];
_spawnMark = createMarkerLocal [_baseMarker,(getPosATL _x)];
_spawnMark setMarkerShape "ELLIPSE";
_spawnMark setMarkerType "Flag";
_spawnMark setMarkerBrush "Solid";
_spawnMark setMarkerSize [_sizeX,_sizeY];
_spawnMark setMarkeralpha 0;
_behaviors = ["fortify"];
_behavior = _behaviors call BIS_fnc_selectRandom;
[_x,_spawnMark,2,_snipers,_rifleMen,_behavior,false,5200] call SAR_fnc_AI_guards;
s_player_guardToggle = _x addaction [format[("<t color=""#FFFFFF"">" + ("Make guards hostile") +"</t>"),""],"\addons\sarge\code\scripts\toggle_base_guards.sqf",_x,1,false,true,"",""];
if (SAR_debug) then {
diag_log format ["Sarge AI System: Now Processing FequencyJammer at Location %2",(getPosATL _x)];
};
} forEach _flagPoles;
diag_log format ["Sarge AI System: Territory guards have completed successfully!",worldName,(count _flagPoles)];
_baseMarker = format["Gaurd_Marker_%1",_baseName];
_spawnMark = createMarkerLocal [_baseMarker,(getPosATL _x)];
_spawnMark setMarkerShape "ELLIPSE";
_spawnMark setMarkerType "Flag";
_spawnMark setMarkerBrush "Solid";
_spawnMark setMarkerSize [_sizeX,_sizeY];
_spawnMark setMarkeralpha 0;
_behaviors = ["fortify"];
_behavior = _behaviors call BIS_fnc_selectRandom;
[_x,_spawnMark,2,_snipers,_rifleMen,_behavior,false,5200] call SAR_fnc_AI_guards;
s_player_guardToggle = _x addaction [format[("<t color=""#FFFFFF"">" + ("Fire at Will!") +"</t>"),""],"\addons\sarge\code\scripts\toggle_base_guards.sqf",_x,1,false,true,"",""];
} forEach _jammer;
diag_log format ["Sarge AI System: Territory guards have completed successfully!",worldName,(count _jammer)];

View File

@ -105,9 +105,9 @@ if (_type == "static") then {
diag_log format["Sarge's AI System: Static Spawning for infantry patrols started"];
// These are safe zone guards only! Notice the call --> call SAR_fnc_AI_traders
/* [SAR_marker_MafiaTraderCity_Fortify,1,0,0,"fortify",true] call SAR_fnc_AI_traders;
[SAR_marker_MafiaTraderCity_Fortify,1,0,0,"fortify",true] call SAR_fnc_AI_traders;
[SAR_marker_MafiaTraderCity_Fortify,1,0,0,"fortify",true] call SAR_fnc_AI_traders;
[SAR_marker_MafiaTraderCity_Fortify,1,0,0,"fortify",true] call SAR_fnc_AI_traders;
[SAR_marker_MafiaTraderCity_Fortify,1,0,0,"fortify",true] call SAR_fnc_AI_traders; */
// Hotel Mission AI
/* [SAR_marker_Hotel_Mission,1,floor(round(random 1)),floor(round(random 1)),["fortify","patrol","ambush"] call BIS_fnc_selectRandom,true,random 60] call SAR_fnc_AI_infantry;

View File

@ -1,38 +1,42 @@
private["_authorizedUID","_authorizedPUID","_flagRadius","_attackAllToggle","_tGuard","_isBaseGuard","_flag","_nearestGuards","_friendlyPlayers"];
private["_authorizedUID","_authorizedPUID","_attackAllToggle","_isBaseGuard","_flag","_nearestGuards","_friendlyPlayers"];
_flag = _this select 0;
_authorizedUID = _flag getVariable ["ExileTerritoryBuildRights", []];
_authorizedPUID = _authorizedUID select 0;
_flagRadius = _flag getVariable ["ExileTerritorySize",""];;
_isBaseGuard = false;
if (!(isNull _flag)) then {
_nearestGuards = (getPosATL _flag) nearEntities [["AllVehicles","CAManBase"], _flagRadius + 100];
_nearestGuards = (getPosATL _flag) nearEntities [["AllVehicles","CAManBase"], 110];
} else {
_nearestGuards = (getPosATL player) nearEntities [["AllVehicles","CAManBase"], _flagRadius + 100];
_nearestGuards = (getPosATL player) nearEntities [["AllVehicles","CAManBase"], 110];
};
if (count _nearestGuards > 0) then {
{
_tGuard = _x;
if (!(isPlayer _tGuard)) then {
_friendlyPlayers = _tGuard getVariable ["SAR_FLAG_FRIENDLY", []];
// If group has array
if (!(isPlayer _x)) then {
_friendlyPlayers = _x getVariable ["SAR_FLAG_FRIENDLY", []];
// Check group array for player
if (count _friendlyPlayers > 0) then {
{
if (_x in _friendlyPlayers) exitWith {
_isBaseGuard = true; // Guard is part of the base owners guards
};
} foreach _authorizedPUID;
// Toggle his attack mode
if (_isBaseGuard) then {
_attackAllToggle = _tGuard getVariable ["ATTACK_ALL", true];
_attackAllToggle = _x getVariable ["ATTACK_ALL", true];
if (_attackAllToggle) then {
_tGuard setVariable ["ATTACK_ALL", false, true];
cutText ["Guards will only attack those who attack it.\nGive them 15-20 seconds to receive orders.", "PLAIN DOWN"];
hintsilent "Guards will only attack those who attack it.\nGive them 15-20 seconds to receive orders.";
_x setVariable ["ATTACK_ALL", false, true];
cutText ["Guards will only attack those who attack them.", "PLAIN DOWN"];
hintsilent "Guards will only attack those who attack them.";
Breakout "exit";
} else {
_tGuard setVariable ["ATTACK_ALL", true, true];
cutText ["Guards will attack any players or npcs that is not tied to FlagPole.\nGive them 15-20 seconds to receive orders.", "PLAIN DOWN"];
hintsilent "Guards will attack any players or npcs that is not tied to FlagPole.\nGive them 15-20 seconds to receive orders.";
_x setVariable ["ATTACK_ALL", true, true];
cutText ["Guards will attack anyone that is not in your group.", "PLAIN DOWN"];
hintsilent "Guards will attack anyone that is not in your group.";
Breakout "exit";
};
};
@ -41,4 +45,7 @@ if (count _nearestGuards > 0) then {
} forEach _nearestGuards;
cutText ["No guards were found in the area", "PLAIN DOWN"];
hintsilent "No guards were found in the area";
} else {cutText ["No guards in the area", "PLAIN DOWN"]; hintsilent "No guards were found in the area";};
} else {
cutText ["No guards in the area", "PLAIN DOWN"];
hintsilent "No guards were found in the area";
};

View File

@ -17,7 +17,7 @@
- Secondary AI skills can be decimal values i.e. 0.23
- Lower time intervals for detections require more CPU resources
*/
SAR_version = "2.2.8";
SAR_version = "2.2.9";
SAR_HC = true; // If there is no HC it will spawn on server automatically
// TODO: Create dynamic map support for any map
@ -43,9 +43,9 @@ SAR_AI_disable_UPSMON_AI = false; // Turn off UPSMON scripts for all AI ! May
SAR_respawn_waittime = 300; // How long to wait before dynamic AI respawns
SAR_DESPAWN_TIMEOUT = 120; // How long to wait before despawning dynamic AI
SAR_DELETE_TIMEOUT = 600; // How long to wait before deleting dead AI
SAR_surv_kill_value = 50; // How much respect players lose if killing friendly AI
SAR_band_kill_value = 100; // How much respect players gain if killing hostile AI
SAR_RESPECT_HOSTILE_LIMIT = -2500; // Friendly AI will shoot at players with respect below this number
SAR_surv_kill_value = 20; // How much respect players lose if killing friendly AI
SAR_band_kill_value = 10; // How much respect players gain if killing hostile AI
SAR_RESPECT_HOSTILE_LIMIT = -60; // Friendly AI will shoot at players with respect below this number
SAR_REAMMO_INTERVAL = 30; // How often AI will replenish their ammo
SAR_DETECT_HOSTILE = 200; // How far away AI can detect hostile AI & players
SAR_DETECT_INTERVAL = 10; // How often AI can detect AI & players
@ -63,7 +63,7 @@ SAR_max_grps_soldiers = 2; // Total groups per grid
SAR_max_grps_survivors = 2; // Total groups per grid
// Size of AI groups plus a leader
SAR_max_grpsize_bandits = 3; // Size of the group If using HC use +1 at least to offset AI side bug only for bandits
SAR_max_grpsize_bandits = 3; // Size of the group !If using HC use +1 at least to offset AI side bug only for bandits!
SAR_max_grpsize_soldiers = 2; // Size of the group
SAR_max_grpsize_survivors = 2; // Size of the group
@ -94,199 +94,201 @@ SAR_AI_XP_ARMOR_3 = 0.3;
// Bonus factors for leaders
SAR_leader_health_factor = 1; // values: 0.1 - 1, 1 = no change, 0.5 = damage taken reduced by 50%, 0.1 = damage taken reduced by 90% - EXPERIMENTAL
// military AI
SAR_leader_sold_skills = [
["aimingAccuracy",0.35, 0], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.35, 0],
["aimingSpeed", 0.35, 0],
["spotDistance", 0.35, 0],
["spotTime", 0.35, 0],
["endurance", 0.35, 0],
["courage", 0.35, 0],
["reloadSpeed", 0.35, 0],
["commanding", 0.35, 0],
["general", 0.35, 0]
];
SAR_soldier_sold_skills = [
["aimingAccuracy",0.35, 0], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.35, 0],
["aimingSpeed", 0.35, 0],
["spotDistance", 0.35, 0],
["spotTime", 0.35, 0],
["endurance", 0.35, 0],
["courage", 0.35, 0],
["reloadSpeed", 0.35, 0],
["commanding", 0.35, 0],
["general", 0.35, 0]
];
SAR_sniper_sold_skills = [
["aimingAccuracy",0.35, 0], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.35, 0],
["aimingSpeed", 0.35, 0],
["spotDistance", 0.35, 0],
["spotTime", 0.35, 0],
["endurance", 0.35, 0],
["courage", 0.35, 0],
["reloadSpeed", 0.35, 0],
["commanding", 0.35, 0],
["general", 0.35, 0]
];
// bandit AI
SAR_leader_band_skills = [
["aimingAccuracy",0.35, 0], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.35, 0],
["aimingSpeed", 0.35, 0],
["spotDistance", 0.35, 0],
["spotTime", 0.35, 0],
["endurance", 0.35, 0],
["courage", 0.35, 0],
["reloadSpeed", 0.35, 0],
["commanding", 0.35, 0],
["general", 0.35, 0]
];
SAR_soldier_band_skills = [
["aimingAccuracy",0.35, 0], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.35, 0],
["aimingSpeed", 0.35, 0],
["spotDistance", 0.35, 0],
["spotTime", 0.35, 0],
["endurance", 0.35, 0],
["courage", 0.35, 0],
["reloadSpeed", 0.35, 0],
["commanding", 0.35, 0],
["general", 0.35, 0]
];
SAR_sniper_band_skills = [
["aimingAccuracy",0.35, 0], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.35, 0],
["aimingSpeed", 0.35, 0],
["spotDistance", 0.35, 0],
["spotTime", 0.35, 0],
["endurance", 0.35, 0],
["courage", 0.35, 0],
["reloadSpeed", 0.35, 0],
["commanding", 0.35, 0],
["general", 0.35, 0]
];
// survivor AI
SAR_leader_surv_skills = [
["aimingAccuracy",0.35, 0], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.35, 0],
["aimingSpeed", 0.35, 0],
["spotDistance", 0.35, 0],
["spotTime", 0.35, 0],
["endurance", 0.35, 0],
["courage", 0.35, 0],
["reloadSpeed", 0.35, 0],
["commanding", 0.35, 0],
["general", 0.35, 0]
];
SAR_soldier_surv_skills = [
["aimingAccuracy",0.35, 0], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.35, 0],
["aimingSpeed", 0.35, 0],
["spotDistance", 0.35, 0],
["spotTime", 0.35, 0],
["endurance", 0.35, 0],
["courage", 0.35, 0],
["reloadSpeed", 0.35, 0],
["commanding", 0.35, 0],
["general", 0.35, 0]
];
SAR_sniper_surv_skills = [
["aimingAccuracy",0.35, 0], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.35, 0],
["aimingSpeed", 0.35, 0],
["spotDistance", 0.35, 0],
["spotTime", 0.35, 0],
["endurance", 0.35, 0],
["courage", 0.35, 0],
["reloadSpeed", 0.35, 0],
["commanding", 0.35, 0],
["general", 0.35, 0]
];
// Military AI ----------------------------------------------------------
// ----------------------------------------------------------------------
SAR_leader_sold_list = ["B_officer_F"];
SAR_sniper_sold_list = ["B_ghillie_lsh_F","B_sniper_F"];
SAR_soldier_sold_list = ["B_G_medic_F","B_G_engineer_F","b_soldier_survival_F","B_G_Soldier_TL_F"];
SAR_sold_leader_weapon_list = ["arifle_Katiba_F","arifle_Mk20_F","arifle_MXC_F","arifle_MX_F","arifle_TRG21_F","arifle_TRG20_F"];
SAR_sold_leader_pistol_list = [];
SAR_sold_leader_items = [];
SAR_sold_leader_tools = [["ItemMap",50],["ItemCompass",30],["NVGoggles",5],["ItemRadio",100]];
SAR_sold_rifleman_weapon_list = ["arifle_Katiba_F","arifle_Mk20_F","arifle_MXC_F","arifle_MX_F","arifle_TRG21_F","arifle_TRG20_F"];
SAR_sold_rifleman_pistol_list = [];
SAR_sold_rifleman_items = [];
SAR_sold_rifleman_tools = [["ItemMap",50],["ItemCompass",30]];
SAR_sold_sniper_weapon_list = ["srifle_DMR_02_F","arifle_MXM_F","srifle_DMR_04_F"];
SAR_sold_sniper_pistol_list = [];
SAR_sold_sniper_items = [];
SAR_sold_sniper_tools = [["ItemMap",50],["ItemCompass",30]];
// Survivor AI ----------------------------------------------------------
// ---------------------------------------------------------------------
SAR_leader_surv_list = ["B_G_Soldier_A_F"];
SAR_sniper_surv_list = ["B_G_Soldier_LAT_F"];
SAR_soldier_surv_list = ["B_G_Soldier_M_F"];
SAR_surv_leader_weapon_list = ["arifle_Katiba_F","arifle_Mk20_F","arifle_MXC_F","arifle_MX_F","arifle_TRG21_F","arifle_TRG20_F"];
SAR_surv_leader_pistol_list = [];
SAR_surv_leader_items = [];
SAR_surv_leader_tools = [["ItemMap",50],["ItemCompass",30],["NVGoggles",5],["ItemRadio",100]];
SAR_surv_rifleman_weapon_list = ["arifle_Katiba_F","arifle_Mk20_F","arifle_MXC_F","arifle_MX_F","arifle_TRG21_F","arifle_TRG20_F"];
SAR_surv_rifleman_pistol_list = [];
SAR_surv_rifleman_items = [];
SAR_surv_rifleman_tools = [["ItemMap",50],["ItemCompass",30]];
SAR_surv_sniper_weapon_list = ["srifle_DMR_02_F","arifle_MXM_F","srifle_DMR_04_F"];
SAR_surv_sniper_pistol_list = [];
SAR_surv_sniper_items = [];
SAR_surv_sniper_tools = [["ItemMap",50],["ItemCompass",30]];
// Hostile AI ----------------------------------------------------------
// ---------------------------------------------------------------------
SAR_leader_band_list = ["O_G_Soldier_lite_F"];
SAR_sniper_band_list = ["O_G_Soldier_lite_F"];
SAR_soldier_band_list = ["O_G_Soldier_lite_F"];
SAR_band_leader_weapon_list = ["arifle_Katiba_F","arifle_Mk20_F","arifle_MXC_F","arifle_MX_F","arifle_TRG21_F","arifle_TRG20_F"];
SAR_band_leader_pistol_list = [];
SAR_band_leader_items = [];
SAR_band_leader_tools = [["ItemMap",50],["ItemCompass",30],["NVGoggles",5],["ItemRadio",100]];
SAR_band_rifleman_weapon_list = ["arifle_Katiba_F","arifle_Mk20_F","arifle_MXC_F","arifle_MX_F","arifle_TRG21_F","arifle_TRG20_F"];
SAR_band_rifleman_pistol_list = [];
SAR_band_rifleman_items = [];
SAR_band_rifleman_tools = [["ItemMap",50],["ItemCompass",30]];
SAR_band_sniper_weapon_list = ["srifle_DMR_02_F","arifle_MXM_F","srifle_DMR_04_F"];
SAR_band_sniper_pistol_list = [];
SAR_band_sniper_items = [];
SAR_band_sniper_tools = [["ItemMap",50],["ItemCompass",30]];
// Helicopter Types ----------------------------------------------------
// ---------------------------------------------------------------------
SAR_heli_type = ["O_Heli_Light_02_unarmed_EPOCH"];
// ---------------------------------------------------------------------
// Military AI ---------------------------------------------------------
// ---------------------------------------------------------------------
// Leader lodout options
SAR_sold_leader_gender = ["Epoch_Male_F","Epoch_Female_F"]; // DO NOT CHANGE THIS ARRAY!
SAR_sold_leader_uniform = [["U_I_C_Soldier_Para_1_F","U_I_C_Soldier_Para_2_F","U_I_C_Soldier_Para_3_F","U_I_C_Soldier_Para_4_F"],["U_Camo_uniform"]];
SAR_sold_leader_primary = ["arifle_Katiba_F","arifle_Mk20_F","arifle_MXC_F","arifle_MX_F","arifle_TRG21_F","arifle_TRG20_F"];
SAR_sold_leader_pistol = [];
SAR_sold_leader_items = [];
SAR_sold_leader_tools = [["ItemMap",50],["ItemCompass",30],["NVGoggles",5],["ItemRadio",100]];
SAR_sold_leader_skills = [
["aimingAccuracy",0.10, round(random 2)], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.10, round(random 2)],
["aimingSpeed", 0.10, round(random 2)],
["spotDistance", 0.10, round(random 2)],
["spotTime", 0.10, round(random 2)],
["endurance", 0.10, round(random 2)],
["courage", 0.10, round(random 2)],
["reloadSpeed", 0.10, round(random 2)],
["commanding", 0.10, round(random 2)],
["general", 0.10, round(random 2)]
];
// Riflemen loadout options
SAR_sold_rifleman_gender = ["Epoch_Male_F","Epoch_Female_F"]; // DO NOT CHANGE THIS ARRAY!
SAR_sold_rifleman_uniform = [["U_I_C_Soldier_Para_1_F","U_I_C_Soldier_Para_2_F","U_I_C_Soldier_Para_3_F","U_I_C_Soldier_Para_4_F"],["U_Camo_uniform"]];
SAR_sold_rifleman_primary = ["arifle_Katiba_F","arifle_Mk20_F","arifle_MXC_F","arifle_MX_F","arifle_TRG21_F","arifle_TRG20_F"];
SAR_sold_rifleman_pistol = [];
SAR_sold_rifleman_items = [];
SAR_sold_rifleman_tools = [["ItemMap",50],["ItemCompass",30]];
SAR_sold_rifleman_skills = [
["aimingAccuracy",0.10, round(random 2)], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.10, round(random 2)],
["aimingSpeed", 0.10, round(random 2)],
["spotDistance", 0.10, round(random 2)],
["spotTime", 0.10, round(random 2)],
["endurance", 0.10, round(random 2)],
["courage", 0.10, round(random 2)],
["reloadSpeed", 0.10, round(random 2)],
["commanding", 0.10, round(random 2)],
["general", 0.10, round(random 2)]
];
// Sniper loadout options
SAR_sold_sniper_gender = ["Epoch_Male_F","Epoch_Female_F"]; // DO NOT CHANGE THIS ARRAY!
SAR_sold_sniper_uniform = [["U_O_FullGhillie_lsh","U_O_FullGhillie_sard","U_O_FullGhillie_ard","U_I_FullGhillie_lsh","U_I_FullGhillie_sard","U_I_FullGhillie_ard"],["U_ghillie1_uniform","U_ghillie2_uniform","U_ghillie3_uniform"]];
SAR_sold_sniper_primary = ["srifle_DMR_02_F","arifle_MXM_F","srifle_DMR_04_F"];
SAR_sold_sniper_pistol = [];
SAR_sold_sniper_items = [];
SAR_sold_sniper_tools = [["ItemMap",50],["ItemCompass",30]];
SAR_sold_sniper_skills = [
["aimingAccuracy",0.10, round(random 2)], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.10, round(random 2)],
["aimingSpeed", 0.10, round(random 2)],
["spotDistance", 0.10, round(random 2)],
["spotTime", 0.10, round(random 2)],
["endurance", 0.10, round(random 2)],
["courage", 0.10, round(random 2)],
["reloadSpeed", 0.10, round(random 2)],
["commanding", 0.10, round(random 2)],
["general", 0.10, round(random 2)]
];
// ---------------------------------------------------------------------
// Survivor AI ---------------------------------------------------------
// ---------------------------------------------------------------------
// Leader lodout options
SAR_surv_leader_gender = ["Epoch_Male_F","Epoch_Female_F"]; // DO NOT CHANGE THIS ARRAY!
SAR_surv_leader_uniform = [["U_C_Mechanic_01_F","U_C_IDAP_Man_Jeans_F","U_C_Man_casual_1_F","U_C_Man_casual_2_F","U_C_Man_casual_3_F","U_C_Journalist","U_C_HunterBody_grn"],["U_CamoBlue_uniform","U_CamoBrn_uniform"]];
SAR_surv_leader_primary = ["arifle_Katiba_F","arifle_Mk20_F","arifle_MXC_F","arifle_MX_F","arifle_TRG21_F","arifle_TRG20_F"];
SAR_surv_leader_pistol = [];
SAR_surv_leader_items = [];
SAR_surv_leader_tools = [["ItemMap",50],["ItemCompass",30],["NVGoggles",5],["ItemRadio",100]];
SAR_surv_leader_skills = [
["aimingAccuracy",0.10, round(random 2)], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.10, round(random 2)],
["aimingSpeed", 0.10, round(random 2)],
["spotDistance", 0.10, round(random 2)],
["spotTime", 0.10, round(random 2)],
["endurance", 0.10, round(random 2)],
["courage", 0.10, round(random 2)],
["reloadSpeed", 0.10, round(random 2)],
["commanding", 0.10, round(random 2)],
["general", 0.10, round(random 2)]
];
// Riflemen loadout options
SAR_surv_rifleman_gender = ["Epoch_Male_F","Epoch_Female_F"]; // DO NOT CHANGE THIS ARRAY!
SAR_surv_rifleman_uniform = [["U_C_Mechanic_01_F","U_C_IDAP_Man_Jeans_F","U_C_Man_casual_1_F","U_C_Man_casual_2_F","U_C_Man_casual_3_F","U_C_Journalist","U_C_HunterBody_grn"],["U_CamoBlue_uniform","U_CamoBrn_uniform"]];
SAR_surv_rifleman_primary = ["arifle_Katiba_F","arifle_Mk20_F","arifle_MXC_F","arifle_MX_F","arifle_TRG21_F","arifle_TRG20_F"];
SAR_surv_rifleman_pistol = [];
SAR_surv_rifleman_items = [];
SAR_surv_rifleman_tools = [["ItemMap",50],["ItemCompass",30]];
SAR_surv_rifleman_skills = [
["aimingAccuracy",0.10, round(random 2)], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.10, round(random 2)],
["aimingSpeed", 0.10, round(random 2)],
["spotDistance", 0.10, round(random 2)],
["spotTime", 0.10, round(random 2)],
["endurance", 0.10, round(random 2)],
["courage", 0.10, round(random 2)],
["reloadSpeed", 0.10, round(random 2)],
["commanding", 0.10, round(random 2)],
["general", 0.10, round(random 2)]
];
// Sniper loadout options
SAR_surv_sniper_gender = ["Epoch_Male_F","Epoch_Female_F"]; // DO NOT CHANGE THIS ARRAY!
SAR_surv_sniper_uniform = [["U_C_Mechanic_01_F","U_C_IDAP_Man_Jeans_F","U_C_Man_casual_1_F","U_C_Man_casual_2_F","U_C_Man_casual_3_F","U_C_Journalist","U_C_HunterBody_grn"],["U_CamoBlue_uniform","U_CamoBrn_uniform"]];
SAR_surv_sniper_primary = ["srifle_DMR_02_F","arifle_MXM_F","srifle_DMR_04_F"];
SAR_surv_sniper_pistol = [];
SAR_surv_sniper_items = [];
SAR_surv_sniper_tools = [["ItemMap",50],["ItemCompass",30]];
SAR_surv_sniper_skills = [
["aimingAccuracy",0.10, round(random 2)], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.10, round(random 2)],
["aimingSpeed", 0.10, round(random 2)],
["spotDistance", 0.10, round(random 2)],
["spotTime", 0.10, round(random 2)],
["endurance", 0.10, round(random 2)],
["courage", 0.10, round(random 2)],
["reloadSpeed", 0.10, round(random 2)],
["commanding", 0.10, round(random 2)],
["general", 0.10, round(random 2)]
];
// ---------------------------------------------------------------------
// Hostile AI ----------------------------------------------------------
// ---------------------------------------------------------------------
// Leader lodout options
SAR_band_leader_gender = ["Epoch_Male_F","Epoch_Female_F"]; // DO NOT CHANGE THIS ARRAY!
SAR_band_leader_uniform = [["U_I_C_Soldier_Bandit_1_F","U_I_C_Soldier_Bandit_2_F","U_I_C_Soldier_Bandit_3_F","U_I_C_Soldier_Bandit_4_F","U_I_C_Soldier_Bandit_5_F"],["U_CamoBiker_uniform"]];
SAR_band_leader_primary = ["arifle_Katiba_F","arifle_Mk20_F","arifle_MXC_F","arifle_MX_F","arifle_TRG21_F","arifle_TRG20_F"];
SAR_band_leader_pistol = [];
SAR_band_leader_items = [];
SAR_band_leader_tools = [["ItemMap",50],["ItemCompass",30],["NVGoggles",5],["ItemRadio",100]];
SAR_band_leader_skills = [
["aimingAccuracy",0.10, round(random 2)], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.10, round(random 2)],
["aimingSpeed", 0.10, round(random 2)],
["spotDistance", 0.10, round(random 2)],
["spotTime", 0.10, round(random 2)],
["endurance", 0.10, round(random 2)],
["courage", 0.10, round(random 2)],
["reloadSpeed", 0.10, round(random 2)],
["commanding", 0.10, round(random 2)],
["general", 0.10, round(random 2)]
];
// Riflemen loadout options
SAR_band_rifleman_gender = ["Epoch_Male_F","Epoch_Female_F"]; // DO NOT CHANGE THIS ARRAY!
SAR_band_rifleman_uniform = [["U_I_C_Soldier_Bandit_1_F","U_I_C_Soldier_Bandit_2_F","U_I_C_Soldier_Bandit_3_F","U_I_C_Soldier_Bandit_4_F","U_I_C_Soldier_Bandit_5_F"],["U_CamoBiker_uniform"]];
SAR_band_rifleman_primary = ["arifle_Katiba_F","arifle_Mk20_F","arifle_MXC_F","arifle_MX_F","arifle_TRG21_F","arifle_TRG20_F"];
SAR_band_rifleman_pistol = [];
SAR_band_rifleman_items = [];
SAR_band_rifleman_tools = [["ItemMap",50],["ItemCompass",30]];
SAR_band_rifleman_skills = [
["aimingAccuracy",0.10, round(random 2)], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.10, round(random 2)],
["aimingSpeed", 0.10, round(random 2)],
["spotDistance", 0.10, round(random 2)],
["spotTime", 0.10, round(random 2)],
["endurance", 0.10, round(random 2)],
["courage", 0.10, round(random 2)],
["reloadSpeed", 0.10, round(random 2)],
["commanding", 0.10, round(random 2)],
["general", 0.10, round(random 2)]
];
// Sniper loadout options
SAR_band_sniper_gender = ["Epoch_Male_F","Epoch_Female_F"]; // DO NOT CHANGE THIS ARRAY!
SAR_band_sniper_uniform = [["U_I_C_Soldier_Bandit_1_F","U_I_C_Soldier_Bandit_2_F","U_I_C_Soldier_Bandit_3_F","U_I_C_Soldier_Bandit_4_F","U_I_C_Soldier_Bandit_5_F"],["U_CamoBiker_uniform"]];
SAR_band_sniper_primary = ["srifle_DMR_02_F","arifle_MXM_F","srifle_DMR_04_F"];
SAR_band_sniper_pistol = [];
SAR_band_sniper_items = [];
SAR_band_sniper_tools = [["ItemMap",50],["ItemCompass",30]];
SAR_band_sniper_skills = [
["aimingAccuracy",0.10, round(random 2)], // skilltype, <min value>, <random value added to min>;
["aimingShake", 0.10, round(random 2)],
["aimingSpeed", 0.10, round(random 2)],
["spotDistance", 0.10, round(random 2)],
["spotTime", 0.10, round(random 2)],
["endurance", 0.10, round(random 2)],
["courage", 0.10, round(random 2)],
["reloadSpeed", 0.10, round(random 2)],
["commanding", 0.10, round(random 2)],
["general", 0.10, round(random 2)]
];
/* -------------------------------- Do Not Edit Below. If you do the AI will not work properly. -------------------------------- */
/* -------------------------------- Do Not Edit Below. If you do the AI will not work properly. -------------------------------- */