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:
parent
b12e947cdb
commit
30a42e6e63
20
changeLog.md
20
changeLog.md
@ -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.
|
||||
|
||||
|
@ -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";
|
||||
|
@ -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];
|
||||
|
@ -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];
|
||||
|
||||
|
@ -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];
|
||||
|
@ -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;
|
||||
|
@ -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)];
|
||||
|
@ -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;
|
||||
|
@ -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";
|
||||
};
|
||||
|
@ -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. -------------------------------- */
|
||||
|
Loading…
Reference in New Issue
Block a user