mirror of
https://github.com/IT07/a3_vemf_reloaded.git
synced 2024-08-30 16:52:11 +00:00
New mission
This commit is contained in:
parent
6b04e9bc9f
commit
e1cded98c4
161
exile_vemf_reloaded/missions/BaseAttack.sqf
Normal file
161
exile_vemf_reloaded/missions/BaseAttack.sqf
Normal file
@ -0,0 +1,161 @@
|
||||
/*
|
||||
Author: IT07
|
||||
|
||||
Description:
|
||||
A simple mission for VEMFr that sends a chopper to a player's territory and paradrops all units inside
|
||||
*/
|
||||
|
||||
_missionName = param [0, "", [""]];
|
||||
if isNil"VEMFrAttackCount" then { VEMFrAttackCount = 0 };
|
||||
if (VEMFrAttackCount < ([[_missionName],["maxAttacks"]] call VEMFr_fnc_getSetting select 0)) then
|
||||
{
|
||||
scopeName "outer";
|
||||
VEMFrAttackCount = VEMFrAttackCount + 1;
|
||||
if (_missionName in ("missionList" call VEMFr_fnc_getSetting)) then
|
||||
{
|
||||
_aiSetup = ([[_missionName],["aiSetup"]] call VEMFr_fnc_getSetting) select 0;
|
||||
if (_aiSetup select 0 > 0 AND _aiSetup select 1 > 0) then
|
||||
{
|
||||
_attackedFlags = uiNamespace getVariable ["VEMFrAttackedFlags",[]];
|
||||
_flags = [];
|
||||
{
|
||||
if (speed _x < 25 AND (vehicle _x isEqualTo _x)) then
|
||||
{
|
||||
_flag = selectRandom (nearestObjects [position _x, ["Exile_Construction_Flag_Static"], 150]);
|
||||
if not isNil"_flag" then
|
||||
{
|
||||
if not(_flag in _attackedFlags) then
|
||||
{
|
||||
_flags pushBackUnique _flag;
|
||||
};
|
||||
};
|
||||
};
|
||||
} forEach allPlayers;
|
||||
if (count _flags > 0) then
|
||||
{
|
||||
_flagToAttack = selectRandom _flags;
|
||||
_attackedFlags pushBack _flagToAttack;
|
||||
_flagPos = position _flagToAttack;
|
||||
_nearestPlayer = selectRandom (nearestObjects [_flagPos, ["Exile_Unit_Player"], 150]);
|
||||
if not isNil"_nearestPlayer" then
|
||||
{
|
||||
_paraGroups = [_flagPos, _aiSetup select 0, _aiSetup select 1, ([[_missionName],["aiMode"]] call VEMFr_fnc_getSetting select 0), _missionName, 1000 + (random 1000), 150] call VEMFr_fnc_spawnVEMFrAI;
|
||||
if (count _paraGroups isEqualTo (_aiSetup select 0)) then
|
||||
{
|
||||
_unitCount = 0;
|
||||
{
|
||||
if (count (units _x) isEqualTo (_aiSetup select 1)) then
|
||||
{
|
||||
_unitCount = _unitCount + (count(units _x));
|
||||
};
|
||||
} forEach _paraGroups;
|
||||
if (_unitCount isEqualTo ((_aiSetup select 0) * (_aiSetup select 1))) then
|
||||
{
|
||||
_wayPoints = [];
|
||||
_units = [];
|
||||
{
|
||||
_wp = _x addWaypoint [_flagPos, 50, 1];
|
||||
_wp setWaypointType "SAD";
|
||||
_wp setWaypointSpeed "FULL";
|
||||
_wp setWaypointCombatMode "RED";
|
||||
_wp setWaypointBehaviour "AWARE";
|
||||
_x setCurrentWaypoint _wp;
|
||||
_wayPoints pushback _wp;
|
||||
{
|
||||
if (backpack _x isEqualTo "") then
|
||||
{
|
||||
removeBackpack _x;
|
||||
};
|
||||
_x addBackPack "B_Parachute";
|
||||
_units pushback _x;
|
||||
} forEach (units _x);
|
||||
[_x] spawn VEMFr_fnc_signAI;
|
||||
} forEach _paraGroups;
|
||||
_nameOfTarget = name _nearestPlayer;
|
||||
_players = nearestObjects [_flagPos, ["Exile_Unit_Player"], 275];
|
||||
[[format["A paradrop team is on the way to %1's location!", _nameOfTarget],"BaseAttack", _players]] spawn VEMFr_fnc_broadCast;
|
||||
["BaseAttack", 1, format["A paradrop team is on the way to %1's location!", name _nearestPlayer]] spawn VEMFr_fnc_log;
|
||||
|
||||
while {true} do
|
||||
{
|
||||
scopeName "loop";
|
||||
_deadCount = 0;
|
||||
{
|
||||
if not(alive _x) then
|
||||
{
|
||||
_deadCount = _deadCount + 1;
|
||||
};
|
||||
} forEach _units;
|
||||
if (_deadCount isEqualTo _unitCount) then
|
||||
{
|
||||
breakOut "loop";
|
||||
} else
|
||||
{
|
||||
uiSleep 4;
|
||||
};
|
||||
};
|
||||
_players = nearestObjects [_flagPos, ["Exile_Unit_Player"], 275];
|
||||
[[format["Attack on %1's location has been stopped", _nameOfTarget],"SUCCESS", _players]] spawn VEMFr_fnc_broadCast;
|
||||
VEMFrAttackCount = VEMFrAttackCount - 1;
|
||||
VEMFrMissionCount = VEMFrMissionCount - 1;
|
||||
breakOut "outer";
|
||||
} else
|
||||
{
|
||||
{
|
||||
{
|
||||
deleteVehicle _x;
|
||||
} forEach (units _x);
|
||||
} forEach _paraGroups;
|
||||
["BaseAttack", 0, format["Incorrect amount of total units (%1). Should be %2", _unitCount, (_aiSetup select 0) * (_aiSetup select 1)]] spawn VEMFr_fnc_log;
|
||||
VEMFrAttackCount = VEMFrAttackCount - 1;
|
||||
VEMFrMissionCount = VEMFrMissionCount - 1;
|
||||
breakOut "outer";
|
||||
};
|
||||
} else
|
||||
{
|
||||
["BaseAttack", 0, format["Incorrect spawned group count (%1). Should be %2", count _paraGroups, _aiSetup select 0]] spawn VEMFr_fnc_log;
|
||||
VEMFrAttackCount = VEMFrAttackCount - 1;
|
||||
VEMFrMissionCount = VEMFrMissionCount - 1;
|
||||
breakOut "outer";
|
||||
};
|
||||
} else
|
||||
{
|
||||
_index = _attackedFlags find _flagToAttack;
|
||||
if (_index > -1) then
|
||||
{
|
||||
_attackedFlags deleteAt _index;
|
||||
["BaseAttack", 1, "Flag deleted from attackedFlag array"] spawn VEMFr_fnc_log;
|
||||
} else
|
||||
{
|
||||
["BaseAttack", 0, "Unable to locate and remove attacked flag!"] spawn VEMFr_fnc_log;
|
||||
};
|
||||
["BaseAttack", 0, "Can not find player near flag!"] spawn VEMFr_fnc_log;
|
||||
VEMFrAttackCount = VEMFrAttackCount - 1;
|
||||
VEMFrMissionCount = VEMFrMissionCount - 1;
|
||||
breakOut "outer";
|
||||
};
|
||||
} else
|
||||
{
|
||||
VEMFrAttackCount = VEMFrAttackCount - 1;
|
||||
VEMFrMissionCount = VEMFrMissionCount - 1;
|
||||
breakOut "outer";
|
||||
};
|
||||
} else
|
||||
{
|
||||
["BaseAttack", 0, format["invalid aiSetup setting! (%1)", _aiSetup]] spawn VEMFr_fnc_log;
|
||||
VEMFrAttackCount = VEMFrAttackCount - 1;
|
||||
VEMFrMissionCount = VEMFrMissionCount - 1;
|
||||
breakOut "outer";
|
||||
};
|
||||
} else
|
||||
{
|
||||
["BaseAttack", 0, format["Failed to start mission. Given _missionName (%1) is not in active missionList", _missionName]] spawn VEMFr_fnc_log;
|
||||
VEMFrAttackCount = VEMFrAttackCount - 1;
|
||||
VEMFrMissionCount = VEMFrMissionCount - 1;
|
||||
breakOut "outer";
|
||||
};
|
||||
//
|
||||
} else
|
||||
{
|
||||
VEMFrMissionCount = VEMFrMissionCount - 1;
|
||||
};
|
Loading…
Reference in New Issue
Block a user