DMS_Exile/@ExileServer/addons/a3_dms/scripts/fn_SpawnAIGroup.sqf
eraser1 afb4833a65 Fixes + Tweaks + Features
#### September 13, 2015 (11:45 PM CST-America):
* NEW CONFIG VALUES: DMS_MaxAIDistance and DMS_AIDistanceCheckFrequency
* You can now use the above config values to kill AI that flee from
their spawn position. Only "Soldier" AI will be killed.
* Removed "O_HMG_01_F" from AI Static Weapons. AI were pretty useless on
it... unless the AI were facing the right direction.
* Reduced AI count and removed the "playerNear" parameter from
testmission for easier testing.
* NEW: When an AI vehicle gunner is killed, and the driver is still
alive, after a little delay, the driver is then switched to the gunner
seat. You should no longer have AI vehicles with a dead gunner that's
driving around aimlessly :) There is a 5-8 second delay to simulate
reaction time. Then the driver is ejected, then after 1.5 seconds the AI
is then forced into the  gunner seat.
* NOTE: The above feature only works when the AI is still local (not
offloaded). If the AI is offloaded, the AI is simply ejected and becomes
a foot soldier.
* AI assigned vehicles are destroyed when the crew is empty. Simulation
is also disabled on them.
* Reduced some of the "params" RPT spam, from DMS_fnc_SetGroupBehavior.
* Tweaked AI Vehicle spawning logic. The AI are initially assigned to a
temporary group and then behavior is set, then they join the assigned
group to prevent overriding behavior of other ground units.
* Non-persistent vehicles should now be fit properly to the terrain.
2015-09-16 22:37:17 -05:00

117 lines
2.8 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]);
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;
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