mirror of
https://github.com/Ignatz-HeMan/SEM
synced 2024-08-30 16:22:10 +00:00
309 lines
10 KiB
Plaintext
309 lines
10 KiB
Plaintext
private["_pos","_cnt","_group","_unit","_wpn","_opt","_Umale","_Ufemale","_Uciv","_Ukart","_rifles","_riflesGL","_LMGs","_SMGs","_rifleOptics","_smgOptics","_Sniper","_loadoutsAssigned"];
|
|
/*
|
|
File: ai.sqf
|
|
Author: drsubo
|
|
usage : [_uLoc] execVM
|
|
|
|
Update 03.01.2015
|
|
Re-written by KiloSwiss
|
|
*/
|
|
/*
|
|
Update 27.03.2017
|
|
By [Ignatz] He-Man
|
|
*/
|
|
|
|
|
|
_pos = _this select 0;
|
|
_cnt = (if(count _this > 1)then[{(_this select 1) max 4},{7}]); //Unit Count (min 5 - default 7)
|
|
_group = createGroup RESISTANCE;
|
|
|
|
while {count (units _group) < _cnt} do {
|
|
_group createUnit ['I_Soldier_EPOCH', _pos, [], 10, 'NONE'];
|
|
sleep 0.1;
|
|
};
|
|
|
|
{
|
|
_x call SEM_fnc_AIkilledEH;
|
|
_x call SEM_fnc_AIfiredEH;
|
|
_x call SEM_fnc_stripUnit;
|
|
_x setVariable["LASTLOGOUT_EPOCH",99999999];
|
|
} count units _group;
|
|
|
|
if(SEM_AIdisableSniperDamage)then{
|
|
units _group call SEM_fnc_broadcastAI;
|
|
};
|
|
|
|
diag_log format["#SEM: Spawned %1 units at position %2", count units _group, _pos];
|
|
|
|
|
|
_Umale = ["U_O_CombatUniform_ocamo","U_O_PilotCoveralls","U_OG_leader"];
|
|
|
|
_Ufemale = ["U_Camo_uniform","U_CamoBlue_uniform","U_CamoBrn_uniform","U_CamoRed_uniform"];
|
|
|
|
_Uguer = ["U_OG_Guerilla1_1","U_OG_Guerilla2_1","U_OG_Guerilla2_2","U_OG_Guerilla2_3","U_OG_Guerilla3_1","U_OG_Guerilla3_2"];
|
|
|
|
_Uciv = ["U_C_Poloshirt_stripped","U_C_Poloshirt_blue","U_C_Poloshirt_burgundy","U_C_Poloshirt_tricolour","U_C_Poloshirt_salmon",
|
|
"U_C_Poloshirt_redwhite","U_C_Poor_1","U_C_WorkerCoveralls","U_C_Journalist","U_C_Scientist","U_OrestesBody"];
|
|
|
|
_Ukart = ["U_C_Driver_1","U_C_Driver_2","U_C_Driver_3","U_C_Driver_4","U_C_Driver_1_black","U_C_Driver_1_blue",
|
|
"U_C_Driver_1_green","U_C_Driver_1_red","U_C_Driver_1_white","U_C_Driver_1_yellow","U_C_Driver_1_orange"];
|
|
|
|
|
|
_rifles = [
|
|
["akm_EPOCH", "30Rnd_762x39_Mag"],
|
|
["m16_EPOCH", "30Rnd_556x45_Stanag_Tracer_Yellow"],
|
|
["m16Red_EPOCH", "30Rnd_556x45_Stanag_Tracer_Green"],
|
|
["m4a3_EPOCH", "30Rnd_556x45_Stanag_Tracer_Red"],
|
|
["Arifle_Katiba_C_F", "30Rnd_65x39_caseless_green_mag_Tracer"],
|
|
["Arifle_Mk20_F", "30Rnd_556x45_Stanag_Tracer_Red"],
|
|
["Arifle_Mk20C_F", "30Rnd_556x45_Stanag_Tracer_Green"],
|
|
["Arifle_Mk20C_plain_F", "30Rnd_556x45_Stanag_Tracer_Red"],
|
|
["Arifle_Mk20_plain_F", "30Rnd_556x45_Stanag_Tracer_Red"],
|
|
["Arifle_MXC_F", "30Rnd_65x39_caseless_mag_Tracer"],
|
|
["Arifle_MXC_Black_F", "30Rnd_65x39_caseless_mag_Tracer"],
|
|
["Arifle_MX_F", "30Rnd_65x39_caseless_mag_Tracer"],
|
|
["Arifle_MX_Black_F", "30Rnd_65x39_caseless_mag_Tracer"],
|
|
["Arifle_SDAR_F", "30Rnd_556x45_Stanag_Tracer_Red"],
|
|
["Arifle_TRG21_F", "30Rnd_556x45_Stanag_Tracer_Green"],
|
|
["Arifle_TRG20_F", "30Rnd_556x45_Stanag_Tracer_Yellow"]
|
|
];
|
|
|
|
_riflesGL = [
|
|
["Arifle_Katiba_GL_F", "30Rnd_65x39_caseless_green_mag_Tracer"],
|
|
["Arifle_Mk20_GL_F", "30Rnd_556x45_Stanag_Tracer_Yellow"],
|
|
["Arifle_Mk20_GL_plain_F", "30Rnd_556x45_Stanag_Tracer_Yellow"],
|
|
["Arifle_MX_GL_F", "30Rnd_65x39_caseless_mag_Tracer"],
|
|
["Arifle_MX_GL_Black_F", "30Rnd_65x39_caseless_mag_Tracer"],
|
|
["Arifle_TRG21_GL_F", "30Rnd_556x45_Stanag_Tracer_Green"]
|
|
];
|
|
|
|
_LMGs = [
|
|
["m249_EPOCH", "200Rnd_556x45_M249"],
|
|
["m249Tan_EPOCH", "200Rnd_556x45_M249"],
|
|
["LMG_Mk200_F", "200Rnd_65x39_cased_Box_Tracer"],
|
|
["Arifle_MX_SW_F", "100Rnd_65x39_caseless_mag_Tracer"],
|
|
["Arifle_MX_SW_Black_F", "100Rnd_65x39_caseless_mag_Tracer"],
|
|
["LMG_Zafir_F", "150Rnd_762x54_Box_Tracer"]
|
|
];
|
|
|
|
_rifleOptics = ["optic_Aco","optic_ACO_grn","optic_Holosight"]; //"optic_Hamr","optic_Arco"
|
|
|
|
_SMGs = [
|
|
["SMG_02_F", "30Rnd_9x21_Mag"],
|
|
["SMG_01_F", "30Rnd_45ACP_Mag_SMG_01"],
|
|
["Hgun_PDW2000_F", "30Rnd_9x21_Mag"]
|
|
];
|
|
|
|
_smgOptics = ["optic_Aco_smg","optic_ACO_grn_smg","optic_Holosight_smg"];
|
|
|
|
|
|
_DMRs = [
|
|
["M14_EPOCH", "20Rnd_762x51_Mag"],
|
|
["M14Grn_EPOCH", "20Rnd_762x51_Mag"],
|
|
["srifle_EBR_F", "20Rnd_762x51_Mag"],
|
|
["srifle_DMR_01_F", "10Rnd_762x51_Mag"],
|
|
["arifle_MXM_F", "30Rnd_65x39_caseless_mag_Tracer"],
|
|
["arifle_MXM_Black_F", "30Rnd_65x39_caseless_mag_Tracer"]
|
|
];
|
|
|
|
//"optic_Nightstalker", "optic_SOS", "optic_LRPS", "optic_DMS"
|
|
_Sniper = [
|
|
["m107_EPOCH", "5Rnd_127x108_Mag"],
|
|
["m107Tan_EPOCH", "5Rnd_127x108_Mag"],
|
|
["Srifle_GM6_F", "5Rnd_127x108_Mag"],
|
|
["Srifle_LRR_F", "7Rnd_408_Mag"]
|
|
];
|
|
|
|
if(sunOrMoon < 0.1)then{{_x addWeapon "NVG_EPOCH"}count units _group};
|
|
|
|
//Special Hunter (leader)
|
|
_unit = units _group select 0;
|
|
_unit setSkill 1;
|
|
if (surfaceiswater (getpos _unit)) then {
|
|
_unit forceAddUniform "U_O_Wetsuit";
|
|
_unit addVest "V_19_EPOCH";
|
|
_unit addMagazines ["30Rnd_556x45_Stanag_Tracer_Red", 3];
|
|
_unit addWeapon "Arifle_SDAR_F";
|
|
}
|
|
else {
|
|
_unit forceAddUniform "U_OG_leader";
|
|
_unit addVest format["V_%1_EPOCH", ceil(random 40)];
|
|
_wpn = _DMRs select (random (count _DMRs -1));
|
|
_unit addMagazines [(_wpn select 1), 6];
|
|
_unit addWeapon (_wpn select 0);
|
|
};
|
|
_unit addHeadgear format["H_%1_EPOCH", ceil(random 104)];
|
|
_unit addPrimaryWeaponItem "optic_Arco";
|
|
|
|
|
|
//Sniper
|
|
_unit = units _group select 1;
|
|
_unit setSkill 1;
|
|
if (surfaceiswater (getpos _unit)) then {
|
|
_unit forceAddUniform "U_O_Wetsuit";
|
|
_unit addVest "V_19_EPOCH";
|
|
_unit addMagazines ["30Rnd_556x45_Stanag_Tracer_Red", 3];
|
|
_unit addWeapon "Arifle_SDAR_F";
|
|
}
|
|
else {
|
|
_unit forceAddUniform "U_O_GhillieSuit";
|
|
_unit addVest format["V_%1_EPOCH", ceil(random 40)];
|
|
_wpn = _Sniper select (random (count _Sniper -1));
|
|
_unit addMagazines [(_wpn select 1), 4];
|
|
_unit addWeapon (_wpn select 0);
|
|
};
|
|
_unit addPrimaryWeaponItem "optic_SOS";
|
|
_unit selectWeapon (primaryWeapon _unit);
|
|
_unit addMagazines ["9rnd_45X88_magazine", 4];
|
|
_unit addWeapon "1911_pistol_EPOCH";
|
|
|
|
|
|
//Rifleman
|
|
_unit = units _group select 2;
|
|
_unit setSkill 1;
|
|
if (surfaceiswater (getpos _unit)) then {
|
|
_unit forceAddUniform "U_O_Wetsuit";
|
|
_unit addVest "V_19_EPOCH";
|
|
_unit addMagazines ["30Rnd_556x45_Stanag_Tracer_Red", 3];
|
|
_unit addWeapon "Arifle_SDAR_F";
|
|
}
|
|
else {
|
|
_unit forceAddUniform (_Uguer select (random (count _Uguer -1)));
|
|
_unit addVest format["V_%1_EPOCH", ceil(random 40)];
|
|
_wpn = _riflesGL select (random (count _riflesGL -1));
|
|
_unit addMagazines ["3Rnd_HE_Grenade_shell", 2];
|
|
_unit addMagazines [(_wpn select 1), 4];
|
|
_unit addWeapon (_wpn select 0);
|
|
};
|
|
_unit addHeadgear format["H_%1_EPOCH", ceil(random 104)];
|
|
_unit addPrimaryWeaponItem (_rifleOptics select (random (count _rifleOptics -1)));
|
|
|
|
|
|
//Anti Tank
|
|
_unit = units _group select 3;
|
|
_unit setSkill 1;
|
|
if (surfaceiswater (getpos _unit)) then {
|
|
_unit forceAddUniform "U_O_Wetsuit";
|
|
_unit addVest "V_19_EPOCH";
|
|
_unit addMagazines ["30Rnd_556x45_Stanag_Tracer_Red", 3];
|
|
_unit addWeapon "Arifle_SDAR_F";
|
|
}
|
|
else {
|
|
_unit forceAddUniform "U_O_CombatUniform_ocamo";
|
|
_unit addVest format["V_%1_EPOCH", ceil(random 40)];
|
|
_wpn = _SMGs select (random (count _SMGs -1));
|
|
_unit addMagazines [(_wpn select 1), 3];
|
|
_unit addWeapon (_wpn select 0);
|
|
};
|
|
_unit addHeadgear format["H_%1_EPOCH", ceil(random 104)];
|
|
|
|
_unit addBackPack "B_Carryall_ocamo";
|
|
_unit addMagazines ["RPG32_HE_F", 1];
|
|
_unit addMagazines ["RPG32_F", 1];
|
|
_unit addWeapon "launch_RPG32_F";
|
|
|
|
_opt = _smgOptics select (random (count _smgOptics -1));
|
|
_unit addPrimaryWeaponItem _opt;
|
|
_unit selectWeapon (secondaryWeapon _unit);
|
|
|
|
if(_cnt > 4)then{
|
|
if(_cnt > 9)then [{ //Group over 10 - spawn some elite soldiers
|
|
|
|
//Rifleman
|
|
_unit = units _group select 5;
|
|
_unit setSkill 1;
|
|
if (surfaceiswater (getpos _unit)) then {
|
|
_unit forceAddUniform "U_O_Wetsuit";
|
|
_unit addVest "V_19_EPOCH";
|
|
_unit addMagazines ["30Rnd_556x45_Stanag_Tracer_Red", 3];
|
|
_unit addWeapon "Arifle_SDAR_F";
|
|
}
|
|
else {
|
|
_unit forceAddUniform (_Uguer select (random (count _Uguer -1)));
|
|
_unit addVest format["V_%1_EPOCH", ceil(random 40)];
|
|
_wpn = _riflesGL select (random (count _riflesGL -1));
|
|
_unit addMagazines [(_wpn select 1), 6];
|
|
_unit addMagazines ["1Rnd_HE_Grenade_shell", 6];
|
|
_unit addWeapon (_wpn select 0);
|
|
};
|
|
_unit addHeadgear format["H_%1_EPOCH", ceil(random 104)];
|
|
_unit addPrimaryWeaponItem "optic_Arco";
|
|
|
|
//MG
|
|
_unit = units _group select 6;
|
|
_unit setSkill 1;
|
|
if (surfaceiswater (getpos _unit)) then {
|
|
_unit forceAddUniform "U_O_Wetsuit";
|
|
_unit addVest "V_19_EPOCH";
|
|
_unit addMagazines ["30Rnd_556x45_Stanag_Tracer_Red", 3];
|
|
_unit addWeapon "Arifle_SDAR_F";
|
|
}
|
|
else {
|
|
_unit forceAddUniform "U_O_CombatUniform_ocamo";
|
|
_unit addVest format["V_%1_EPOCH", ceil(random 40)];
|
|
_wpn = _LMGs select (random (count _LMGs -1));
|
|
_unit addMagazines [(_wpn select 1), 3];
|
|
_unit addWeapon (_wpn select 0);
|
|
};
|
|
_unit addHeadgear format["H_%1_EPOCH", ceil(random 104)];
|
|
_unit addPrimaryWeaponItem "optic_Hamr";
|
|
|
|
//Anti Tank
|
|
_unit = units _group select 7;
|
|
_unit setSkill 1;
|
|
if (surfaceiswater (getpos _unit)) then {
|
|
_unit forceAddUniform "U_O_Wetsuit";
|
|
_unit addVest "V_19_EPOCH";
|
|
_unit addMagazines ["30Rnd_556x45_Stanag_Tracer_Red", 3];
|
|
_unit addWeapon "Arifle_SDAR_F";
|
|
}
|
|
else {
|
|
_unit forceAddUniform "U_O_CombatUniform_ocamo";
|
|
_unit addVest format["V_%1_EPOCH", ceil(random 40)];
|
|
_wpn = _SMGs select (random (count _SMGs -1));
|
|
_unit addMagazines [(_wpn select 1), 3];
|
|
_unit addWeapon (_wpn select 0);
|
|
};
|
|
_unit addHeadgear format["H_%1_EPOCH", ceil(random 104)];
|
|
_unit addBackPack "B_Carryall_ocamo";
|
|
_unit addMagazines ["RPG32_HE_F", 1];
|
|
_unit addMagazines ["RPG32_F", 1];
|
|
_unit addWeapon "launch_RPG32_F";
|
|
_opt = _smgOptics select (random (count _smgOptics -1));
|
|
_unit addPrimaryWeaponItem _opt;
|
|
_unit selectWeapon (secondaryWeapon _unit);
|
|
|
|
_loadoutsAssigned = 7},{_loadoutsAssigned = 4}];
|
|
|
|
//spawn additional hunters
|
|
for "_i" from _loadoutsAssigned to (count units _group -1) step 1 do{
|
|
private "_unit";
|
|
call compile format ["
|
|
_unit = units _group select %1;
|
|
_unit setSkill 1;
|
|
if (surfaceiswater (getpos _unit)) then {
|
|
_unit forceAddUniform 'U_O_Wetsuit';
|
|
_unit addVest 'V_19_EPOCH';
|
|
_unit addMagazines ['30Rnd_556x45_Stanag_Tracer_Red', 3];
|
|
_unit addWeapon 'Arifle_SDAR_F';
|
|
}
|
|
else {
|
|
_unit forceAddUniform (%2 select (random (count %2 -1)));
|
|
_unit addVest 'V_%3_EPOCH';
|
|
_unit addMagazines [(%5 select 1),(3+(random 3))];
|
|
_unit addWeapon (%5 select 0);
|
|
};
|
|
_unit addHeadgear 'H_%4_EPOCH';
|
|
_unit addPrimaryWeaponItem (%6 select (random (count %6 -1)));
|
|
|
|
", _i, _Uguer, ceil(random 40), ceil(random 104), (_rifles select (random (count _rifles -1))), _rifleOptics];
|
|
};
|
|
};
|
|
|
|
{_x setskill ["courage",1]}count (units _group);
|
|
_group allowFleeing 0;
|
|
|
|
_group selectLeader (units _group select 0);
|
|
|
|
_group
|