DMS_Exile/@ExileServer/addons/a3_dms/scripts/fn_SpawnAIGroup.sqf
eraser1 44955afb0c Tweaks + Minor Additions
* NEW CONFIG VALUE: "DMS_ai_offload_Only_DMS_AI"
* You can use "DMS_ai_offload_Only_DMS_AI" to offload only AI spawned by
DMS. This should resolve any issues with other mission systems from DMS.
* Increased "DMS_playerNearRadius" from 75 meters to 100 meters.
* You can now define "absolute" mission conditions. If this mission
condition is met, it immediately counts the mission as completed. Add
"true" after the completion argument to turn it into an "absolute" win
condition.
* Added compatibility with RS_VLS by [Rod
Serling](https://github.com/Rod-Serling).
2015-09-20 00:37:13 -05:00

122 lines
2.9 KiB
Plaintext

/*
DMS_fnc_SpawnAIGroup
Created by eraser1
Based off of WAI
Usage:
[
_pos, // Position of AI
_count, // Number of AI
_difficulty, // AI Difficulty: "random","hardcore","difficult","moderate", or "easy"
_class // AI Class: "random","assault","MG","sniper" or "unarmed" OR [_class,_launcher]
_side // Only "bandit" is supported atm
] call DMS_fnc_SpawnAIGroup;
Returns AI Group
*/
private ["_OK", "_pos", "_count", "_difficulty", "_class", "_side", "_pos_x", "_pos_y", "_pos_z", "_launcher", "_unit", "_client"];
_OK = params
[
["_pos",[0,0,0],[[]],[3]],
["_count",0,[0]],
["_difficulty","random",[""]],
["_class","random",[""]],
["_side","bandit",[""]]
];
if (!_OK) then
{
diag_log format ["DMS ERROR :: Calling DMS_SpawnAIGroup with invalid parameters: %1",_this];
};
if (_count < 1) exitWith
{
diag_log format ["DMS ERROR :: Calling DMS_SpawnAIGroup with less than 1 _count! _this: %1",_this];
};
_pos_x = _pos select 0;
_pos_y = _pos select 1;
_pos_z = _pos select 2;
if(DMS_DEBUG) then
{
diag_log format["DMS_DEBUG SpawnAIGroup :: Spawning %1 %2 %3 AI at %4 with %5 difficulty.",_count,_class,_side,_pos,_difficulty];
};
// if soldier have AT/AA weapons
if (typeName _class == "ARRAY") then
{
_launcher = _class select 1;
_class = _class select 0;
};
// Randomize position
if(_pos_z == 0) then
{
if(round(random 1) == 1) then
{
_pos_x = _pos_x - (5 + random(10));
} else {
_pos_x = _pos_x + (5 + random(10));
};
if(round(random 1) == 1) then
{
_pos_y = _pos_y - (5 + random(10));
} else {
_pos_y = _pos_y + (5 + random(10));
};
};
_group = createGroup (missionNamespace getVariable [format ["DMS_%1Side",_side],EAST]);
_group setVariable ["DMS_LockLocality",nil];
_group setVariable ["DMS_SpawnedGroup",true];
for "_i" from 1 to _count do
{
_unit = [_group,[_pos_x,_pos_y,_pos_z],_class,_difficulty,_side,"Soldier"] call DMS_fnc_SpawnAISoldier;
};
// An AI will definitely spawn with a launcher if you define type
if ((!isNil "_launcher") || {DMS_ai_use_launchers && {(random 100) <= DMS_ai_use_launchers_chance}}) then
{
if (isNil "_launcher") then
{
_launcher = "AT";
};
_launcher = ((missionNamespace getVariable [format ["DMS_AI_wep_launchers_%1",_launcher],["launch_NLAW_F"]]) call BIS_fnc_selectRandom);
removeBackpackGlobal _unit;
_unit addBackpack "B_Carryall_mcamo";
_rocket = _launcher call DMS_fnc_selectMagazine;
[_unit, _launcher, DMS_AI_launcher_ammo_count,_rocket] call BIS_fnc_addWeapon;
_unit setVariable ["DMS_AI_Launcher",_launcher];
if(DMS_DEBUG) then
{
diag_log format["DMS_DEBUG SpawnAIGroup :: Giving %1 a %2 launcher with %3 %4 rockets",_unit,_launcher,DMS_AI_launcher_ammo_count,_rocket];
};
};
_group selectLeader ((units _group) select 0);
_group setFormation "WEDGE";
if(_pos_z == 0) then
{
[_group,_pos,_difficulty,"COMBAT"] call DMS_fnc_SetGroupBehavior;
};
diag_log format ["DMS_SpawnAIGroup :: Spawned %1 AI at %2.",_count,_pos];
_group