From e1cded98c4d54a600daf3721e5f51a46d94d5888 Mon Sep 17 00:00:00 2001 From: IT07 Date: Sat, 16 Apr 2016 23:40:54 +0200 Subject: [PATCH] New mission --- exile_vemf_reloaded/missions/BaseAttack.sqf | 161 ++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 exile_vemf_reloaded/missions/BaseAttack.sqf diff --git a/exile_vemf_reloaded/missions/BaseAttack.sqf b/exile_vemf_reloaded/missions/BaseAttack.sqf new file mode 100644 index 0000000..05b6d66 --- /dev/null +++ b/exile_vemf_reloaded/missions/BaseAttack.sqf @@ -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; +};