mirror of
https://github.com/Teh-Dango/Sarge-AI.git
synced 2024-08-30 16:32:11 +00:00
2.3.0
see readme
This commit is contained in:
20
changeLog.md
20
changeLog.md
@ -1,10 +1,18 @@
|
|||||||
#### 3.0 Rolling
|
#### 2.2.9
|
||||||
- Small code improvements.
|
- [Fix] Fixed a bug causing friendly AI to have head wraps.
|
||||||
- No longer developed soley for Exile mod.
|
- [New] AI women have been added to the spawn function.
|
||||||
- Possible move to Arma 3 Workshop.
|
- [Change] AI Skills decreased to 10% multiplied by a maximum of 2 bringing the highest possible skill level to 20%.
|
||||||
- Loot spawn added for Animated Crash Sites.
|
- [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.
|
- [Fix] Static infantry now spawn as intended.
|
||||||
- [Update] UPSMON scripts have been merged with the Sarge PBO.
|
- [Update] UPSMON scripts have been merged with the Sarge PBO.
|
||||||
|
|
||||||
|
@ -12,27 +12,33 @@
|
|||||||
https://www.hod-servers.com
|
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 {};
|
//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;
|
_argc = count _this;
|
||||||
_flagPole = _this select 0;
|
_flagPole = _this select 0;
|
||||||
_patrol_area_name = _this select 1;
|
_patrol_area_name = _this select 1;
|
||||||
_grouptype = _this select 2;
|
_grouptype = _this select 2;
|
||||||
_snipers = _this select 3;
|
_snipers = _this select 3;
|
||||||
_riflemen = _this select 4;
|
_riflemen = _this select 4;
|
||||||
_action = tolower (_this select 5);
|
_action = tolower (_this select 5);
|
||||||
_respawn = _this select 6;
|
_respawn = _this select 6;
|
||||||
if (_argc > 7) then {
|
if (_argc > 7) then {
|
||||||
_respawn_time = _this select 7;
|
_respawn_time = _this select 7;
|
||||||
} else {
|
} 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
|
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;
|
[_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] spawn SAR_fnc_AI_trace_base;
|
||||||
_leader setIdentity "id_SAR_sold_lead";
|
_leader setIdentity "id_SAR_sold_lead";
|
||||||
[_leader] spawn SAR_fnc_AI_refresh;
|
[_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;
|
[_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] spawn SAR_fnc_AI_trace_base;
|
||||||
_this setIdentity "id_SAR";
|
_this setIdentity "id_SAR";
|
||||||
[_this] spawn SAR_fnc_AI_refresh;
|
[_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;
|
[_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] spawn SAR_fnc_AI_trace_base;
|
||||||
_this setIdentity "id_SAR_sold_man";
|
_this setIdentity "id_SAR_sold_man";
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
https://www.hod-servers.com
|
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 {};
|
//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!";};
|
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
|
// get a random starting position that is on land
|
||||||
if (SAR_useBlacklist) then {
|
if (SAR_useBlacklist) then {
|
||||||
_rndpos = [_patrol_area_name,0,SAR_Blacklist] call UPSMON_pos;
|
_rndpos = [_patrol_area_name,0,SAR_Blacklist] call UPSMON_pos;
|
||||||
@ -96,11 +86,42 @@ _heli setVehicleAmmo 1;
|
|||||||
[_heli] joinSilent _groupheli;
|
[_heli] joinSilent _groupheli;
|
||||||
sleep 1;
|
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;
|
[_leader] spawn SAR_fnc_AI_trace_vehicle;
|
||||||
switch (_grouptype) do
|
switch (_grouptype) do
|
||||||
@ -114,15 +135,12 @@ switch (_grouptype) do
|
|||||||
_leader addMPEventHandler ["MPkilled", {Null = _this spawn SAR_fnc_AI_killed;}];
|
_leader addMPEventHandler ["MPkilled", {Null = _this spawn SAR_fnc_AI_killed;}];
|
||||||
_leader addMPEventHandler ["MPHit", {Null = _this spawn SAR_fnc_AI_hit;}];
|
_leader addMPEventHandler ["MPHit", {Null = _this spawn SAR_fnc_AI_hit;}];
|
||||||
|
|
||||||
_leader moveInDriver _heli;
|
|
||||||
_leader assignAsDriver _heli;
|
|
||||||
|
|
||||||
[_leader] joinSilent _groupheli;
|
[_leader] joinSilent _groupheli;
|
||||||
|
|
||||||
// set skills of the leader
|
// 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;
|
} foreach _leaderSkills;
|
||||||
|
|
||||||
// store AI type on the AI
|
// store AI type on the AI
|
||||||
_leader setVariable ["SAR_AI_type",_ai_type + " Leader",false];
|
_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
|
// store experience value on AI
|
||||||
_leader setVariable ["SAR_AI_experience",0,false];
|
_leader setVariable ["SAR_AI_experience",0,false];
|
||||||
|
|
||||||
// set behaviour & speedmode
|
// Establish rifleman unit type and skills
|
||||||
_leader setspeedmode "FULL";
|
_riflemanGender = call compile format ["SAR_%1_rifleman_gender", _type];
|
||||||
_leader setBehaviour "AWARE";
|
_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
|
// Gunner 1
|
||||||
_man2heli = _groupheli createunit [_riflemenlist call BIS_fnc_selectRandom, [(_rndpos select 0) - 30, _rndpos select 1, 0], [], 0.5, "CAN_COLLIDE"];
|
_man2heli = _groupheli createunit [_riflemanGender 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 moveInTurret [_heli,[0]];
|
_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;
|
[_man2heli] spawn SAR_fnc_AI_trace_vehicle;
|
||||||
switch (_grouptype) do
|
switch (_grouptype) do
|
||||||
{
|
{
|
||||||
@ -163,8 +201,8 @@ _man2heli addMPEventHandler ["MPHit", {Null = _this spawn SAR_fnc_AI_hit;}];
|
|||||||
|
|
||||||
// set skills
|
// set skills
|
||||||
{
|
{
|
||||||
_man2heli setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
|
_man2heli setskill [_x select 0,((_x select 1) * (_x select 2))];
|
||||||
} foreach _sniperskills;
|
} foreach _riflemanSkills;
|
||||||
|
|
||||||
// store AI type on the AI
|
// store AI type on the AI
|
||||||
_man2heli setVariable ["SAR_AI_type",_ai_type,false];
|
_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];
|
_man2heli setVariable ["SAR_AI_experience",0,false];
|
||||||
|
|
||||||
//Gunner 2
|
//Gunner 2
|
||||||
_man3heli = _groupheli createunit [_riflemenlist call BIS_fnc_selectRandom, [_rndpos select 0, (_rndpos select 1) + 30, 0], [], 0.5, "CAN_COLLIDE"];
|
_man3heli = _groupheli createunit [_riflemanGender 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 moveInTurret [_heli,[1]];
|
_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;
|
[_man3heli] spawn SAR_fnc_AI_trace_vehicle;
|
||||||
switch (_grouptype) do
|
switch (_grouptype) do
|
||||||
{
|
{
|
||||||
@ -201,8 +255,8 @@ _man3heli addMPEventHandler ["MPHit", {Null = _this spawn SAR_fnc_AI_hit;}];
|
|||||||
|
|
||||||
// set skills
|
// set skills
|
||||||
{
|
{
|
||||||
_man3heli setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
|
_man3heli setskill [_x select 0,((_x select 1) * (_x select 2))];
|
||||||
} foreach _sniperskills;
|
} foreach _riflemanskills;
|
||||||
|
|
||||||
// store AI type on the AI
|
// store AI type on the AI
|
||||||
_man3heli setVariable ["SAR_AI_type",_ai_type,false];
|
_man3heli setVariable ["SAR_AI_type",_ai_type,false];
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
https://www.hod-servers.com
|
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 {};
|
//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
|
// get a random starting position that is on land
|
||||||
if (SAR_useBlacklist) then {
|
if (SAR_useBlacklist) then {
|
||||||
_rndpos = [_patrol_area_name,0,SAR_Blacklist] call UPSMON_pos;
|
_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;
|
_rndpos = [_patrol_area_name] call UPSMON_pos;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Create group for AI
|
||||||
_group = createGroup _side;
|
_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
|
// 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 setVariable ["SAR_protect",true,true];
|
||||||
|
|
||||||
[_leader] joinSilent _group;
|
[_leader] joinSilent _group;
|
||||||
sleep 1;
|
sleep 0.5;
|
||||||
|
|
||||||
_leader_weapon_names = ["leader",_type] call SAR_unit_loadout_weapons;
|
_genderUniform = (_leaderUniform select 0) call BIS_fnc_selectRandom;
|
||||||
_leader_items = ["leader",_type] call SAR_unit_loadout_items;
|
if (_leader isKindOf "Epoch_Female_F") then {_genderUniform = (_leaderUniform select 1) call BIS_fnc_selectRandom;};
|
||||||
_leader_tools = ["leader",_type] call SAR_unit_loadout_tools;
|
|
||||||
|
|
||||||
[_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] spawn SAR_fnc_AI_trace;
|
||||||
_leader setIdentity "id_SAR_sold_lead";
|
_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 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)"}]
|
//["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]}];
|
//_leader addaction ["Help Me!", {"sarge\SAR_interact.sqf" remoteExec [ "BIS_fnc_execVM",0]}];
|
||||||
|
|
||||||
// set skills of the leader
|
// 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;
|
} foreach _leaderskills;
|
||||||
|
|
||||||
SAR_leader_number = SAR_leader_number + 1;
|
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
|
// store experience value on AI
|
||||||
_leader setVariable ["SAR_AI_experience",0,false];
|
_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
|
// Establish rifleman unit type and skills
|
||||||
_riflemenlist = call compile format ["SAR_soldier_%1_list", _type];
|
_riflemanGender = call compile format ["SAR_%1_rifleman_gender", _type];
|
||||||
_riflemanskills = call compile format ["SAR_soldier_%1_skills", _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
|
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;
|
[_this] joinSilent _group;
|
||||||
sleep 1;
|
sleep 0.5;
|
||||||
|
|
||||||
_soldier_items = ["rifleman",_type] call SAR_unit_loadout_items;
|
_genderUniform = (_riflemanUniform select 0) call BIS_fnc_selectRandom;
|
||||||
_soldier_tools = ["rifleman",_type] call SAR_unit_loadout_tools;
|
if (_this isKindOf "Epoch_Female_F") then {_genderUniform = (_riflemanUniform select 1) call BIS_fnc_selectRandom;};
|
||||||
_soldier_weapon_names = ["rifleman",_type] call SAR_unit_loadout_weapons;
|
|
||||||
|
[_this,_genderUniform,_riflemanPrimary,_riflemanItems,_riflemanTools] call SAR_unit_loadout;
|
||||||
|
|
||||||
[_this,_soldier_weapon_names,_soldier_items,_soldier_tools] call SAR_unit_loadout;
|
switch (side _this) do {
|
||||||
|
case SAR_AI_friendly_side:
|
||||||
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);};
|
{
|
||||||
|
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] spawn SAR_fnc_AI_trace;
|
||||||
_this setIdentity "id_SAR_sold_man";
|
_this setIdentity "id_SAR_sold_man";
|
||||||
@ -186,8 +183,8 @@ for "_i" from 0 to (_riflemen - 1) do
|
|||||||
|
|
||||||
// set skills
|
// set skills
|
||||||
{
|
{
|
||||||
_this setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
|
_this setskill [_x select 0,((_x select 1) * (_x select 2))];
|
||||||
} foreach _riflemanskills;
|
} foreach _riflemanSkills;
|
||||||
|
|
||||||
// store AI type on the AI
|
// store AI type on the AI
|
||||||
_this setVariable ["SAR_AI_type",_ai_type,false];
|
_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];
|
_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
|
// initialize upsmon for the group
|
||||||
_ups_para_list = [_leader,_patrol_area_name,"NOSHARE","NOFOLLOW","SPAWNED","DELETE:",SAR_DELETE_TIMEOUT];
|
_ups_para_list = [_leader,_patrol_area_name,"NOSHARE","NOFOLLOW","SPAWNED","DELETE:",SAR_DELETE_TIMEOUT];
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
https://www.hod-servers.com
|
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 {};
|
//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!";};
|
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
|
// get a random starting position that is on land
|
||||||
if (SAR_useBlacklist) then {
|
if (SAR_useBlacklist) then {
|
||||||
_rndpos = [_patrol_area_name,0,SAR_Blacklist] call UPSMON_pos;
|
_rndpos = [_patrol_area_name,0,SAR_Blacklist] call UPSMON_pos;
|
||||||
@ -117,21 +112,43 @@ _groupvehicles = createGroup _side;
|
|||||||
|
|
||||||
// read the crew definition
|
// read the crew definition
|
||||||
_veh_setup = _vehicles_crews select _forEachIndex;
|
_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
|
// 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;
|
_genderUniform = (_leaderUniform select 0) call BIS_fnc_selectRandom;
|
||||||
_leader_items = ["leader",_type] call SAR_unit_loadout_items;
|
if (_leader isKindOf "Epoch_Female_F") then {_genderUniform = (_leaderUniform select 1) call BIS_fnc_selectRandom;};
|
||||||
_leader_tools = ["leader",_type] call SAR_unit_loadout_tools;
|
|
||||||
|
[_leader,_genderUniform,_leaderPrimary,_leaderItems,_leaderTools] call SAR_unit_loadout;
|
||||||
|
|
||||||
[_leader,_leader_weapon_names,_leader_items,_leader_tools] call SAR_unit_loadout;
|
switch (side _leader) do {
|
||||||
|
case SAR_AI_friendly_side:
|
||||||
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);};
|
{
|
||||||
|
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;
|
[_leader] spawn SAR_fnc_AI_trace_vehicle;
|
||||||
switch (_grouptype) do
|
switch (_grouptype) do
|
||||||
@ -152,8 +169,8 @@ _groupvehicles = createGroup _side;
|
|||||||
|
|
||||||
// set skills of the leader
|
// 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;
|
} foreach _leaderSkills;
|
||||||
|
|
||||||
// store AI type on the AI
|
// store AI type on the AI
|
||||||
_leader setVariable ["SAR_AI_type",_ai_type + " Leader",false];
|
_leader setVariable ["SAR_AI_type",_ai_type + " Leader",false];
|
||||||
@ -162,20 +179,111 @@ _groupvehicles = createGroup _side;
|
|||||||
_leader setVariable ["SAR_AI_experience",0,false];
|
_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;
|
_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
|
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;
|
switch (side _this) do {
|
||||||
_sniper_items = ["sniper",_type] call SAR_unit_loadout_items;
|
case SAR_AI_friendly_side:
|
||||||
_sniper_tools = ["sniper",_type] call SAR_unit_loadout_tools;
|
{
|
||||||
|
if ((headGear _this) isEqualTo "Shemag") then {
|
||||||
[_this,_sniper_weapon_names,_sniper_items,_sniper_tools] call SAR_unit_loadout;
|
removeHeadgear _this;
|
||||||
|
};
|
||||||
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);};
|
};
|
||||||
|
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;
|
[_this] spawn SAR_fnc_AI_trace_vehicle;
|
||||||
switch (_grouptype) do
|
switch (_grouptype) do
|
||||||
@ -202,53 +310,8 @@ _groupvehicles = createGroup _side;
|
|||||||
|
|
||||||
// set skills
|
// set skills
|
||||||
{
|
{
|
||||||
_this setskill [_x select 0,(_x select 1 +(floor(random 2) * (_x select 2)))];
|
_this setskill [_x select 0,((_x select 1) * (_x select 2))];
|
||||||
} foreach _sniperskills;
|
} 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;
|
|
||||||
|
|
||||||
// store AI type on the AI
|
// store AI type on the AI
|
||||||
_this setVariable ["SAR_AI_type",_ai_type,false];
|
_this setVariable ["SAR_AI_type",_ai_type,false];
|
||||||
|
@ -187,18 +187,18 @@ SAR_unit_loadout_weapons = {
|
|||||||
_unittype = _this select 0;
|
_unittype = _this select 0;
|
||||||
_side = _this select 1;
|
_side = _this select 1;
|
||||||
|
|
||||||
_unit_weapon_list = call compile format["SAR_%2_%1_weapon_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_list",_unittype,_side];
|
_unit_pistol_list = call compile format ["SAR_%2_%1_pistol",_unittype,_side];
|
||||||
|
|
||||||
_unit_weapon_names = [];
|
_unit_weapon_names = [];
|
||||||
_unit_weapon_name = "";
|
_unit_weapon_name = "";
|
||||||
_unit_pistol_name = "";
|
_unit_pistol_name = "";
|
||||||
|
|
||||||
if(count _unit_weapon_list > 0) then {
|
if (count _unit_weapon_list > 0) then {
|
||||||
_unit_weapon_name = _unit_weapon_list select (floor(random (count _unit_weapon_list)));
|
_unit_weapon_name = _unit_weapon_list call BIS_fnc_SelectRandom;
|
||||||
};
|
};
|
||||||
if(count _unit_pistol_list > 0) then {
|
if (count _unit_pistol_list > 0) then {
|
||||||
_unit_pistol_name = _unit_pistol_list select (floor(random (count _unit_pistol_list)));
|
_unit_pistol_name = _unit_pistol_list call BIS_fnc_SelectRandom;
|
||||||
};
|
};
|
||||||
_unit_weapon_names set [0, _unit_weapon_name];
|
_unit_weapon_names set [0, _unit_weapon_name];
|
||||||
_unit_weapon_names set [1, _unit_pistol_name];
|
_unit_weapon_names set [1, _unit_pistol_name];
|
||||||
@ -209,26 +209,23 @@ SAR_unit_loadout_weapons = {
|
|||||||
SAR_unit_loadout = {
|
SAR_unit_loadout = {
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// _unit (Unit to apply the loadout to)
|
// _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)
|
// _items (array with items for the loadout)
|
||||||
// _tools (array with tools 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;
|
_unit = _this select 0;
|
||||||
_weapons = _this select 1;
|
_uniform = _this select 1;
|
||||||
_items = _this select 2;
|
_primary = _this select 2;
|
||||||
_tools = _this select 3;
|
_items = _this select 3;
|
||||||
|
_tools = _this select 4;
|
||||||
removeAllWeapons _unit;
|
|
||||||
removeAllItems _unit;
|
|
||||||
removeAllAssignedItems _unit;
|
|
||||||
removeGoggles _unit;
|
|
||||||
|
|
||||||
_unit enableFatigue false;
|
|
||||||
|
|
||||||
|
_unit addUniform _uniform;
|
||||||
|
|
||||||
{
|
{
|
||||||
_weapon = _weapons select _forEachIndex;
|
_weapon = _primary select _forEachIndex;
|
||||||
|
|
||||||
if (_weapon !="") then
|
if (_weapon !="") then
|
||||||
{
|
{
|
||||||
@ -236,7 +233,7 @@ SAR_unit_loadout = {
|
|||||||
_unit addMagazine _unit_magazine_name;
|
_unit addMagazine _unit_magazine_name;
|
||||||
_unit addWeapon _weapon;
|
_unit addWeapon _weapon;
|
||||||
};
|
};
|
||||||
} foreach _weapons;
|
} foreach _primary;
|
||||||
|
|
||||||
{
|
{
|
||||||
_item = _items select _forEachIndex;
|
_item = _items select _forEachIndex;
|
||||||
|
@ -12,59 +12,42 @@
|
|||||||
https://www.hod-servers.com
|
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 {};
|
//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",""];
|
_cfgEpochClient = 'CfgEpochClient' call EPOCH_returnConfig;
|
||||||
_sizeOfBase = _x getVariable ["ExileTerritorySize",0];
|
_spawnRadius = getNumber(_cfgEpochClient >> "buildingJammerRange");
|
||||||
_fakeFlag = _x getVariable ["ExileDatabaseID", 0];
|
|
||||||
|
_rifleMen = 2;
|
||||||
|
_snipers = 1;
|
||||||
|
_sizeX = _spawnRadius;
|
||||||
|
_sizeY = _spawnRadius;
|
||||||
|
|
||||||
if (_fakeFlag == 0) then {
|
if (SAR_debug) then {
|
||||||
|
diag_log format ["Sarge AI System: Now Processing FequencyJammer at Location %2",(getPosATL _x)];
|
||||||
} 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,"",""];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} 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)];
|
||||||
|
@ -105,9 +105,9 @@ if (_type == "static") then {
|
|||||||
diag_log format["Sarge's AI System: Static Spawning for infantry patrols started"];
|
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
|
// 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; */
|
||||||
[SAR_marker_MafiaTraderCity_Fortify,1,0,0,"fortify",true] call SAR_fnc_AI_traders;
|
|
||||||
|
|
||||||
// Hotel Mission AI
|
// 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;
|
/* [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;
|
||||||
|
@ -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;
|
_flag = _this select 0;
|
||||||
_authorizedUID = _flag getVariable ["ExileTerritoryBuildRights", []];
|
_authorizedUID = _flag getVariable ["ExileTerritoryBuildRights", []];
|
||||||
_authorizedPUID = _authorizedUID select 0;
|
_authorizedPUID = _authorizedUID select 0;
|
||||||
_flagRadius = _flag getVariable ["ExileTerritorySize",""];;
|
|
||||||
_isBaseGuard = false;
|
_isBaseGuard = false;
|
||||||
|
|
||||||
if (!(isNull _flag)) then {
|
if (!(isNull _flag)) then {
|
||||||
_nearestGuards = (getPosATL _flag) nearEntities [["AllVehicles","CAManBase"], _flagRadius + 100];
|
_nearestGuards = (getPosATL _flag) nearEntities [["AllVehicles","CAManBase"], 110];
|
||||||
} else {
|
} else {
|
||||||
_nearestGuards = (getPosATL player) nearEntities [["AllVehicles","CAManBase"], _flagRadius + 100];
|
_nearestGuards = (getPosATL player) nearEntities [["AllVehicles","CAManBase"], 110];
|
||||||
};
|
};
|
||||||
|
|
||||||
if (count _nearestGuards > 0) then {
|
if (count _nearestGuards > 0) then {
|
||||||
{
|
{
|
||||||
_tGuard = _x;
|
if (!(isPlayer _x)) then {
|
||||||
if (!(isPlayer _tGuard)) then {
|
|
||||||
_friendlyPlayers = _tGuard getVariable ["SAR_FLAG_FRIENDLY", []];
|
_friendlyPlayers = _x getVariable ["SAR_FLAG_FRIENDLY", []];
|
||||||
// If group has array
|
|
||||||
|
// Check group array for player
|
||||||
if (count _friendlyPlayers > 0) then {
|
if (count _friendlyPlayers > 0) then {
|
||||||
{
|
{
|
||||||
if (_x in _friendlyPlayers) exitWith {
|
if (_x in _friendlyPlayers) exitWith {
|
||||||
_isBaseGuard = true; // Guard is part of the base owners guards
|
_isBaseGuard = true; // Guard is part of the base owners guards
|
||||||
};
|
};
|
||||||
} foreach _authorizedPUID;
|
} foreach _authorizedPUID;
|
||||||
|
|
||||||
// Toggle his attack mode
|
// Toggle his attack mode
|
||||||
if (_isBaseGuard) then {
|
if (_isBaseGuard) then {
|
||||||
_attackAllToggle = _tGuard getVariable ["ATTACK_ALL", true];
|
_attackAllToggle = _x getVariable ["ATTACK_ALL", true];
|
||||||
if (_attackAllToggle) then {
|
if (_attackAllToggle) then {
|
||||||
_tGuard setVariable ["ATTACK_ALL", false, true];
|
_x setVariable ["ATTACK_ALL", false, true];
|
||||||
cutText ["Guards will only attack those who attack it.\nGive them 15-20 seconds to receive orders.", "PLAIN DOWN"];
|
cutText ["Guards will only attack those who attack them.", "PLAIN DOWN"];
|
||||||
hintsilent "Guards will only attack those who attack it.\nGive them 15-20 seconds to receive orders.";
|
hintsilent "Guards will only attack those who attack them.";
|
||||||
Breakout "exit";
|
Breakout "exit";
|
||||||
} else {
|
} else {
|
||||||
_tGuard setVariable ["ATTACK_ALL", true, true];
|
_x 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"];
|
cutText ["Guards will attack anyone that is not in your group.", "PLAIN DOWN"];
|
||||||
hintsilent "Guards will attack any players or npcs that is not tied to FlagPole.\nGive them 15-20 seconds to receive orders.";
|
hintsilent "Guards will attack anyone that is not in your group.";
|
||||||
Breakout "exit";
|
Breakout "exit";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -41,4 +45,7 @@ if (count _nearestGuards > 0) then {
|
|||||||
} forEach _nearestGuards;
|
} forEach _nearestGuards;
|
||||||
cutText ["No guards were found in the area", "PLAIN DOWN"];
|
cutText ["No guards were found in the area", "PLAIN DOWN"];
|
||||||
hintsilent "No guards were found in the area";
|
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";
|
||||||
|
};
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
- Secondary AI skills can be decimal values i.e. 0.23
|
- Secondary AI skills can be decimal values i.e. 0.23
|
||||||
- Lower time intervals for detections require more CPU resources
|
- 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
|
SAR_HC = true; // If there is no HC it will spawn on server automatically
|
||||||
|
|
||||||
// TODO: Create dynamic map support for any map
|
// 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_respawn_waittime = 300; // How long to wait before dynamic AI respawns
|
||||||
SAR_DESPAWN_TIMEOUT = 120; // How long to wait before despawning dynamic AI
|
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_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_surv_kill_value = 20; // How much respect players lose if killing friendly AI
|
||||||
SAR_band_kill_value = 100; // How much respect players gain if killing hostile AI
|
SAR_band_kill_value = 10; // 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_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_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_HOSTILE = 200; // How far away AI can detect hostile AI & players
|
||||||
SAR_DETECT_INTERVAL = 10; // How often AI can detect 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
|
SAR_max_grps_survivors = 2; // Total groups per grid
|
||||||
|
|
||||||
// Size of AI groups plus a leader
|
// 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_soldiers = 2; // Size of the group
|
||||||
SAR_max_grpsize_survivors = 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
|
// 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
|
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 ----------------------------------------------------
|
// Helicopter Types ----------------------------------------------------
|
||||||
// ---------------------------------------------------------------------
|
|
||||||
SAR_heli_type = ["O_Heli_Light_02_unarmed_EPOCH"];
|
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. -------------------------------- */
|
||||||
/* -------------------------------- 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. -------------------------------- */
|
||||||
|
Reference in New Issue
Block a user