Merge pull request #2 from Ghostrider-DbD-/Corrected-Issues-With-Vehicle-Patrols

Corrected issues with vehicle patrols
This commit is contained in:
Ghostrider-DbD- 2016-10-24 21:54:33 -04:00 committed by GitHub
commit b7b23e17ee
112 changed files with 8525 additions and 0 deletions

View File

@ -0,0 +1 @@
q\addons\custom_server

View File

@ -0,0 +1 @@
q\addons\custom_server

View File

@ -0,0 +1,16 @@
//This script sends Message Information to allplayers
// Last modified 9/3/15 by Ghostrider-DBD-
blck_Message = _this;
//diag_log format["AIM.sqf ===] _this = %1",_this];
{
//diag_log format["AIM.sqf ===] (owner _x) = %1", (owner _x)];
(owner _x) publicVariableClient "blck_Message";
} forEach playableUnits;
/*
if (_modType isEqualTo "Exile") then
{
[_blck_Message] remoteExec["fn_blck_MessageHandler",0];
};
*/

View File

@ -0,0 +1,16 @@
//This script sends Message Information to allplayers
// Last modified 9/3/15 by Ghostrider-DBD-
blck_Message = _this;
//diag_log format["AIM.sqf ===] _this = %1",_this];
{
//diag_log format["AIM.sqf ===] (owner _x) = %1", (owner _x)];
(owner _x) publicVariableClient "blck_Message";
} forEach playableUnits;
/*
if (_modType isEqualTo "Exile") then
{
[_blck_Message] remoteExec["fn_blck_MessageHandler",0];
};
*/

View File

@ -0,0 +1,30 @@
/*
Generates an array of equidistant positions along the circle of diameter _radius
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
Last Modified 8-13-16
*/
private["_locs","_radius","_startDir","_currentDir","_Arc","_dist","_newpos","_xpos","_ypos"];
params["_center","_num","_minDistance","_maxDistance"];
_locs = [];
_startDir = round(random(360));
_currentDir = _startDir;
_Arc = 360/_num;
for "_i" from 1 to _num do
{
_currentDir = _currentDir + _Arc;
//diag_log format["spawnEmplaced: _currentDir is %1 for cycle %2",_currentDir,_i];
_dist = round(_minDistance + (random(_maxDistance - _minDistance)));
_newpos = _center getPos [_dist, _currentDir];
//diag_log format["findPositionAlongRadius:: distance of pos %1 from center is %2",_newpos, _newpos distance _center];
_locs pushback _newpos;
};
//diag_log format["_fnc_findPositionsAlongARadius:: _locations = %1",_locations];
_locs

View File

@ -0,0 +1,118 @@
// self explanatory. Checks to see if the position is in either a black listed location or near a player spawn.
// As written this relies on BIS_fnc_findSafePos to ensure that the spawn point is not on water or an excessively steep slope.
//
/*
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
Last Modified 8-13-16
*/
private["_findNew","_coords","_blackListCenter","_blackListRadius","_dist","_xpos","_ypos","_newPos","_townPos"];
_findNew = true;
while {_findNew} do {
_findNew = false;
//[_centerForSearch,_minDistFromCenter,_maxDistanceFromCenter,_minDistanceFromNearestObj,_waterMode,_maxTerainGradient,_shoreMode] call BIS_fnc_findSafePos
// https://community.bistudio.com/wiki/BIS_fnc_findSafePos
_coords = [blck_mapCenter,0,blck_mapRange,30,0,5,0] call BIS_fnc_findSafePos;
//diag_log format["<<--->> _coords = %1",_coords];
{
if ((_x distance _coords) < MinDistanceFromMission) then {
_FindNew = true;
};
}forEach DBD_HeliCrashSites;
{
if ( ((_x select 0) distance _coords) < (_x select 1)) exitWith
{
_FindNew = true;
};
} forEach blck_locationBlackList;
//diag_log format["#- findSafePosn -# blck_ActiveMissionCoords isEqualTo %1", blck_ActiveMissionCoords];
{
//diag_log format["#- findSafePosn -# blck_ActiveMissionCoords active mission item is %1", _x];
if ( (_x distance _coords) < MinDistanceFromMission) exitWith
{
_FindNew = true;
};
} forEach blck_ActiveMissionCoords;
//diag_log format["#- findSafePosn -# blck_recentMissionCoords isEqualTo %1", blck_recentMissionCoords];
{
private["_oldPos","_ignore"];
_ignore = false;
//diag_log format["-# findSafePosn.sqf -# Old Mission element is %1", _x];
if (diag_tickTime > ((_x select 1) + 1200)) then // if the prior mission was completed more than 20 min ago then delete it from the list and ignore the check for this location.
{
_ignore = true;
blck_recentMissionCoords= blck_recentMissionCoords - _x;
//diag_log format["-# findSafePosn.sqf -# Removing Old Mission element: %1", _x];
};
if !(_ignore) then
{
//diag_log format["-# findSafePosn.sqf -# testing _coords against Old Mission coords is %1", _x select 0];
if ( ((_x select 0) distance _coords) < MinDistanceFromMission) then
{
_FindNew = true;
//diag_log format["-# findSafePosn.sqf -# Too Close to Old Mission element: %1", _x];
};
};
} forEach blck_recentMissionCoords;
// test for water nearby
private ["_i"];
_dist = 100;
for [{_i=0}, {_i<360}, {_i=_i+20}] do
{
_xpos = (_coords select 0) + sin (_i) * _dist;
_ypos = (_coords select 1) + cos (_i) * _dist;
_newPos = [_xpos,_ypos,0];
if (surfaceIsWater _newPos) then
{
_FindNew = true;
_i = 361;
};
};
// check that missions spawn at least 1 kkm from towns
{
_townPos = [((locationPosition _x) select 0), ((locationPosition _x) select 1), 0];
if (_townPos distance _coords < 200) exitWith {
_FindNew = true;
};
} forEach blck_townLocations;
// check for nearby plot pole/freq jammer within 800 meters
{
if ((_x distance _coords) < 600) then
{
_FindNew = true;
};
}forEach nearestObjects[player, ["PlotPole_EPOCH"], 800];
// check to be sure we do not spawn a mission on top of a player.
{
if (isPlayer _x && (_x distance _coords) < 600) then
{
_FindNew = true;
};
}forEach playableUnits;
if (blck_WorldName isEqualTo "taviana") then
{
_tavTest = createVehicle ["SmokeShell",_coords,[], 0, "CAN_COLLIDE"];
_tavHeight = (getPosASL _tavTest) select 2;
deleteVehicle _tavTest;
if (_tavHeight > 100) then {_FindNew = true;};
};
};
if ((count _coords) > 2) then
{
private["_temp"];
_temp = [_coords select 0, _coords select 1];
_coords = _temp;
};
_coords;

View File

@ -0,0 +1,85 @@
/*
Determine the map name, set the map center and size, and return the map name.
Trader coordinates were pulled from the config.cfg
Inspired by the Vampire and DZMS
Last Modified 9/3/16
*/
private["_blck_WorldName"];
_blck_WorldName = toLower format ["%1", worldName];
_blck_worldSize = worldSize;
private["_modType"];
_modType = [] call blck_getModType;
diag_log format["[blckeagls] Loading Map-specific settings with worldName = %1 and modType = %2",_blck_WorldName,_modType];
if (_modType isEqualTo "Epoch") then
{
switch (_blck_WorldName) do {// These may need some adjustment - including a test for shore or water should help as well to avoid missions spawning on water.
case "altis":{
diag_log "Altis-specific settings for Epoch loaded";
blck_mapCenter = [6322,7801,0];
blck_mapRange = 21000;
if (blck_blacklistSpawns) then {
diag_log "Spawn black list locations added for Altis";
blck_locationBlackList = blck_locationBlackList + [
[[14939,15083,0],1000], // trader
[[23600, 18000,0],1000], // trader
[[23600,18000,0],1000], // trader
[[10800,10641,0],1000] // isthmus
];
};
}; // Add Central, East and West respawns/traders
case "taviana":{blck_mapCenter = [10370, 11510, 0];blck_mapRange = 14400;};
case "namalsk":{blck_mapCenter = [4352, 7348, 0];blck_mapRange = 10000;};
case "napf": {blck_mapCenter = [10240,10240,0]; blck_mapRange = 14000}; // {_centerPos = [10240, 10240, 0];_isMountainous = true;_maxHeight = 50;};
case "australia": {
blck_mapCenter = [20480,20480, 150];blck_mapRange = 40960;
if (blck_blacklistSpawns) then {
blck_locationBlackList = blck_locationBlackList + [ [[24398.3, 13971.6,0],800],[[34751.5, 13431.9,0],800],[[19032.7, 33974.6, 0],800],[[4056.35, 19435.9, 0],800] ];
diag_log "Spawn black list locations added for Australia";
};
}; //
default {blck_mapCenter = [ (_blck_worldSize/2),(_blck_worldSize/2),0],blck_mapRange = _blck_worldSize;};
};
};
if (_modType isEqualTo "Exile") then
{
switch (_blck_WorldName) do {// These may need some adjustment - including a test for shore or water should help as well to avoid missions spawning on water.
case "altis":{
//diag_log "Altis-specific settings loaded";
blck_mapCenter = [6322,7801,0];
blck_mapRange = 21000;
if (blck_blacklistSpawns) then {
diag_log "Spawn black list locations added for Altis";
blck_locationBlackList = blck_locationBlackList + [
[[14939,15083,0],1000], // trader
[[23600, 18000,0],1000], // trader
[[23600,18000,0],1000], // trader
[[10800,10641,0],1000] // isthmus
];
};
}; // Add Central, East and West respawns/traders
case "taviana":{blck_mapCenter = [10370, 11510, 0];blck_mapRange = 14400;};
case "namalsk":{blck_mapCenter = [4352, 7348, 0];blck_mapRange = 10000;};
case "napf": {blck_mapCenter = [10240,10240,0]; blck_mapRange = 14000}; // {_centerPos = [10240, 10240, 0];_isMountainous = true;_maxHeight = 50;};
case "tanoa": {
blck_mapCenter = [ (_blck_worldSize/2),(_blck_worldSize/2),0];
blck_mapRange = _blck_worldSize;
blck_locationBlackList = blck_locationBlackList + [
[[2901,12333,0],1000], // trader
[[23600, 18000,0],1000], // trader
[[23600,18000,0],1000], // trader
[[10800,10641,0],1000] // isthmus
];// {.51, 0, .8}
};
default {blck_mapCenter = [ (_blck_worldSize/2),(_blck_worldSize/2),0],blck_mapRange = _blck_worldSize;};
};
};
blck_townLocations = []; //nearestLocations [blck_mapCenter, ["NameCity","NameCityCapital"], 30000];
blck_WorldName = _blck_WorldName;
blck_worldSet = true;

View File

@ -0,0 +1,34 @@
/*
Original Credit:
Updated for Epoch 0.3.8.0 by He-Man
http://epochmod.com/forum/index.php?/topic/34661-release-hs-blackmarket-16-new-trader-system-special-trader-blackmarket/&page=38
HALV_takegive_crypto.sqf
by Halv
Copyright (C) 2015 Halvhjearne & Suppe
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Contact : halvhjearne@gmail.com
*/
params["_player","_nr"];
_cIndex = EPOCH_customVars find "Crypto";
_vars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar];
_current_crypto = _vars select _cIndex;
_current_cryptoRaw = _current_crypto;
_playerCryptoLimit = EPOCH_customVarLimits select _cIndex;
_playerCryptoLimit params ["_playerCryptoLimitMax","_playerCryptoLimitMin"];
_current_crypto = ((_current_cryptoRaw + _nr) min _playerCryptoLimitMax) max _playerCryptoLimitMin;
_current_crypto remoteExec ['EPOCH_effectCrypto',(owner _player)];
_vars set[_cIndex, _current_crypto];
_player setVariable["VARS", _vars];

View File

@ -0,0 +1,51 @@
/*
Run a loop that checks data arrays regarding:
- whether it is time to delete the mission objects at a specific location
- whether it is time to delete live AI associated with a specific mission
By Ghostrider-DbD-
Last modified 10-22-16
*/
private _index = 0;
while {true} do
{
//diag_log format["_fnc_mainTread::-->> pass %1",_index];
//_index = _index + 1;
uiSleep blck_mainThreadUpdateInterval;
{
if (diag_tickTime > (_x select 1) ) then {
//diag_log format["_fnc_mainTread:: cleaning up AI group %1",_x];
[_x select 0] call blck_fnc_cleanupAliveAI;
};
}forEach blck_liveMissionAI;
{
if (diag_tickTime > (_x select 1) ) then {
//diag_log format["_fnc_mainTread:: cleaning up mission objects %1",_x];
[_x select 0] call blck_fnc_cleanupObjects;
};
}forEach blck_oldMissionObjects;
[] call GMS_fnc_cleanupDeadAI;
/*
{
if (_x select 6 > 0) then // The mission is not running, check the time left till it is spawned
{
if (diag_tickTime > (_x select 6)) then // time to spawn the mission
{
private _coords = [] call blck_fnc_FindSafePosn;
_coords pushback 0;
blck_ActiveMissionCoords pushback _coords;
private["_markerClass","_missionName","_missionPath","_aiDifficultyLevel"];
//diag_log format["_fnc_mainThread:: -->> _missionClass would = %1%2",_x select 2, _index];
_markerClass = _x select 2;
[_markerClass,"Active",_coords] call blck_fnc_updateMissionQue;
_aiDifficultyLevel = _x select 4;
_missionName = selectRandom (_x select 0);
_missionPath = _x select 1;
// [_missionListHunbers,_pathHunters,"HunterMarker","green",blck_TMin_Hunter,blck_TMax_Hunter]
[_coords,_markerClass,_aiDifficultyLevel] execVM format["\q\addons\custom_server\Missions\%1\%2.sqf",_missionPath,_missionName];
};
};
}forEach blck_pendingMissions;
*/
};

View File

@ -0,0 +1,76 @@
/*
blck_monitoredVehicles = [];
blck_liveMissionAI = [];
blck_missionObjects = [];
*/
diag_log "[blckeagls]:-->> starting custom_server monitor ver 1.0 6:40 AM";
for "_i" from 1 to 1000 do
{
diag_log format["_fnc_monitor running diag_tickTime = %1",diag_tickTime];
uiSleep 20;
diag_log format["_fnc_monitor:-->> server time = %1",diag_tickTime];
diag_log format["_fnc_monitor:-->> blck_liveMissionAI = %1",blck_liveMissionAI];
diag_log format["_fnc_monitor:-->> blck_missionObjects = %1",blck_missionObjects];
diag_log format["_fnc_monitor:-->> blck_monitoredVehicles = %1",blck_monitoredVehicles];
// clean up alive AI when it is time.
{
if ( (diag_tickTime - (_x select 1) > blck_AliveAICleanUpTime) ) then
{
diag_log format ["cleaning up Alive AI %1",_x];
blck_liveMissionAI = blck_liveMissionAI - _x;
[_x select 0] call blck_fnc_cleanupAliveAI;
};
}forEach blck_liveMissionAI;
// clean up mission objects when it is time.
{
if ( (diag_tickTime - (_x select 1) > blck_cleanupCompositionTimer) ) then
{
diag_log format ["cleaning up Alive AI %1",_x];
[_x select 0] call blck_fnc_cleanupObjects;
blck_missionObjects = blck_missionObjects - [_x];
};
}forEach blck_missionObjects;
// If there are crew and the crew is alive and the vehicle is not severely damaged that wait.
//if
{
if ({alive _x} count crew _veh == 0 || (damage _x) > 0.9) then {[_x] spawn blck_fnc_vehicleMonitor;};
}forEach blck_monitoredVehicles;
};
/*
[] spawn {
while {true} do
{
/*
// clean up alive AI when it is time.
{
if ( (diag_tickTime - (_x select 1) > blck_AliveAICleanUpTime) ) then
{
[_x select 0] call blck_fnc_cleanupAliveAI;
};
}forEach blck_liveMissionAI
// clean up alive AI when it is time.
{
if ( (diag_tickTime - (_x select 1) > blck_cleanupCompositionTimer) ) then
{
[_x select 0] call blck_fnc_cleanupObjects;
};
}forEach blck_missionObjects;
{
// If there are crew and the crew is alive and the vehicle is not severely damaged that wait.
//if
{
if ({alive _x} count crew _veh == 0 || (damage _x) > 0.9) then {[_x] spawn blck_fnc_vehicleMonitor;};
}forEach blck_monitoredVehicles;
};
};
*/

View File

@ -0,0 +1,21 @@
//////////////////////////////////////////////
// returns a position array at random position within a radius of _range relative to _pos.
/*
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
Last Modified 8-13-16
*/
////////////////////////////////////////////
private["_newX","_newY"];
params["_pos","_range"];
_signs = [1,-1];
_sign = selectRandom _signs;
_newX = ((_pos select 0) + (random(_range)) * (selectRandom _signs));
_newY = ((_pos select 1) + (random(_range)) * (selectRandom _signs));
[_newX,_newY,0]

View File

@ -0,0 +1,12 @@
/*
Adds a list of live AI associated with a mission to a que of live AI that will be deleted at a later time by the main thread
call as [ [list of AI], time] call blck_fnc_addLiveAItoQue; where time is the time delay before deletion occurs
by Ghostrider-DbD-
Last modified 10-14-16
*/
params["_aiList","_timeDelay"];
blck_liveMissionAI pushback [_aiList, (diag_tickTime + _timeDelay)];

View File

@ -0,0 +1,12 @@
/*
Adds a list of live AI associated with a mission to a que of live AI that will be deleted at a later time by the main thread
call as [ [list of AI], time] call blck_fnc_addLiveAItoQue; where time is the time delay before deletion occurs
by Ghostrider-DbD-
Last modified 10-14-16
*/
params["_aiList","_timeDelay"];
blck_liveMissionAI pushback [_aiList, (diag_tickTime + _timeDelay)];

View File

@ -0,0 +1,18 @@
/*
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
Last Modified 8-13-16
Waits for a random period between _min and _max seconds
Call as
[_minTime, _maxTime] call blck_fnc_waitTimer
Returns true;
*/
private["_wait","_Tstart"];
params["_min","_max"];
_wait = round( _min + (_max - _min) );
uiSleep _wait;
true

View File

@ -0,0 +1,12 @@
/*
Based on code by IT07 written for VEMF_r
*/
private "_mod";
_mod = "";
if not ( isNull ( configFile >> "CfgPatches" >> "exile_server" ) ) then { _mod = "Exile" };
if not ( isNull ( configFile >> "CfgPatches" >> "a3_epoch_server" ) ) then { _mod = "Epoch" };
_mod

View File

@ -0,0 +1,14 @@
private["_startTime"];
_startTime = diag_tickTime;
[] spawn {
while {true} do
{
blck_serverFPS = diag_FPS;
publicVariable "blck_serverFPS";
uiSleep 3;
};
};

View File

@ -0,0 +1,42 @@
// Sets up waypoints for a specified group.
/*
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
Last Modified 8-13-16
*/
private["_dist","_dir","_arc","_xpos","_ypos","_newpos","_wpradius","_wpnum","_oldpos"];
params["_pos","_minDis","_maxDis","_group"];
/*
_pos = _this select 0; // center of the patrol area
_minDis = _this select 1; // minimum distance from the center of a patrol area for waypoints
_maxDis = _this select 2; // maximum distance from the center of a patrol area for waypoints
_group = _this select 3;
*/
_wpradius = 30;
_wpnum = 6;
_oldpos = _pos;
_newpos = _oldpos;
_dir = random 360;
_arc = 360/_wpnum;
//Set up waypoints for our AI
for [{ _x=1 },{ _x < _wpnum },{ _x = _x + 1; }] do {
_dir = _dir + _arc;
if (_dir > 360) then {_dir = _dir - 360;};
while{_oldpos distance _newpos < 20}do{
sleep .1;
_dist = (_minDis+(random (_maxDis - _minDis)));
_xpos = (_pos select 0) + sin (_dir) * _dist;
_ypos = (_pos select 1) + cos (_dir) * _dist;
_newpos = [_xpos,_ypos,0];
};
_oldPos = _newpos;
_wp = _group addWaypoint [[_xpos,_ypos,0], _wpradius];
_wp setWaypointType "MOVE";
};
_wp = _group addWaypoint [[_xpos,_ypos,0], _wpradius];
_wp setWaypointType "CYCLE";

View File

@ -0,0 +1,67 @@
/*
Spawn and configure a group
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
Last Modified 9-12-16
*/
//Sets Private Variables to they don't interfere when this script is called more than once
private["_numbertospawn","_i","_groupSpawned","_safepos","_x","_weaponList","_useLauncher","_launcherType","_aiSkills"];
params["_pos", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], "_center", ["_minDist",20], ["_maxDist",35], ["_uniforms",blck_SkinList], ["_headGear",blck_headgear] ];
//Spawns correct number of AI
if (_numai2 > _numai1) then {
_numbertospawn = floor( (random (_numai2 - _numai1) + _numai1 ) );
} else {
_numbertospawn = _numai2;
};
//diag_log format["spawnGroup.sqf: _numbertospawn = %1",_numbertospawn];
//Creates a group to make them attack players
_groupSpawned = createGroup blck_AI_Side; // ; Group changed for Exile for which player is RESISTANCE.
_groupSpawned setcombatmode blck_combatMode;
_groupSpawned allowfleeing 0;
_groupSpawned setspeedmode "FULL";
_groupSpawned setFormation blck_groupFormation;
_groupSpawned setVariable ["blck_group",true,true];
//diag_log format["spawnGroup:: group is %1",_groupSpawned];
// Determines whether or not the group has launchers
_useLauncher = blck_useLaunchers;
// define weapons list for the group
switch (_skillLevel) do {
case "blue": {_weaponList = blck_WeaponList_Blue;};
case "red": {_weaponList = blck_WeaponList_Red;};
case "green": {_weaponList = blck_WeaponList_Green;};
case "orange": {_weaponList = blck_WeaponList_Orange;};
default {_weaponList = blck_WeaponList_Blue;};
};
//Spawns the correct number of AI Groups, each with the correct number of units
//Counter variable
_i = 0;
while {_i < _numbertospawn} do {
_i = _i + 1;
if (blck_useLaunchers && _i <= blck_launchersPerGroup) then
{
_launcherType = selectRandom blck_launcherTypes;
} else {
_launcherType = "none";
};
//Finds a safe positon to spawn the AI in the area given
_safepos = [_pos,0,30,2,0,20,0] call BIS_fnc_findSafePos;
//Spawns the AI unit
//diag_log format["spawnGroup:: spawning unit #%1",_i];
// params["_pos","_weaponList","_aiGroup",["_skillLevel","red"],["_Launcher","none"],["_uniforms",blck_SkinList],["_headGear",blck_BanditHeadgear]];
[_safepos,_weaponList,_groupSpawned,_skillLevel,_launcherType,_uniforms,_headGear] call blck_fnc_spawnAI;
};
_groupSpawned selectLeader (units _groupSpawned select 0);
[_pos,_minDist,_maxDist,_groupSpawned] spawn blck_fnc_setupWaypoints;
//diag_log format["fnc_spawnGroup:: Group spawned was %1 with units of %2",_groupSpawned, units _groupSpawned];
_groupSpawned

View File

@ -0,0 +1,12 @@
/*
Adds a list of live AI associated with a mission to a que of live AI that will be deleted at a later time by the main thread
call as [ [list of AI], time] call blck_fnc_addLiveAItoQue; where time is the time delay before deletion occurs
by Ghostrider-DbD-
Last modified 10-14-16
*/
params["_aiList","_timeDelay"];
if (blck_debugON) then {diag_log format["_fnc_addLiveAIToQue:: -->> _aiList = %1 || _timeDelay = %2",_aiList,_timeDelay];};
blck_liveMissionAI pushback [_aiList, (diag_tickTime + _timeDelay)];

View File

@ -0,0 +1,21 @@
/*
Adds the basic list of parameters that define a mission such as the marker name, mission list, mission path, AI difficulty, and timer settings, to the arrays that the main thread inspects.
by Ghostrider-DbD-
Last modified 10-14-16
*/
private _mission = _this;
diag_log format["_fnc_addMissionToQue:: -- >> _mission - %1",_mission];
// 0 1 2 3 4 5
// [_missionListOrange,_pathOrange,"OrangeMarker","orange",blck_TMin_Orange,blck_TMax_Orange,]
params["_missionList","_path","_marker","_difficulty","_tMin","_tMax","_noMissions"];
for "_i" from 1 to _noMissions do
{
private _waitTime = diag_tickTime + (_tMin) + random((_tMax) - (_tMin));
_mission = [_missionList,_path,format["%1%2",_marker,_i],_difficulty,_tMin,_tMax,_waitTime,[0,0,0]];
diag_log format["-fnc_addMissionToQue::-->> _mission = %1",_mission];
blck_pendingMissions pushback _mission;
};
//diag_log format["_fnc_addMissionToQue:: -- >> Result - blck_pendingMissions = %1",blck_pendingMissions];

View File

@ -0,0 +1,12 @@
/*
Adds a list of live AI associated with a mission to a que of live AI that will be deleted at a later time by the main thread
call as [ [list of AI], time] call blck_fnc_addLiveAItoQue; where time is the time delay before deletion occurs
by Ghostrider-DbD-
Last modified 10-14-16
*/
params["_objList","_timeDelay"];
if (blck_debugON) then {diag_log format["_fnc_addObjToQue:: -- >> _objList = %1 || _timeDelay = %2",_objList,_timeDelay];};
blck_oldMissionObjects pushback [_objList, (diag_tickTime + _timeDelay)];

View File

@ -0,0 +1,23 @@
// Delete objects in a list after a certain time.
// code to delete any smoking or on fire objects adapted from kalania
//http://forums.bistudio.com/showthread.php?165184-Delete-Fire-Effect/page1
// http://forums.bistudio.com/showthread.php?165184-Delete-Fire-Effect/page2
/*
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
Last Modified 8-13-16
*/
params["_buildings"];
{
//diag_log format["cleanupObjects.sqf: -- >> object %1 is typeOf %2",_x, typeOf _x];
deleteVehicle _x;
} forEach _buildings;

View File

@ -0,0 +1,14 @@
// removes mines in a region centered around a specific position.
/*
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
Last Modified 8-13-16
*/
params ["_mines"];
//_mines = _this select 0; // array containing the mines to be deleted
//diag_log format["deleting %1 mines----- >>>> ", count _mines];
{
deleteVehicle _x;
} forEach _mines;

View File

@ -0,0 +1,82 @@
/*
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
Last Modified 9-4-16
Fill a crate with items
*/
private["_a1","_item","_diff"];
params["_crate","_boxLoot","_itemCnts"];
_itemCnts params["_wepCnt","_magCnt","_opticsCnt","_materialsCnt","_itemCnt","_bkcPckCnt"];
/*
_wepCnt // number of types of weapons to load
_magCnt // Number of types of additional, optional magazines to add (this includes building supplies)
_opticsCnt // number of types of optics to be added
_materialsCnt // Number of cinder, motar etc to be added
_itemCnt // number of items (first aid packs, multigun bits) to load
_bkcPckCnt // Number of backpacks to add
*/
if (_wepCnt > 0) then
{
_a1 = _boxLoot select 0; // choose the subarray of weapons and corresponding magazines
// Add some randomly selected weapons and corresponding magazines
for "_i" from 1 to _wepCnt do {
_item = selectRandom _a1;
_crate addWeaponCargoGlobal [_item select 0,1];
_crate addMagazineCargoGlobal [_item select 1, 1 + round(random(3))];
};
};
if (_magCnt > 0) then
{
// Add Magazines, grenades, and 40mm GL shells
_a1 = _boxLoot select 1;
for "_i" from 1 to _magCnt do {
_item = selectRandom _a1;
_diff = (_item select 2) - (_item select 1); // Take difference between max and min number of items to load and randomize based on this value
_crate addMagazineCargoGlobal [_item select 0, (_item select 1) + round(random(_diff))];
};
};
if (_opticsCnt > 0) then
{
// Add Optics
_a1 = _boxLoot select 2;
for "_i" from 1 to _opticsCnt do {
_item = selectRandom _a1;
_diff = (_item select 2) - (_item select 1);
_crate additemCargoGlobal [_item select 0, (_item select 1) + round(random(_diff))];
};
};
if (_materialsCnt > 0) then
{
// Add materials (cindar, mortar, electrical parts etc)
_a1 = _boxLoot select 3;
for "_i" from 1 to _materialsCnt do {
_item = selectRandom _a1;
_diff = (_item select 2) - (_item select 1);
_crate additemCargoGlobal [_item select 0, (_item select 1) + round(random(_diff))];
};
};
if (_itemCnt > 0) then
{
// Add Items (first aid kits, multitool bits, vehicle repair kits, food and drinks)
_a1 = _boxLoot select 4;
for "_i" from 1 to _itemCnt do {
_item = selectRandom _a1;
_diff = (_item select 2) - (_item select 1);
_crate additemCargoGlobal [_item select 0, (_item select 1) + round(random(_diff))];
};
};
if (_bkcPckCnt > 0) then
{
_a1 = _boxLoot select 5;
for "_i" from 1 to _bkcPckCnt do {
_item = selectRandom _a1;
_diff = (_item select 2) - (_item select 1);
_crate addbackpackcargoGlobal [_item select 0, (_item select 1) + round(random(_diff))];
};
};

View File

@ -0,0 +1,459 @@
/*
Generic Mission Spawner
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
*/
private ["_crates","_aiGroup","_objects","_vehicles","_groupPatrolRadius","_missionLandscape","_compositions","_missionCfg","_compSel","_mines","_blck_AllMissionAI","_blck_localMissionMarker","_AI_Vehicles"];
params["_coords","_missionType","_aiDifficultyLevel"];
/*
_aiDifficultyLevel = _this select 2; // "blue","red","green" and "orange"
*/
// *************************
// Once the entire mission system can support timeout cleanup of vehicles (specifically the AI vehicle patrols) then each mission layout can define this varialbe. Until then disable timouts.
//////////////////////////////////
// To simplify debugging and also reduce load on server besure only once instance of the mission spawner is initializing at a time.
/////////////////////////////////
waitUntil {blck_missionSpawning isEqualTo false};
blck_missionSpawning = true;
diag_log format["[blckeagls] missionSpawner:: INITIALIZING USING MISSION PARAMETERS mission: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
private["_chanceHeliPatrol","_noPara","_reinforcementLootCounts","_chanceLoot"];
if (isNil "_chanceReinforcements") then
{
_chanceReinforcements = 0;
_noPara = 0;
_reinforcementLootCounts = [0,0,0,0,0,0];
_chanceHeliPatrol = 0;
_chanceLoot = 0;
};
private["_timeOut"]; // _timeOut is the time in seconds after which a mission is deactivated.
if (isNil "_markerColor") then {_markerColor = "ColorBlack"};
if (isNil "_markerType") then {_markerType = ["mil_box",[]]};
if (isNil "_timeOut") then {_timeOut = -1;};
if (isNil "_noPara") then {_noPara = 0};
if (isNil "_chanceHeliPatrol") then {_chanceHeliPatrol = 0;};
if (isNil "_chanceLoot") then {_chanceLoot = 0};
if (isNil "_reinforcementLootCounts") then
{
_weap = 2 + floor(random(4));
_mags = 5 + floor(random(6));
_backpacks = 1 + floor(random(2));
_optics = 1 + floor(random(6));
_loadout = 1 + floor(random(3));
_reinforcementLootCounts = [_weap,_mags,_optics,0,0,_backpacks];
//diag_log "missionSpawner:: default values used for _reinforcementLootCounts";
}
else
{
//diag_log "missionSpawner:: Mission specific values used for _reinforcementLootCounts";
};
if (blck_debugON) then {
diag_log format["(2) [blckEagle] REINFORCEMENT PARAMETERS: Mission Reinforcement Parameters for missionType %5: changeReinforcements %1 numAI %2 changePatrol %3 chanceLoot %4",_chanceReinforcements,_noPara,_chanceHeliPatrol,_chanceLoot,_missionType];
};
private["_useMines"];
if (isNil "_useMines") then {_useMines = blck_useMines; /*diag_log "[blckEagles] Using default setting for _useMines";*/};
_objects = [];
_mines = [];
_crates = [];
_aiGroup = [];
_missionAIVehicles = [];
_blck_AllMissionAI = [];
_AI_Vehicles = [];
_blck_localMissionMarker = [_missionType,_coords,"","",_markerColor,_markerType];
_delayTime = 1;
_groupPatrolRadius = 50;
if (blck_labelMapMarkers select 0) then
{
//diag_log "SM1.sqf: labeling map markers *****";
_blck_localMissionMarker set [2, _markerMissionName];
};
if !(blck_preciseMapMarkers) then
{
//diag_log "SM1.sqf: Map marker will be OFFSET from the mission position";
_blck_localMissionMarker set [1,[_coords,75] call blck_fnc_randomPosition];
};
_blck_localMissionMarker set [3,blck_labelMapMarkers select 1]; // Use an arrow labeled with the mission name?
["start",_startMsg,_blck_localMissionMarker select 2] call blck_fnc_messageplayers;
[_blck_localMissionMarker] execVM "debug\spawnMarker.sqf";
_fn_timedOut = {
params["_startTime"];
private["_return"];
_return = ( (diag_tickTime - _startTime) > blck_MissionTimout );
_return;
};
_fn_playerWithinRange = {
params["_pos"];
private["_return"];
_return = false;
{
if (isPlayer _x and _x distance _pos <= blck_TriggerDistance) then {_return = true};
}forEach playableunits;
_return;
};
uiSleep 1;
/////////////////////////////
// Everything has been set up for the mission and it is now waiting to be triggered by a nearby player or to time out.
// Lets let other instances of the mission spawner know it is OK to go ahead
////////////////////////////
blck_missionSpawning = false;
if (DBD_debugON) then {diag_log format["missionSpawner:: WAITING FOR PLAYER to trigger the mission for missionType %1",_missionType];};
private["_wait","_missionStartTime","_playerInRange","_missionTimedOut"];
_missionStartTime = diag_tickTime;
_playerInRange = false;
_missionTimedOut = false;
_wait = true;
while {_wait} do
{
uiSleep 1;
if ([_coords] call _fn_playerWithinRange) then
{
_wait = false;
_playerInRange = true;
} else
{
if ( (diag_tickTime - _missionStartTime) > blck_MissionTimout ) then
{
_wait = false;
_missionTimedOut = true;
} else {
if (blck_debugLevel == 3) then
{
sleep 120;
_wait = false;
_playerInRange = true;
diag_log format["(3) _fnc_missionSpawner:: -->> ACTIVATION Mission of missionType %1 activated based on blck_debugLevel == 3",_missionType];
};
};
};
};
//waitUntil{ { (isPlayer _x && _x distance _coords <= blck_TriggerDistance /*&& vehicle _x == _x*/) || ([_missionStartTime] call _fn_timedOut) } count playableunits > 0 };
if (blck_debugON) then
{
diag_log format["missionSpawner:: MISSION TRIGGER contition _missionType = %4 and playerInRange %1 and timout = %2 and blck_debugLevel = %3",_playerInRange, _missionTimedOut,blck_debugLevel,_missionType];
};
if (_missionTimedOut) exitWith
{
//["timeOut",_endMsg,_blck_localMissionMarker select 2] call blck_fnc_messageplayers;
[_blck_localMissionMarker select 0] execVM "debug\deleteMarker.sqf";
_blck_localMissionMarker set [1,[0,0,0]];
_blck_localMissionMarker set [2,""];
[_objects, 1] spawn blck_fnc_cleanupObjects;
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: Mission Timed Out: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
};
if (_playerInRange || blck_debugLevel == 3) then
{
if (blck_debugON) then
{ diag_log format["[blckeagls] missionSpawner:: -- >> Mission tripped by nearby player: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
if (count _missionLootBoxes > 0) then
{
_crates = [_coords,_missionCfg select 2/* array of crates*/] call blck_fnc_spawnMissionCrates;
}
else
{
_crates = [_coords,[[selectRandom blck_crateTypes /*"Box_NATO_Wps_F"*/,[0,0,0],_crateLoot,_lootCounts]]] call blck_fnc_spawnMissionCrates;
};
_objects = _objects + _crates;
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: CRATES SPAWNED: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
uiSleep _delayTime;
if (blck_SmokeAtMissions select 0) then // spawn a fire and smoke near the crate
{
private ["_temp"];
_temp = [_coords,blck_SmokeAtMissions select 1] call blck_fnc_smokeAtCrates;
_objects = _objects + _temp;
};
uiSleep _delayTime;
if (_useMines) then
{
_mines = [_coords] call blck_fnc_spawnMines;
//waitUntil{!(_mines isEqualTo [];);
uiSleep _delayTime;;
};
uiSleep _delayTime;
if (_missionLandscapeMode isEqualTo "random") then
{
_objects = [_coords,_missionLandscape, 3, 15, 2] call blck_fnc_spawnRandomLandscape;
} else {
_objects = [_coords, round(random(360)),_missionLandscape,true] call blck_fnc_spawnCompositionObjects;
};
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: LANDSCAPE SPAWNED: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
uiSleep _delayTime;;
if ((count _missionLootVehicles) > 0) then // spawn loot vehicles
{
{
//diag_log format["spawnMissionCVehicles.sqf _x = %1",_x];
_offset = _x select 1; // offset relative to _coords at which to spawn the vehicle
_pos = [(_coords select 0)+(_offset select 0),(_coords select 1) + (_offset select 1),(_coords select 2)+(_offset select 2)];
_veh = [_x select 0 /* vehicle class name*/, _pos] call blck_fnc_spawnVehicle;
_vehs pushback _veh;
[_veh,_x select 2 /*loot array*/, _x select 3 /*array of values specifying number of items of each loot type to load*/] call blck_fnc_fillBoxes;
}forEach _missionLootVehicles;
uiSleep _delayTime;
};
if (blck_useStatic && (_noEmplacedWeapons > 0)) then
{
private["_static","_count"];
if ( count (_missionEmplacedWeapons) > 0 ) then
{
_static = _missionCfg select 4 select 1;
_count = _missionCfg select 4 select 0;
}
else
{
_static = blck_staticWeapons;
_count = _noEmplacedWeapons;
};
private ["_emplacedGroup","_emplacedPositions"];
_emplacedPositions = [_coords,_count,35,50] call blck_fnc_findPositionsAlongARadius;
//diag_log format["missionSpawner:: _emplacedPositions = %1",_emplacedPositions];
{
_emplacedGroup = [_x,1,1,_aiDifficultyLevel,_coords,1,2,_uniforms,_headGear] call blck_fnc_spawnGroup;
//_emplacedUnits = units _emplacedGroup;
_blck_AllMissionAI = _blck_AllMissionAI + (units _emplacedGroup);
_emplacedWeapon = [_x,_emplacedGroup,blck_staticWeapons,5,15] call blck_fnc_spawnEmplacedWeapon;
_missionAIVehicles pushback _emplacedWeapon;
uiSleep _delayTime;
}forEach _emplacedPositions;
//diag_log format["missionSpawner:: emplaced weapons data: _AI_Vehicles %1 _blck_AllMissionAI %1",_AI_Vehicles,_blck_AllMissionAI];
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: STATIC WEAPONS SPAWNED: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
};
//diag_log format["_fnc_missionSpawner:: after adding any static weapons, _blck_AllMissionAI is %1",_blck_AllMissionAI];
if (blck_useVehiclePatrols && (_noVehiclePatrols > 0)) then
{
private["_vehGroup","_patrolVehicle","_vehiclePatrolSpawns"];
_vehiclePatrolSpawns= [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius;
diag_log format["missionSpawner:: _vehiclePatrolSpawns = %1",_vehiclePatrolSpawns];
//for "_i" from 1 to _noVehiclePatrols do
{
_vehGroup = [_x,3,3,_aiDifficultyLevel,_coords,1,2,_uniforms,_headGear] call blck_fnc_spawnGroup;
//diag_log format["missionSpawner:: group for AI Patrol vehicle spawn: group is %1 with units of %2",_vehGroup, units _vehGroup];
_blck_AllMissionAI = _blck_AllMissionAI + (units _vehGroup);
_randomVehicle = blck_AIPatrolVehicles call BIS_fnc_selectRandom;
//diag_log format["missionSpawner:: vehicle selected is %1", _randomVehicle];
_patrolVehicle = [_coords,_x,_randomVehicle,(_x distance _coords) -5,(_x distance _coords) + 5,_vehGroup] call blck_fnc_spawnVehiclePatrol;
//diag_log format["missionSpawner:: patrol vehicle spawned was %1",_patrolVehicle];
_vehGroup setVariable["groupVehicle",_patrolVehicle,true];
//uiSleep _delayTime;
_AI_Vehicles pushback _patrolVehicle;
}forEach _vehiclePatrolSpawns;
//diag_log format["missionSpawner:: vehicle patrols data: _AI_Vehicles %1 _blck_AllMissionAI %1",_AI_Vehicles,_blck_AllMissionAI];
uiSleep _delayTime;
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: VEHICLE PATROLS SPAWNED: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
};
//diag_log format["_fnc_missionSpawner:: after adding any vehicle patrols, _blck_AllMissionAI is %1",_blck_AllMissionAI];
//diag_log format["missionSpawner:: _noAIGroups = %1; spawning AI Groups now",_noAIGroups];
private["_unitsToSpawn","_unitsPerGroup","_ResidualUnits","_newGroup"];
_unitsToSpawn = round(_minNoAI + round(random(_maxNoAI - _minNoAI)));
_unitsPerGroup = floor(_unitsToSpawn/_noAIGroups);
_ResidualUnits = _unitsToSpawn - (_unitsPerGroup * _noAIGroups);
//diag_log format["missionSpawner:: _unitsToSpawn %1 ; _unitsPerGroup %2 _ResidualUnits %3",_unitsToSpawn,_unitsPerGroup,_ResidualUnits];
switch (_noAIGroups) do
{
case 1: { // spawn the group near the mission center
//params["_pos", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], "_center", ["_minDist",20], ["_maxDist",35], ["_uniforms",blck_SkinList], ["_headGear",blck_headgear] ];
_newGroup = [_coords,_unitsToSpawn,_unitsToSpawn,_aiDifficultyLevel,_coords,3,18,_uniforms,_headGear] call blck_fnc_spawnGroup;
_newAI = units _newGroup;
_blck_AllMissionAI = _blck_AllMissionAI + _newAI;
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=1 _newGroup=%1 _newAI = %2",_newGroup, _newAI];
};
case 2: {
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=2"]; // spawn groups on either side of the mission area
_groupLocations = [_coords,_noAIGroups,15,30] call blck_fnc_findPositionsAlongARadius;
{
private["_adjusttedGroupSize"];
if (_ResidualUnits > 0) then
{
_adjusttedGroupSize = _unitsPerGroup + _ResidualUnits;
_ResidualUnits = 0;
} else {
_adjusttedGroupSize = _unitsPerGroup;
};
_newGroup = [_x,_adjusttedGroupSize,_adjusttedGroupSize,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_newAI = units _newGroup;
_blck_AllMissionAI = _blck_AllMissionAI + _newAI;
//diag_log format["missionSpawner: Spawning 2 Groups: _newGroup=%1 _newAI = %2",_newGroup, _newAI];
}forEach _groupLocations;
};
case 3: { // spawn one group near the center of the mission and the rest on the perimeter
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=3"];
_newGroup = [_coords,_unitsPerGroup + _ResidualUnits,_unitsPerGroup + _ResidualUnits,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_newAI = units _newGroup;
_blck_AllMissionAI = _blck_AllMissionAI + _newAI;
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=3 _newGroup=%1 _newAI = %2",_newGroup, _newAI];
_groupLocations = [_coords,2,20,35] call blck_fnc_findPositionsAlongARadius;
{
_newGroup = [_x,_unitsPerGroup,_unitsPerGroup,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_newAI = units _newGroup;
_blck_AllMissionAI = _blck_AllMissionAI + _newAI;
//diag_log format["missionSpawner: Spawning 2 Groups:_newGroup=%1 _newAI = %2",_newGroup, _newAI];
}forEach _groupLocations;
};
default { // spawn one group near the center of the mission and the rest on the perimeter
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=default"];
_newGroup = [_coords,_unitsPerGroup + _ResidualUnits,_unitsPerGroup + _ResidualUnits,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_newAI = units _newGroup;
_blck_AllMissionAI = _blck_AllMissionAI + _newAI;
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=%3 _newGroup=%1 _newAI = %2",_newGroup, _newAI,_noAIGroups];
_groupLocations = [_coords,(_noAIGroups - 1),20,40] call blck_fnc_findPositionsAlongARadius;
{
_newGroup = [_x,_unitsPerGroup,_unitsPerGroup,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_newAI = units _newGroup;
_blck_AllMissionAI = _blck_AllMissionAI + _newAI;
//diag_log format["missionSpawner: Spawning %3 Groups: _newGroup=%1 _newAI = %2",_newGroup, _newAI,_noAIGroups];
}forEach _groupLocations;
};
};
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: AI PATROLS SPAWNED: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
if ((random(1) < _chanceReinforcements)) then
{
_weaponList = blck_WeaponList_Red;
switch (_aiDifficultyLevel) do {
case "blue": {_weaponList = blck_WeaponList_Blue;};
case "red": {_weaponList = blck_WeaponList_Red;};
case "green": {_weaponList = blck_WeaponList_Green;};
case "orange": {_weaponList = blck_WeaponList_Orange;};
default {_weaponList = blck_WeaponList_Blue;};
};
diag_log format["missionSpawner:: weaponList = %1",_weaponList];
private["_grpReinforcements"];
_grpReinforcements = grpNull;
diag_log format["[blckeagls] missionSpawner:: calling in reinforcements: Current mission: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
[] spawn {
//[_coords,_noPara,_aiDifficultyLevel,_chanceLoot,_reinforcementLootCounts,_weaponList,_uniforms,_headgear,_chanceHeliPatrol] call blck_fnc_Reinforcements;
//waitUntil {_grpReinforcements != grpNull};
//diag_log format["[blckeagls] missionSpawner::reinforcement spawner started: Current mission: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
if !(_grpReinforcements isEqualTo grpNull) then
{
_blck_AllMissionAI = _blck_AllMissionAI + (units _grpReinforcements);
//diag_log format["missionSpawner:: _grpReinforcements = %1",_grpReinforcements];
};
};
// Trigger for mission end
//diag_log format["[blckeagls] mission Spawner _endCondition = %1",_endCondition];
private["_missionComplete"];
_missionComplete = -1;
_endIfPlayerNear = false;
_endIfAIKilled = false;
_startTime = diag_tickTime;
_missionTimedOut = false;
switch (_endCondition) do
{
case "playerNear": {_endIfPlayerNear = true;};
case "allUnitsKilled": {_endIfAIKilled = true;};
case "allKilledOrPlayerNear": {_endIfPlayerNear = true;_endIfAIKilled = true;};
};
//diag_log format["missionSpawner :: _endIfPlayerNear = %1 _endIfAIKilled= %2",_endIfPlayerNear,_endIfAIKilled];
private["_locations"];
_locations = [_coords] + _crates;
//diag_log format["missionSpawner:: Waiting for player to satisfy mission end criteria of _endIfPlayerNear %1 with _endIfAIKilled %2",_endIfPlayerNear,_endIfAIKilled];
while {_missionComplete == -1} do
{
if (_endIfPlayerNear) then {
if ( { (isPlayer _x) && ([_x,_locations,20] call blck_fnc_playerInRange) && (vehicle _x == _x) } count playableunits > 0) then {
_missionComplete = 1;
};
};
//diag_log format["missionSpawner:: count alive _blck_AllMissionAI = %1",{alive _x} count _blck_AllMissionAI];
if (_endIfAIKilled) then {
if (({alive _x} count _blck_AllMissionAI) < 1 ) then {
_missionComplete = 1;
//diag_log format["missionSpawner:: _blck_AllMissionAI = %1","testing case _endIfAIKilled"];
};
};
if (blck_debugLevel == 3) then
{
uiSleep 60;
_missionComplete = 1;
diag_log format["_fnc_missionSpawner:: -- >> Mission of missionType %1 was Tripped based on blck_debugLevel == 3",_missionType];
};
uiSleep 2;
};
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: Mission COMPLETION CRITERIA FULFILLED: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4 : blck_debugLevel = %5",_coords,_missionType,_aiDifficultyLevel,_markerMissionName,blck_debugLevel];
};
if (blck_useSignalEnd) then
{
//diag_log format["**** Minor\SM1.sqf:: _crate = %1",_crates select 0];
[_crates select 0] spawn blck_fnc_signalEnd;
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: SignalEnd called: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
};
[_mines] spawn blck_fnc_clearMines;
[_objects, blck_cleanupCompositionTimer] call blck_fnc_addObjToQue;
[_blck_AllMissionAI,blck_AliveAICleanUpTime] call blck_fnc_addLiveAItoQue;
["end",_endMsg,_blck_localMissionMarker select 2] call blck_fnc_messageplayers;
[_blck_localMissionMarker select 1, _missionType] execVM "debug\missionCompleteMarker.sqf";
[_blck_localMissionMarker select 0] execVM "debug\deleteMarker.sqf";
//[_blck_localMissionMarker select 0,"Completed"] call blck_fnc_updateMissionQue;
diag_log format["[blckeagls] missionSpawner:: end of mission: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};

View File

@ -0,0 +1,443 @@
/*
Generic Mission Spawner
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
*/
private ["_crates","_aiGroup","_objects","_vehicles","_groupPatrolRadius","_missionLandscape","_compositions","_missionCfg","_compSel","_mines","_blck_AllMissionAI","_blck_localMissionMarker","_AI_Vehicles"];
params["_coords","_missionType","_aiDifficultyLevel"];
/*
_aiDifficultyLevel = _this select 2; // "blue","red","green" and "orange"
*/
// *************************
// Once the entire mission system can support timeout cleanup of vehicles (specifically the AI vehicle patrols) then each mission layout can define this varialbe. Until then disable timouts.
//////////////////////////////////
// To simplify debugging and also reduce load on server besure only once instance of the mission spawner is initializing at a time.
/////////////////////////////////
waitUntil {blck_missionSpawning isEqualTo false};
blck_missionSpawning = true;
diag_log format["[blckeagls] missionSpawner:: Initializing mission: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
private["_chanceHeliPatrol","_noPara","_reinforcementLootCounts","_chanceLoot"];
if (isNil "_chanceReinforcements") then
{
_chanceReinforcements = 0;
_noPara = 0;
_reinforcementLootCounts = [0,0,0,0,0,0];
_chanceHeliPatrol = 0;
_chanceLoot = 0;
};
private["_timeOut"]; // _timeOut is the time in seconds after which a mission is deactivated.
if (isNil "_markerColor") then {_markerColor = "ColorBlack"};
if (isNil "_markerType") then {_markerType = ["mil_box",[]]};
if (isNil "_timeOut") then {_timeOut = -1;};
if (isNil "_noPara") then {_noPara = 0};
if (isNil "_chanceHeliPatrol") then {_chanceHeliPatrol = 0;};
if (isNil "_chanceLoot") then {_chanceLoot = 0};
if (isNil "_reinforcementLootCounts") then
{
_weap = 2 + floor(random(4));
_mags = 5 + floor(random(6));
_backpacks = 1 + floor(random(2));
_optics = 1 + floor(random(6));
_loadout = 1 + floor(random(3));
_reinforcementLootCounts = [_weap,_mags,_optics,0,0,_backpacks];
//diag_log "missionSpawner:: default values used for _reinforcementLootCounts";
}
else
{
//diag_log "missionSpawner:: Mission specific values used for _reinforcementLootCounts";
};
if (blck_debugON) then {
diag_log format["[blckEagle] Mission Reinforcement Parameters: changeReinforcements %1 numAI %2 changePatrol %3 chanceLoot %4",_chanceReinforcements,_noPara,_chanceHeliPatrol,_chanceLoot];
};
private["_useMines"];
if (isNil "_useMines") then {_useMines = blck_useMines; /*diag_log "[blckEagles] Using default setting for _useMines";*/};
_objects = [];
_mines = [];
_crates = [];
_aiGroup = [];
_missionAIVehicles = [];
_blck_AllMissionAI = [];
_AI_Vehicles = [];
_blck_localMissionMarker = [_missionType,_coords,"","",_markerColor,_markerType];
_delayTime = 1;
_groupPatrolRadius = 50;
if (blck_labelMapMarkers select 0) then
{
//diag_log "SM1.sqf: labeling map markers *****";
_blck_localMissionMarker set [2, _markerMissionName];
};
if !(blck_preciseMapMarkers) then
{
//diag_log "SM1.sqf: Map marker will be OFFSET from the mission position";
_blck_localMissionMarker set [1,[_coords,75] call blck_fnc_randomPosition];
};
_blck_localMissionMarker set [3,blck_labelMapMarkers select 1]; // Use an arrow labeled with the mission name?
["start",_startMsg,_blck_localMissionMarker select 2] call blck_fnc_messageplayers;
[_blck_localMissionMarker] execVM "debug\spawnMarker.sqf";
_fn_timedOut = {
params["_startTime"];
private["_return"];
_return = ( (diag_tickTime - _startTime) > blck_MissionTimout );
_return;
};
_fn_playerWithinRange = {
params["_pos"];
private["_return"];
_return = false;
{
if (isPlayer _x and _x distance _pos <= blck_TriggerDistance) then {_return = true};
}forEach playableunits;
_return;
};
uiSleep 1;
/////////////////////////////
// Everything has been set up for the mission and it is now waiting to be triggered by a nearby player or to time out.
// Lets let other instances of the mission spawner know it is OK to go ahead
////////////////////////////
blck_missionSpawning = false;
//diag_log "missionSpawner:: waiting for player to trigger the mission";
private["_wait","_missionStartTime","_playerInRange","_missionTimedOut"];
_missionStartTime = diag_tickTime;
_playerInRange = false;
_missionTimedOut = false;
_wait = true;
while {_wait} do
{
if ([_coords] call _fn_playerWithinRange) then
{
_wait = false;
_playerInRange = true;
} else
{
if ((diag_tickTime - _missionStartTime) > blck_MissionTimout) then
{
_wait = false;
_missionTimedOut = true;
};
};
uiSleep 1;
};
//waitUntil{ { (isPlayer _x && _x distance _coords <= blck_TriggerDistance /*&& vehicle _x == _x*/) || ([_missionStartTime] call _fn_timedOut) } count playableunits > 0 };
if (blck_debugON) then
{
diag_log format["missionSpawner:: Mission Triggerred contition playerInRange %1 and timout = %2",_playerInRange, _missionTimedOut];
};
if (!_playerInRange && _missionTimedOut) exitWith
{
//["timeOut",_endMsg,_blck_localMissionMarker select 2] call blck_fnc_messageplayers;
[_blck_localMissionMarker select 0] execVM "debug\deleteMarker.sqf";
_blck_localMissionMarker set [1,[0,0,0]];
_blck_localMissionMarker set [2,""];
[_objects, 1] spawn blck_fnc_cleanupObjects;
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: Mission Timed Out: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
};
if (_playerInRange) then
{
if (blck_debugON) then
{ diag_log format["[blckeagls] missionSpawner:: -- >> Mission tripped by nearby player: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
if (count _missionLootBoxes > 0) then
{
_crates = [_coords,_missionCfg select 2/* array of crates*/] call blck_fnc_spawnMissionCrates;
}
else
{
_crates = [_coords,[[selectRandom blck_crateTypes /*"Box_NATO_Wps_F"*/,[0,0,0],_crateLoot,_lootCounts]]] call blck_fnc_spawnMissionCrates;
};
_objects = _objects + _crates;
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: Crates Spawned: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
uiSleep _delayTime;
if (blck_SmokeAtMissions select 0) then // spawn a fire and smoke near the crate
{
private ["_temp"];
_temp = [_coords,blck_SmokeAtMissions select 1] call blck_fnc_smokeAtCrates;
_objects = _objects + _temp;
};
uiSleep _delayTime;
if (_useMines) then
{
_mines = [_coords] call blck_fnc_spawnMines;
//waitUntil{!(_mines isEqualTo [];);
uiSleep _delayTime;;
};
uiSleep _delayTime;
if (_missionLandscapeMode isEqualTo "random") then
{
_objects = [_coords,_missionLandscape, 3, 15, 2] call blck_fnc_spawnRandomLandscape;
} else {
_objects = [_coords, round(random(360)),_missionLandscape,true] call blck_fnc_spawnCompositionObjects;
};
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: Landscape spawned: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
uiSleep _delayTime;;
if ((count _missionLootVehicles) > 0) then // spawn loot vehicles
{
{
//diag_log format["spawnMissionCVehicles.sqf _x = %1",_x];
_offset = _x select 1; // offset relative to _coords at which to spawn the vehicle
_pos = [(_coords select 0)+(_offset select 0),(_coords select 1) + (_offset select 1),(_coords select 2)+(_offset select 2)];
_veh = [_x select 0 /* vehicle class name*/, _pos] call blck_fnc_spawnVehicle;
_vehs pushback _veh;
[_veh,_x select 2 /*loot array*/, _x select 3 /*array of values specifying number of items of each loot type to load*/] call blck_fnc_fillBoxes;
}forEach _missionLootVehicles;
uiSleep _delayTime;
};
if (blck_useStatic && (_noEmplacedWeapons > 0)) then
{
private["_static","_count"];
if ( count (_missionEmplacedWeapons) > 0 ) then
{
_static = _missionCfg select 4 select 1;
_count = _missionCfg select 4 select 0;
}
else
{
_static = blck_staticWeapons;
_count = _noEmplacedWeapons;
};
private ["_emplacedGroup","_emplacedPositions"];
_emplacedPositions = [_coords,_count,35,50] call blck_fnc_findPositionsAlongARadius;
//diag_log format["missionSpawner:: _emplacedPositions = %1",_emplacedPositions];
{
_emplacedGroup = [_x,1,1,_aiDifficultyLevel,_coords,1,2,_uniforms,_headGear] call blck_fnc_spawnGroup;
//_emplacedUnits = units _emplacedGroup;
_blck_AllMissionAI = _blck_AllMissionAI + (units _emplacedGroup);
_emplacedWeapon = [_x,_emplacedGroup,blck_staticWeapons,5,15] call blck_fnc_spawnEmplacedWeapon;
_missionAIVehicles pushback _emplacedWeapon;
uiSleep _delayTime;
}forEach _emplacedPositions;
//diag_log format["missionSpawner:: emplaced weapons data: _AI_Vehicles %1 _blck_AllMissionAI %1",_AI_Vehicles,_blck_AllMissionAI];
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: Static Weapons Spawned: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
};
//diag_log format["_fnc_missionSpawner:: after adding any static weapons, _blck_AllMissionAI is %1",_blck_AllMissionAI];
if (blck_useVehiclePatrols && (_noVehiclePatrols > 0)) then
{
private["_vehGroup","_patrolVehicle","_vehiclePatrolSpawns"];
_vehiclePatrolSpawns= [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius;
diag_log format["missionSpawner:: _vehiclePatrolSpawns = %1",_vehiclePatrolSpawns];
//for "_i" from 1 to _noVehiclePatrols do
{
_vehGroup = [_x,3,3,_aiDifficultyLevel,_coords,1,2,_uniforms,_headGear] call blck_fnc_spawnGroup;
//diag_log format["missionSpawner:: group for AI Patrol vehicle spawn: group is %1 with units of %2",_vehGroup, units _vehGroup];
_blck_AllMissionAI = _blck_AllMissionAI + (units _vehGroup);
_randomVehicle = blck_AIPatrolVehicles call BIS_fnc_selectRandom;
//diag_log format["missionSpawner:: vehicle selected is %1", _randomVehicle];
_patrolVehicle = [_coords,_x,_randomVehicle,(_x distance _coords) -5,(_x distance _coords) + 5,_vehGroup] call blck_fnc_spawnVehiclePatrol;
//diag_log format["missionSpawner:: patrol vehicle spawned was %1",_patrolVehicle];
_vehGroup setVariable["groupVehicle",_patrolVehicle,true];
//uiSleep _delayTime;
_AI_Vehicles pushback _patrolVehicle;
}forEach _vehiclePatrolSpawns;
//diag_log format["missionSpawner:: vehicle patrols data: _AI_Vehicles %1 _blck_AllMissionAI %1",_AI_Vehicles,_blck_AllMissionAI];
uiSleep _delayTime;
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: Vehicle Patrols Spawned: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
};
//diag_log format["_fnc_missionSpawner:: after adding any vehicle patrols, _blck_AllMissionAI is %1",_blck_AllMissionAI];
//diag_log format["missionSpawner:: _noAIGroups = %1; spawning AI Groups now",_noAIGroups];
private["_unitsToSpawn","_unitsPerGroup","_ResidualUnits","_newGroup"];
_unitsToSpawn = round(_minNoAI + round(random(_maxNoAI - _minNoAI)));
_unitsPerGroup = floor(_unitsToSpawn/_noAIGroups);
_ResidualUnits = _unitsToSpawn - (_unitsPerGroup * _noAIGroups);
//diag_log format["missionSpawner:: _unitsToSpawn %1 ; _unitsPerGroup %2 _ResidualUnits %3",_unitsToSpawn,_unitsPerGroup,_ResidualUnits];
switch (_noAIGroups) do
{
case 1: { // spawn the group near the mission center
//params["_pos", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], "_center", ["_minDist",20], ["_maxDist",35], ["_uniforms",blck_SkinList], ["_headGear",blck_headgear] ];
_newGroup = [_coords,_unitsToSpawn,_unitsToSpawn,_aiDifficultyLevel,_coords,3,18,_uniforms,_headGear] call blck_fnc_spawnGroup;
_newAI = units _newGroup;
_blck_AllMissionAI = _blck_AllMissionAI + _newAI;
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=1 _newGroup=%1 _newAI = %2",_newGroup, _newAI];
};
case 2: {
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=2"]; // spawn groups on either side of the mission area
_groupLocations = [_coords,_noAIGroups,15,30] call blck_fnc_findPositionsAlongARadius;
{
private["_adjusttedGroupSize"];
if (_ResidualUnits > 0) then
{
_adjusttedGroupSize = _unitsPerGroup + _ResidualUnits;
_ResidualUnits = 0;
} else {
_adjusttedGroupSize = _unitsPerGroup;
};
_newGroup = [_x,_adjusttedGroupSize,_adjusttedGroupSize,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_newAI = units _newGroup;
_blck_AllMissionAI = _blck_AllMissionAI + _newAI;
//diag_log format["missionSpawner: Spawning 2 Groups: _newGroup=%1 _newAI = %2",_newGroup, _newAI];
}forEach _groupLocations;
};
case 3: { // spawn one group near the center of the mission and the rest on the perimeter
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=3"];
_newGroup = [_coords,_unitsPerGroup + _ResidualUnits,_unitsPerGroup + _ResidualUnits,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_newAI = units _newGroup;
_blck_AllMissionAI = _blck_AllMissionAI + _newAI;
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=3 _newGroup=%1 _newAI = %2",_newGroup, _newAI];
_groupLocations = [_coords,2,20,35] call blck_fnc_findPositionsAlongARadius;
{
_newGroup = [_x,_unitsPerGroup,_unitsPerGroup,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_newAI = units _newGroup;
_blck_AllMissionAI = _blck_AllMissionAI + _newAI;
//diag_log format["missionSpawner: Spawning 2 Groups:_newGroup=%1 _newAI = %2",_newGroup, _newAI];
}forEach _groupLocations;
};
default { // spawn one group near the center of the mission and the rest on the perimeter
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=default"];
_newGroup = [_coords,_unitsPerGroup + _ResidualUnits,_unitsPerGroup + _ResidualUnits,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_newAI = units _newGroup;
_blck_AllMissionAI = _blck_AllMissionAI + _newAI;
//diag_log format["missionSpawner: Spawning Groups: _noAIGroups=%3 _newGroup=%1 _newAI = %2",_newGroup, _newAI,_noAIGroups];
_groupLocations = [_coords,(_noAIGroups - 1),20,40] call blck_fnc_findPositionsAlongARadius;
{
_newGroup = [_x,_unitsPerGroup,_unitsPerGroup,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup;
_newAI = units _newGroup;
_blck_AllMissionAI = _blck_AllMissionAI + _newAI;
//diag_log format["missionSpawner: Spawning %3 Groups: _newGroup=%1 _newAI = %2",_newGroup, _newAI,_noAIGroups];
}forEach _groupLocations;
};
};
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: AI Patrols Spawned: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
if ((random(1) < _chanceReinforcements)) then
{
_weaponList = blck_WeaponList_Red;
switch (_aiDifficultyLevel) do {
case "blue": {_weaponList = blck_WeaponList_Blue;};
case "red": {_weaponList = blck_WeaponList_Red;};
case "green": {_weaponList = blck_WeaponList_Green;};
case "orange": {_weaponList = blck_WeaponList_Orange;};
default {_weaponList = blck_WeaponList_Blue;};
};
diag_log format["missionSpawner:: weaponList = %1",_weaponList];
private["_grpReinforcements"];
_grpReinforcements = grpNull;
diag_log format["[blckeagls] missionSpawner:: calling in reinforcements: Current mission: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
[] spawn {
//[_coords,_noPara,_aiDifficultyLevel,_chanceLoot,_reinforcementLootCounts,_weaponList,_uniforms,_headgear,_chanceHeliPatrol] call blck_fnc_Reinforcements;
//waitUntil {_grpReinforcements != grpNull};
//diag_log format["[blckeagls] missionSpawner::reinforcement spawner started: Current mission: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
if !(_grpReinforcements isEqualTo grpNull) then
{
_blck_AllMissionAI = _blck_AllMissionAI + (units _grpReinforcements);
//diag_log format["missionSpawner:: _grpReinforcements = %1",_grpReinforcements];
};
};
// Trigger for mission end
//diag_log format["[blckeagls] mission Spawner _endCondition = %1",_endCondition];
private["_missionComplete"];
_missionComplete = -1;
_endIfPlayerNear = false;
_endIfAIKilled = false;
_startTime = diag_tickTime;
_missionTimedOut = false;
switch (_endCondition) do
{
case "playerNear": {_endIfPlayerNear = true;};
case "allUnitsKilled": {_endIfAIKilled = true;};
case "allKilledOrPlayerNear": {_endIfPlayerNear = true;_endIfAIKilled = true;};
};
//diag_log format["missionSpawner :: _endIfPlayerNear = %1 _endIfAIKilled= %2",_endIfPlayerNear,_endIfAIKilled];
private["_locations"];
_locations = [_coords] + _crates;
//diag_log format["missionSpawner:: Waiting for player to satisfy mission end criteria of _endIfPlayerNear %1 with _endIfAIKilled %2",_endIfPlayerNear,_endIfAIKilled];
while {_missionComplete == -1} do
{
if (_endIfPlayerNear) then {
if ( { (isPlayer _x) && ([_x,_locations,20] call blck_fnc_playerInRange) && (vehicle _x == _x) } count playableunits > 0) then {
_missionComplete = 1;
};
};
//diag_log format["missionSpawner:: count alive _blck_AllMissionAI = %1",{alive _x} count _blck_AllMissionAI];
if (_endIfAIKilled) then {
if (({alive _x} count _blck_AllMissionAI) < 1 ) then {
_missionComplete = 1;
//diag_log format["missionSpawner:: _blck_AllMissionAI = %1","testing case _endIfAIKilled"];
};
};
uiSleep 2;
};
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: Mission completion criteria fulfilled: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
if (blck_useSignalEnd) then
{
//diag_log format["**** Minor\SM1.sqf:: _crate = %1",_crates select 0];
[_crates select 0] spawn blck_fnc_signalEnd;
if (blck_debugON) then
{
diag_log format["[blckeagls] missionSpawner:: SignalEnd called: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};
};
[_mines] spawn blck_fnc_clearMines;
[_objects, blck_cleanupCompositionTimer] call blck_fnc_addObjToQue;
[_blck_AllMissionAI,blck_AliveAICleanUpTime] call blck_fnc_addLiveAItoQue;
["end",_endMsg,_blck_localMissionMarker select 2] call blck_fnc_messageplayers;
[_blck_localMissionMarker select 1, _missionType] execVM "debug\missionCompleteMarker.sqf";
[_blck_localMissionMarker select 0] execVM "debug\deleteMarker.sqf";
//[_blck_localMissionMarker select 0,"Completed"] call blck_fnc_updateMissionQue;
diag_log format["[blckeagls] missionSpawner:: end of mission: _cords %1 : _missionType %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_missionType,_aiDifficultyLevel,_markerMissionName];
};

View File

@ -0,0 +1,33 @@
/*
Generic Mission timer
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
*/
private ["_coords","_missionName","_scriptDone"];
params["_availableMissions","_missionPath","_markerClass","_aiDifficultyLevel","_tMin","_tMax"];
_aiDifficultyLevel = toLower (_aiDifficultyLevel);
/*
_availableMissions = _this select 0;
_missionPath = _this select 1;
_markerClass = _this select 2;
_aiDifficultyLevel = toLower (_this select 3);
_tMin = _this select 4;
_tMax = _this select 5;
*/
diag_log format["[blckeagls] Generic Mission Timer started with _this %1",_this];
//diag_log format["[blckeagls] Generic Mission Timer _t %1 _tMax %2",_tMin,_tMax];
while {true} do {
waitUntil {[_tMin, _tMax] call blck_fnc_waitTimer};
//uisleep 10;
_coords = [] call blck_fnc_FindSafePosn;
_coords pushback 0;
blck_ActiveMissionCoords pushback _coords;
_missionName = selectRandom _availableMissions;
_scriptDone = false;
_scriptDone = [_coords,_markerClass,_aiDifficultyLevel] execVM format["\q\addons\custom_server\Missions\%1\%2.sqf",_missionPath,_missionName];
waitUntil{scriptDone _scriptDone};
blck_ActiveMissionCoords = blck_ActiveMissionCoords - [ _coords];
blck_recentMissionCoords pushback [_coords,diag_tickTime]; // these coordinates are automatically deleted by findSafePsn after a certain period
};

View File

@ -0,0 +1,22 @@
//////////////////////////////////////////////////////
// Test whether one object (e.g., a player) is within a certain range of any of an array of other objects
/*
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
*/
/////////////////////////////////////////////////////
private ["_result"];
params["_obj1","_objList","_minDist"];
//_obj1 : player or other object
// _objList : array of objects
//_minDist : distance below which the function would return true;
_result = false;
//diag_log format["playerInRange.sqf: _obj1 = %1, _objList = %2 _minDist = %3",_obj1,_objList,_minDist];
{
if ((_x distance _obj1) < _minDist) exitWith {_result = true;};
} forEach _objList;
_result

View File

@ -0,0 +1,40 @@
//////////////////////////////////////////////////////
// Attach a marker of type _marker to an object _crate
// by Ghostrider-DBD- based on code from Wicked AI for Arma 2 Dayz Epoch
// Last modified 8/2/15
/////////////////////////////////////////////////////
private ["_start","_bbr","_p1","_p2","_maxHeight","_signalCrate","_smokeShell","_light","_lightSource"];
params["_crate",["_time",60]];
_start = diag_tickTime;
//diag_log format["signalEnd.sqf: _this = %1, _crate = %2",_this, _crate];
_smokeShell = selectRandom ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"];
_lightSource = selectRandom ["Chemlight_green","Chemlight_red","Chemlight_yellow","Chemlight_blue"];
//diag_log format["signalEnd.sqf: _smokeShell = %1",_smokeShell];
// Determine crate height. Method is from:
// https://community.bistudio.com/wiki/boundingBoxReal
_bbr = boundingBoxReal _crate;
_p1 = _bbr select 0;
_p2 = _bbr select 1;
_maxHeight = abs ((_p2 select 2) - (_p1 select 2));
while {diag_tickTime - _start < (_time)} do // loop for 5 min accounting for the fact that smoke grenades do not last very long
{
_smoke = _smokeShell createVehicle getPosATL _crate;
_smoke setPosATL (getPosATL _crate);
_smoke attachTo [_crate,[0,0,(_maxHeight + 0.35)]]; // put the smoke a fixed distance above the top of any object to make it as visible as possible
if(sunOrMoon < 0.2) then
{
_light = _lightSource createVehicle getPosATL _crate;
_light setPosATL (getPosATL _crate);
_light attachTo [_crate,[0,0,(_maxHeight + 0.35)]];
};
uiSleep 120;
detach _smoke;
deleteVehicle _smoke;
if(sunOrMoon < 0.2) then
{
detach _light;
deleteVehicle _light;
};
};

View File

@ -0,0 +1,57 @@
/*
Spawns a smoking wreck or object at a specified location and returns the objects spawn (wreck and the particle effects object)
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
Last updated 8-14-16
*/
private ["_objs","_wreckSelected","_smokeType","_fire","_posFire","_posWreck","_smoke","_dis","_minDis","_maxDis","_closest","_wrecks"];
_objs = [];
// http://www.antihelios.de/EK/Arma/index.htm
_wrecks = ["Land_Wreck_Car2_F","Land_Wreck_Car3_F","Land_Wreck_Car_F","Land_Wreck_Offroad2_F","Land_Wreck_Offroad_F","Land_Tyres_F","Land_Pallets_F","Land_MetalBarrel_F"];
params["_pos","_mode",["_maxDist",12],["_wreckChoices",_wrecks],["_addFire",false]];
_wreckSelected = selectRandom _wreckChoices;
//_smokeTrail = "test_EmptyObjectForSmoke"; // "options are "test_EmptyObjectForFireBig", "test_EmptyObjectForSmoke"
_smokeType = if(_addFire) then {"test_EmptyObjectForFireBig"} else {"test_EmptyObjectForSmoke"};
switch (_mode) do {
case "none": {if (true) exitWith {};};
case "center": {_minDis = 5; _maxDis = 15; _closest = 5;};
case "random": {_minDis = 15; _maxDis = 50; _closest = 10;};
default {_minDis = 5; _maxDis = 15; _closest = 5;};
};
_dis = 0;
//_posWreck = [_pos, 0, 30, 10, 0, 20, 0] call BIS_fnc_findSafePos; // Position the wreck within 30 meters of the position and 5 meters away from the nearest object
// _minDis and _maxDis determine the spacing between the smoking item and the loot crate.
_minDis = 5; // Minimum distance of
//_maxDis = 50;
_closest = 10;
while {_dis < _maxDist} do
{
_posWreck = [_pos, _minDis, 50, _closest, 0, 20, 0] call BIS_fnc_findSafePos; // find a safe spot near the location passed in the call
_dis = _posWreck distance _pos;
};
// spawn a wreck near the mission center
_fire = createVehicle [_wreckSelected, [0,0,0], [], 0, "can_collide"];
_fire setVariable ["LAST_CHECK", (diag_tickTime + 14400)];
_fire setPos _posWreck;
_fire setDir random(360);
//https://community.bistudio.com/wiki/setVectorUp
//_fire setVectorUp surfaceNormal position _fire;
// spawn asmoke or fire source near the wreck and attach it.
_smoke = createVehicle [_smokeType, [0,0,0], [], 0, "can_collide"]; // "test_EmptyObjectForSmoke" createVehicle _posFire;
_smoke setVariable ["LAST_CHECK", (diag_tickTime + 14400)];
_smoke setPos _posWreck;
_smoke attachto [_fire, [0,0,1]];
_objs = _objs + [_fire,_smoke];
//diag_log format ["--smokeAtCrate.sqf:: _objs = %1",_objs];
_objs

View File

@ -0,0 +1,27 @@
/*
spawn a crate at a specific location and protect it against cleanup by Epoch
returns the object (crate) that was created.
for DBD Clan
By Ghostrider-DBD-
Copyright 2016
Last updated 9-4-16
*/
private ["_crate","_px","_py","_defaultCrate"];
_defaultCrate = "Box_NATO_Wps_F";
params["_coords",["_crateType",_defaultCrate]];
_px = _coords select 0;
_py = _coords select 1;
_crate = objNull;
_crate = createVehicle [_crateType,_coords,[], 0, "CAN_COLLIDE"];
_crate setVariable ["LAST_CHECK", 100000];
_crate setPosATL [_px, _py, 0.5];
_crate allowDamage false;
_crate enableRopeAttach true;
clearWeaponCargoGlobal _crate;
clearMagazineCargoGlobal _crate;
clearBackpackCargoGlobal _crate;
clearItemCargoGlobal _crate;
_crate;

View File

@ -0,0 +1,37 @@
// Spawns mines in a region centered around a specific position and returns an array with the spawned mines for later use, i.e. deletion
/*
By Ghostrider-DBD-
Copyright 2016
Last updated 8-14-16
*/
private ["_noMines","_mineTypes","_minesPlaced","_minDis","_maxDis","_closest","_radius","_xpos","_ypos","_dir","_incr","_i","_j","_posMine","_mine"];
params["_pos"];
_noMines = 50;
_mineTypes = ["ATMine","SLAMDirectionalMine"];
_minesPlaced = [];
_minDis = 50;
_maxDis = 150;
_closest = 5;
_dir = 0;
_incr = 360/ (_noMines/2);
for "_i" from 1 to _noMines/2 do
{
for "_j" from 1 to 2 do
{
_radius = _maxDis - floor(random(_maxDis - _minDis));
_xpos = (_pos select 0) + sin (_dir) * _radius;
_ypos = (_pos select 1) + cos (_dir) * _radius;
_posMine = [_xpos,_ypos,0];
//_posMine = [[_xpos,_ypos,0],0,10,_closest,0,20,0] call BIS_fnc_findSafePos; // find a random loc
_mine = createMine ["ATMine", _posMine, [], 0];
_mine setVariable ["LAST_CHECK", (diag_tickTime + 14400)];
_mine setPos _posMine;
//https://community.bistudio.com/wiki/setVectorUp
_minesPlaced = _minesPlaced + [_mine];
//diag_log format["[spawnMines.sqf] mine # %2 spawned at %1",_posMine,_i];
};
_dir = _dir + _incr;
};
_minesPlaced

View File

@ -0,0 +1,32 @@
/*
Spawn some crates using an array containing crate types and their offsets relative to a reference position and prevent their cleanup.
By Ghostrider-DBD-
Copyright 2016
Last updated 8-14-16
*/
private ["_objs","_pos","_offset"];
params[ ["_coords", [0,0,0]], ["_crates",[]] ];
_objs = [];
{
_x params["_crateType","_crateOffset","_lootArray","_lootCounts"];
//_offset = _x select 1; // offset relative to _coords at which to spawn the vehicle
if ((count _coords) == 3) then // assume that there is a Z offset provided
{
_pos = [(_coords select 0)+(_crateOffset select 0),(_coords select 1) + (_crateOffset select 1),(_coords select 2)+(_crateOffset select 2)]; // calculate the world coordinates
}
else
{
if ((count _coords) == 2) then // assume only X and Y offsets are provided
{
_pos = [(_coords select 0)+(_crateOffset select 0),(_coords select 1) + (_crateOffset select 1),0]; // calculate the world coordinates
};
};
_crate = [_pos,_crateType] call blck_fnc_spawnCrate;
_objs pushback _crate;
[_crate,_lootArray,_lootCounts] call blck_fnc_fillBoxes;
}forEach _crates;
_objs

View File

@ -0,0 +1,28 @@
/*
spawn a group of objects in random locations aligned with the radial from the center of the region to the object.
By Ghostrider-DbD-
Last modified 9-5-2016
copyright 2016
*/
params["_coords","_missionLandscape",["_min",3],["_max",15],["_nearest",1]];
private["_objects"];
_objects = [];
{
//Random Position Objects based on distance in array
// https://community.bistudio.com/wiki/BIS_fnc_findSafePos
_pos = [_coords,_min,_max,_nearest,0,5,0] call BIS_fnc_findSafePos;
_wreck = createVehicle[_x, _pos, [], 25, "NONE"];
_wreck setVariable ["LAST_CHECK", (diag_tickTime + 100000)];
private["_dir","_dirOffset"];
_dirOffset = random(30) * ([1,-1] call BIS_fnc_selectRandom);
_dir = _dirOffset +([_wreck,_coords] call BIS_fnc_dirTo);
_wreck setDir _dir;
_objects pushback _wreck;
sleep 0.1;
} forEach _missionLandscape;
_objects;

View File

@ -0,0 +1,31 @@
/*
Update the parameters for a mission in the list of missions running at that time.
Call with the name of the marker associated with the mission and either "Active" or "Completed"
by Ghostrider-DbD-
Last modified 10-14-16
*/
params["_mission","_status",["_coords",[0,0,0]] ];
//diag_log format["_fnc_updateMissionQue :: _mission = %1 | _status = %2 | _coords = %3",_mission,_status,_coords];
{
if (_mission isEqualTo (_x select 2)) exitWith
{
private _element = _x;
//diag_log format ["_fnc_updateMissionQue :: _element = %1",_element];
blck_pendingMissions = blck_pendingMissions - _element;
if (toLower(_status) isEqualTo "active") then {
_element set[6, -1];
_element set[7,_coords];
};
if (toLower(_status) isEqualTo "completed") then
{
private _waitTime = (_element select 4) + random((_element select 5) - (_element select 4));
_element set[6, _waitTime];
_element set [7,[0,0,0]];
};
//diag_log format["_fnc_updateMissionQue:: -- >> _element updated from %1 to %2",_x,_element];
blck_pendingMissions pushback _element;
//diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions updated to %1",blck_pendingMissions];
};
}forEach blck_pendingMissions;

View File

@ -0,0 +1,98 @@
scriptName "otl7_Mapper.sqf";
/*
Author: Joris-Jan van 't Land, modified for ArmA3: Outlawz7
Description:
Takes an array of data about a dynamic object template and creates the objects.
Parameter(s):
_this select 0: position of the template - Array [X, Y, Z]
_this select 1: azimuth of the template in degrees - Number
_this select 2: object template script name - script
(optional) _this select 3: set vector up - boolean
Example(s):
_newComp = [(getPos this), (getDir this), "dyno_a3\doc\csat_guardpost01.sqf", false] call (compile (preprocessFileLineNumbers "dyno_a3\otl7_Mapper.sqf"));
_newComp = [(getPos this), (getDir this), "dyno_a3\doc\csat_guardpost01.sqf", true] call (compile (preprocessFileLineNumbers "dyno_a3\otl7_Mapper.sqf"));
Modified by Ghostrider-DBD- for blckeagls mission system
*/
private ["_rdm"];
params["_pos","_azi","_objs","_setVector"];
//_pos = _this select 0;
//_azi = _this select 1;
//_objs = _this select 2;
//_setVector = _this select 3;
private ["_newObjs"];
//If the object array is in a script, call it.
//_objs = call (compile (preprocessFileLineNumbers _script));
_newObjs = [];
private ["_posX", "_posY"];
_posX = _pos select 0;
_posY = _pos select 1;
//Function to multiply a [2, 2] matrix by a [2, 1] matrix.
private ["_multiplyMatrixFunc"];
_multiplyMatrixFunc =
{
private ["_array1", "_array2", "_result"];
_array1 = _this select 0;
_array2 = _this select 1;
_result =
[
(((_array1 select 0) select 0) * (_array2 select 0)) + (((_array1 select 0) select 1) * (_array2 select 1)),
(((_array1 select 1) select 0) * (_array2 select 0)) + (((_array1 select 1) select 1) * (_array2 select 1))
];
_result
};
for "_i" from 0 to ((count _objs) - 1) do
{
private ["_obj", "_type", "_relPos", "_azimuth", "_fuel", "_damage", "_newObj"];
_obj = _objs select _i;
_type = _obj select 0;
_relPos = _obj select 1;
_azimuth = _obj select 2;
//Optionally map fuel and damage for backwards compatibility.
if ((count _obj) > 3) then {_fuel = _obj select 3};
if ((count _obj) > 4) then {_damage = _obj select 4};
//Rotate the relative position using a rotation matrix.
private ["_rotMatrix", "_newRelPos", "_newPos"];
_rotMatrix =
[
[cos _azi, sin _azi],
[-(sin _azi), cos _azi]
];
_newRelPos = [_rotMatrix, _relPos] call _multiplyMatrixFunc;
//Backwards compatability causes for height to be optional.
private ["_z"];
if ((count _relPos) > 2) then {_z = _relPos select 2} else {_z = 0};
_newPos = [_posX + (_newRelPos select 0), _posY + (_newRelPos select 1), _z];
//Create the object and make sure it's in the correct location.
_newObj = _type createVehicle _newPos;
_newObj setDir (_azi + _azimuth);
_newObj setPos _newPos;
if (_setVector) then {_newObj setVectorUp [0,0,1];};
//If fuel and damage were grabbed, map them.
if (!isNil "_fuel") then {_newObj setFuel _fuel};
if (!isNil "_damage") then {_newObj setDamage _damage};
_newObjs = _newObjs + [_newObj];
};
_newObjs

View File

@ -0,0 +1,91 @@
/*
Author: Ghostrider-DbD-
Inspiration: blckeagls / A3EAI / VEMF / IgiLoad / SDROP
License: Attribution-NonCommercial-ShareAlike 4.0 International
call with
[
_supplyHeli, // heli from which they should para
_skillAI, // Skill [blue, red, green, orange]
] call blck_spawnHeliParaCrate
*/
params["_supplyHeli","_lootCounts","_skillAI"];
private ["_chute","_crate"];
_crate = "";
_chute = "";
diag_log "blck_spawnHeliParaCrate:: spawning crate";
private["_dir","_offset"];
_dir = getDir _supplyHeli;
_dir = if (_dir < 180) then {_dir + 210} else {_dir - 210};
_offset = _supplyHeli getPos [10, _dir];
//open parachute and attach to crate
_chute = createVehicle ["I_Parachute_02_F", [100, 100, 200], [], 0, "FLY"];
private["_modType"];
_modType = call blck_getModType;
if (_modType isEqualTo "Epoch") then
{
[_chute] call blck_fnc_protectVehicle;
};
_chute setPos [_offset select 0, _offset select 1, 250 ]; //(_offset select 2) - 10];
diag_log format["blck_spawnHeliParaCrate:: chute spawned yielding object %1 at postion %2", _chute, getPos _chute];
//create the parachute and crate
private["_crateSelected"];
_crateSelected = selectRandom["Box_FIA_Ammo_F","Box_FIA_Support_F","Box_FIA_Wps_F","I_SupplyCrate_F","Box_IND_AmmoVeh_F","Box_NATO_AmmoVeh_F","Box_East_AmmoVeh_F","IG_supplyCrate_F"];
_crate = [getPos _chute, _crateSelected] call blck_fnc_spawnCrate;
//_crate = createVehicle [_crateSelected, position _chute, [], 0, "CAN_COLLIDE"];
_crate setPos [position _supplyHeli select 0, position _supplyHeli select 1, 250]; //(position _supplyHeli select 2) - 10];
_crate attachTo [_chute, [0, 0, -1.3]];
_crate allowdamage false;
_crate enableRopeAttach true; // allow slingloading where possible
diag_log format["heliSpawnCrate:: crate spawned %1 at position %2 and attached to %3",_crate, getPos _crate, attachedTo _crate];
switch (_skillAI) do
{
case "orange": {[_crate, blck_BoxLoot_Orange, _lootCounts] call blck_fnc_fillBoxes;};
case "green": {[_crate, blck_BoxLoot_Green, _lootCounts] call blck_fnc_fillBoxes;};
case "red": {[_crate, blck_BoxLoot_Red, _lootCounts] call blck_fnc_fillBoxes;};
case "blue": {[_crate, blck_BoxLoot_Blue, _lootCounts] call blck_fnc_fillBoxes;};
default {[_crate, blck_BoxLoot_Red, _lootCounts] call blck_fnc_fillBoxes;};
};
diag_log format["heliSpawnCrate:: crate loaded and now at position %1 and attached to %2", getPos _crate, attachedTo _crate];
_fn_monitorCrate = {
params["_crate","_chute"];
uiSleep 30;
private["_crateOnGround"];
_crateOnGround = false;
while {!_crateOnGround} do
{
uiSleep 1;
diag_log format["heliSpawnCrate:: Crate Altitude: %1 Crate Velocity: %2 Crate Position: %3 Crate attachedTo %4", getPos _crate select 2, velocityModelSpace _crate select 2, getPosATL _crate, attachedTo _crate];
if ( (((velocity _crate) select 2) < 0.1) || ((getPosATL _crate select 2) < 0.1) ) then
{
uiSleep 5; // give some time for everything to settle
_crateOnGround = true;
_spawnCrate = false;
//delete the chute for clean-up purposes
detach _crate;
deleteVehicle _chute;
if (surfaceIsWater (getPos _crate)) then
{
deleteVehicle _crate;
} else
{
[_crate] call blck_fnc_signalEnd;
};
};
};
};
[_crate,_chute] spawn _fn_monitorCrate;

View File

@ -0,0 +1,148 @@
/*
Author: Ghostrider-DbD-
Inspiration: blckeagls / A3EAI / VEMF / IgiLoad / SDROP
License: Attribution-NonCommercial-ShareAlike 4.0 International
call with
[
_pos, // the position which AI should patrol
_supplyHeli, // heli from which they should para
_numAI, // Number to spawn
_skillAI, // Skill [blue, red, green, orange]
_weapons, // array of weapons to select from
_uniforms, // array of uniform choices
_headgear // array of uniform choices
] call blck_spawnHeliParaTroops
*/
params["_pos","_supplyHeli","_numAI","_skillAI","_weapons","_uniforms","_headGear"];
// create a group for our paratroops
private["_paraGroup"];
_paraGroup = createGroup blck_AI_Side; // ; Group changed for Exile for which player is RESISTANCE.
_paraGroup setcombatmode blck_combatMode;
_paraGroup allowfleeing 0;
_paraGroup setspeedmode "FULL";
_paraGroup setFormation blck_groupFormation;
_paraGroup setVariable ["blck_group",true,true];
diag_log format["spawnHeliParatroops:: paratrooper group created; spawning %1 units",_numAI];
//https://forums.bistudio.com/topic/127341-how-to-get-cargo-capacity-and-costweight-of-stuff-into-sqf/
//_veh = TypeOf (_supplyHeli); //for example
//_maxpeople = getNumber (configFile >> "CfgVehicles" >> _veh >> "transportSoldier");
//if ( (_maxpeople - 1) < _numAI) then {_numAI = _maxpeople - 1;}; // calculate the max troops carried by the chopper minus 1 for the pilot who is already on board and adjust the number of AI to spawn as needed.
_launcherType = "none";
_sniperExists = false;
/*
for "_i" from 1 to _numAI do
{
//Spawns the AI unit
diag_log format["spawnGroup:: spawning unit #%1",_i];
_unit = [[getPos _supplyHeli select 0, getPos _supplyHeli select 1,(getPos _supplyHeli select 2) - 10],_weapons,_paraGroup,_skillAI,_launcherType,_uniforms,_headGear] call blck_fnc_spawnAI;
if !(_sniperExists) then
{
if ((random(1) < 0.2)) then
{
_sniperExists = true;
_unit setBehaviour "STEALTH";
};
};
_unit assignAsCargo _supplyHeli;
[_unit] orderGetIn true;
diag_log format["reinforcements:: spawned unit %1, at location %2",_unit,getPos _unit];
uiSleep 0.5;
};
*/
/*
diag_log "reinforcements:: eject paratroops";
{
unassignvehicle _x;
_x action ["EJECT", _supplyHeli];
sleep 0.5;
} foreach units _paraGroup;
*/
private["_dir","_offset"];
_dir = getDir _supplyHeli;
_dir = if (_dir < 180) then {_dir + 150} else {_dir - 150};
for "_i" from 1 to _numAI do
{
_offset = _supplyHeli getPos [10, _dir];
_chute = createVehicle ["I_Parachute_02_F", [100, 100, 200], [], 0, "FLY"];
private["_modType"];
_modType = call blck_getModType;
if (_modType isEqualTo "Epoch") then
{
[_chute] call blck_fnc_protectVehicle;
};
_unit = [[_offset select 0, _offset select 1, 180],_weapons,_paraGroup,_skillAI,_launcherType,_uniforms,_headGear] call blck_fnc_spawnAI;
_unit setDir (getDir _supplyHeli) - 90;
_chute setPos [_offset select 0, _offset select 1, 250]; //(_offset select 2) - 10];
_unit disableCollisionWith _supplyHeli;
_chute disableCollisionWith _supplyHeli;
_unit assignAsDriver _chute;
_unit moveInDriver _chute;
_unit allowDamage true;
uiSleep 1;
//diag_log format["reinforcements:: spawned unit %1, at location %2 and vehicle _unit %1",_unit,getPos _unit, vehicle _unit];
};
_paraGroup selectLeader ((units _paraGroup) select 0);
//diag_log "spawnHeliParatroops:: paratroops created";
_wpRendevous =_paraGroup addWaypoint [_pos, 25];
_wpRendevous setWaypointCombatMode "RED";
_wpRendevous setWaypointType "MOVE";
_wpRendevous setWaypointSpeed "NORMAL";
_wpRendevous setWaypointBehaviour "COMBAT";
_wpRendevous setWaypointCompletionRadius 25;
[_pos, 30, 45, _paraGroup] call blck_fnc_setupWaypoints;
//diag_log "spawnParatroops:: Additional waypoints added to _paraGroup";
_fn_cleanupTroops = {
private["_troopsOnGround"];
params["_group"];
_troopsOnGround = false;
while {!_troopsOnGround} do
{
_troopsOnGround = true;
{
//diag_log format["reinforments:: Tracking Paratroops unit %1 position %4 altitue %2 velocity %3 attachedTo %4",_x, (getPos _x select 2), (velocity _x select 2), getPosATL _x, attachedTo _x];
if ( (getPosATL _x select 2) < 0.1) then {
if (surfaceIsWater (position _x)) then {
diag_log format["spawnParatroops:: unit %1 at %2 deleted",_x, getPos _x];
private["_unit"];
_unit = _x;
{
_unit removeAllEventHandlers _x;
}forEach ["Killed","Fired","HandleDamage","HandleHeal","FiredNear"]
};
}
else
{_troopsOnGround = false;};
}forEach units _group;
uiSleep 1;
};
};
[_paraGroup] spawn _fn_cleanupTroops;
diag_log "spawnParatroops:: All Units on the Ground";
// Return the group spawned for book keeping purposes
diag_log format["spawnParatroops:: typeName _paraGroup = %1", (typeName _paraGroup)];
_paraGroup;

View File

@ -0,0 +1,213 @@
/*
Author: Ghostrider-DbD-
Inspiration: blckeagls / A3EAI / VEMF / IgiLoad / SDROP / WAI for Arma 3 Epoch
License: Attribution-NonCommercial-ShareAlike 4.0 International
call with
[
_pos,
_skillAI,
_timeout
] call blck_spawnReinforcements
*/
params["_pos","_skillAI","_weapons"];
diag_log format["HeliPatrol:: Called with parameters _pos %1 _skillAI %2 _weapons %3",_pos,_skillAI,_weapons];
private["_chopperType","_chopperTypeArmed","_spawnPos","_spawnVector","_spawnDistance"];
_chopperType = selectRandom ["B_Heli_Light_01_armed_F","O_Heli_Light_02_F","O_Heli_Light_02_v2_F","B_Heli_Transport_03_F"];
diag_log format["HeliPatrol:: _chopperType seleted = %1 ",_chopperType];
_spawnVector = round(random(360));
_spawnDistance = 200 + floor(random(1500));
_spawnPos = _pos getPos [_spawnDistance,_spawnVector];
diag_log format["HeliPatrol:: vector was %1 with distance %2 yielding a spawn position of %3 at distance from _pos of %4",_spawnVector,_spawnDistance,_spawnPos, (_pos distance2d _spawnPos)];
private["_patrolHeli"];
//create helicopter and spawn it
_patrolHeli = createVehicle [_chopperType, _spawnPos, [], 90, "FLY"];
_patrolHeli setDir (_spawnVector -180);
_patrolHeli setFuel 1;
_patrolHeli engineOn true;
_patrolHeli flyInHeight 150;
_patrolHeli setVehicleLock "LOCKED";
_patrolHeli addEventHandler ["GetOut",{(_this select 0) setFuel 0;(_this select 0) setDamage 1;}];
clearWeaponCargoGlobal _patrolHeli;
clearMagazineCargoGlobal _patrolHeli;
clearItemCargoGlobal _patrolHeli;
clearBackpackCargoGlobal _patrolHeli;
private["_modType"];
_modType = call blck_getModType;
if (_modType isEqualTo "Epoch") then
{
[_patrolHeli,blck_ModType] call blck_fnc_protectVehicle;
};
private["_grpPilot","_unitPilot"];
// add pilot to helicopter //add pilot (single group) to supply helicopter
_grpPilot = createGroup blck_AI_Side;
_grpPilot setBehaviour "CARELESS";
_grpPilot setCombatMode "RED";
_grpPilot setSpeedMode "FULL";
_grpPilot allowFleeing 0;
_unitPilot = _grpPilot createUnit ["I_helipilot_F", getPos _patrolHeli, [], 0, "FORM"];
_unitPilot setSkill 1;
_unitPilot assignAsDriver _patrolHeli;
_unitPilot moveInDriver _patrolHeli;
_gunner = [[100, 100, 300],blck_WeaponList_Blue,_grpPilot,_skillAI] call blck_fnc_spawnAI;
_gunner assignAsCargo _patrolHeli;
_gunner moveInCargo [_patrolHeli,2];
_gunner enablePersonTurret [2, true];
_gunner2 = [[100, 100, 300],blck_WeaponList_Blue,_grpPilot,_skillAI] call blck_fnc_spawnAI;
_gunner2 assignAsCargo _patrolHeli;
_gunner2 moveInCargo [_patrolHeli,4];
_gunner2 enablePersonTurret [4, true];
_grpPilot selectLeader _unitPilot;
//set waypoint for helicopter
private["_wpDestination"];
_wpDestination =_grpPilot addWaypoint [_pos, 0];
_wpDestination setWaypointType "MOVE";
_wpDestination setWaypointSpeed "FULL";
_wpDestination setWaypointBehaviour "CARELESS";
_wpDestination setWaypointCompletionRadius 60;
//Announce reinforcements are inbound to nearby players
private["_message"];
_message = "A Helicopter Gunship was Spotted Near You!";
["reinforcements",_message,_pos] call blck_fnc_messageplayers;
diag_log "HeliPatrol:: helispawned and inbound, message sent";
//Waits until heli gets near the position to drop crate, or if waypoint timeout has been triggered
_destinationDone = false;
_startTime = diag_tickTime;
_timoutTime = 600;
while {true} do {
if ( (( (getPos _patrolHeli) distance2D _pos) < 100) || ((diag_tickTime - _startTime) > _timoutTime) ) exitWith { };
uiSleep 2;
//diag_log format["HeliPatrol:: heli %1 is %2 from mission center",_patrolHeli,_pos distance (getPos _patrolHeli)];
};
if ( (diag_tickTime - _startTime) > _timoutTime) exitWith
{
// HeliPatrol took too long so lets delete them.
deleteVehicle _patrolHeli;
deleteVehicle _unitPilot;
deleteGroup _grpPilot;
diag_log "[blckeagls] HeliPatrol failed to reach the mission site: heli and crew deleted";
};
diag_log "HeliPatrol:: heli on station";
for "_i" from 1 to 5 do
{
private["_dir","_wpPos","_wpPatrol"];
_dir = floor(random(360));
_wpPos = _pos getPos [50,_dir];
_wpPatrol =_grpPilot addWaypoint [_pos, 100];
_wpPatrol setWaypointType "LOITER";
_wpPatrol setWaypointSpeed "NORMAL";
_patrolHeli limitSpeed 45;
_wpPatrol setWaypointBehaviour "COMBAT";
_wpPatrol setWaypointLoiterType "CIRCLE";
_wpPatrol setWaypointTimeout [60, 90, 120];
//_wpPatrol setWaypointCompletionRadius 100;
_wpPatrol setWaypointName "Loiter";
/*
_wpPatrol setWaypointType "MOVE":
_wpPatrol setWaypointCompletionRadius 50;
_wpPatrol setWaypointStatements
["true",
"
(Vehicle this) flyinheight 50;
(Vehicle this) limitSpeed 45;
if(true) then {diag_log('WAI: Heli height ' + str((position Vehicle this) select 2) + '/ Heli speed ' + str(speed this)); };
"];
diag_log format["HeliPatrol:: Waypoint #1 with identity %2 added", _i, _wpPatrol]; ;
_wpPatrol setWaypointTimeout [10,15,20];
};
/*
if (_spawnPatrol) then
{
diag_log "HeliPatrol:: heli will patrol the area, setting up waypoints";
private["_wpPatrol"];
_wpPatrol setWaypointType "LOITER";
_wpPatrol setWaypointSpeed "NORMAL";
_wpPatrol setWaypointBehaviour "COMBAT";
_wpPatrol setWaypointLoiterType "CIRCLE";
_wpPatrol setWaypointTimeout [60, 90, 120];
_wpPatrol setWaypointCompletionRadius 100;
_wpPatrol setWaypointName "Loiter";
while { (waypointTimeoutCurrent _grpPilot) > 0} do
{
uiSleep 1;
diag_log format["HeliPatrol:: patrol waypoint time at %1", waypointTimeoutCurrent _grpPilot];
};
}
else
{
diag_log "HeliPatrol:: Heli will not patrol, no patrol waypoints were added";
};
*/
diag_log "HeliPatrol:: send heli back to spawn";
// Send the heli back to base
private["_wpHome"];
_wpHome =_grpPilot addWaypoint [_spawnPos, 200];
_wpHome setWaypointType "MOVE";
_wpHome setWaypointSpeed "FULL";
_wpHome setWaypointBehaviour "CASUAL";
_wpHome setWaypointCompletionRadius 200;
_wpHome setWaypointName "GoHome";
_wpHome setWaypointStatements ["true", "{deleteVehicle _x} forEach units group this;deleteVehicle (vehicle this);diag_log ""helicopter and crew deleted"""];
diag_log "HeliPatrol:: sending Heli Home";
// End of sending heli home
////////////////////////
_fn_cleanupHeli = {
params["_patrolHeli","_homePos","_grpPilot"];
// run some tests to be sure everything went OK
_heliHome = false;
_startTime = diag_tickTime;
while { !(_heliHome) } do
{
_heliHome = (_patrolHeli distance _homePos) < 300;
if ( !_heliHome && ((diag_tickTime - _startTime) > 300) ) then
{
_heliHome = true;
deleteVehicle _patrolHeli;
{
deleteVehicle _x;
}forEach units _grpPilot;
deleteGroup _grpPilot;
};
uiSleep 2;
};
};
[_patrolHeli,_spawnPos,_grpPilot] spawn _fn_cleanupHeli;
diag_log "HeliPatrol:: script done";
// Return the group used for AI reinforcements for book keeping purposes in the Mission Spawner.
diag_log format["HeliPatrol:: typeName _grpToops = %1", typeName _grpToops];
_grpToops;

View File

@ -0,0 +1,176 @@
/*
Author: Ghostrider-DbD-
Inspiration: blckeagls / A3EAI / VEMF / IgiLoad / SDROP
License: Attribution-NonCommercial-ShareAlike 4.0 International
call with
[
_pos,
_numAI,
_skillAI,
_chanceLoot,
_loogCounts,
_weapons,
_uniforms,
_headgear,
_patrol
] call blck_spawnReinforcements
*/
params["_pos","_numAI","_skillAI","_chanceLoot","_lootCounts","_weapons","_uniforms","_headgear","_patrol"];
diag_log format["reinforcements:: Called with parameters _pos %1 _numAI %2 _skillAI %3 _chanceLoot %4",_pos,_numAI,_skillAI,_chanceLoot];
private["_chopperType","_chopperTypeArmed","_spawnPos","_spawnVector","_spawnDistance"];
// spawn an unarmed heli
_chopperType = selectRandom["B_Heli_Transport_03_unarmed_EPOCH","O_Heli_Light_02_unarmed_EPOCH","I_Heli_Transport_02_EPOCH"];
diag_log format["reinforcements:: _chopperType seleted = %1",_chopperType];
_spawnVector = round(random(360));
_spawnDistance = 200 + floor(random(1500));
_dropLoot = (random(1) < _chanceLoot);
// Use the new functionality of getPos
// https://community.bistudio.com/wiki/getPos
_spawnPos = _pos getPos [_spawnDistance,_spawnVector];
diag_log format["reinforcements:: vector was %1 with distance %2 yielding a spawn position of %3 at distance from _pos of %4",_spawnVector,_spawnDistance,_spawnPos, (_pos distance2d _spawnPos)];
private["_supplyHeli"];
//create helicopter and spawn it
_supplyHeli = createVehicle [_chopperType, _spawnPos, [], 90, "FLY"];
_supplyHeli setDir (_spawnVector -180);
_supplyHeli setFuel 1;
_supplyHeli engineOn true;
_supplyHeli flyInHeight 250;
_supplyHeli setVehicleLock "LOCKED";
_supplyHeli addEventHandler ["GetOut",{(_this select 0) setFuel 0;(_this select 0) setDamage 1;}];
clearWeaponCargoGlobal _supplyHeli;
clearMagazineCargoGlobal _supplyHeli;
clearItemCargoGlobal _supplyHeli;
clearBackpackCargoGlobal _supplyHeli;
[_supplyHeli,blck_ModType] call blck_fnc_protectVehicle;
private["_grpPilot","_unitPilot"];
// add pilot to helicopter //add pilot (single group) to supply helicopter
_grpPilot = createGroup blck_AI_Side;
_grpPilot setBehaviour "CARELESS";
_grpPilot setCombatMode "RED";
_grpPilot setSpeedMode "FULL";
_grpPilot allowFleeing 0;
_unitPilot = _grpPilot createUnit ["I_helipilot_F", getPos _supplyHeli, [], 0, "FORM"];
_unitPilot setSkill 1;
_unitPilot assignAsDriver _supplyHeli;
_unitPilot moveInDriver _supplyHeli;
//set waypoint for helicopter
private["_wpDestination"];
_wpDestination =_grpPilot addWaypoint [_pos, 0];
_wpDestination setWaypointType "MOVE";
_wpDestination setWaypointSpeed "FULL";
_wpDestination setWaypointBehaviour "CARELESS";
_wpDestination setWaypointCompletionRadius 60;
//Announce reinforcements are inbound to nearby players
private["_message"];
_message = "A Helicopter Carrying Reinforcements was Spotted Near You!";
["reinforcements",_message,_pos] call blck_fnc_messageplayers;
diag_log "reinforcements:: helispawned and inbound, message sent";
//Waits until heli gets near the position to drop crate, or if waypoint timeout has been triggered
_destinationDone = false;
_startTime = diag_tickTime;
_timoutTime = 600;
while {true} do {
if ( (( (getPos _supplyHeli) distance2D _pos) < 100) || ((diag_tickTime - _startTime) > _timoutTime) ) exitWith { };
uiSleep 2;
//diag_log format["reinforcements:: heli %1 is %2 from mission center",_supplyHeli,_pos distance (getPos _supplyHeli)];
};
if ( (diag_tickTime - _startTime) > _timoutTime) exitWith
{
// reinforcements took too long so lets delete them.
deleteVehicle _supplyHeli;
deleteVehicle _unitPilot;
deleteGroup _grpPilot;
diag_log "[blckeagls] Reinforcements failed to reach the mission site: heli and crew deleted";
};
diag_log "reinforcements:: heli on station";
private["_grpToops"];
_grpToops = grpNull;
_spawnTroops = if (_numAI > 0) then {true} else {false};
// Spawn and paradrop troops
if (_spawnTroops) then
{
_grpToops = [_pos,_supplyHeli,_numAI,_skillAI,_weapons,_uniforms,_headgear] spawn blck_spawnHeliParaTroops;
diag_log format["reinforcements:: spawnHeliParaTroups returned variable %1 with type %2", _grpToops, typeName _grpToops];
};
_spawnCrate = if (random(1) < _chanceLoot) then {true} else {false};
if (_spawnCrate) then
{
[_supplyHeli,_lootCounts,_skillAI] spawn blck_spawnHeliParaCrate;
};
_spawnPatrol = ( random(1) < _patrol);
if (_spawnPatrol) then
{
[_pos,_skillAI, 120] spawn blck_spawnHeliPatrol;
};
diag_log "reinforcements:: send heli back to spawn";
// Send the heli back to base
private["_wpHome"];
_wpHome =_grpPilot addWaypoint [_spawnPos, 200];
_wpHome setWaypointType "MOVE";
_wpHome setWaypointSpeed "FULL";
_wpHome setWaypointBehaviour "CASUAL";
_wpHome setWaypointCompletionRadius 200;
_wpHome setWaypointName "GoHome";
_wpHome setWaypointStatements ["true", "{deleteVehicle _x} forEach units group this;deleteVehicle (vehicle this);diag_log ""helicopter and crew deleted"""];
diag_log "reinforcements:: sending Heli Home";
// End of sending heli home
////////////////////////
_fn_cleanupHeli = {
params["_supplyHeli","_homePos","_grpPilot"];
// run some tests to be sure everything went OK
_heliHome = false;
_startTime = diag_tickTime;
while { !(_heliHome) } do
{
_heliHome = (_supplyHeli distance _homePos) < 300;
if ( !_heliHome && ((diag_tickTime - _startTime) > 300) ) then
{
_heliHome = true;
deleteVehicle _supplyHeli;
{
deleteVehicle _x;
}forEach units _grpPilot;
deleteGroup _grpPilot;
};
uiSleep 2;
};
};
[_supplyHeli,_spawnPos,_grpPilot] spawn _fn_cleanupHeli;
diag_log "reinforcements:: script done";
// Return the group used for AI reinforcements for book keeping purposes in the Mission Spawner.
diag_log format["reinforcements:: typeName _grpToops = %1", typeName _grpToops];
_grpToops;

View File

@ -0,0 +1,21 @@
/*
unit: Object - Object the event handler is assigned to.
selectionName: String - Name of the selection where the unit was damaged. "" for over-all structural damage, "?" for unknown selections.
damage: Number - Resulting level of damage for the selection.
source: Object - The source unit that caused the damage.
projectile: String - Classname of the projectile that caused inflicted the damage. ("" for unknown, such as falling damage.)
(Since Arma 3 v 1.49.131802)
hitPartIndex: Number - Hit part index of the hit point, -1 otherwise.
*/
private ["_unit","_killer","_group","_deleteAI_At"];
_unit = _this select 0;
_source = _this select 3;
if (isPlayer _source) then {
[_unit,_source] call GRMS_fnc_alertGroup;
};

View File

@ -0,0 +1,5 @@
params["_unit","_killer"];
//diag_log format["EH_AIKilled:: _units = %1 and _killer = %2",_unit,_killer];
[_unit,_killer] remoteExec ["blck_fnc_processAIKill",2];

View File

@ -0,0 +1,21 @@
/*
by Ghostrider
9-20-15
Because this is p-ecompiled there is less concern about keeping comments in.
*/
private["_alertDist","_intelligence"];
params["_unit","_killer"];
//diag_log format["#-alertNearbyUnits.sqf-# alerting nearby units of killer of unit %1",_unit];
_alertDist = _unit getVariable ["alertDist",300];
_intelligence = _unit getVariable ["intelligence",1];
if (_alertDist > 0) then {
//diag_log format["+----+ alerting units close to %1",_unit];
{
if (((position _x) distance (position _unit)) <= _alertDist) then {
_x reveal [_killer, _intelligence];
//diag_log "Killer revealed";
}
} forEach allUnits;
};

View File

@ -0,0 +1,44 @@
/*
Delete alive AI.
Now called from the main thread which tracks the time elapsed so that we no longer need to wait a proscribed period of time (see changes on lines 9 and 12)
by Ghostrider
Last updated 10/22/16
*/
private["_ai","_veh"];
params["_aiList"];
//diag_log format["_fnc_cleanupAliveAI:: called with blck_AICleanUpTimer = %1 and count of alive AI = %2",0, count _aiList];
{
//diag_log format["cleanupAliveAI:: for unit _x, alive = %1, GMS_DiedAt = %2",(alive _x), _x getVariable["GMS_DiedAt", -1]];
if ( alive _x && (_x getVariable["GMS_DiedAt", -1] < 0)) then { // The unit has not been processed by a kill handler. This double test is probably not needed.
_ai = _x;
if ( vehicle _ai != _ai) then // the AI is in a vehicle of some sort so lets be sure to delete it
{
_veh = vehicle _ai;
//diag_log format["cleanupAliveAI:: deleting vehicle %1",_veh];
_veh setDamage 1;
deleteVehicle _veh;
};
//diag_log format["_fnc_cleanupAliveAI:: _x is %4, typeOf _x %1 typeOf vehicle _x %2, blck_vehicle %3", (typeOf _x), (typeOf (vehicle _x)),_veh,_x];
{
_ai removeAllEventHandlers _x;
}forEach ["Killed","Fired","HandleDamage","HandleHeal","FiredNear"];
{
deleteVehicle _x;
}forEach nearestObjects [getPos _ai,["WeaponHolderSimulated","GroundWeapoonHolder"],3];
_group = group _ai;
[_ai] joinSilent grpNull;
if (count units group _ai < 1) then
{
deletegroup group _ai;
};
deleteVehicle _ai;
};
}forEach _aiList;
//diag_log format["_fnc_cleanupAliveAI:: AI Cleanup Completed"];

View File

@ -0,0 +1,28 @@
/*
Delete Dead AI and nearby weapons after an appropriate period.
by Ghostrider
Last updated 10/22/16
*/
private["_aiList","_ai"];
//diag_log format["_fnc_cleanupDeadAI Called"];
_aiList = blck_deadAI;
{
// As written, this ignores any bodies that do not have GMS_DiedAt defined.
if ( (_x getVariable ["GMS_DiedAt",0]) > 0 ) then
{
if ( diag_tickTime > ((_x getVariable ["GMS_DiedAt",0]) + blck_bodyCleanUpTimer) ) then // DBD_DeleteAITimer
{
_ai = _x;
{
deleteVehicle _x;
}forEach nearestObjects [getPos _x,["WeaponHolder"],3];
uiSleep 0.1;
//diag_log ["deleting AI %2 at _pos %1",getPos _ai,_ai];
blck_deadAI = blck_deadAI - [_ai];
deleteVehicle _ai;
};
};
} forEach _aiList;

View File

@ -0,0 +1,35 @@
/*
Deal with the various processes of:
removing the AI from the list of active AI
Alerting nearby units
Rewarding for legal kills
By Ghostrider-DBD-
Copyright 2016
*/
params["_unit","_killer","_isLegal"];
//diag_log format["#- processAIKill.sqf -# called for unit %1",_unit];
_unit setVariable ["GMS_DiedAt", (diag_tickTime),true];
blck_deadAI pushback _unit;
_group = group _unit;
[_unit] joinSilent grpNull;
if (count(units _group) < 1) then {deleteGroup _group;};
[_unit] spawn blck_fnc_removeLaunchers;
[_unit] spawn blck_fnc_removeNVG;
if !(isPlayer _killer) exitWith {};
[_unit,_killer] call blck_fnc_alertNearbyUnits;
_isLegal = [_unit,_killer] call blck_fnc_processIlleagalAIKills;
if (_isLegal) then {[_unit,_killer] call blck_fnc_rewardKiller;};
_weapon = currentWeapon _killer;
_message = format["[blck] %1: AI killed with %2 from %3 meters",name _killer,getText(configFile >> "CfgWeapons" >> _weapon >> "DisplayName"), round(_unit distance _killer)];
//diag_log format["[blck] unit killed message is %1",_message,""];
["aikilled",_message,"victory"] call blck_fnc_messageplayers;
{
_unit removeAllEventHandlers _x;
}forEach ["Killed","Fired","HandleDamage","HandleHeal","FiredNear"]

View File

@ -0,0 +1,89 @@
/*
by Ghostrider
9-20-15
Because this is precompiled there is less concern about keeping comments in.
*/
private["_missionType","_wasRunover","_launcher","_legal"];
params["_unit","_killer"];
//diag_log format["##-processIlleagalAIKills.sqf-## processing illeagal kills for unit %1",_unit];
_launcher = _unit getVariable ["Launcher",""];
_legal = true;
fn_targetVehicle = { // force AI to fire on the vehicle with launchers if equiped
params["_vk","_unit"];
{
if (((position _x) distance (position _unit)) <= 350) then
{
_x reveal [_vk, 4];
_x dowatch _vk;
_x doTarget _vk;
if (_launcher != "") then
{
_x selectWeapon (secondaryWeapon _unit);
x fireAtTarget [_vk,_launcher];
} else {
_x doFire _vk;
};
};
} forEach allUnits;
};
fn_applyVehicleDamage = { // apply a bit of damage
private["_vd"];
params["_vk"];
_vk = _this select 0;
_vd = getDammage _vk;
_vk setDamage (_vd + blck_RunGearDamage);
};
fn_deleteAIGear = {
params["_ai"];
{deleteVehicle _x}forEach nearestObjects [(getPosATL _ai), ['GroundWeaponHolder','WeaponHolderSimulated','WeaponHolder'], 3]; //Adapted from the AI cleanup logic by KiloSwiss
[_ai] call blck_fnc_removeGear;
};
fn_msgIED = {
params["_killer"];
blck_Message = ["IED","",0,0];
diag_log format["fn_msgIED:: -- >> msg = %1 and owner _killer = %2",blck_Message, (owner _killer)];
(owner _killer) publicVariableClient "blck_Message";
};
if (typeOf _killer != typeOf (vehicle _killer)) then // AI was killed by a vehicle
{
if(_killer == driver(vehicle _killer))then{ // The AI was runover
if(blck_RunGear) then { // If we are supposed to delete gear from AI that were run over then lets do it.
[_unit] call fn_deleteAIGear;
if (blck_debugON) then
{
diag_log format["<<--->> Unit %1 was run over by %2",_unit,_killer];
};
};
if (blck_VK_RunoverDamage) then {//apply vehicle damage
[vehicle _killer] call fn_applyVehicleDamage;
if (blck_debugON) then{diag_log format[">>---<< %1's vehicle has had damage applied",_killer];};
[_killer] call fn_msgIED;
};
[_unit, vehicle _killer] call fn_targetVehicle;
_legal = false;
};
};
if ( blck_VK_GunnerDamage &&((typeOf vehicle _killer) in blck_forbidenVehicles or (currentWeapon _killer) in blck_forbidenVehicleGuns) ) then {
if (blck_debugON) then
{
diag_log format["!!---!! Unit was killed by a forbidden vehicle or gun",_unit];
};
if (blck_VK_Gear) then {[_unit] call fn_deleteAIGear;};
[_unit, vehicle _killer] call fn_targetVehicle;
[vehicle _killer] call fn_applyVehicleDamage;
[_killer] call fn_msgIED;
_legal = false;
};
_legal

View File

@ -0,0 +1,8 @@
params["_unit"];
removeVest _unit;
//removeHeadgear _this;
removeGoggles _unit;
removeAllItems _unit;
removeAllWeapons _unit;
removeBackpackGlobal _unit;

View File

@ -0,0 +1,42 @@
/*
by Ghostrider
8-13-16
*/
private["_launcher","_launcherRounds","_objects","_weapons","_container"];
params["_unit"]; // = _this select 0;
_launcher = _unit getVariable ["Launcher",""];
//diag_log format["#- removeLauncher.sqf -# called for unit %1",_unit];
if (blck_launcherCleanup) then
{
if (_launcher != "") then
{
//diag_log format["!----! removing launchers for unit %1",_unit];
_launcherRounds = getArray (configFile >> "CfgWeapons" >> _Launcher >> "magazines"); //0;
_unit removeWeapon _Launcher;
removeBackpack _unit;
/*
{
if(_x in _launcherRounds) then {
_unit removeMagazine _x;
};
} count magazines _unit;
private["_objects","_weapons","_container"];
{
// https://community.bistudio.com/wiki/weaponsItems
if (_launcher in (weaponsItems _x select 1) then {deleteVehicle _x};
}forEach nearestObjects [getPos _unit,["WeaponHolderSimulated", "GroundWeaponHolder"],7];
*/
};
}
else
{
if (_launcher != "") then
{
{
deleteVehicle _x;
}forEach nearestObjects [getPos _unit,["WeaponHolderSimulated", "GroundWeaponHolder"],7];
_unit addWeaponGlobal _launcher;
};
};

View File

@ -0,0 +1,15 @@
/*
by Ghostrider
8-13-16
*/
params["_unit"];
//diag_log format["+--+ removing NVG for unit %1",_unit];
if (blck_useNVG) then
{
if (_unit getVariable ["hasNVG",false]) then
{
_unit unassignitem "NVGoggles"; _unit removeweapon "NVGoggles";
};
};

View File

@ -0,0 +1,67 @@
/*
calculate a reward player for AI Kills in crypto.
Code fragment adapted from VEMF
call as [_unit,_killer] call blck_fnc_rewardKiller;
NOTE the dependency on HALV_server_takegive_crypto !!
*/
params["_unit","_killer"];
//diag_log format["rewardKiller:: _unit = %1 and _killer %2",_unit,_killer];
private["_modType","_reward"];
_modType = call blck_getModType;
//diag_log format["[blckeagles] rewardKiller:: - _modType = %1",_modType];
if (_modType isEqualTo "Epoch") then
{
//diag_log "calculating reward for Epoch";
if ( (vehicle _killer) in blck_forbidenVehicles || (currentWeapon _killer) in blck_forbidenVehicleGuns ) then
{
_reward = 0;
}
else
{
// Give the player money for killing an AI
_maxReward = 50;
_dist = _unit distance _killer;
_reward = 0;
if (_dist < 50) then { _reward = _maxReward - (_maxReward / 1.25); _reward };
if (_dist < 100) then { _reward = _maxReward - (_maxReward / 1.5); _reward };
if (_dist < 800) then { _reward = _maxReward - (_maxReward / 2); _reward };
if (_dist > 800) then { _reward = _maxReward - (_maxReward / 4); _reward };
//diag_log format["fnd_rewardKiller:: _bonus returned will be %1",_reward];
[_killer,_reward] call blck_fnc_giveTakeCrypto;
};
};
if (_modType isEqualTo "Exile") then
{
private["_distanceBonus","_overallRespectChange","_newKillerScore","_newKillerFrags","_maxReward","_money","_message"];
_distanceBonus = floor((_unit distance _killer)/100);
_overallRespectChange = 50 + _distanceBonus;
_newKillerScore = _killer getVariable ["ExileScore", 0];
_newKillerScore = _newKillerScore + (_overallRespectChange/2);
_killer setVariable ["ExileScore", _newKillerScore];
format["setAccountScore:%1:%2", _newKillerScore,getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
_newKillerFrags = _killer getVariable ["ExileKills", 0];
_newKillerFrags = _newKillerFrags + 1;
_killer setVariable ["ExileKills", _newKillerFrags];
format["addAccountKill:%1", getPlayerUID _killer] call ExileServer_system_database_query_fireAndForget;
_money = _killer getVariable ["ExileMoney", 0];
_money = _money + (_overallRespectChange/2);
_killer setVariable ["ExileMoney", _money];
format["setAccountMoney:%1:%2", _money, (getPlayerUID _killer)] call ExileServer_system_database_query_fireAndForget;
_message = ["showFragRequest",_overallRespectChange];
//_message remoteExecCall ["ExileClient_system_network_dispatchIncomingMessage", (owner _killer)];
_killer call ExileServer_object_player_sendStatsUpdate;
};
//_reward

View File

@ -0,0 +1,13 @@
/*
Set skills for an AI Unit
by Ghostrider
Last updated 8/14/16
*/
// Self explanatory
// [_group, _skill] call blck_setSkill;
params ["_unit","_skillsArrray"];
{
_unit setSkill [(_x select 0),(_x select 1)];
} forEach _skillsArrray;

View File

@ -0,0 +1,169 @@
/*
Code by blckeagls
Modified by Ghostrider
Logic for adding AI Ammo, GL Shells and Attachments addapted from that by Vampire.
Code to delete dead AI bodies moved to AIKilled.sqf
Everything having to do with spawning and configuring an AI should happen here
*/
//Defines private variables so they don't interfere with other scripts
private ["_pos","_i","_weap","_ammo","_other","_skin","_aiGroup","_ai1","_magazines","_players","_owner","_ownerOnline","_nearEntities","_skillLevel","_aiSkills","_specialItems",
"_Launcher","_launcherRound","_vest","_index","_WeaponAttachments","_Meats","_Drink","_Food","_aiConsumableItems","_weaponList","_ammoChoices","_attachment","_attachments",
"_headGear","_uniforms","_pistols","_specialItems","_noItems"];
params["_pos","_weaponList","_aiGroup",["_skillLevel","red"],["_Launcher","none"],["_uniforms", blck_SkinList],["_headGear",blck_headgear],["_underwater",false]];
//_pos = _this select 0; // Position at which to spawn AI
//_weaponList = _this select 1;
//_aiGroup = _this select 2; // Group to which AI belongs
//_skillLevel = [_this,3,"red"] call BIS_fnc_param; // Assign a skill level in case one was not passed."blue", "red", "green", "orange"
//_Launcher = [_this, 4, "none"] call BIS_fnc_param; // Set launchers to "none" if no setting was passed.
//_uniforms = [_this, 5, blck_SkinList] call BIS_fnc_param;
//_headGear = [_this, 6, _shemag] call BIS_fnc_param;//_headGear
_ai1 = ObjNull;
_modType = call blck_getModType;
if (_modType isEqualTo "Epoch") then
{
"I_Soldier_EPOCH" createUnit [_pos, _aiGroup, "_ai1 = this", 0.7, "COLONEL"];
};
if (_modType isEqualTo "Exile") then
{
"i_g_soldier_unarmed_f" createUnit [_pos, _aiGroup, "_ai1 = this", 0.7, "COLONEL"];
};
[_ai1] call blck_fnc_removeGear;
_skin = selectRandom _uniforms; // call BIS_fnc_selectRandom;
_ai1 forceAddUniform _skin;
//Stops the AI from being cleaned up
_ai1 setVariable["DBD_AI",1];
//Sets AI Tactics
_ai1 enableAI "TARGET";
_ai1 enableAI "AUTOTARGET";
_ai1 enableAI "MOVE";
_ai1 enableAI "ANIM";
_ai1 enableAI "FSM";
_ai1 allowDammage true;
_ai1 setBehaviour "COMBAT";
_ai1 setunitpos "AUTO";
if (_modType isEqualTo "Epoch") then
{
// do this so the AI or corpse hangs around on Epoch servers.
_ai1 setVariable ["LAST_CHECK",28800,true];
};
_ai1 addHeadgear (selectRandom _headGear);
// Add a vest to AI for storage
_vest = selectRandom blck_vests; // call BIS_fnc_selectRandom;
_ai1 addVest _vest;
if ( random (1) < blck_chanceBackpack) then
{
_bpck = selectRandom blck_backpack; // call BIS_fnc_selectRandom;
_ai1 addBackpack _bpck;
};
// Add a primary weapon : Vampires logic used here.
_weap = selectRandom _weaponList; // call BIS_fnc_selectRandom;
//diag_log format["[spawnUnit.sqf] _weap os %1",_weap];
_ai1 addWeaponGlobal _weap;
// get the ammo that can be used with this weapon. This function returns an array with all possible ammo choices in it.
_ammoChoices = getArray (configFile >> "CfgWeapons" >> _weap >> "magazines");
_ammo = selectRandom _ammoChoices; // call BIS_fnc_selectRandom;
//diag_log format["[spawnUnit.sqf] _ammo returned as %1",_ammo];
for "_i" from 2 to (floor(random 3)) do {
_ai1 addMagazine _ammo;
};
// If the weapon has a GL, add some rounds for it: based on Vampires code
if ((count(getArray (configFile >> "cfgWeapons" >> _weap >> "muzzles"))) > 1) then {
_ai1 addMagazine "1Rnd_HE_Grenade_shell";
};
// Add a pistol : Vampires logic used here.
//_weap = selectRandom _pistols; // call BIS_fnc_selectRandom;
_weap = selectRandom blck_Pistols;
//_ai1 setVariable["PrimaryWeap",_weap];
//diag_log format["[spawnUnit.sqf] _weap os %1",_weap];
_ai1 addWeaponGlobal _weap;
// get the ammo that can be used with this weapon. This function returns an array with all possible ammo choices in it.
_ammoChoices = getArray (configFile >> "CfgWeapons" >> _weap >> "magazines");
_ammo = selectRandom _ammoChoices; // call BIS_fnc_selectRandom;
//diag_log format["[spawnUnit.sqf] _ammo returned as %1",_ammo];
_ai1 addMagazine _ammo;
//adds 3 random items to AI. _other = ["ITEM","COUNT"]
_noItems = floor(random(3));
for "_i" from 1 to _noItems do {
_i = _i + 1;
//_ai1 addItem (selectRandom _aiConsumableItems);
_ai1 addItem (selectRandom blck_ConsumableItems);
};
// Add an First Aid or Grenade 50% of the time
if (round(random 10) <= 5) then
{
//_item = selectRandom _specialItems; // call BIS_fnc_selectRandom;
_item = selectRandom blck_specialItems;
//diag_log format["spawnUnit.sqf] -- Item is %1", _item];
_ai1 addItem _item;
};
if (_Launcher != "none") then
{
private["_bpck"];
//diag_log format["spawnUnit.sqf: Available Launcher Rounds are %1",getArray (configFile >> "CfgWeapons" >> _Launcher >> "magazines")];
_ai1 addWeaponGlobal _Launcher;
_launcherRound = getArray (configFile >> "CfgWeapons" >> _Launcher >> "magazines") select 0;
//diag_log format["[spawnUnit.sqf] Launcher round is %1",_launcherRound];
for "_i" from 1 to 3 do
{
//diag_log format["[spawnUnit.saf] Adding Launcher Round %1 ",_launcherRound];
//private["_round"];
//_round = selectRandom _launcherRound;
_ai1 addItemToBackpack _launcherRound call BIS_fnc_selectRandom;
};
_ai1 selectWeapon (secondaryWeapon _ai1);
_ai1 setVariable["Launcher",_launcher];
};
if(sunOrMoon < 0.2 && blck_useNVG)then
{
_ai1 addWeapon "NVG_EPOCH";
_ai1 setVariable ["hasNVG", true];
}
else
{
_ai1 setVariable ["hasNVG", false];
};
// Infinite ammo
_ai1 addeventhandler ["fired", {(_this select 0) setvehicleammo 1;}];
// Do something if AI is killed
_ai1 addEventHandler ["killed",{ [(_this select 0), (_this select 1)] execVM blck_EH_AIKilled;}]; // changed to reduce number of concurrent threads, but also works as spawn blck_AIKilled; }];
//_ai addEventHandler ["HandleDamage",{ [(_this select 0), (_this select 1)] execVM blck_EH_AIHandleDamage;}];
switch (_skillLevel) do
{
case "blue": {_index = 0;_aiSkills = blck_SkillsBlue;};
case "red": {_index = 1;_aiSkills = blck_SkillsRed;};
case "green": {_index = 2;_aiSkills = blck_SkillsGreen;};
case "orange": {_index = 3;_aiSkills = blck_SkillsOrange;};
default {_index = 0;_aiSkills = blck_SkillsBlue;};
};
_alertDist = blck_AIAlertDistance select _index;
_intelligence = blck_AIIntelligence select _index;
[_ai1,_aiSkills] call blck_fnc_setSkill;
_ai1 setVariable ["alertDist",_alertDist,true];
_ai1 setVariable ["intelligence",_intelligence,true];
_ai1 setVariable ["GMS_AI",true,true];
_ai1

View File

@ -0,0 +1,6 @@
// Not used
// Retained for possible future update
_smgOptics = ["optic_Aco_smg","optic_ACO_grn_smg","optic_Holosight_smg"];
_sniperOptics = ["optic_Nightstalker", "optic_SOS", "optic_LRPS", "optic_DMS"];
_rifleOptics = ["optic_Aco","optic_ACO_grn","optic_Holosight","optic_Hamr","optic_Arco"];

View File

@ -0,0 +1,27 @@
// =========================================================================================================
// blckeagls mission system
// Author: Ghostrider-DBD-
// Last modified 9-3-16
// ------------------------------------------------------------------------------------------------------------
// Unused at present, reserved for the future
private ["_ai_veh","_ai_veh_hitsource","_ai_veh_type","_ai_veh_name","_ai_veh_side","_ai_veh_group_side","_ai_veh_hitsource_group_side","_ai_veh_hitsource_type","_ai_veh_hitsource_name","_ai_veh_hitsource_side"];
//diag_log "Vehicle Decommisioning handler activated";
params["_ai_veh"];
/*
_ai_veh = _this select 0;
*/
_ai_veh_type = typeof _ai_veh;
_ai_veh_name = name _ai_veh;
_ai_veh setFuel 0;
_ai_veh setVehicleAmmo 0;
_ai_veh setAmmoCargo 0;
_s = ["MOTOR",
"wheel_1_1_steering","wheel_2_1_steering","wheel_1_2_steering","wheel_2_2_steering",
"wheel_1_3_steering","wheel_2_3_steering","wheel_1_4_steering","wheel_2_4_steering"];
{_ai_veh setHit [_x,1]} forEach _s;

View File

@ -0,0 +1,17 @@
// Protect Vehicles from being cleaned up by the server
// Last modified 2/26/16 by Ghostrider-DBD-
params["_Vehicle"];
private["_modType"];
_modType = call blck_getModType;
switch (_ModType) do {
case "_modType":
{
diag_log format["GMS_fnc_protectVehicle:: Tokens set for vehicle %1",_Vehicle];
//_Vehicle call EPOCH_server_vehicleInit;
_Vehicle call EPOCH_server_setVToken;
};
};

View File

@ -0,0 +1,36 @@
// Spawns a vehicle or emplaced weapons, man's it, and destroys it when the AI gets out.
// by Ghostrider-DBD-
// Last Updated 9-10-16
private["_emplaced","_safepos","_emp","_gunner"];
params["_pos","_emplacedGroup","_emplacedTypes",["_minDist",20],["_maxDist",35] ];
if (isNull _emplacedGroup) exitWith {};
_safepos = [_pos,_minDist,_maxDist,0,0,20,0] call BIS_fnc_findSafePos;
_emplaced = selectRandom _emplacedTypes;
_emp = createVehicle[_emplaced, _safepos, [], 0, "NONE"];
private["_modType"];
_modType = call blck_getModType;
if (_modType isEqualTo "Epoch") then
{
//_emp call EPOCH_server_vehicleInit;
_emp call EPOCH_server_setVToken;
};
clearWeaponCargoGlobal _emp;
clearMagazineCargoGlobal _emp;
clearBackpackCargoGlobal _emp;
clearItemCargoGlobal _emp;
_emp addEventHandler ["GetOut",{(_this select 0) setDamage 1;}];
_emp addEventHandler ["GetIn",{(_this select 0) setDamage 1;}];
_gunner = (units _emplacedGroup) select 0;
_gunner moveingunner _emp;
_emp setVehicleLock "LOCKEDPLAYER";
[_emp] spawn blck_fnc_vehicleMonitor;
//diag_log format["spawnEmplaced.sqf: Emplaced weapon %1 spawned"];
_emp

View File

@ -0,0 +1,29 @@
/*
Spawn a vehicle and protect it against cleanup by Epoch
Returns the object (vehicle) created.
By Ghostrider-DBD-
Last modified 9-10-16
*/
private["_veh"];
params["_vehType","_pos"];
//_vehType = _this select 0; // type of vehicle to be spawned
//_pos = _this select 1; // position at which vehicle is to be spawned
//diag_log format["spawnVehicle.sqf: _this = %1",_this];
_veh = createVehicle[_vehType, _pos, [], 0, "NONE"];
uisleep 0.1;
private["_modType"];
_modType = call blck_getModType;
if (_modType isEqualTo "Epoch") then
{
_veh call EPOCH_server_vehicleInit;
_veh call EPOCH_server_setVToken;
};
_veh setVehicleLock "LOCKEDPLAYER";
[_veh] spawn blck_fnc_vehicleMonitor;
//[_vehToSpawn, blck_ModType] call blck_fnc_protectVehicle;
_veh

View File

@ -0,0 +1,37 @@
/*
Spawn a vehicle and protect it against cleanup by Epoch
Returns the object (vehicle) created.
By Ghostrider-DBD-
Last modified 9-10-16
*/
private["_veh"];
params["_vehType","_pos"];
//_vehType = _this select 0; // type of vehicle to be spawned
//_pos = _this select 1; // position at which vehicle is to be spawned
//diag_log format["spawnVehicle.sqf: _this = %1",_this];
_veh = createVehicle[_vehType, _pos, [], 0, "NONE"];
uisleep 0.1;
private["_modType"];
_modType = call blck_getModType;
if (_modType isEqualTo "Epoch") then
{
//_veh call EPOCH_server_vehicleInit;
_veh call EPOCH_server_setVToken;
};
clearWeaponCargoGlobal _veh;
clearMagazineCargoGlobal _veh;
clearBackpackCargoGlobal _veh;
clearItemCargoGlobal _veh;
_veh setVehicleLock "LOCKEDPLAYER";
[_veh] spawn blck_fnc_vehicleMonitor;
_veh addEventHandler ["GetIn",{ // forces player to be ejected if he/she tries to enter the vehicle
private ["_theUnit"];
_theUnit = _this select 2;
_theUnit action ["Eject", vehicle _theUnit];
}];
_veh

View File

@ -0,0 +1,65 @@
//////////////////////////////////////
// spawn a vehicle, fill it with AI, and give it waypoints around the perimeter of the mission area
// Returns an array _units that contains a list of the units that were spawned and placed in the vehicle
/*
By Ghostrider-DBD-
Copyright 2016
Last updated 8-14-16
*/
/*
fn_setWaypoints =
{
private["_group","_center"];
_group = _this select 0; // The group to which waypoints should be assigned
_center = _this select 1; // center of the mission area
while {(count (waypoints _group)) > 0} do
{
deleteWaypoint ((waypoints _group) select 0);
};
[_center,50,100,_group] call blck_fnc_setupWaypoints;
};
*/
private["_vehType","_safepos","_spawnedVehicle"];
params["_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",30],["_maxDis",45],["_groupForVehiclePatrol",grpNull] ];
//_pos = _this select 0; // Center of the mission area
//_vehType = [_this,1,"I_G_Offroad_01_armed_F"] call BIS_fnc_param;
//_minDis = [_this,2,30] call BIS_fnc_param; // minimum distance from the center of the mission for vehicle waypoints
//_maxDis = [_this,3,45] call BIS_fnc_param; // maximum distance from the center of the mission for vehicle waypoints
//_groupForVehiclePatrol = [_this,4,grpNull] call BIS_fnc_param; // The group with which to man the vehicle
//diag_log format["spawnVehiclePatrol:: _pos %1 _vehTypes %2",_pos,_vehType];
//diag_log format["spawnVehiclePatrol:: _minDis %1 _maxDis %2 _groupForVehiclePatrol %3",_minDis,_maxDis,_groupForVehiclePatrol];
if (isNull _groupForVehiclePatrol) exitWith {};
_safepos = [_pos,0,25,0,0,20,0] call BIS_fnc_findSafePos;
_spawnedVehicle = [_vehType,_safepos] call blck_fnc_spawnVehicle;
//diag_log format["spawnVehiclePatrols:: vehicle spawned is %1 of typeof %2",_spawnedVehicle, typeOf _spawnedVehicle];
_spawnedVehicle addEventHandler ["GetIn",{ // forces player to be ejected if he/she tries to enter the vehicle
private ["_theUnit"];
_theUnit = _this select 2;
_theUnit action ["Eject", vehicle _theUnit];
}];
clearWeaponCargoGlobal _spawnedVehicle;
clearMagazineCargoGlobal _spawnedVehicle;
clearBackpackCargoGlobal _spawnedVehicle;
clearItemCargoGlobal _spawnedVehicle;
private["_unitNumber"];
_unitNumber = 0;
{
switch (_unitNumber) do
{
case 0: {_x moveingunner _spawnedVehicle;};
case 1: {_x moveindriver _spawnedVehicle;};
default {_x moveInCargo _spawnedVehicle;};
};
_unitNumber = _unitNumber + 1;
}forEach (units _groupForVehiclePatrol);
//diag_log format["spawnVehiclePatrols:: vehicle spawned was %1",_spawnedVehicle];
_spawnedVehicle

View File

@ -0,0 +1,78 @@
//////////////////////////////////////
// spawn a vehicle, fill it with AI, and give it waypoints around the perimeter of the mission area
// Returns an array _units that contains a list of the units that were spawned and placed in the vehicle
/*
By Ghostrider-DBD-
Copyright 2016
Last updated 8-14-16
*/
/*
fn_setWaypoints =
{
private["_group","_center"];
_group = _this select 0; // The group to which waypoints should be assigned
_center = _this select 1; // center of the mission area
while {(count (waypoints _group)) > 0} do
{
deleteWaypoint ((waypoints _group) select 0);
};
[_center,50,100,_group] call blck_fnc_setupWaypoints;
};
*/
private["_vehType","_safepos","_veh"];
params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",30],["_maxDis",45],["_group",grpNull] ];
//_pos Center of the mission area
//_vehType = [_this,1,"I_G_Offroad_01_armed_F"] call BIS_fnc_param;
//_minDis = minimum distance from the center of the mission for vehicle waypoints
//_maxDis = maximum distance from the center of the mission for vehicle waypoints
//_groupForVehiclePatrol = The group with which to man the vehicle
//diag_log format["spawnVehiclePatrol:: _pos %1 _vehTypes %2",_pos,_vehType];
//diag_log format["spawnVehiclePatrol:: _minDis %1 _maxDis %2 _groupForVehiclePatrol %3",_minDis,_maxDis,_groupForVehiclePatrol];
if (isNull _group) exitWith {};
_safepos = [_pos,0,25,0,0,20,0] call BIS_fnc_findSafePos;
_veh = [_vehType,_safepos] call blck_fnc_spawnVehicle;
//diag_log format["spawnVehiclePatrols:: vehicle spawned is %1 of typeof %2",_veh, typeOf _veh];
private["_unitNumber"];
_unitNumber = 0;
{
switch (_unitNumber) do
{
case 0: {_x moveingunner _veh;};
case 1: {_x moveindriver _veh;};
default {_x moveInCargo _veh;};
};
_unitNumber = _unitNumber + 1;
}forEach (units _group);
while {(count (waypoints _group)) > 0} do
{
deleteWaypoint ((waypoints _group) select 0);
};
//diag_log format["spawnVehiclePatrols:: vehicle spawned was %1",_veh];
_count = 5;
_start = _center getDir _pos;
_angle = _start;
_sign = selectRandom [1, -1];
_arc = _sign * 360/_count;
for "_i" from 1 to _count do
{
_angle = _angle + _arc;
_p2 = _center getPos [(_minDis + random(_maxDis - _minDis)),_angle];
_wp = _group addWaypoint [_p2, 25];
_wp setWaypointType "MOVE";
_wp = _group addWaypoint [_p2, 25];
_wp setWaypointType "LOITER";
_wp setWaypointTimeout [10,17.5,25];
};
_wp = _group addWaypoint [_pos, 25];
_wp setWaypointType "CYCLE";
_veh

View File

@ -0,0 +1,451 @@
/*
SDROP for A3 Epoch
Modified for GMS by
Ghostrider-DBD-
Last modified 2/19/16
*/
fn_returnHome = {
private["_unitGroup","_heliLoitering","_helicopter","_startingpos"];
_unitGroup = _this select 0;
_helicopter = _this select 1;
_startingpos = _this select 2;
diag_log "fn_returnHome:: sending heli home now";
//return helicopter to spawn area and clean it up
//sometimes this doesn't happen, so we check heli loitering later
_wpHome =_unitGroup addWaypoint [_startingpos, 1];
_wpHome setWaypointType "MOVE";
_wpHome setWaypointSpeed "FULL";
_wpHome setWaypointBehaviour "COMBAT";
_wpHome setWaypointCompletionRadius 800;
_wpHome setWaypointStatements ["true", "deleteVehicle (vehicle this); {deleteVehicle _x} forEach units group this;"];
//check to see if helicopter is loitering (it should be long gone by now)
//hate to do this, but have to just delete the vehicle as it refuses to comply with waypoint
_heliLoitering = true;
while {_heliLoitering} do {
if (_helicopter distance (getWPPos _wpPosition) < 400 && !isNull _helicopter) then {
diag_log text format ["[SDROP]: Deleted supply helicopter for loitering"];
deleteWaypoint [_unitGroup, 0];
deleteWaypoint [_unitGroup, 1];
{deleteVehicle _x;} forEach units _unitGroup;
deleteVehicle _helicopter;
} else {
_heliLoitering = false;
};
uiSleep 5;
};
diag_log "fn_returnHome:: heli and crew destroyed";
};
fn_LoadLootFood = {
private["_crate","_foodAndDrinks","_apparel","_backpacks"];
_crate = _this select 0;
//empty crate first
clearWeaponCargoGlobal _crate;
clearMagazineCargoGlobal _crate;
clearBackpackCargoGlobal _crate;
clearItemCargoGlobal _crate;
_foodAndDrinks = [
["ItemSodaRbull",2],["ItemSodaPurple",2],["ItemSodaOrangeSherbet",2],["ItemSodaMocha",2],["ItemSodaMocha",2],["ItemSodaBurst",2],["FoodMeeps",2],["FoodSnooter",2],
["FoodWalkNSons",2],["water_epoch",4],["ItemCoolerE",4],["SweetCorn_EPOCH",4],["WhiskeyNoodle",6],["SnakeMeat_EPOCH",1],["CookedRabbit_EPOCH",2],["CookedChicken_EPOCH",2],["CookedGoat_EPOCH",2],
["CookedSheep_EPOCH",2]
];
{_crate addMagazineCargoGlobal _x} forEach _foodAndDrinks;
_apparel = [
["U_O_GhillieSuit",1],["U_O_Wetsuit",1],["U_OG_Guerilla1_1",1],["U_OG_Guerilla2_1",1],["U_OG_Guerilla3_1",1],["U_OrestesBody",1],["U_Wetsuit_uniform",1],["U_Ghillie1_uniform",1],["U_O_CombatUniform_ocamo",1]
];
{_crate addItemCargoGlobal _x} forEach _apparel;
{_crate addBackpackCargoGlobal _x} forEach [["B_Carryall_ocamo",2]];
};
fn_LoadLootSupplies = {
private["_crate","_supplies"];
_crate = _this select 0;
//empty crate first
clearWeaponCargoGlobal _crate;
clearMagazineCargoGlobal _crate;
clearBackpackCargoGlobal _crate;
clearItemCargoGlobal _crate;
//fill the crate with SUPPLIES
_supplies = [
["CinderBlocks",8],["jerrycan_epoch",3],["CircuitParts",4],["ItemCorrugatedLg",1],["ItemCorrugated",4],["ItemMixOil",2],["MortarBucket",6],["PartPlankPack",4],["FAK",6],["VehicleRepair",2],
["Towelette",4],["HeatPack",2],["ColdPack",2],["Pelt_EPOCH",2],/*["Heal_EPOCH",2],["Repair_EPOCH",1],*/["EnergyPack",4],["EnergyPackLg",1]
];
{_crate addMagazineCargoGlobal _x} forEach _supplies;
_crate addWeaponCargoGlobal ["MultiGun",2];
{_crate addBackpackCargoGlobal _x} forEach [["B_Carryall_oucamo",1],["B_FieldPack_cbr",1],["B_TacticalPack_ocamo",1]];
};
fn_LoadLootWeapons = {
private["_crate","_weapons","_magazines","_attachments","_apparel"];
_crate = _this select 0;
//empty crate first
clearWeaponCargoGlobal _crate;
clearMagazineCargoGlobal _crate;
clearBackpackCargoGlobal _crate;
clearItemCargoGlobal _crate;
//fill the crate with WEAPONS and AMMO
_weapons = [
["srifle_DMR_01_F",1],["arifle_Mk20_F",1],["arifle_MX_Black_F",1],["M249_EPOCH",1],["srifle_LRR_SOS_F",1]
];
{_crate addWeaponCargoGlobal _x} forEach _weapons;
_magazines = [
["20Rnd_762x51_Mag",4],["30Rnd_556x45_Stanag",4],["30Rnd_65x39_caseless_mag_Tracer",4],["200Rnd_556x45_M249",2],["7Rnd_408_Mag",3],["HandGrenade",2],["MiniGrenade",2]
];
{_crate addMagazineCargoGlobal _x} forEach _magazines;
_attachments = [
["optic_Arco",1],["optic_SOS",1],["optic_Aco",1],["optic_LRPS",1],["Muzzle_snds_H",1],["Muzzle_snds_M",1],["Muzzle_snds_B",1],["ItemCompass",4],["ItemGPS",4],["ItemWatch",4]
];
_apparel = [
["V_7_EPOCH",1],["V_10_EPOCH",1],["V_13_EPOCH",1],["V_14_EPOCH",1],["V_15_EPOCH",1],["V_37_EPOCH",1],["V_38_EPOCH",1]
];
{_crate addItemCargoGlobal _x} forEach _attachments + _apparel;
_crate addBackpackCargoGlobal [["B_FieldPack_ocamo",2]];
};
fn_LoadLootRandom = {
private ["_crate","_var","_tmp","_kindOf","_report","_cAmmo","_blackList","_LootList"];
_blackList = // Crate Blacklist - These are items that should NOT be in random crate - should eliminate most BE filter issues (may need more testing)
[
"DemoCharge_Remote_Mag", "SatchelCharge_Remote_Mag", "ATMine_Range_Mag","ClaymoreDirectionalMine_Remote_Mag", "APERSMine_Range_Mag",
"APERSBoundingMine_Range_Mag", "SLAMDirectionalMine_Wire_Mag","APERSTripMine_Wire_Mag", "NVGoggles_OPFOR", "NVGoggles_INDEP",
"FirstAidKit", "Medikit", "ToolKit", "optic_DMS"
];
_crate = _this select 0;
// Empty Crate
clearWeaponCargoGlobal _crate;
clearMagazineCargoGlobal _crate;
clearBackpackCargoGlobal _crate;
clearItemCargoGlobal _crate;
_LootList = [];
// Generate Loot
{
_tmp = (getArray(_x >> 'items'));
{_LootList = _LootList + [ ( _x select 0 ) select 0 ];} forEach (_tmp);
} forEach ("configName _x != 'Uniforms' && configName _x != 'Headgear'" configClasses (configFile >> "CfgLootTable"));
_report = [];
// Load Random Loot Amount
for "_i" from 1 to ((floor(random 10)) + 10) do {
_var = (_LootList call BIS_fnc_selectRandom);
if (!(_var in SDROPCrateBlacklist)) then {
switch (true) do
{
case (isClass (configFile >> "CfgWeapons" >> _var)): {
_kindOf = [(configFile >> "CfgWeapons" >> _var),true] call BIS_fnc_returnParents;
if ("ItemCore" in _kindOf) then {
_crate addItemCargoGlobal [_var,1];
} else {
_crate addWeaponCargoGlobal [_var,1];
_cAmmo = [] + getArray (configFile >> "cfgWeapons" >> _var >> "magazines");
{
if (isClass(configFile >> "CfgPricing" >> _x)) exitWith {
_crate addMagazineCargoGlobal [_x,2];
};
} forEach _cAmmo;
};
};
case (isClass (configFile >> "cfgMagazines" >> _var)): {
_crate addMagazineCargoGlobal [_var,1];
};
case ((getText(configFile >> "cfgVehicles" >> _var >> "vehicleClass")) == "Backpacks"): {
_crate addBackpackCargoGlobal [_var,1];
};
default {
_report = _report + [_var];
};
};
};
};
if ((count _report) > 0) then {
diag_log text format ["[blckeagls]: LoadLoot: <Unknown> %1", str _report];
};
};
fn_spawnLootCrate = {
private["_crate","_chute","_crateTypeArr","_crateType","_supplyHeli","_crateOnGround"];
_supplyHeli = _this select 0;
//create the parachute and crate
_chute = createVehicle ["I_Parachute_02_F", [0,0,0], [], 0, "CAN_COLLIDE"];
_chute call EPOCH_server_vehicleInit;
_chute call EPOCH_server_setVToken;
_crate = createVehicle ["IG_supplyCrate_F", [0,0,0], [], 0, "CAN_COLLIDE"];
_crate call EPOCH_server_vehicleInit;
_crate call EPOCH_server_setVToken;
//open parachute and attach to crate
_chute setPos [position _supplyHeli select 0, position _supplyHeli select 1, (position _supplyHeli select 2) - 10];
_crate setPos [position _chute select 0, position _chute select 1, (position _chute select 2) - 10];
_crate attachTo [_chute, [0, 0, -0.5]];
// To be sure the crate survives landing and any stray gunfire turn off damage for that object
_crate allowDamage false;
//FILL crate with LOOT
_crateTypeArr = ["food","supplies","weapons"/*,"random","random","random"*/];
_crateType = _crateTypeArr call bis_fnc_selectrandom;
//Randomize the crate type and fill it
//same crate every time is boring yo!
switch (_crateType) do {
case "food": {
[_crate] call fn_LoadLootFood;
};
case "supplies": {
[_crate] call fn_LoadLootSupplies;
};
case "weapons": {
[_crate] call fn_LoadLootWeapons;
};
case "random": {
[_crate] call fn_LoadLootRandom;
};
};
// put a marker on the crate
[_crate] spawn blck_fnc_signalEnd;
//detach chute when crate is near the ground
_crateOnGround = false;
while {!_crateOnGround} do {
if (getPosATL _crate select 2 > 30) then {
//attempt to smooth drop for paratroops
//commented out for performance improvements
/*if (SDROP_CreateParatrooperAI) then {
{
_vel = velocity _x;
_dirTo = [_x,_crate] call bis_fnc_dirTo;
_x setDir _dirTo;
_x setVelocity [
(_vel select 0) + (sin _dirTo * 0.2),
(_vel select 1) + (cos _dirTo * 0.2),
(_vel select 2)
];
} forEach units _grp;
};*/
uiSleep 5;
};
if (getPosATL _crate select 2 < 4) then {
_crateOnGround = true;
detach _crate;
};
uiSleep 1;
};
//delete the chute for clean-up purposes
deleteVehicle _chute;
};
//////////////////////////////////////////////////////////////
// Start of the main routine
/////////////////////////////////////////////////////////////
private ["_cleanheli","_drop","_helipos","_gunner2","_gunner","_playerPresent","_skillarray","_aicskill","_aiskin","_aigear","_helipatrol","_gear","_skin","_backpack","_mags",
"_gun","_triggerdis","_startingpos","_aiweapon","_mission","_heli_class","_startPos","_helicopter","_unitGroup","_pilot","_skill","_paranumber","_position","_wp1","_weapons",
"_headgear","_units","_wpPosition","_wpHome","_chanceLootCrate"];
_position = _this select 0; // Coordinates of the AI group requesting reinforcements; typically the center of the mission
_startingpos = _this select 1; // location at which the heli should begin its approach, such as 1 km from the mission
_triggerdis = _this select 2; // 25-40 meters from _position is recommended
_heli_class = [_this, 3, "B_Heli_Light_01_armed_F"] call BIS_fnc_param;
_paranumber = [_this, 4,3] call BIS_fnc_param; // Number of paratroops to spawn
_skill = [_this, 5, "red"] call BIS_fnc_param;
_chanceHeliPatrol = [_this, 6, 0.33] call BIS_fnc_param; // when true the heli will circle around _position and suppress
_chanceLootCrate = [_this, 7,0.33] call BIS_fnc_param;
_weapons = [_this, 8,blck_WeaponList_Red] call BIS_fnc_param;
_skins = [_this,9,blck_SkinList] call BIS_fnc_param;
_headgear = [_this, 10, blck_headgear] call BIS_fnc_param;
_units = [];
// wait for player to come into area.
diag_log "[bckeagls]: Paradrop Waiting for player";
//sleep 120;
waitUntil{ {isPlayer _x && _x distance _position <= 600} count playableunits > 0 };
// Three Initial Tasks, Spawn Chopper, give it Crew, and give the Crew initial waypoints for a flyby over the mission area and return to base for cleanup of chopper.
//Spawing in Chopper and crew
diag_log format ["[bckeagls]: Spawning a %1 with %2 units to be paradropped at %3",_heli_class,_paranumber,_position];
diag_log format ["[bckeagls]: Spawning a %1 to fly to, patrol and return from at %2",_heli_class,_paranumber,_position];
_unitGroup = createGroup blck_AI_Side;
_pilot = [[0,0,0],_weapons,_unitGroup,_skill] call blck_fnc_spawnAI;
[_pilot] joinSilent _unitGroup;
//_units pushback _pilot;
_helicopter = createVehicle [_heli_class, [(_startingpos select 0),(_startingpos select 1), 100], [], 0, "FLY"];
_helicopter setFuel 1;
_helicopter engineOn true;
clearWeaponCargoGlobal _helicopter;
clearMagazineCargoGlobal _helicopter;
clearItemCargoGlobal _helicopter;
_helicopter setVehicleAmmo 1;
_helicopter flyInHeight 150;
_helicopter addEventHandler ["GetOut",{(_this select 0) setFuel 0;(_this select 0) setDamage 1;}];
//keep heli around until we delete it
//_helicopter call EPOCH_server_vehicleInit;
_helicopter call EPOCH_server_setVToken;
_pilot assignAsDriver _helicopter;
_pilot moveInDriver _helicopter;
_pilot setSkill 1;
//set waypoint for helicopter over the mission requesting reinforcements
_wpPosition =_unitGroup addWaypoint [_position, 0];
_wpPosition setWaypointType "MOVE";
_wpPosition setWaypointSpeed "FULL";
_wpPosition setWaypointBehaviour "COMBAT";
_gunner = [[0,0,0],_weapons,_unitGroup,_skill] call blck_fnc_spawnAI;
[_gunner] joinSilent _unitGroup;;
_gunner assignAsGunner _helicopter;
_gunner moveInTurret [_helicopter,[0]];
_gunner2 = [[0,0,0],_weapons,_unitGroup,_skill] call blck_fnc_spawnAI;
_gunner2 assignAsGunner _helicopter;
_gunner2 moveInTurret [_helicopter,[1]];
[_gunner2] joinSilent _unitGroup;
_unitGroup allowFleeing 0;
_unitGroup setBehaviour "COMBAT";
_unitGroup setSpeedMode "FULL";
_unitGroup setCombatMode "RED";
_paraGroup = [[0,0,0],_paranumber,_paranumber,_skill,_position,5,35,_skins,_headgear] call blck_fnc_spawnGroup;
// Remove waypoints which may not be correct in this instance
while {(count (waypoints group(_paraGroup select 0))) > 0} do
{
deleteWaypoint ((waypoints group (_paraGroup select 0)) select 0);
};
{
// Give unit parachute
removeBackpack _x;
_x addBackpack "B_Parachute";
_x assignAsCargoIndex [_helicopter, 1];
_x moveInCargo _helicopter;
} forEach _paraGroup;
//Waits until heli gets near the position to drop crate, or if waypoint timeout has been triggered
if ( random(1) < _chanceLootCrate) then {
private["_destinationDone","_supplyDropStartTime"];
// drop a crate with loot
_wait = true;
_destinationDone = false;
_supplyDropStartTime = diag_tickTime;
while {_wait && !_destinationDone} do {
if (_helicopter distance (getWPPos _wpPosition) < 200 ) then {
_destinationDone = true;
[_helicopter] spawn fn_spawnLootCrate;
diag_log "spawnheli_para:: loot crate spawned";
};
if ((diag_tickTime - _supplyDropStartTime) > 300) then {
_wait = false;
};
uiSleep 10;
};
};
diag_log "spawnheli_para:: Waiting for heli to be in position to deploy paratrops";
while {_helicopter distance _position > 200} do { uiSleep 5;};
diag_log "spawnheli_para:: Deploing paratroopers";
[_pos,10,35,_paraGroup] call blck_fnc_setupWaypoints;
{
unassignVehicle (_x);
(_x) action ["EJECT", _helicopter];
uiSleep 1.5;
} forEach units _paraGroup;
diag_log "spawnheli_para:: Paratroopers deployed";
_wpLoiter = _unitGroup addWaypoint [_position,30];
_wpLoiter setWaypointType "LOITER";
_wpLoiter setWaypointSpeed "LIMITED";
_wpLoiter setWaypointTimeout [30,45,60];
_wpLoiter setWaypointLoiterType "CIRCLE_L";
if (random(1) < _chanceHeliPatrol) then {
[_unitGroup,_position,_startingpos] spawn {
private["_wp1","_unitGroup","_position","_startingpos","_helicopter"];
_unitGroup = _this select 0;
_position = _this select 1;
_helicopter = _this select 2;
_startingpos = _this select 3;
_wp1 = _unitGroup addWaypoint [[(_position select 0),(_position select 1)], 100];
_wp1 setWaypointType "SAD";
_wp1 setWaypointCompletionRadius 150;
_wp1 setWaypointTimeout [250,300,325]; // about 5 min.
_unitGroup setBehaviour "AWARE";
{_x addEventHandler ["Killed",{[_this select 0, _this select 1, "air"] call on_kill;}];} forEach (units _unitgroup);
uiSleep 300;
[_unitGroup,_helicopter,_startingpos] spawn fn_returnHome;
};
} else {
//small pause to ensure all items extract
uiSleep 3;
[_unitGroup,_helicopter,_startingpos] spawn fn_returnHome;
};
diag_log "GMS_fnc_spawnheli_para.sqf has finished";
_units;
/*
if (!isServer)exitWith{};
//Delay before chopper spawns in.
//sleep _delay;
// Add waypoints to the chopper group.
_wp = _unitGroup addWaypoint [[(_position select 0), (_position select 1)], 0];
_wp setWaypointType "MOVE";
_wp setWaypointCompletionRadius 100;
_drop = true;
_helipos = getpos _helicopter;
while {(alive _helicopter) AND (_drop)} do {
private ["_magazine","_weapon","_weaponandmag","_chute","_para","_pgroup"];
sleep 1;
_helipos = getpos _helicopter;
if (_helipos distance [(_position select 0),(_position select 1),100] <= 200) then {
_pgroup = createGroup blck_AI_Side;
for "_i" from 1 to _paranumber do
{
_para = [[0,0,0],_weapons,_unitGroup,_skill] call blck_fnc_spawnAI;
_helipos = getpos _helicopter;
_chute = createVehicle ["B_Parachute", [(_helipos select 0), (_helipos select 1), (_helipos select 2)], [], 0, "NONE"];
_para moveInDriver _chute;
[_para] joinSilent _pgroup;
sleep 1.5;
};
_drop = false;
_pgroup selectLeader ((units _pgroup) select 0);
//diag_log format ["WAI: Spawned in %1 ai units for paradrop",_paranumber];
[_position,10,30,_pgroup] call blck_fnc_setupWaypoints;
};
//_units = units _pgroup;
};
diag_log format ["[bckeagls]: dropped %1 units to be paradropped at %2",_paranumber,_position];

View File

@ -0,0 +1,71 @@
/*
Handle the case that all AI assigned to a vehicle are dead.
Allows players to enter and use the vehicle when appropriate
or otherwise destroys the vehicle.
By Ghostrider-DBD-
Copyright 2016
Last updated 8-14-16
*/
private ["_unit","_units","_count","_group","_driver","_gunner","_cargo"];
params["_veh"];
_count = 0;
waitUntil { count crew _veh > 0};
//diag_log format["vehicle Manned %1",_veh];
while { (getDammage _veh < 1.0) && ({alive _x} count crew _veh > 0)} do
{ //diag_log format["vehicleMonitor: vehicle crew consists of %1", crew _veh];
//diag_log format["vehicleMonitor: number of crew alive is %1", {alive _x} count crew _veh];
_veh setVehicleAmmo 1;
_veh setFuel 1;
sleep 10;
/*
//if ({alive _x} count crew _veh < 1) then { _veh setDamage 1.1;};
if (!alive gunner _veh) then {
{
if (_x != driver _veh) exitWith {_x moveingunner _veh;};
} forEach crew _veh;
};
if (!alive gunner _veh) then {driver _veh moveingunner _veh;};
if (!alive driver _veh) then {
{
if (_x != gunner _veh) exitWith { _x moveindriver _veh;};
} forEach crew _veh;
};
*/
//diag_log format["vehicleMonitor.sqf: driver is %1; gunner is %2", driver _veh, gunner _veh];
};
//diag_log format["vehicleMonitor:: Vehicle %1 is empty",_veh];
//blck_PVS_aiVehicleEmpty = _veh;
//publicVariableServer "blck_PVS_aiVehicleEmpty";
//diag_log format["vehiclemonitor.sqf all crew for vehicle %1 are dead",_veh];
if (typeOf _veh in blck_staticWeapons) then // always destroy mounted weapons
{
//diag_log format["vehicleMonitor.sqf: _veh %1 is (in blck_staticWeapons) = true",_veh];
_veh setDamage 1;
} else {
//diag_log format["vehicleMonitor.sqf: _veh %1 is (in blck_staticWeapons) = false",_veh];
if (blck_killEmptyAIVehicles) then
{
private ["_v","_startTime"];
//diag_log format["vehicleMonitor.sqf: _veh %1 is about to be killed",_veh];
uiSleep 10;
_veh setDamage 1;
_startTime = diag_ticktime;
waitUntil{sleep 5;(diag_tickTime - _startTime) > 120;}; // delete destroyed vehicles after 2 min
deleteVehicle _veh;
}
else
{
//diag_log format["vehicleMonitor.sqf: make vehicle available to players; stripping eventHandlers from_veh %1",_veh];
_veh removealleventhandlers "GetIn";
_veh removealleventhandlers "GetOut";
_veh setVehicleLock "UNLOCKED" ;
};
};

View File

@ -0,0 +1,115 @@
/*
AI Mission for Epoch Mod for Arma 3
For the Mission System originally coded by blckeagls
By Ghostrider
Functions and global variables used by the mission system.
Last modified 2/10/16
*/
blck_functionsCompiled = false;
// General functions
blck_fnc_waitTimer = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_waitTimer.sqf";
blck_fnc_FindSafePosn = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_findSafePosn.sqf";
blck_fnc_randomPosition = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_randomPosn.sqf";// find a randomPosn. see script for details.
blck_fnc_findPositionsAlongARadius = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_findPositionsAlongARadius.sqf";
blck_fnc_giveTakeCrypto = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_giveTakeCrypto.sqf";
// Player-related functions
blck_fnc_rewardKiller = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_rewardKiller.sqf";
blck_fnc_MessagePlayers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_AIM.sqf"; // Send messages to players regarding Missions
blck_getModType = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_getModType.sqf"; // Send messages to players regarding Missions
// Mission-related functions
blck_fnc_missionTimer = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionTimer.sqf";
//blck_fnc_addMissionToQue = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_addMissionToQue.sqf"; //
//blck_fnc_updateMissionQue = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_updateMissionQue.sqf"; //
blck_fnc_addLiveAItoQue = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_addLiveAItoQue.sqf";
blck_fnc_addObjToQue = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_addObjToQue.sqf"; //
blck_fnc_playerInRange = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_playerInRange.sqf";
blck_fnc_spawnCrate = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnCrate.sqf"; // Simply spawns a crate of a specified type at a specific position.
blck_fnc_spawnMissionCrates = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionCrates.sqf"; // Spawn loot crates at specific positions relative to the mission center; these will be filled with loot following the parameters in the composition array for the mission
blck_fnc_cleanupObjects = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_cleanUpObjects.sqf";
blck_fnc_spawnCompositionObjects = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\otl7_Mapper.sqf";
blck_fnc_spawnRandomLandscape = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnRandomLandscape.sqf";
blck_fnc_fillBoxes = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_fillBoxes.sqf"; // Adds items to an object according to passed parameters. See the script for details.
blck_fnc_smokeAtCrates = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_smokeAtCrates.sqf"; // Spawns a wreck and adds smoke to it
blck_fnc_spawnMines = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMines.sqf"; // Deploys mines at random locations around the mission center
blck_fnc_clearMines = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_clearMines.sqf"; // clears mines in an array passed as a parameter
blck_fnc_signalEnd = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_signalEnd.sqf"; // deploy smoke grenades at loot crates at the end of the mission.
// Group-related functions
blck_fnc_spawnGroup = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_spawnGroup.sqf"; // Spawn a single group and populate it with AI units]
blck_fnc_setupWaypoints = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_setWaypoints.sqf"; // Set default waypoints for a group
//blck_fnc_spawnGroups = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_spawnGroups.sqf"; // Call spawnGroup multiple times using specific parameters for group positioning
//blck_fnc_endCondition = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_endCondition.sqf"; //GRMS_fnc_endCondition
// Functions specific to vehicles, whether wheeled or static
blck_fnc_spawnEmplacedWeapon = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnEmplaced.sqf"; // Self-evident
blck_fnc_spawnVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnVehicle.sqf"; // Spawn a temporary vehicle of a specified type at a specific position
blck_fnc_spawnVehiclePatrol = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnVehiclePatrol.sqf"; // Spawn an AI vehicle control and have it patrol the mission perimeter
blck_fnc_vehicleMonitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_vehicleMonitor.sqf"; // Process events wherein all AI in a vehicle are killed
//blck_fnc_spawnMissionVehicles = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnMissionVehicles.sqf"; // Spawn non-AI vehicles at missions; these will be filled with loot following the parameters in the composition array for the mission
blck_fnc_Reinforcements = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_reinforcements.sqf";
blck_spawnHeliParaTroops = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_heliSpawnParatroops.sqf";
blck_spawnHeliParaCrate = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_heliSpawnCrate.sqf";
blck_spawnHeliPatrol = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_heliSpawnPatrol.sqf";
blck_fnc_protectVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_protectVehicle.sqf";
// functions to support Units
blck_fnc_removeGear = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_removeGear.sqf"; // Strip an AI unit of all gear.
blck_fnc_spawnAI = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_spawnUnit.sqf"; // spawn individual AI
blck_EH_AIKilled = "\q\addons\custom_server\Compiles\Units\GMS_EH_AIKilled.sqf"; // Event handler to process AI deaths
//blck_EH_AIHandleDamage = "\q\addons\custom_server\Compiles\Units\GMS_EH_AIHandleDamage.sqf"; // GRMS_EH_AIHandleDamage
blck_fnc_processAIKill = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_processAIKill.sqf";
blck_fnc_removeLaunchers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_removeLaunchers.sqf";
blck_fnc_removeNVG = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_removeNVG.sqf";
blck_fnc_alertNearbyUnits = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_alertNearbyUnits.sqf";
blck_fnc_processIlleagalAIKills = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_processIlleagalAIKills.sqf";
GMS_fnc_cleanupDeadAI = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_cleanupDeadAI.sqf"; // handles deletion of AI bodies and gear when it is time.
blck_fnc_setSkill = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_setSkill.sqf";
blck_fnc_cleanupAliveAI = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_cleanupAliveAI.sqf";
// Event handlers
"blck_PVS_aiKilled" addPublicVariableEventHandler {
diag_log format["blck_PVS_aiKilled handler:: unit = %1 and killer = %2 and this = #3",_this select 1 select 0,_this select 1 select 1, _this];
[_this select 1 select 0,_this select 1 select 1] call blck_fnc_processAIKill;
};
"blck_PVS_aiVehicleEmpty" addPublicVariableEventHandler {
private ["_veh"];
_veh = _this select 1;
//diag_log format["blck_PVS_aiVehicleEmpty:: _this = %1 and _veh = %2",_this,0];
if (typeOf _veh in blck_staticWeapons) then // always destroy mounted weapons
{
//diag_log format["vehicleMonitor.sqf: _veh %1 is (in blck_staticWeapons) = true",_veh];
_veh removealleventhandlers "GetIn";
_veh removealleventhandlers "GetOut";
_veh setDamage 1;
} else {
//diag_log format["vehicleMonitor.sqf: _veh %1 is (in blck_staticWeapons) = false",_veh];
if (blck_killEmptyAIVehicles) then
{
//diag_log format["vehicleMonitor.sqf: _veh %1 is about to be killed",_veh];
_veh removealleventhandlers "GetIn";
_veh removealleventhandlers "GetOut";
_veh setVehicleLock "UNLOCKED" ;
uiSleep 1;
_veh setDamage 1.1;
uiSleep 15;
deleteVehicle _veh;
}
else
{
//diag_log format["vehicleMonitor.sqf: make vehicle available to players; stripping eventHandlers from_veh %1",_veh];
_veh removealleventhandlers "GetIn";
_veh removealleventhandlers "GetOut";
_veh setVehicleLock "UNLOCKED" ;
};
};
};
diag_log "[blckeagls] Functions Loaded";
blck_functionsCompiled = true;

View File

@ -0,0 +1,38 @@
/*
AI Mission for Epoch Mod for Arma 3
For the Mission System originally coded by blckeagls
By Ghostrider
Functions and global variables used by the mission system.
Last modified 10/17/16
*/
//blck_variablesLoaded = false;
blck_debugON = false;
blck_debugLevel = 3;
blck_minFPS = 13;
//Minimum distance for between missions
MinDistanceFromMission = 1500;
////////////////////////////////////////////////
// Do Not Touch Anything Below This Line
///////////////////////////////////////////////
blck_ActiveMissionCoords = [];
blck_recentMissionCoords = [];
//blck_emplacedWeapons = [];
blck_monitoredVehicles = [];
blck_liveMissionAI = [];
blck_oldMissionObjects = [];
blck_pendingMissions = [];
blck_activeMissions = [];
blck_deadAI = [];
// Arrays for use during cleanup of alive AI at some time after the end of a mission
DBD_HeliCrashSites = [];
// radius within whih missions are triggered. The trigger causes the crate and AI to spawn.
blck_TriggerDistance = 1000;
blck_mainThreadUpdateInterval = 60;
blck_missionSpawning = false;
diag_log "[blckeagls] Variables Loaded";
blck_variablesLoaded = true;

View File

@ -0,0 +1,191 @@
/*
* passToHCs.sqf
*
* In the mission editor, name the Headless Clients "HC", "HC2", "HC3" without the quotes
*
* In the mission init.sqf, call passToHCs.sqf with:
* execVM "passToHCs.sqf";
*
* It seems that the dedicated server and headless client processes never use more than 20-22% CPU each.
* With a dedicated server and 3 headless clients, that's about 88% CPU with 10-12% left over. Far more efficient use of your processing power.
*
*/
if (!isServer) exitWith {};
diag_log "passToHCs: Started";
//waitUntil {!isNil "HC"};
//waitUntil {!isNull HC};
_wait = true;
while {_wait} do{
if (isNil "HC") then
{
diag_log "passToHCs: HC not connected";} else
{
diag_log format["passToHCs: owner HC = %1", owner HC];
_wait = false;
};
sleep 5;
};
_HC_ID = -1; // Will become the Client ID of HC
_HC2_ID = -1; // Will become the Client ID of HC2
_HC3_ID = -1; // Will become the Client ID of HC3
rebalanceTimer = 60; // Rebalance sleep timer in seconds
cleanUpThreshold = 200; // Threshold of number of dead bodies + destroyed vehicles before forcing a clean up
diag_log format["passToHCs: First pass will begin in %1 seconds", rebalanceTimer];
while {true} do {
// Rebalance every rebalanceTimer seconds to avoid hammering the server
uisleep rebalanceTimer;
// Do not enable load balancing unless more than one HC is present
// Leave this variable false, we'll enable it automatically under the right conditions
_loadBalance = false;
// Get HC Client ID else set variables to null
try {
_HC_ID = owner HC;
if (_HC_ID > 2) then {
//diag_log format ["passToHCs: Found HC with Client ID %1", _HC_ID];
} else {
//diag_log "passToHCs: [WARN] HC disconnected";
HC = objNull;
_HC_ID = -1;
};
} catch { diag_log format ["passToHCs: [ERROR] [HC] %1", _exception]; HC = objNull; _HC_ID = -1; };
// Get HC2 Client ID else set variables to null
if (!isNil "HC2") then {
try {
_HC2_ID = owner HC2;
if (_HC2_ID > 2) then {
//diag_log format ["passToHCs: Found HC2 with Client ID %1", _HC2_ID];
} else {
//diag_log "passToHCs: [WARN] HC2 disconnected";
HC2 = objNull;
_HC2_ID = -1;
};
} catch { diag_log format ["passToHCs: [ERROR] [HC2] %1", _exception]; HC2 = objNull; _HC2_ID = -1; };
};
// Get HC3 Client ID else set variables to null
if (!isNil "HC3") then {
try {
_HC3_ID = owner HC3;
if (_HC3_ID > 2) then {
//diag_log format ["passToHCs: Found HC2 with Client ID %1", _HC3_ID];
} else {
//diag_log "passToHCs: [WARN] HC3 disconnected";
HC3 = objNull;
_HC3_ID = -1;
};
} catch { diag_log format ["passToHCs: [ERROR] [HC3] %1", _exception]; HC3 = objNull; _HC3_ID = -1; };
};
// If no HCs present, wait for HC to rejoin
//if ( (isNull HC) && (isNull HC2) && (isNull HC3) ) then { waitUntil {!isNull HC}; };
// Check to auto enable Round-Robin load balancing strategy
//if ( (!isNull HC && !isNull HC2) || (!isNull HC && !isNull HC3) || (!isNull HC2 && !isNull HC3) ) then { _loadBalance = true; };
if ( _loadBalance ) then {
//diag_log "passToHCs: Starting load-balanced transfer of AI groups to HCs";
} else {
// No load balancing
//diag_log "passToHCs: Starting transfer of AI groups to HC";
};
// Determine first HC to start with
_currentHC = 0;
if (!isNull HC) then { _currentHC = 1; } else {
if (!isNull HC2) then { _currentHC = 2; } else { _currentHC = 3; };
};
// Pass the AI
_numTransfered = 0;
{
_swap = false;
// If a player is in this group, don't swap to an HC
// If the group belongs to the blckeagls mission system then transfer it to the HC
if (_x getVariable["blck_group",false]) then {
//diag_log format["group belongs to blckeagls mission system so time to transfer it"];
_id = groupOwner _x;
//diag_log format["Owner of group %1 is %2",_x,_id];
if (_id > 2) then
{
//diag_log format["group %1 is already assigned to an HC with _id of %2",_x,_id];
_swap = false;
} else {
//diag_log format["group %1 should be moved to an HC",_x];
_swap = true;
};
} else {
//diag_log format["group %1 does not belong to blckeagls mission system",_x];
};
// If load balance enabled, round robin between the HCs - else pass all to HC
if ( _swap ) then {
_rc = false;
if ( _loadBalance ) then {
switch (_currentHC) do {
case 1: { _rc = _x setGroupOwner _HC_ID; if (!isNull HC2) then { _currentHC = 2; } else { _currentHC = 3; }; };
case 2: { _rc = _x setGroupOwner _HC2_ID; if (!isNull HC3) then { _currentHC = 3; } else { _currentHC = 1; }; };
case 3: { _rc = _x setGroupOwner _HC3_ID; if (!isNull HC) then { _currentHC = 1; } else { _currentHC = 2; }; };
default { diag_log format["passToHCs: [ERROR] No Valid HC to pass to. _currentHC = %1", _currentHC]; };
};
} else {
switch (_currentHC) do {
case 1: { _rc = _x setGroupOwner _HC_ID; };
case 2: { _rc = _x setGroupOwner _HC2_ID; };
case 3: { _rc = _x setGroupOwner _HC3_ID; };
default { diag_log format["passToHCs: [ERROR] No Valid HC to pass to. _currentHC = %1", _currentHC]; };
};
};
// If the transfer was successful, count it for accounting and diagnostic information
if ( _rc ) then { _numTransfered = _numTransfered + 1; };
};
} forEach (allGroups);
if (_numTransfered > 0) then {
// More accounting and diagnostic information
diag_log format ["passToHCs: Transfered %1 AI groups to HC(s)", _numTransfered];
_numHC = 0;
_numHC2 = 0;
_numHC3 = 0;
{
switch (owner ((units _x) select 0)) do {
case _HC_ID: { _numHC = _numHC + 1; };
case _HC2_ID: { _numHC2 = _numHC2 + 1; };
case _HC3_ID: { _numHC3 = _numHC3+ 1; };
};
} forEach (allGroups);
if (_numHC > 0) then { diag_log format ["passToHCs: %1 AI groups currently on HC", _numHC]; };
if (_numHC2 > 0) then { diag_log format ["passToHCs: %1 AI groups currently on HC2", _numHC2]; };
if (_numHC3 > 0) then { diag_log format ["passToHCs: %1 AI groups currently on HC3", _numHC3]; };
diag_log format ["passToHCs: %1 AI groups total across all HC(s)", (_numHC + _numHC2 + _numHC3)];
} else {
diag_log "passToHCs: No rebalance or transfers required this round";
};
};

View File

@ -0,0 +1,861 @@
/*
AI Mission Compiled by blckeagls @ Zombieville.net
Further modified by Ghostrider -
This file contains most constants that define mission parameters, AI behavior and loot for mission system.
Last modified 8/1/15
*/
blck_configsLoaded = false;
/**************************************************************
BLACKLIST LOCATIONS
**************************************************************/
// if true then missions will not spawn within 1000 m of spawn points for Altis, Bornholm, Cherno, Esseker or stratis.
blck_blacklistSpawns = true;
// list of locations that are protected against mission spawns
blck_locationBlackList = [
//Add location as [xpos,ypos,0],minimumDistance],
// Note that there should not be a comma after the last item in this table
[[0,0,0],0]
];
/***********************************************************
GENERAL MISSION SYSTEM CONFIGURATION
***********************************************************/
// MISSION MARKER CONFIGURATION
// blck_labelMapMarkers: Determines if when the mission composition provides text labels, map markers with have a text label indicating the mission type
//When set to true,"arrow", text will be to the right of an arrow below the mission marker.
// When set to true,"dot", ext will be to the right of a black dot at the center the mission marker.
blck_labelMapMarkers = [true,"center"];
blck_preciseMapMarkers = true; // Map markers are/are not centered at the loot crate
// Options to spawn a smoking wreck near the mission. When the first parameter is true, a wreck or junk pile will be spawned.
// It's position can be either "center" or "random". smoking wreck will be spawned at a random location between 15 and 50 m from the mission.
blck_SmokeAtMissions = [false,"random"]; // set to [false,"anything here"] to disable this function altogether.
blck_useSignalEnd = true; // When true a smoke grenade will appear at the loot crate for 2 min after mission completion.
// PLAYER PENALTIES
blck_RunGear = true; // When set to true, AI that have been run over will ve stripped of gear, and the vehicle will be given blck_RunGearDamage of damage.
blck_RunGearDamage = 0.2; // Damage applied to player vehicle for each AI run over
blck_VK_Gear = true; // When set to true, AI that have been killed by a player in a vehicle in the list of forbidden vehicles or using a forbiden gun will be stripped of gear and the vehicle will be given blck_RunGearDamage of damage
blck_VK_RunoverDamage = true; // when the AI was run over blck_RunGearDamage of damage will be applied to the killer's vehicle.
blck_VK_GunnerDamage = true; // when the AI was killed by a gunner on a vehicle that is is in the list of forbidden vehicles, blck_RunGearDamage of damage will be applied to the killer's vehicle each time an AI is killed with a vehicle's gun.
blck_forbidenVehicles = ["B_MRAP_01_hmg_F","O_MRAP_02_hmg_F"]; // Add any vehicles for which you wish to forbid vehicle kills
// For a listing of the guns mounted on various land vehicles see the following link: https://community.bistudio.com/wiki/Arma_3_CfgWeapons_Vehicle_Weapons
// HMG_M2 is mounted on the armed offroad that is spawned by Epoch
blck_forbidenVehicleGuns = ["LMG_RCWS","LMG_M200","HMG_127","HMG_127_APC",/*"HMG_M2",*/"HMG_NSVT","GMG_40mm","GMG_UGV_40mm","autocannon_40mm_CTWS","autocannon_30mm_CTWS","autocannon_35mm","LMG_coax","autocannon_30mm","HMG_127_LSV_01"]; // Add any vehicles for which you wish to forbid vehicle kills, o
// GLOBAL MISSION PARAMETERS
blck_useMines = false; // when true mines are spawned around the mission area. these are cleaned up when a player reaches the crate.
blck_useVehiclePatrols = true; // When true vehicles will be spawned at missions and will patrol the mission area.
blck_killEmptyAIVehicles = false; // when true, the AI vehicle will be extensively damaged once all AI have gotten out.
blck_AIPatrolVehicles = ["B_G_Offroad_01_armed_EPOCH","B_LSV_01_armed_F"]; // Type of vehicle spawned to defend AI bases
//Set to -1 to disable. Values of 2 or more force the mission spawner to spawn copies of that mission.
blck_enableOrangeMissions = 1;
blck_enableGreenMissions = 1;
blck_enableRedMissions = 1;
blck_enableBlueMissions = 1;
blck_enableHunterMissions = 2;
blck_enableScoutsMissions = 2;
// AI VEHICLE PATROL PARAMETERS
//Defines how many AI Vehicles to spawn. Set this to -1 to disable spawning of static weapons or vehicles. To discourage players runniing with with vehicles, spawn more B_GMG_01_high
blck_SpawnVeh_Orange = 3; // Number of static weapons at Orange Missions
blck_SpawnVeh_Green = 2; // Number of static weapons at Green Missions
blck_SpawnVeh_Blue = -1; // Number of static weapons at Blue Missions
blck_SpawnVeh_Red = 1; // Number of static weapons at Red Missions
// AI STATIC WEAPON PARAMETERS
blck_useStatic = true; // When true, AI will man static weapons spawned 20-30 meters from the mission center. These are very effective against most vehicles
blck_staticWeapons = ["B_HMG_01_high_F"/*,"B_GMG_01_high_F","O_static_AT_F"*/]; // [0.50 cal, grenade launcher, AT Launcher]
// Defines how many static weapons to spawn. Set this to -1 to disable spawning
blck_SpawnEmplaced_Orange = 3; // Number of static weapons at Orange Missions
blck_SpawnEmplaced_Green = 2; // Number of static weapons at Green Missions
blck_SpawnEmplaced_Blue = 1; // Number of static weapons at Blue Missions
blck_SpawnEmplaced_Red = 1; // Number of static weapons at Red Missions
// AI paratrooper reinforcement paramters
blck_AIHelis = ["B_Heli_Light_01_armed_F","B_Heli_Transport_01_camo_F","B_Heli_Transport_03_F"];
// MISSION TIMERS
// Reduce to 1 sec for immediate spawns, or longer if you wish to space the missions out
blck_TMin_Orange = 250;
blck_TMin_Green = 200;
blck_TMin_Blue = 120;
blck_TMin_Red = 150;
blck_TMin_Hunter = 120;
blck_TMin_Scouts = 115;
blck_TMin_Crashes = 115;
blck_TMin_UMS = 200;
//Maximum Spawn time between missions in seconds
blck_TMax_Orange = 360;
blck_TMax_Green = 300;
blck_TMax_Blue = 200;
blck_TMax_Red = 250;
blck_TMax_Hunter = 200;
blck_TMax_Scouts = 200;
blck_TMax_Crashes = 200;
blck_TMax_UMS = 280;
blck_MissionTimout = 40*60; // 40 min
// Define the maximum number of crash sites on the map at any one time
blck_maxCrashSites = 3; // recommended settings: 3 for Altis, 2 for Tanoa, 1 for smaller maps. Set to -1 to disable
blck_maxDynamicUnderwaterMissions = 3;
/****************************************************************
GENERAL AI SETTINGS
****************************************************************/
blck_combatMode = "RED"; // Change this to "YELLOW" if the AI wander too far from missions for your tastes.
blck_groupFormation = "WEDGE"; // Possibilities include "WEDGE","VEE","FILE","DIAMOND"
blck_AI_Side = INDEPENDENT;
blck_chanceBackpack = 0.3; // Chance AI will be spawned with a backpack
blck_useNVG = true; // When true, AI will be spawned with NVG if is dark
blck_useLaunchers = true; // When true, some AI will be spawned with RPGs; they do not however fire on vehicles for some reason so I recommend this be set to false for now
//blck_launcherTypes = ["launch_NLAW_F","launch_RPG32_F","launch_B_Titan_F","launch_I_Titan_F","launch_O_Titan_F","launch_B_Titan_short_F","launch_I_Titan_short_F","launch_O_Titan_short_F"];
blck_launcherTypes = ["launch_RPG32_F"];
blck_backpack = ["B_Carryall_ocamo","B_Carryall_oucamo","B_Carryall_mcamo","B_Carryall_oli","B_Carryall_khk","B_Carryall_cbr" ];
blck_launchersPerGroup = 1; // Defines the number of AI per group spawned with a launcher
blck_launcherCleanup = true;// When true, launchers and launcher ammo are removed from dead AI.
//This defines how long after an AI dies that it's body disappears.
blck_bodyCleanUpTimer = 1200; // time in seconds after which dead AI bodies are deleted
// Each time an AI is killed, the location of the killer will be revealed to all AI within this range of the killed AI, set to -1 to disable
// values are ordered as follows [blue, red, green, orange];
blck_AliveAICleanUpTime = 900; // Time after mission completion at which any remaining live AI are deleted.
blck_cleanupCompositionTimer = 1200;
//blck_AIAlertDistance = [150,225,250,300];
blck_AIAlertDistance = [150,225,400,500];
// How precisely player locations will be revealed to AI after an AI kill
// values are ordered as follows [blue, red, green, orange];
blck_AIIntelligence = [0.5, 1, 2, 4];
/***************************************************************
MISSION TYPE SPECIFIC AI SETTINGS
**************************************************************/
//This defines the skill, minimum/Maximum number of AI and how many AI groups are spawned for each mission type
// Orange Missions
blck_MinAI_Orange = 20;
blck_MaxAI_Orange = 25;
blck_AIGrps_Orange = 6;
blck_SkillsOrange = [
["aimingAccuracy",0.4],["aimingShake",0.7],["aimingSpeed",0.4],["endurance",1.00],["spotDistance",0.7],["spotTime",0.7],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]
];
// Green Missions
blck_MinAI_Green = 16;
blck_MaxAI_Green = 21;
blck_AIGrps_Green = 5;
blck_SkillsGreen = [
["aimingAccuracy",0.25],["aimingShake",0.5],["aimingSpeed",0.4],["endurance",0.9],["spotDistance",0.6],["spotTime",0.6],["courage",85],["reloadSpeed",0.75],["commanding",0.9],["general",0.75]
];
// Red Missions
blck_MinAI_Red = 12;
blck_MaxAI_Red = 15;
blck_AIGrps_Red = 3;
blck_SkillsRed = [
["aimingAccuracy",0.16],["aimingShake",0.3],["aimingSpeed",0.3],["endurance",0.60],["spotDistance",0.5],["spotTime",0.5],["courage",0.70],["reloadSpeed",0.70],["commanding",0.8],["general",0.70]
];
// Blue Missions
blck_MinAI_Blue = 8;
blck_MaxAI_Blue = 12;
blck_AIGrps_Blue = 2;
blck_SkillsBlue = [
["aimingAccuracy",0.1],["aimingShake",0.25],["aimingSpeed",0.3],["endurance",0.50],["spotDistance",0.4],["spotTime",0.4],["courage",0.60],["reloadSpeed",0.60],["commanding",0.7],["general",0.60]
];
// AI Settings for scouts, Hunters and crashes are definded in thos missions.
/*********************************************************************************
AI WEAPONS, UNIFORMS, VESTS AND GEAR
**********************************************************************************/
blck_RifleSniper = [
"srifle_EBR_F","srifle_GM6_F","srifle_LRR_F","srifle_DMR_01_F"
];
blck_RifleAsault = [
"arifle_Katiba_F","arifle_Katiba_C_F","arifle_Katiba_GL_F","arifle_MXC_F","arifle_MX_F","arifle_MX_GL_F","arifle_MXM_F","arifle_SDAR_F",
"arifle_TRG21_F","arifle_TRG20_F","arifle_TRG21_GL_F","arifle_Mk20_F","arifle_Mk20C_F","arifle_Mk20_GL_F","arifle_Mk20_plain_F","arifle_Mk20C_plain_F","arifle_Mk20_GL_plain_F"
];
blck_RifleLMG = [
"LMG_Mk200_F","LMG_Zafir_F"
];
blck_RifleOther = [
"SMG_01_F","SMG_02_F"
];
blck_Pistols = [
"hgun_PDW2000_F","hgun_ACPC2_F","hgun_Rook40_F","hgun_P07_F","hgun_Pistol_heavy_01_F","hgun_Pistol_heavy_02_F","hgun_Pistol_Signal_F"
];
blck_DLC_MMG = [
"MMG_01_hex_F","MMG_02_sand_F","MMG_01_tan_F","MMG_02_black_F","MMG_02_camo_F"
];
blck_DLC_Sniper = [
"srifle_DMR_02_camo_F","srifle_DMR_02_F","srifle_DMR_02_sniper_F","srifle_DMR_03_F","srifle_DMR_03_tan_F","srifle_DMR_04_F","srifle_DMR_04_Tan_F","srifle_DMR_05_blk_F","srifle_DMR_05_hex_F","srifle_DMR_05_tan_F","srifle_DMR_06_camo_F","srifle_DMR_06_olive_F"
];
//This defines the random weapon to spawn on the AI
//https://community.bistudio.com/wiki/Arma_3_CfgWeapons_Weapons
blck_WeaponList_Orange = blck_RifleSniper + blck_RifleAsault + blck_RifleLMG + blck_DLC_Sniper + blck_DLC_MMG;
blck_WeaponList_Green = blck_RifleSniper + blck_RifleAsault +blck_RifleLMG + blck_DLC_MMG;
blck_WeaponList_Blue = blck_RifleOther + blck_RifleAsault +blck_RifleLMG;
blck_WeaponList_Red = blck_RifleOther + blck_RifleSniper + blck_RifleAsault + blck_RifleLMG;
blck_headgear = ["H_Shemag_khk","H_Shemag_olive","H_Shemag_tan","H_ShemagOpen_khk"]; blck_BanditHeadgear = ["H_Shemag_khk","H_Shemag_olive","H_Shemag_tan","H_ShemagOpen_khk"];
//This defines the skin list, some skins are disabled by default to permit players to have high visibility uniforms distinct from those of the AI.
blck_headgear = [
"H_Cap_blk",
"H_Cap_blk_Raven",
"H_Cap_blu",
"H_Cap_brn_SPECOPS",
"H_Cap_grn",
"H_Cap_headphones",
"H_Cap_khaki_specops_UK",
"H_Cap_oli",
"H_Cap_press",
"H_Cap_red",
"H_Cap_tan",
"H_Cap_tan_specops_US",
"H_Watchcap_blk",
"H_Watchcap_camo",
"H_Watchcap_khk",
"H_Watchcap_sgg",
"H_MilCap_blue",
"H_MilCap_dgtl",
"H_MilCap_mcamo",
"H_MilCap_ocamo",
"H_MilCap_oucamo",
"H_MilCap_rucamo",
"H_Bandanna_camo",
"H_Bandanna_cbr",
"H_Bandanna_gry",
"H_Bandanna_khk",
"H_Bandanna_khk_hs",
"H_Bandanna_mcamo",
"H_Bandanna_sgg",
"H_Bandanna_surfer",
"H_Booniehat_dgtl",
"H_Booniehat_dirty",
"H_Booniehat_grn",
"H_Booniehat_indp",
"H_Booniehat_khk",
"H_Booniehat_khk_hs",
"H_Booniehat_mcamo",
"H_Booniehat_tan",
"H_Hat_blue",
"H_Hat_brown",
"H_Hat_camo",
"H_Hat_checker",
"H_Hat_grey",
"H_Hat_tan",
"H_StrawHat",
"H_StrawHat_dark",
"H_Beret_02",
"H_Beret_blk",
"H_Beret_blk_POLICE",
"H_Beret_brn_SF",
"H_Beret_Colonel",
"H_Beret_grn",
"H_Beret_grn_SF",
"H_Beret_ocamo",
"H_Beret_red",
"H_Shemag_khk",
"H_Shemag_olive",
"H_Shemag_olive_hs",
"H_Shemag_tan",
"H_ShemagOpen_khk",
"H_ShemagOpen_tan",
"H_TurbanO_blk"
];
blck_helmets = [
"H_HelmetB",
"H_HelmetB_black",
"H_HelmetB_camo",
"H_HelmetB_desert",
"H_HelmetB_grass",
"H_HelmetB_light",
"H_HelmetB_light_black",
"H_HelmetB_light_desert",
"H_HelmetB_light_grass",
"H_HelmetB_light_sand",
"H_HelmetB_light_snakeskin",
"H_HelmetB_paint",
"H_HelmetB_plain_blk",
"H_HelmetB_sand",
"H_HelmetB_snakeskin",
"H_HelmetCrew_B",
"H_HelmetCrew_I",
"H_HelmetCrew_O",
"H_HelmetIA",
"H_HelmetIA_camo",
"H_HelmetIA_net",
"H_HelmetLeaderO_ocamo",
"H_HelmetLeaderO_oucamo",
"H_HelmetO_ocamo",
"H_HelmetO_oucamo",
"H_HelmetSpecB",
"H_HelmetSpecB_blk",
"H_HelmetSpecB_paint1",
"H_HelmetSpecB_paint2",
"H_HelmetSpecO_blk",
"H_HelmetSpecO_ocamo",
"H_CrewHelmetHeli_B",
"H_CrewHelmetHeli_I",
"H_CrewHelmetHeli_O",
"H_HelmetCrew_I",
"H_HelmetCrew_B",
"H_HelmetCrew_O",
"H_PilotHelmetHeli_B",
"H_PilotHelmetHeli_I",
"H_PilotHelmetHeli_O"
];
blck_headgearList = blck_headgear + blck_helmets;
//This defines the skin list, some skins are disabled by default to permit players to have high visibility uniforms distinct from those of the AI.
blck_SkinList = [
//https://community.bistudio.com/wiki/Arma_3_CfgWeapons_Equipment
"U_AntigonaBody",
"U_AttisBody",
"U_B_CombatUniform_mcam","U_B_CombatUniform_mcam_tshirt","U_B_CombatUniform_mcam_vest","U_B_CombatUniform_mcam_worn","U_B_CombatUniform_sgg","U_B_CombatUniform_sgg_tshirt","U_B_CombatUniform_sgg_vest","U_B_CombatUniform_wdl","U_B_CombatUniform_wdl_tshirt","U_B_CombatUniform_wdl_vest",
"U_B_CTRG_1","U_B_CTRG_2","U_B_CTRG_3",
"U_B_GhillieSuit",
"U_B_HeliPilotCoveralls","U_B_PilotCoveralls",
"U_B_SpecopsUniform_sgg",
"U_B_survival_uniform",
"U_B_Wetsuit",
//"U_BasicBody",
"U_BG_Guerilla1_1","U_BG_Guerilla2_1","U_BG_Guerilla2_2","U_BG_Guerilla2_3","U_BG_Guerilla3_1","U_BG_Guerilla3_2",
"U_BG_leader",
"U_C_Commoner_shorts","U_C_Commoner1_1","U_C_Commoner1_2","U_C_Commoner1_3","U_C_Commoner2_1","U_C_Commoner2_2","U_C_Commoner2_3",
"U_C_Farmer","U_C_Fisherman","U_C_FishermanOveralls","U_C_HunterBody_brn","U_C_HunterBody_grn",
//"U_C_Journalist",
"U_C_Novak",
//"U_C_Poloshirt_blue","U_C_Poloshirt_burgundy","U_C_Poloshirt_redwhite","U_C_Poloshirt_salmon","U_C_Poloshirt_stripped","U_C_Poloshirt_tricolour",
"U_C_Poor_1","U_C_Poor_2","U_C_Poor_shorts_1","U_C_Poor_shorts_2","U_C_PriestBody","U_C_Scavenger_1","U_C_Scavenger_2",
//"U_C_Scientist","U_C_ShirtSurfer_shorts","U_C_TeeSurfer_shorts_1","U_C_TeeSurfer_shorts_2",
"U_C_WorkerCoveralls","U_C_WorkerOveralls","U_Competitor",
"U_I_CombatUniform","U_I_CombatUniform_shortsleeve","U_I_CombatUniform_tshirt","U_I_G_resistanceLeader_F",
"U_I_G_Story_Protagonist_F",
"U_I_GhillieSuit",
"U_I_HeliPilotCoveralls",
"U_I_OfficerUniform",
"U_I_pilotCoveralls",
"U_I_Wetsuit",
"U_IG_Guerilla1_1","U_IG_Guerilla2_1","U_IG_Guerilla2_2","U_IG_Guerilla2_3","U_IG_Guerilla3_1","U_IG_Guerilla3_2",
"U_IG_leader",
"U_IG_Menelaos",
//"U_KerryBody",
//"U_MillerBody",
//"U_NikosAgedBody",
//"U_NikosBody",
"U_O_CombatUniform_ocamo","U_O_CombatUniform_oucamo",
"U_O_GhillieSuit",
"U_O_OfficerUniform_ocamo",
"U_O_PilotCoveralls",
"U_O_SpecopsUniform_blk",
"U_O_SpecopsUniform_ocamo",
"U_O_Wetsuit",
"U_OG_Guerilla1_1","U_OG_Guerilla2_1","U_OG_Guerilla2_2","U_OG_Guerilla2_3","U_OG_Guerilla3_1","U_OG_Guerilla3_2","U_OG_leader",
//"U_OI_Scientist",
//"U_OrestesBody",
"U_Rangemaster",
// DLC
"U_B_FullGhillie_ard","U_I_FullGhillie_ard","U_O_FullGhillie_ard","U_B_FullGhillie_sard","U_O_FullGhillie_sard","U_I_FullGhillie_sard","U_B_FullGhillie_lsh","U_O_FullGhillie_lsh","U_I_FullGhillie_lsh"
];
blck_vests = [
"V_1_EPOCH","V_2_EPOCH","V_3_EPOCH","V_4_EPOCH","V_5_EPOCH","V_6_EPOCH","V_7_EPOCH","V_8_EPOCH","V_9_EPOCH","V_10_EPOCH","V_11_EPOCH","V_12_EPOCH","V_13_EPOCH","V_14_EPOCH","V_15_EPOCH","V_16_EPOCH","V_17_EPOCH","V_18_EPOCH","V_19_EPOCH","V_20_EPOCH",
"V_21_EPOCH","V_22_EPOCH","V_23_EPOCH","V_24_EPOCH","V_25_EPOCH","V_26_EPOCH","V_27_EPOCH","V_28_EPOCH","V_29_EPOCH","V_30_EPOCH","V_31_EPOCH","V_32_EPOCH","V_33_EPOCH","V_34_EPOCH","V_35_EPOCH","V_36_EPOCH","V_37_EPOCH","V_38_EPOCH","V_39_EPOCH","V_40_EPOCH",
// DLC Vests
"V_PlateCarrierSpec_blk","V_PlateCarrierSpec_mtp","V_PlateCarrierGL_blk","V_PlateCarrierGL_mtp","V_PlateCarrierIAGL_oli"
];
//CraftingFood
blck_Meats=[
"SnakeCarcass_EPOCH","RabbitCarcass_EPOCH","ChickenCarcass_EPOCH","GoatCarcass_EPOCH","SheepCarcass_EPOCH"
];
blck_Drink = [
"WhiskeyNoodle","ItemSodaOrangeSherbet","ItemSodaPurple","ItemSodaMocha","ItemSodaBurst","ItemSodaRbull","FoodWalkNSons"
];
blck_Food = [
"FoodBioMeat","FoodMeeps","FoodSnooter","FoodWalkNSons","sardines_epoch","meatballs_epoch","scam_epoch","sweetcorn_epoch","honey_epoch","CookedSheep_EPOCH","CookedGoat_EPOCH","SnakeMeat_EPOCH",
"CookedRabbit_EPOCH","CookedChicken_EPOCH","ItemTrout","ItemSeaBass","ItemTuna","TacticalBacon"
];
blck_ConsumableItems = blck_Meats + blck_Drink + blck_Food;
blck_throwableExplosives = ["HandGrenade","MiniGrenade"];
blck_otherExplosives = ["1Rnd_HE_Grenade_shell","3Rnd_HE_Grenade_shell","DemoCharge_Remote_Mag","SatchelCharge_Remote_Mag"];
blck_explosives = blck_throwableExplosives + blck_otherExplosives;
blck_medicalItems = ["FAK"];
blck_specialItems = blck_throwableExplosives + blck_medicalItems;
blck_NVG = ["NVG_EPOCH"];
blck_epochValuables = ["class PartOreGold","cass PartOreSilver","class PartOre","class ItemGoldBar","class ItemSilverBar",
"class ItemGoldBar10oz","class ItemTopaz","class ItemOnyx","class ItemSapphire","class ItemAmethyst",
"class ItemEmerald","class ItemCitrine","class ItemRuby","class ItemQuartz","class ItemJade",
"class ItemGarnet","class ItemKiloHemp"];
blck_epochBuildingSupplies = ["class PartPlankPack","class CinderBlocks","class MortarBucket","class ItemScraps",
"class ItemCorrugated","class ItemCorrugatedLg","class ItemSolar","class ItemCables",
"class ItemBattery","class Pelt_EPOCH"];
/***************************************************************************************
DEFAULT CONTENTS OF LOOT CRATES FOR EACH MISSION
Note however that these configurations can be used in any way you like or replaced with mission-specific customized loot arrays
for examples of how you can do this see \Major\Compositions.sqf
***************************************************************************************/
// values are: number of things from the weapons, magazines, optics, materials(cinder etc), items (food etc) and backpacks arrays to add, respectively.
blck_lootCountsOrange = [8,32,8,30,16,1]; // Orange
blck_lootCountsGreen = [7,24,6,16,18,1]; // Green
blck_lootCountsRed = [5,16,4,10,6,1]; // Red
blck_lootCountsBlue = [4,12,3,6,6,1]; // Blue
blck_BoxLoot_Orange =
// Loot is grouped as [weapons],[magazines],[items] in order to be able to use the correct function to load the item into the crate later on.
// Each item consist of the following information ["ItemName",minNum, maxNum] where min is the smallest number added and min+max is the largest number added.
[
[// Weapons
["MultiGun","EnergyPackLg"],
["arifle_Katiba_F","30Rnd_65x39_caseless_green"],
["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"],
["arifle_Mk20_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_plain_F","30Rnd_556x45_Stanag"],
["arifle_Mk20C_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_plain_F","30Rnd_556x45_Stanag"],
["arifle_MX_F","30Rnd_65x39_caseless_mag"],
["arifle_MXC_F","30Rnd_65x39_caseless_mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag"],
["arifle_SDAR_F","20Rnd_556x45_UW_mag"],
["arifle_TRG20_F","30Rnd_556x45_Stanag"],
["m16_EPOCH","30Rnd_556x45_Stanag"],
["m16Red_EPOCH","30Rnd_556x45_Stanag"],
["M14_EPOCH","20Rnd_762x51_Mag"],
["M14Grn_EPOCH","20Rnd_762x51_Mag"],
["m4a3_EPOCH","30Rnd_556x45_Stanag"],
["SMG_02_F","30Rnd_9x21_Mag"],
["SMG_01_F","30Rnd_45ACP_Mag_SMG_01"],
["Hgun_PDW2000_F","30Rnd_9x21_Mag"],
["M14_EPOCH","20Rnd_762x51_Mag"],
["M14Grn_EPOCH","20Rnd_762x51_Mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["m107_EPOCH","5Rnd_127x108_Mag"],
["m107Tan_EPOCH","5Rnd_127x108_Mag"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["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_762x51_Box_Tracer"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["MMG_01_tan_F","150Rnd_93x64_Mag"],
["MMG_02_black_F","150Rnd_93x64_Mag"],
["MMG_02_camo_F","150Rnd_93x64_Mag"],
["MMG_02_sand_F","150Rnd_93x64_Mag"],
["srifle_DMR_02_camo_F","10Rnd_338_Mag"],
["srifle_DMR_02_F","10Rnd_338_Mag"],
["srifle_DMR_02_sniper_F","10Rnd_338_Mag"],
["srifle_DMR_03_F","10Rnd_338_Mag"],
["srifle_DMR_03_tan_F","10Rnd_338_Mag"],
["srifle_DMR_04_Tan_F","10Rnd_338_Mag"],
["srifle_DMR_05_hex_F","10Rnd_338_Mag"],
["srifle_DMR_05_tan_F","10Rnd_338_Mag"],
["srifle_DMR_06_camo_F","10Rnd_338_Mag"],
["srifle_DMR_04_F","10Rnd_127x54_Mag"],
["srifle_DMR_05_blk_F","10Rnd_93x64_DMR_05_Mag"],
["srifle_DMR_06_olive_F","20Rnd_762x51_Mag"]
],
[//Magazines
["3rnd_HE_Grenade_Shell",3,6],
["30Rnd_65x39_caseless_green",3,6],
["30Rnd_556x45_Stanag",3,6],
["30Rnd_45ACP_Mag_SMG_01",3,6],
["20Rnd_556x45_UW_mag",3,6],
["20Rnd_762x51_Mag",7,14],
["200Rnd_65x39_cased_Box",3,6],
["100Rnd_65x39_caseless_mag_Tracer",3,6],
["3rnd_HE_Grenade_Shell",1,3],
["HandGrenade",1,4],
["EnergyPack",2,5],
// Marksman Pack Ammo
["10Rnd_338_Mag",1,4],
["10Rnd_338_Mag",1,4],
["10Rnd_127x54_Mag" ,1,4],
["10Rnd_127x54_Mag",1,4],
["10Rnd_93x64_DMR_05_Mag" ,1,4],
["10Rnd_93x64_DMR_05_Mag" ,1,4]
],
[ // Optics
["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Holosight",1,3],["acc_flashlight",1,3],["acc_pointer_IR",1,3],
["optic_Arco",1,3],["optic_Hamr",1,3],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Aco_smg",1,3],["optic_ACO_grn_smg",1,3],
["optic_Holosight",1,3],["optic_Holosight_smg",1,3],["optic_SOS",1,3],["optic_MRCO",1,3],["optic_DMS",1,3],["optic_Yorris",1,3],
["optic_MRD",1,3],["optic_LRPS",1,3],["optic_NVS",1,3],["optic_Nightstalker",1,2],["optic_Nightstalker",1,2],["optic_Nightstalker",1,2],
["optic_tws",1,3],["optic_tws_mg",1,3],["muzzle_snds_H",1,3],["muzzle_snds_L",1,3],["muzzle_snds_M",1,3],["muzzle_snds_B",1,3],["muzzle_snds_H_MG",1,3],["muzzle_snds_acp",1,3],
["optic_AMS_khk",1,3],["optic_AMS_snd",1,3],["optic_KHS_blk",1,3],["optic_KHS_hex",1,3],["optic_KHS_old",1,3],["optic_KHS_tan",1,3]
],
[// Materials and supplies
["CinderBlocks",5,15],
["jerrycan_epoch",1,2],
//["lighter_epoch",0,1],
["CircuitParts",2,3],
["WoodLog_EPOCH",5,10],
["ItemCorrugatedLg",1,6],
["ItemCorrugated",3,10],
["ItemMixOil",1,2],
["MortarBucket",5,10],
["PartPlankPack",10,19],
["ItemLockbox",1,2],
["ItemSolar",1,2],
["ItemCables",1,2],
["ItemBattery",1,2],
["Pelt_EPOCH",1,2],
["EnergyPackLg",1,3]
],
[//Items
["Heal_EPOCH",1,2],["Defib_EPOCH",1,2],["Repair_EPOCH",1,4],["FAK",1,4],["VehicleRepair",1,3],["Rangefinder",1,3],["ItemJade",1,2],["ItemQuartz",1,2],["ItemRuby",1,2],["ItemSapphire",1,2],
["ItemKiloHemp",1,2],["ItemRuby",1,2],["ItemSilverBar",1,2],["ItemEmerald",1,2],["ItemTopaz",1,2],["ItemOnyx",1,2],["ItemSapphire",1,2],["ItemAmethyst",1,2],
["ItemSodaRbull",1,3],["ItemSodaOrangeSherbet",1,3],["ItemSodaPurple",1,3],["ItemSodaMocha",1,3],["ItemSodaBurst",1,3],
["CookedChicken_EPOCH",1,3],["CookedGoat_EPOCH",1,3],["CookedSheep_EPOCH",1,3],["FoodSnooter",1,3],["FoodMeeps",1,3],["FoodBioMeat",1,3],["ItemTuna",1,3],["ItemSeaBass",1,3],["ItemTrout",1,3]
],
[ // Backpacks
["B_AssaultPack_dgtl",1,2],["B_AssaultPack_khk",1,2],["B_AssaultPack_mcamo",1,2],["B_AssaultPack_ocamo",1,2],["B_AssaultPack_rgr",1,2],["B_AssaultPack_sgg",1,2],
["B_Carryall_cbr",1,2],["B_Carryall_khk",1,2],["B_Carryall_mcamo",1,2],["B_Carryall_ocamo",1,2],["B_Carryall_oli",1,2],["B_Carryall_oucamo",1,2],["B_FieldPack_blk",1,2],
["B_FieldPack_cbr",1,2],["B_FieldPack_khk",1,2],["B_FieldPack_ocamo",1,2],["B_FieldPack_oli",1,2],["B_FieldPack_oucamo",1,2],["B_Kitbag_cbr",1,2],["B_Kitbag_mcamo",1,2],
["B_Kitbag_rgr",1,2],["B_Kitbag_sgg",1,2],["B_Parachute",1,2],["B_TacticalPack_blk",1,2],["B_TacticalPack_mcamo",1,2],["B_TacticalPack_ocamo",1,2],["B_TacticalPack_oli",1,2],
["B_TacticalPack_rgr",1,2],["smallbackpack_red_epoch",1,2],["smallbackpack_green_epoch",1,2],["smallbackpack_teal_epoch",1,2],["smallbackpack_pink_epoch",1,2]
]
];
blck_BoxLoot_Green =
[
[// Weapons
// Format is ["Weapon Name","Magazine Name"],
["MultiGun","EnergyPackLg"],
["arifle_Katiba_F","30Rnd_65x39_caseless_green"],
["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"],
["arifle_Mk20_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_plain_F","30Rnd_556x45_Stanag"],
["arifle_Mk20C_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_plain_F","30Rnd_556x45_Stanag"],
["arifle_MX_F","30Rnd_65x39_caseless_mag"],
["arifle_MX_GL_F","30Rnd_65x39_caseless_mag"],
["arifle_MXC_F","30Rnd_65x39_caseless_mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag"],
["arifle_SDAR_F","20Rnd_556x45_UW_mag"],
["arifle_TRG20_F","30Rnd_556x45_Stanag"],
["m16_EPOCH","30Rnd_556x45_Stanag"],
["m16Red_EPOCH","30Rnd_556x45_Stanag"],
["M14_EPOCH","20Rnd_762x51_Mag"],
["M14Grn_EPOCH","20Rnd_762x51_Mag"],
["m4a3_EPOCH","30Rnd_556x45_Stanag"],
["SMG_02_F","30Rnd_9x21_Mag"],
["SMG_01_F","30Rnd_45ACP_Mag_SMG_01"],
["Hgun_PDW2000_F","30Rnd_9x21_Mag"],
["M14_EPOCH","20Rnd_762x51_Mag"],
["M14Grn_EPOCH","20Rnd_762x51_Mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["m107_EPOCH","5Rnd_127x108_Mag"],
["m107Tan_EPOCH","5Rnd_127x108_Mag"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["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_762x51_Box_Tracer"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["srifle_DMR_02_camo_F","10Rnd_338_Mag"],
["srifle_DMR_03_F","10Rnd_338_Mag"],
["srifle_DMR_04_Tan_F","10Rnd_338_Mag"],
["srifle_DMR_05_hex_F","10Rnd_338_Mag"],
["srifle_DMR_06_camo_F","10Rnd_338_Mag"]
],
[//Magazines
// Format is ["Magazine name, Minimum number to add, Maximum number to add],
["3rnd_HE_Grenade_Shell",2,4],
["30Rnd_65x39_caseless_green",3,6],
["30Rnd_556x45_Stanag",3,6],
["30Rnd_556x45_Stanag",3,6],
["30Rnd_45ACP_Mag_SMG_01",3,6],
["20Rnd_556x45_UW_mag",3,6],
["20Rnd_762x51_Mag",6,12],
["200Rnd_65x39_cased_Box",3,6],
["100Rnd_65x39_caseless_mag_Tracer",3,6],
["3rnd_HE_Grenade_Shell",1,3],
["HandGrenade",1,3],
["EnergyPack",2,5],
// Marksman Pack Ammo
["10Rnd_338_Mag",1,4],
["10Rnd_338_Mag",1,4],
["10Rnd_127x54_Mag" ,1,4],
["10Rnd_127x54_Mag",1,4],
["10Rnd_93x64_DMR_05_Mag" ,1,4],
["10Rnd_93x64_DMR_05_Mag" ,1,4]
],
[ // Optics
["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Holosight",1,3],["acc_flashlight",1,3],["acc_pointer_IR",1,3],
["optic_Arco",1,3],["optic_Hamr",1,3],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Aco_smg",1,3],["optic_ACO_grn_smg",1,3],
["optic_Holosight",1,3],["optic_Holosight_smg",1,3],["optic_SOS",1,3],["optic_MRCO",1,3],["optic_DMS",1,3],["optic_Yorris",1,3],
["optic_MRD",1,3],["optic_LRPS",1,3],["optic_NVS",1,3],["optic_Nightstalker",1,2],["optic_Nightstalker",1,2],["optic_Nightstalker",1,2],
["optic_tws",1,3],["optic_tws_mg",1,3],["muzzle_snds_H",1,3],["muzzle_snds_L",1,3],["muzzle_snds_M",1,3],["muzzle_snds_B",1,3],["muzzle_snds_H_MG",1,3],["muzzle_snds_acp",1,3],
["optic_AMS_khk",1,3],["optic_AMS_snd",1,3],["optic_KHS_blk",1,3],["optic_KHS_hex",1,3],["optic_KHS_old",1,3],["optic_KHS_tan",1,3]
],
[
["CinderBlocks",4,12],
["jerrycan_epoch",1,2],
["lighter_epoch",1,1],
["CircuitParts",2,5],
["WoodLog_EPOCH",10,20],
["ItemCorrugatedLg",1,3],
["ItemCorrugated",2,9],
["ItemMixOil",1,2],
["MortarBucket",3,6],
["PartPlankPack",10,12],
["ItemLockbox",1,3],
["ItemSolar",1,2],
["ItemCables",1,2],
["ItemBattery",1,2],
["Pelt_EPOCH",1,2],
["EnergyPackLg",1,3]
],
[//Items
// Format is ["Item name, Minimum number to add, Maximum number to add],
["Heal_EPOCH",1,2],["Defib_EPOCH",1,2],["Repair_EPOCH",1,2],["FAK",1,2],["FAK",1,2],["FAK",1,2],["FAK",1,2],["FAK",1,2],["FAK",1,2],["VehicleRepair",1,3],["Rangefinder",1,3],
["ItemKiloHemp",1,2],["ItemRuby",1,2],["ItemSilverBar",1,2],["ItemGoldBar10oz",1,2],
["ItemSodaRbull",1,3],["ItemSodaOrangeSherbet",1,3],["ItemSodaPurple",1,3],["ItemSodaMocha",1,3],["ItemSodaBurst",1,3],
["CookedChicken_EPOCH",1,3],["CookedGoat_EPOCH",1,3],["CookedSheep_EPOCH",1,3],["FoodSnooter",1,3],["FoodMeeps",1,3],["FoodBioMeat",1,3],["ItemTuna",1,3],["ItemSeaBass",1,3],["ItemTrout",1,3]
],
[ // Backpacks
["B_AssaultPack_dgtl",1,2],["B_AssaultPack_khk",1,2],["B_AssaultPack_mcamo",1,2],["B_AssaultPack_ocamo",1,2],["B_AssaultPack_rgr",1,2],["B_AssaultPack_sgg",1,2],
["B_Carryall_cbr",1,2],["B_Carryall_khk",1,2],["B_Carryall_mcamo",1,2],["B_Carryall_ocamo",1,2],["B_Carryall_oli",1,2],["B_Carryall_oucamo",1,2],["B_FieldPack_blk",1,2],
["B_FieldPack_cbr",1,2],["B_FieldPack_khk",1,2],["B_FieldPack_ocamo",1,2],["B_FieldPack_oli",1,2],["B_FieldPack_oucamo",1,2],["B_Kitbag_cbr",1,2],["B_Kitbag_mcamo",1,2],
["B_Kitbag_rgr",1,2],["B_Kitbag_sgg",1,2],["B_Parachute",1,2],["B_TacticalPack_blk",1,2],["B_TacticalPack_mcamo",1,2],["B_TacticalPack_ocamo",1,2],["B_TacticalPack_oli",1,2],
["B_TacticalPack_rgr",1,2],["smallbackpack_red_epoch",1,2],["smallbackpack_green_epoch",1,2],["smallbackpack_teal_epoch",1,2],["smallbackpack_pink_epoch",1,2]
]
];
blck_BoxLoot_Blue =
[
[// Weapons
["MultiGun","EnergyPackLg"],
["arifle_Katiba_F","30Rnd_65x39_caseless_green"],
["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"],
["arifle_Mk20_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_plain_F","30Rnd_556x45_Stanag"],
["arifle_Mk20C_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_plain_F","30Rnd_556x45_Stanag"],
["arifle_MX_F","30Rnd_65x39_caseless_mag"],
["arifle_MX_GL_F","30Rnd_65x39_caseless_mag"],
["arifle_MXC_F","30Rnd_65x39_caseless_mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag"],
["arifle_SDAR_F","20Rnd_556x45_UW_mag"],
["arifle_TRG20_F","30Rnd_556x45_Stanag"],
["m16_EPOCH","30Rnd_556x45_Stanag"],
["m16Red_EPOCH","30Rnd_556x45_Stanag"],
["M14_EPOCH","20Rnd_762x51_Mag"],
["M14Grn_EPOCH","20Rnd_762x51_Mag"],
["m4a3_EPOCH","30Rnd_556x45_Stanag"],
["SMG_02_F","30Rnd_9x21_Mag"],
["SMG_01_F","30Rnd_45ACP_Mag_SMG_01"],
["Hgun_PDW2000_F","30Rnd_9x21_Mag"],
["M14_EPOCH","20Rnd_762x51_Mag"],
["M14Grn_EPOCH","20Rnd_762x51_Mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["m107_EPOCH","5Rnd_127x108_Mag"],
["m107Tan_EPOCH","5Rnd_127x108_Mag"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["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_762x51_Box_Tracer"]
],
[//Magazines
["3rnd_HE_Grenade_Shell",1,2],
["30Rnd_65x39_caseless_green",3,6],
["30Rnd_556x45_Stanag",3,6],
["30Rnd_556x45_Stanag",3,6],
["30Rnd_45ACP_Mag_SMG_01",3,6],
["20Rnd_556x45_UW_mag",3,6],
["20Rnd_762x51_Mag",3,10],
["200Rnd_65x39_cased_Box",3,6],
["100Rnd_65x39_caseless_mag_Tracer",3,6],
["3rnd_HE_Grenade_Shell",1,4],
["HandGrenade",1,3],
["EnergyPack",2,5],
// Marksman Pack Ammo
["150Rnd_93x64_Mag",1,4],
["10Rnd_338_Mag",1,4],
["10Rnd_127x54_Mag" ,1,4],
["10Rnd_127x54_Mag",1,4],
["10Rnd_93x64_DMR_05_Mag" ,1,4]
],
[ // Optics
["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Holosight",1,3],["acc_flashlight",1,3],["acc_pointer_IR",1,3],
["optic_Arco",1,3],["optic_Hamr",1,3],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Aco_smg",1,3],["optic_ACO_grn_smg",1,3],
["optic_Holosight",1,3],["optic_Holosight_smg",1,3],["optic_SOS",1,3],["optic_MRCO",1,3],["optic_DMS",1,3],["optic_Yorris",1,3],
["optic_MRD",1,3],["optic_LRPS",1,3],["optic_NVS",1,3],["optic_Nightstalker",1,2],
["optic_tws",1,3],["optic_tws_mg",1,3],["muzzle_snds_H",1,3],["muzzle_snds_L",1,3],["muzzle_snds_M",1,3],["muzzle_snds_B",1,3],["muzzle_snds_H_MG",1,3],["muzzle_snds_acp",1,3],
["optic_AMS_khk",1,3],["optic_AMS_snd",1,3],["optic_KHS_blk",1,3],["optic_KHS_hex",1,3],["optic_KHS_old",1,3],["optic_KHS_tan",1,3]
],
[
["CinderBlocks",2,6],
["jerrycan_epoch",1,3],
["lighter_epoch",1,1],
["CircuitParts",2,3],
["WoodLog_EPOCH",10,20],
["ItemCorrugatedLg",0,4],
["ItemCorrugated",3,6],
["ItemMixOil",1,2],
["MortarBucket",1,8],
["PartPlankPack",10,12],
["ItemLockbox",1,2],
["EnergyPackLg",0,1]
],
[//Items
["Heal_EPOCH",1,2],["Defib_EPOCH",1,2],["Repair_EPOCH",1,2],["FAK",1,5],["VehicleRepair",1,5],
["ItemSodaRbull",1,3],["ItemSodaOrangeSherbet",1,3],["ItemSodaPurple",1,3],["ItemSodaMocha",1,3],["ItemSodaBurst",1,3],
["CookedChicken_EPOCH",1,3],["CookedGoat_EPOCH",1,3],["CookedSheep_EPOCH",1,3],["FoodSnooter",1,3],["FoodMeeps",1,3],["FoodBioMeat",1,3],["ItemTuna",1,3],["ItemSeaBass",1,3],["ItemTrout",1,3]
],
[ // Backpacks
["B_AssaultPack_dgtl",0,2],["B_AssaultPack_khk",0,2],["B_AssaultPack_mcamo",0,2],["B_AssaultPack_ocamo",0,2],["B_AssaultPack_rgr",0,2],["B_AssaultPack_sgg",0,2],
["B_Carryall_cbr",0,2],["B_Carryall_khk",0,2],["B_Carryall_mcamo",0,2],["B_Carryall_ocamo",0,2],["B_Carryall_oli",0,2],["B_Carryall_oucamo",0,2],["B_FieldPack_blk",0,2],
["B_FieldPack_cbr",0,2],["B_FieldPack_khk",0,2],["B_FieldPack_ocamo",0,2],["B_FieldPack_oli",0,2],["B_FieldPack_oucamo",0,2],["B_Kitbag_cbr",0,2],["B_Kitbag_mcamo",0,2],
["B_Kitbag_rgr",0,2],["B_Kitbag_sgg",0,2],["B_Parachute",0,2],["B_TacticalPack_blk",0,2],["B_TacticalPack_mcamo",0,2],["B_TacticalPack_ocamo",0,2],["B_TacticalPack_oli",0,2],
["B_TacticalPack_rgr",0,2],["smallbackpack_red_epoch",0,2],["smallbackpack_green_epoch",0,2],["smallbackpack_teal_epoch",0,2],["smallbackpack_pink_epoch",0,2]
]
];
blck_BoxLoot_Red =
[
[// Weapons
["MultiGun","EnergyPackLg"],
["arifle_Katiba_F","30Rnd_65x39_caseless_green"],
["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"],
["arifle_Mk20_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_plain_F","30Rnd_556x45_Stanag"],
["arifle_Mk20C_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_plain_F","30Rnd_556x45_Stanag"],
["arifle_MX_F","30Rnd_65x39_caseless_mag"],
["arifle_MX_GL_F","30Rnd_65x39_caseless_mag"],
["arifle_MX_SW_Black_Hamr_pointer_F","100Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXC_F","30Rnd_65x39_caseless_mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag"],
["arifle_SDAR_F","20Rnd_556x45_UW_mag"],
["arifle_TRG20_F","30Rnd_556x45_Stanag"],
["m16_EPOCH","30Rnd_556x45_Stanag"],
["m16Red_EPOCH","30Rnd_556x45_Stanag"],
["M14_EPOCH","20Rnd_762x51_Mag"],
["M14Grn_EPOCH","20Rnd_762x51_Mag"],
["m4a3_EPOCH","30Rnd_556x45_Stanag"],
["SMG_02_F","30Rnd_9x21_Mag"],
["SMG_01_F","30Rnd_45ACP_Mag_SMG_01"],
["Hgun_PDW2000_F","30Rnd_9x21_Mag"],
["M14_EPOCH","20Rnd_762x51_Mag"],
["M14Grn_EPOCH","20Rnd_762x51_Mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["m107_EPOCH","5Rnd_127x108_Mag"],
["m107Tan_EPOCH","5Rnd_127x108_Mag"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["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_762x51_Box_Tracer"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["srifle_DMR_04_Tan_F","10Rnd_338_Mag"],
["srifle_DMR_06_camo_F","10Rnd_338_Mag"]
],
[//Magazines
["3rnd_HE_Grenade_Shell",1,5],["30Rnd_65x39_caseless_green",3,6],["30Rnd_556x45_Stanag",3,6],["30Rnd_556x45_Stanag",3,6],["30Rnd_45ACP_Mag_SMG_01",3,6],["20Rnd_556x45_UW_mag",3,6],
["10Rnd_762x51_Mag",3,6],["20Rnd_762x51_Mag",3,7],["200Rnd_65x39_cased_Box",3,6],["100Rnd_65x39_caseless_mag_Tracer",3,6],
["3rnd_HE_Grenade_Shell",1,2],["HandGrenade",1,3],["EnergyPack",2,5],
// Marksman Pack Ammo
["150Rnd_93x64_Mag",1,4],
["10Rnd_338_Mag",1,4],
["10Rnd_127x54_Mag" ,1,4],
["10Rnd_127x54_Mag",1,4],
["10Rnd_93x64_DMR_05_Mag" ,1,4]
],
[ // Optics
["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Holosight",1,3],["acc_flashlight",1,3],["acc_pointer_IR",1,3],
["optic_Arco",1,3],["optic_Hamr",1,3],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Aco_smg",1,3],["optic_ACO_grn_smg",1,3],
["optic_Holosight",1,3],["optic_Holosight_smg",1,3],["optic_SOS",1,3],["optic_MRCO",1,3],["optic_DMS",1,3],["optic_Yorris",1,3],
["optic_MRD",1,3],["optic_LRPS",1,3],["optic_NVS",1,3],["optic_Nightstalker",1,2],
["optic_tws",1,3],["optic_tws_mg",1,3],["muzzle_snds_H",1,3],["muzzle_snds_L",1,3],["muzzle_snds_M",1,3],["muzzle_snds_B",1,3],["muzzle_snds_H_MG",1,3],["muzzle_snds_acp",1,3],
["optic_AMS_khk",1,3],["optic_KHS_blk",1,3],["optic_KHS_hex",1,3],["optic_KHS_old",1,3],["optic_KHS_tan",1,3]
],
[
["CinderBlocks",2,7],
["jerrycan_epoch",1,3],
["lighter_epoch",1,1],
["CircuitParts",2,6],
["WoodLog_EPOCH",10,20],
["ItemCorrugatedLg",0,5],
["ItemCorrugated",3,7],
["ItemMixOil",1,2],
["MortarBucket",2,5],
["PartPlankPack",10,12],
["ItemLockbox",1,2],
["EnergyPackLg",0,1]
],
[//Items
["Heal_EPOCH",1,2],["Defib_EPOCH",1,2],["Repair_EPOCH",1,2],["FAK",1,2],["VehicleRepair",1,3],
["ItemSodaRbull",1,3],["ItemSodaOrangeSherbet",1,3],["ItemSodaPurple",1,3],["ItemSodaMocha",1,3],["ItemSodaBurst",1,3],
["CookedChicken_EPOCH",1,3],["CookedGoat_EPOCH",1,3],["CookedSheep_EPOCH",1,3],["FoodSnooter",1,3],["FoodMeeps",1,3],["FoodBioMeat",1,3],["ItemTuna",1,3],["ItemSeaBass",1,3],["ItemTrout",1,3]
],
[ // Backpacks
["B_AssaultPack_dgtl",0,2],["B_AssaultPack_khk",0,2],["B_AssaultPack_mcamo",0,2],["B_AssaultPack_ocamo",0,2],["B_AssaultPack_rgr",0,2],["B_AssaultPack_sgg",0,2],
["B_Carryall_cbr",0,2],["B_Carryall_khk",0,2],["B_Carryall_mcamo",0,2],["B_Carryall_ocamo",0,2],["B_Carryall_oli",0,2],["B_Carryall_oucamo",0,2],["B_FieldPack_blk",0,2],
["B_FieldPack_cbr",0,2],["B_FieldPack_khk",0,2],["B_FieldPack_ocamo",0,2],["B_FieldPack_oli",0,2],["B_FieldPack_oucamo",0,2],["B_Kitbag_cbr",0,2],["B_Kitbag_mcamo",0,2],
["B_Kitbag_rgr",0,2],["B_Kitbag_sgg",0,2],["B_Parachute",0,2],["B_TacticalPack_blk",0,2],["B_TacticalPack_mcamo",0,2],["B_TacticalPack_ocamo",0,2],["B_TacticalPack_oli",0,2],
["B_TacticalPack_rgr",0,2],["smallbackpack_red_epoch",0,2],["smallbackpack_green_epoch",0,2],["smallbackpack_teal_epoch",0,2],["smallbackpack_pink_epoch",0,2]
]
];
// Time the marker remains after completing the mission in seconds - experimental not yet implemented
blck_crateTypes = ["Box_FIA_Ammo_F","Box_FIA_Support_F","Box_FIA_Wps_F","I_SupplyCrate_F","Box_NATO_AmmoVeh_F","Box_East_AmmoVeh_F","IG_supplyCrate_F","Box_NATO_Wps_F","I_CargoNet_01_ammo_F","O_CargoNet_01_ammo_F","B_CargoNet_01_ammo_F"]; // Default crate type.
diag_log "[blckeagls] Configurations for Epoch Loaded";
blck_configsLoaded = true;

View File

@ -0,0 +1,882 @@
/*
AI Mission Compiled by blckeagls @ Zombieville.net
Further modified by Ghostrider -
This file contains most constants that define mission parameters, AI behavior and loot for mission system.
Last modified 8/1/15
*/
blck_configsLoaded = false;
/**************************************************************
BLACKLIST LOCATIONS
**************************************************************/
// if true then missions will not spawn within 1000 m of spawn points for Altis, Bornholm, Cherno, Esseker or stratis.
blck_blacklistSpawns = true;
// list of locations that are protected against mission spawns
blck_locationBlackList = [
//Add location as [xpos,ypos,0],minimumDistance],
// Note that there should not be a comma after the last item in this table
[[0,0,0],0]
];
/***********************************************************
GENERAL MISSION SYSTEM CONFIGURATION
***********************************************************/
// MISSION MARKER CONFIGURATION
// blck_labelMapMarkers: Determines if when the mission composition provides text labels, map markers with have a text label indicating the mission type
//When set to true,"arrow", text will be to the right of an arrow below the mission marker.
// When set to true,"dot", ext will be to the right of a black dot at the center the mission marker.
blck_labelMapMarkers = [true,"center"];
blck_preciseMapMarkers = true; // Map markers are/are not centered at the loot crate
// Options to spawn a smoking wreck near the mission. When the first parameter is true, a wreck or junk pile will be spawned.
// It's position can be either "center" or "random". smoking wreck will be spawned at a random location between 15 and 50 m from the mission.
blck_SmokeAtMissions = [false,"random"]; // set to [false,"anything here"] to disable this function altogether.
blck_useSignalEnd = true; // When true a smoke grenade will appear at the loot crate for 2 min after mission completion.
// Loot Crates
//blck_missionCrateTypes = ["Box_NATO_Wps_F","Box_FIA_Ammo_F","Box_FIA_Support_F","Box_FIA_Wps_F","I_SupplyCrate_F","Box_IND_AmmoVeh_F","Box_NATO_AmmoVeh_F","Box_East_AmmoVeh_F"];
// PLAYER PENALTIES
blck_RunGear = true; // When set to true, AI that have been run over will ve stripped of gear, and the vehicle will be given blck_RunGearDamage of damage.
blck_RunGearDamage = 0.2; // Damage applied to player vehicle for each AI run over
blck_VK_Gear = true; // When set to true, AI that have been killed by a player in a vehicle in the list of forbidden vehicles or using a forbiden gun will be stripped of gear and the vehicle will be given blck_RunGearDamage of damage
blck_VK_RunoverDamage = true; // when the AI was run over blck_RunGearDamage of damage will be applied to the killer's vehicle.
blck_VK_GunnerDamage = true; // when the AI was killed by a gunner on a vehicle that is is in the list of forbidden vehicles, blck_RunGearDamage of damage will be applied to the killer's vehicle each time an AI is killed with a vehicle's gun.
blck_forbidenVehicles = ["B_MRAP_01_hmg_F","O_MRAP_02_hmg_F","Exile_Car_BRDM2_HQ","Exile_Car_HMMWV_M134_Green","Exile_Car_HMMWV_M134_Desert","Exile_Car_HMMWV_M2_Green","Exile_Car_HMMWV_M2_Desert","Exile_Car_ProwlerLight","Exile_Car_BTR40_MG_Green","Exile_Car_BTR40_MG_Camo"]; // Add any vehicles for which you wish to forbid vehicle kills
// For a listing of the guns mounted on various land vehicles see the following link: https://community.bistudio.com/wiki/Arma_3_CfgWeapons_Vehicle_Weapons
blck_forbidenVehicleGuns = ["LMG_RCWS","LMG_M200","HMG_127","HMG_127_APC","HMG_M2","HMG_NSVT","GMG_40mm","GMG_UGV_40mm","autocannon_40mm_CTWS","autocannon_30mm_CTWS","autocannon_35mm","LMG_coax","autocannon_30mm","DShKM","DSHKM","HMG_127_LSV_01"]; // Add any vehicles for which you wish to forbid vehicle kills, o
// GLOBAL MISSION PARAMETERS
blck_useMines = false; // when true mines are spawned around the mission area. these are cleaned up when a player reaches the crate.
blck_useVehiclePatrols = true; // When true vehicles will be spawned at missions and will patrol the mission area.
blck_killEmptyAIVehicles = false; // when true, the AI vehicle will be extensively damaged once all AI have gotten out.
blck_AIPatrolVehicles = ["Exile_Car_Offroad_Armed_Guerilla01","Exile_Car_Offroad_Armed_Guerilla02","Exile_Car_HMMWV_M2_Green","Exile_Car_HMMWV_M2_Desert","Exile_Car_BTR40_MG_Green","Exile_Car_BTR40_MG_Camo"]; // Type of vehicle spawned to defend AI bases
//Set to -1 to disable. Values of 2 or more force the mission spawner to spawn copies of that mission.
blck_enableOrangeMissions = 1;
blck_enableGreenMissions = 1;
blck_enableRedMissions = 1;
blck_enableBlueMissions = -1;
blck_enableHunterMissions = 2;
blck_enableScoutsMissions = 2;
// AI VEHICLE PATROL PARAMETERS
//Defines how many AI Vehicles to spawn. Set this to -1 to disable spawning of static weapons or vehicles. To discourage players runniing with with vehicles, spawn more B_GMG_01_high
blck_SpawnVeh_Orange = 4; // Number of static weapons at Orange Missions
blck_SpawnVeh_Green = 3; // Number of static weapons at Green Missions
blck_SpawnVeh_Blue = -1; // Number of static weapons at Blue Missions
blck_SpawnVeh_Red = 1; // Number of static weapons at Red Missions
// AI STATIC WEAPON PARAMETERS
blck_useStatic = true; // When true, AI will man static weapons spawned 20-30 meters from the mission center. These are very effective against most vehicles
blck_staticWeapons = ["B_HMG_01_high_F"/*,"B_GMG_01_high_F","O_static_AT_F"*/]; // [0.50 cal, grenade launcher, AT Launcher]
// Defines how many static weapons to spawn. Set this to -1 to disable spawning
blck_SpawnEmplaced_Orange = 3; // Number of static weapons at Orange Missions
blck_SpawnEmplaced_Green = 3; // Number of static weapons at Green Missions
blck_SpawnEmplaced_Blue = 1; // Number of static weapons at Blue Missions
blck_SpawnEmplaced_Red = 2; // Number of static weapons at Red Missions
// AI paratrooper reinforcement paramters
//blck_AIHelis = ["B_Heli_Light_01_armed_F","B_Heli_Transport_01_camo_F","B_Heli_Transport_03_F"];
blck_reinforcementsOrange = [0,5,0,0]; // Chance of reinforcements, number of reinforcements, Chance of reinforcing heli patrols, chance of dropping supplies for the reinforcements
blck_reinforcementsGreen = [0,4,0,0];
blck_reinforcementsRed = [0,3,0,0];
blck_reinforcementsBlue = [0,2,0.0,0];
// MISSION TIMERS
// Reduce to 1 sec for immediate spawns, or longer if you wish to space the missions out
blck_TMin_Orange = 250;
blck_TMin_Green = 200;
blck_TMin_Blue = 120;
blck_TMin_Red = 150;
blck_TMin_Hunter = 120;
blck_TMin_Scouts = 115;
blck_TMin_Crashes = 115;
//Maximum Spawn time between missions in seconds
blck_TMax_Orange = 360;
blck_TMax_Green = 300;
blck_TMax_Blue = 200;
blck_TMax_Red = 250;
blck_TMax_Hunter = 200;
blck_TMax_Scouts = 200;
blck_TMax_Crashes = 200;
blck_MissionTimout = 40*60; // 40 min
// Define the maximum number of crash sites on the map at any one time
blck_maxCrashSites = 3; // recommended settings: 3 for Altis, 2 for Tanoa, 1 for smaller maps. Set to -1 to disable
/****************************************************************
GENERAL AI SETTINGS
****************************************************************/
blck_combatMode = "RED"; // Change this to "YELLOW" if the AI wander too far from missions for your tastes.
blck_groupFormation = "WEDGE"; // Possibilities include "WEDGE","VEE","FILE","DIAMOND"
blck_AI_Side = EAST;
blck_ModType = "Exile";
blck_chanceBackpack = 0.3; // Chance AI will be spawned with a backpack
blck_useNVG = true; // When true, AI will be spawned with NVG if is dark
blck_useLaunchers = false; // When true, some AI will be spawned with RPGs; they do not however fire on vehicles for some reason so I recommend this be set to false for now
//blck_launcherTypes = ["launch_NLAW_F","launch_RPG32_F","launch_B_Titan_F","launch_I_Titan_F","launch_O_Titan_F","launch_B_Titan_short_F","launch_I_Titan_short_F","launch_O_Titan_short_F"];
blck_launcherTypes = ["launch_RPG32_F"];
blck_chanceAIBackpack = 0.33; // the chance that AI will be spawned with a backpack from the list below.
blck_backpack = [
"B_AssaultPack_blk",
"B_AssaultPack_cbr",
"B_AssaultPack_dgtl",
"B_AssaultPack_khk",
"B_AssaultPack_mcamo",
"B_AssaultPack_rgr",
"B_AssaultPack_sgg",
"B_Bergen_blk",
"B_Bergen_mcamo",
"B_Bergen_rgr",
"B_Bergen_sgg",
"B_Carryall_cbr",
"B_Carryall_khk",
"B_Carryall_mcamo",
"B_Carryall_ocamo",
"B_Carryall_oli",
"B_Carryall_oucamo",
"B_FieldPack_blk",
"B_FieldPack_cbr",
"B_FieldPack_ocamo",
"B_FieldPack_oucamo",
"B_HuntingBackpack",
"B_Kitbag_cbr",
"B_Kitbag_mcamo",
"B_Kitbag_sgg",
"B_OutdoorPack_blk",
"B_OutdoorPack_blu",
"B_OutdoorPack_tan",
"B_TacticalPack_blk",
"B_TacticalPack_mcamo",
"B_TacticalPack_ocamo",
"B_TacticalPack_oli",
"B_TacticalPack_rgr"
];
blck_launchersPerGroup = 1; // Defines the number of AI per group spawned with a launcher
blck_launcherCleanup = true;// When true, launchers and launcher ammo are removed from dead AI.
//This defines how long after an AI dies that it's body disappears.
blck_bodyCleanUpTimer = 1200; // time in seconds after which dead AI bodies are deleted
// Each time an AI is killed, the location of the killer will be revealed to all AI within this range of the killed AI, set to -1 to disable
// values are ordered as follows [blue, red, green, orange];
blck_AliveAICleanUpTime = 900; // Time after mission completion at which any remaining live AI are deleted.
blck_cleanupCompositionTimer = 1200;
blck_AIAlertDistance = [150,225,425,550];
// How precisely player locations will be revealed to AI after an AI kill
// values are ordered as follows [blue, red, green, orange];
blck_AIIntelligence = [0.5, 1, 2, 4];
/***************************************************************
MISSION TYPE SPECIFIC AI SETTINGS
**************************************************************/
//This defines the skill, minimum/Maximum number of AI and how many AI groups are spawned for each mission type
// Orange Missions
blck_MinAI_Orange = 20;
blck_MaxAI_Orange = 25;
blck_AIGrps_Orange = 6;
blck_SkillsOrange = [
["aimingAccuracy",0.4],["aimingShake",0.7],["aimingSpeed",0.4],["endurance",1.00],["spotDistance",0.7],["spotTime",0.7],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]
];
// Green Missions
blck_MinAI_Green = 16;
blck_MaxAI_Green = 21;
blck_AIGrps_Green = 5;
blck_SkillsGreen = [
["aimingAccuracy",0.25],["aimingShake",0.5],["aimingSpeed",0.4],["endurance",0.9],["spotDistance",0.6],["spotTime",0.6],["courage",85],["reloadSpeed",0.75],["commanding",0.9],["general",0.75]
];
// Red Missions
// Red Missions
blck_MinAI_Red = 12;
blck_MaxAI_Red = 15;
blck_AIGrps_Red = 3;
blck_SkillsRed = [
["aimingAccuracy",0.16],["aimingShake",0.3],["aimingSpeed",0.3],["endurance",0.60],["spotDistance",0.5],["spotTime",0.5],["courage",0.70],["reloadSpeed",0.70],["commanding",0.8],["general",0.70]
];
// Blue Missions
blck_MinAI_Blue = 8;
blck_MaxAI_Blue = 12;
blck_AIGrps_Blue = 2;
blck_SkillsBlue = [
["aimingAccuracy",0.10],["aimingShake",0.2],["aimingSpeed",0.55],["endurance",0.50],["spotDistance",0.65],["spotTime",0.80],["courage",0.60],["reloadSpeed",0.60],["commanding",0.7],["general",0.60]
];
/*********************************************************************************
AI WEAPONS, UNIFORMS, VESTS AND GEAR
**********************************************************************************/
blck_RifleSniper = [
"srifle_EBR_F","srifle_GM6_F","srifle_LRR_F","srifle_DMR_01_F"
];
blck_RifleAsault = [
"arifle_Katiba_F","arifle_Katiba_C_F","arifle_Katiba_GL_F","arifle_MXC_F","arifle_MX_F","arifle_MX_GL_F","arifle_MXM_F","arifle_SDAR_F",
"arifle_TRG21_F","arifle_TRG20_F","arifle_TRG21_GL_F","arifle_Mk20_F","arifle_Mk20C_F","arifle_Mk20_GL_F","arifle_Mk20_plain_F","arifle_Mk20C_plain_F","arifle_Mk20_GL_plain_F"
];
blck_RifleLMG = [
"LMG_Mk200_F","LMG_Zafir_F"
];
blck_RifleOther = [
"SMG_01_F","SMG_02_F"
];
blck_Pistols = [
"hgun_PDW2000_F","hgun_ACPC2_F","hgun_Rook40_F","hgun_P07_F","hgun_Pistol_heavy_01_F","hgun_Pistol_heavy_02_F","hgun_Pistol_Signal_F"
];
blck_DLC_MMG = [
"MMG_01_hex_F","MMG_02_sand_F","MMG_01_tan_F","MMG_02_black_F","MMG_02_camo_F"
];
blck_DLC_Sniper = [
"srifle_DMR_02_camo_F","srifle_DMR_02_F","srifle_DMR_02_sniper_F","srifle_DMR_03_F","srifle_DMR_03_tan_F","srifle_DMR_04_F","srifle_DMR_04_Tan_F","srifle_DMR_05_blk_F","srifle_DMR_05_hex_F","srifle_DMR_05_tan_F","srifle_DMR_06_camo_F","srifle_DMR_06_olive_F"
];
//This defines the random weapon to spawn on the AI
//https://community.bistudio.com/wiki/Arma_3_CfgWeapons_Weapons
blck_WeaponList_Orange = blck_RifleSniper + blck_RifleAsault + blck_RifleLMG + blck_DLC_Sniper + blck_DLC_MMG;
blck_WeaponList_Green = blck_RifleSniper + blck_RifleAsault +blck_RifleLMG + blck_DLC_MMG;
blck_WeaponList_Blue = blck_RifleOther + blck_RifleAsault +blck_RifleLMG;
blck_WeaponList_Red = blck_RifleOther + blck_RifleSniper + blck_RifleAsault + blck_RifleLMG;
blck_tools = ["Exile_Item_Matches","Exile_Item_CookingPot","Exile_Melee_Axe","Exile_Item_CanOpener","Exile_Item_Handsaw","Exile_Item_Pliers"];
blck_buildingMaterials = ["Exile_Item_ExtensionCord","Exile_Item_JunkMetal","Exile_Item_LightBulb","Exile_Item_MetalBoard","Exile_Item_MetalPole","Exile_Item_Cement","Exile_Item_Sand"];
blck_BanditHeadgear = ["H_Shemag_khk","H_Shemag_olive","H_Shemag_tan","H_ShemagOpen_khk"];
//This defines the skin list, some skins are disabled by default to permit players to have high visibility uniforms distinct from those of the AI.
blck_headgear = [
"H_Cap_blk",
"H_Cap_blk_Raven",
"H_Cap_blu",
"H_Cap_brn_SPECOPS",
"H_Cap_grn",
"H_Cap_headphones",
"H_Cap_khaki_specops_UK",
"H_Cap_oli",
"H_Cap_press",
"H_Cap_red",
"H_Cap_tan",
"H_Cap_tan_specops_US",
"H_Watchcap_blk",
"H_Watchcap_camo",
"H_Watchcap_khk",
"H_Watchcap_sgg",
"H_MilCap_blue",
"H_MilCap_dgtl",
"H_MilCap_mcamo",
"H_MilCap_ocamo",
"H_MilCap_oucamo",
"H_MilCap_rucamo",
"H_Bandanna_camo",
"H_Bandanna_cbr",
"H_Bandanna_gry",
"H_Bandanna_khk",
"H_Bandanna_khk_hs",
"H_Bandanna_mcamo",
"H_Bandanna_sgg",
"H_Bandanna_surfer",
"H_Booniehat_dgtl",
"H_Booniehat_dirty",
"H_Booniehat_grn",
"H_Booniehat_indp",
"H_Booniehat_khk",
"H_Booniehat_khk_hs",
"H_Booniehat_mcamo",
"H_Booniehat_tan",
"H_Hat_blue",
"H_Hat_brown",
"H_Hat_camo",
"H_Hat_checker",
"H_Hat_grey",
"H_Hat_tan",
"H_StrawHat",
"H_StrawHat_dark",
"H_Beret_02",
"H_Beret_blk",
"H_Beret_blk_POLICE",
"H_Beret_brn_SF",
"H_Beret_Colonel",
"H_Beret_grn",
"H_Beret_grn_SF",
"H_Beret_ocamo",
"H_Beret_red",
"H_Shemag_khk",
"H_Shemag_olive",
"H_Shemag_olive_hs",
"H_Shemag_tan",
"H_ShemagOpen_khk",
"H_ShemagOpen_tan",
"H_TurbanO_blk"
];
blck_helmets = [
"H_HelmetB",
"H_HelmetB_black",
"H_HelmetB_camo",
"H_HelmetB_desert",
"H_HelmetB_grass",
"H_HelmetB_light",
"H_HelmetB_light_black",
"H_HelmetB_light_desert",
"H_HelmetB_light_grass",
"H_HelmetB_light_sand",
"H_HelmetB_light_snakeskin",
"H_HelmetB_paint",
"H_HelmetB_plain_blk",
"H_HelmetB_sand",
"H_HelmetB_snakeskin",
"H_HelmetCrew_B",
"H_HelmetCrew_I",
"H_HelmetCrew_O",
"H_HelmetIA",
"H_HelmetIA_camo",
"H_HelmetIA_net",
"H_HelmetLeaderO_ocamo",
"H_HelmetLeaderO_oucamo",
"H_HelmetO_ocamo",
"H_HelmetO_oucamo",
"H_HelmetSpecB",
"H_HelmetSpecB_blk",
"H_HelmetSpecB_paint1",
"H_HelmetSpecB_paint2",
"H_HelmetSpecO_blk",
"H_HelmetSpecO_ocamo",
"H_CrewHelmetHeli_B",
"H_CrewHelmetHeli_I",
"H_CrewHelmetHeli_O",
"H_HelmetCrew_I",
"H_HelmetCrew_B",
"H_HelmetCrew_O",
"H_PilotHelmetHeli_B",
"H_PilotHelmetHeli_I",
"H_PilotHelmetHeli_O"
];
blck_headgearList = blck_headgear + blck_helmets;
blck_SkinList = [
//https://community.bistudio.com/wiki/Arma_3_CfgWeapons_Equipment
"U_C_Journalist",
"U_C_Poloshirt_blue",
"U_C_Poloshirt_burgundy",
"U_C_Poloshirt_salmon",
"U_C_Poloshirt_stripped",
"U_C_Poloshirt_tricolour",
"U_C_Poor_1",
"U_C_Poor_2",
"U_C_Poor_shorts_1",
"U_C_Scientist",
"U_OrestesBody",
"U_Rangemaster",
"U_NikosAgedBody",
"U_NikosBody",
"U_Competitor",
"U_B_CombatUniform_mcam",
"U_B_CombatUniform_mcam_tshirt",
"U_B_CombatUniform_mcam_vest",
"U_B_CombatUniform_mcam_worn",
"U_B_CTRG_1",
"U_B_CTRG_2",
"U_B_CTRG_3",
"U_I_CombatUniform",
"U_I_CombatUniform_shortsleeve",
"U_I_CombatUniform_tshirt",
"U_I_OfficerUniform",
"U_O_CombatUniform_ocamo",
"U_O_CombatUniform_oucamo",
"U_O_OfficerUniform_ocamo",
"U_B_SpecopsUniform_sgg",
"U_O_SpecopsUniform_blk",
"U_O_SpecopsUniform_ocamo",
"U_I_G_Story_Protagonist_F",
"U_C_HunterBody_grn",
"U_IG_Guerilla1_1",
"U_IG_Guerilla2_1",
"U_IG_Guerilla2_2",
"U_IG_Guerilla2_3",
"U_IG_Guerilla3_1",
"U_BG_Guerilla2_1",
"U_IG_Guerilla3_2",
"U_BG_Guerrilla_6_1",
"U_BG_Guerilla1_1",
"U_BG_Guerilla2_2",
"U_BG_Guerilla2_3",
"U_BG_Guerilla3_1",
"U_BG_leader",
"U_IG_leader",
"U_I_G_resistanceLeader_F",
"U_B_FullGhillie_ard",
"U_B_FullGhillie_lsh",
"U_B_FullGhillie_sard",
"U_B_GhillieSuit",
"U_I_FullGhillie_ard",
"U_I_FullGhillie_lsh",
"U_I_FullGhillie_sard",
"U_I_GhillieSuit",
"U_O_FullGhillie_ard",
"U_O_FullGhillie_lsh",
"U_O_FullGhillie_sard",
"U_O_GhillieSuit",
"U_I_Wetsuit",
"U_O_Wetsuit",
"U_B_Wetsuit",
"U_B_survival_uniform",
"U_B_HeliPilotCoveralls",
"U_I_HeliPilotCoveralls",
"U_B_PilotCoveralls",
"U_I_pilotCoveralls",
"U_O_PilotCoveralls"
];
blck_vests = [
"V_Press_F",
"V_Rangemaster_belt",
"V_TacVest_blk",
"V_TacVest_blk_POLICE",
"V_TacVest_brn",
"V_TacVest_camo",
"V_TacVest_khk",
"V_TacVest_oli",
"V_TacVestCamo_khk",
"V_TacVestIR_blk",
"V_I_G_resistanceLeader_F",
"V_BandollierB_blk",
"V_BandollierB_cbr",
"V_BandollierB_khk",
"V_BandollierB_oli",
"V_BandollierB_rgr",
"V_Chestrig_blk",
"V_Chestrig_khk",
"V_Chestrig_oli",
"V_Chestrig_rgr",
"V_HarnessO_brn",
"V_HarnessO_gry",
"V_HarnessOGL_brn",
"V_HarnessOGL_gry",
"V_HarnessOSpec_brn",
"V_HarnessOSpec_gry",
"V_PlateCarrier1_blk",
"V_PlateCarrier1_rgr",
"V_PlateCarrier2_rgr",
"V_PlateCarrier3_rgr",
"V_PlateCarrierGL_blk",
"V_PlateCarrierGL_mtp",
"V_PlateCarrierGL_rgr",
"V_PlateCarrierH_CTRG",
"V_PlateCarrierIA1_dgtl",
"V_PlateCarrierIA2_dgtl",
"V_PlateCarrierIAGL_dgtl",
"V_PlateCarrierIAGL_oli",
"V_PlateCarrierL_CTRG",
"V_PlateCarrierSpec_blk",
"V_PlateCarrierSpec_mtp",
"V_PlateCarrierSpec_rgr"
];
blck_weaponOptics = ["optic_Arco","optic_Hamr","optic_Aco","optic_ACO_grn","optic_Aco_smg","optic_ACO_grn_smg","optic_Holosight","optic_Holosight_smg","optic_SOS",
"optic_MRCO","optic_DMS","optic_Yorris","optic_MRD","optic_LRPS","optic_NVS","optic_Nightstalker"];
blck_weaponSilencers = ["muzzle_snds_H","muzzle_snds_L","muzzle_snds_M",
"muzzle_snds_B","muzzle_snds_H_MG","muzzle_snds_acp"];
blck_weaponLights = ["acc_flashlight","acc_pointer_IR"];
blck_WeaponAttachments = blck_weaponOptics + blck_weaponSilencers + blck_weaponLights;
//CraftingFood
blck_Meats=[
];
blck_Drink = [
"Exile_Item_PlasticBottleCoffee",
"Exile_Item_PowerDrink",
"Exile_Item_PlasticBottleFreshWater",
"Exile_Item_Beer",
"Exile_Item_EnergyDrink",
"Exile_Item_MountainDupe"
];
blck_Food = [
"Exile_Item_EMRE",
"Exile_Item_GloriousKnakworst",
"Exile_Item_Surstromming",
"Exile_Item_SausageGravy",
"Exile_Item_Catfood",
"Exile_Item_ChristmasTinner",
"Exile_Item_BBQSandwich",
"Exile_Item_Dogfood",
"Exile_Item_BeefParts",
"Exile_Item_Cheathas",
"Exile_Item_Noodles",
"Exile_Item_SeedAstics",
"Exile_Item_Raisins",
"Exile_Item_Moobar",
"Exile_Item_InstantCoffee"
];
blck_ConsumableItems = blck_Meats + blck_Drink + blck_Food;
blck_throwableExplosives = ["HandGrenade","MiniGrenade"];
blck_otherExplosives = ["1Rnd_HE_Grenade_shell","3Rnd_HE_Grenade_shell","DemoCharge_Remote_Mag","SatchelCharge_Remote_Mag"];
blck_explosives = blck_throwableExplosives + blck_otherExplosives;
blck_medicalItems = ["Exile_Item_InstaDoc","Exile_Item_Bandage","Exile_Item_Vishpirin"];
blck_specialItems = blck_throwableExplosives + blck_medicalItems;
blck_NVG = ["NVGoggles","NVGoggles_INDEP","NVGoggles_OPFOR","Exile_Item_XM8"];
/***************************************************************************************
DEFAULT CONTENTS OF LOOT CRATES FOR EACH MISSION
Note however that these configurations can be used in any way you like or replaced with mission-specific customized loot arrays
for examples of how you can do this see \Major\Compositions.sqf
***************************************************************************************/
// values are: number of things from the weapons, magazines, optics, materials(cinder etc), items (food etc) and backpacks arrays to add, respectively.
blck_lootCountsOrange = [8,32,8,30,16,1]; // Orange
blck_lootCountsGreen = [7,24,6,16,18,1]; // Green
blck_lootCountsRed = [5,16,4,10,6,1]; // Red
blck_lootCountsBlue = [4,12,3,6,6,1]; // Blue
blck_BoxLoot_Orange =
// Loot is grouped as [weapons],[magazines],[items] in order to be able to use the correct function to load the item into the crate later on.
// Each item consist of the following information ["ItemName",minNum, maxNum] where min is the smallest number added and min+max is the largest number added.
[
[// Weapons
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["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_762x51_Box_Tracer"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["MMG_01_tan_F","150Rnd_93x64_Mag"],
["MMG_02_black_F","150Rnd_93x64_Mag"],
["MMG_02_camo_F","150Rnd_93x64_Mag"],
["MMG_02_sand_F","150Rnd_93x64_Mag"],
["srifle_DMR_02_camo_F","10Rnd_338_Mag"],
["srifle_DMR_02_F","10Rnd_338_Mag"],
["srifle_DMR_02_sniper_F","10Rnd_338_Mag"],
["srifle_DMR_03_F","10Rnd_338_Mag"],
["srifle_DMR_03_tan_F","10Rnd_338_Mag"],
["srifle_DMR_04_Tan_F","10Rnd_338_Mag"],
["srifle_DMR_05_hex_F","10Rnd_338_Mag"],
["srifle_DMR_05_tan_F","10Rnd_338_Mag"],
["srifle_DMR_06_camo_F","10Rnd_338_Mag"],
["srifle_DMR_04_F","10Rnd_127x54_Mag"],
["srifle_DMR_05_blk_F","10Rnd_93x64_DMR_05_Mag"],
["srifle_DMR_06_olive_F","20Rnd_762x51_Mag"]
],
[//Magazines
["3rnd_HE_Grenade_Shell",3,6],
["30Rnd_65x39_caseless_green",3,6],
["30Rnd_556x45_Stanag",3,6],
["30Rnd_45ACP_Mag_SMG_01",3,6],
["20Rnd_556x45_UW_mag",3,6],
["20Rnd_762x51_Mag",7,14],
["200Rnd_65x39_cased_Box",3,6],
["100Rnd_65x39_caseless_mag_Tracer",3,6],
["3rnd_HE_Grenade_Shell",1,3],
["HandGrenade",1,5],
// Marksman Pack Ammo
["10Rnd_338_Mag",1,5],
["10Rnd_338_Mag",1,5],
["10Rnd_127x54_Mag" ,1,5],
["10Rnd_127x54_Mag",1,5],
["10Rnd_93x64_DMR_05_Mag" ,1,5],
["10Rnd_93x64_DMR_05_Mag" ,1,5]
],
[ // Optics
["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2],
["optic_Arco",1,3],
["optic_SOS",1,3],["optic_MRCO",1,3],["optic_DMS",1,3],["optic_Yorris",1,3],
["optic_MRD",1,3],["optic_LRPS",1,3],["optic_NVS",1,3],["optic_Nightstalker",1,2],["optic_Nightstalker",1,2],["optic_Nightstalker",1,2],
["optic_tws",1,3],["optic_tws_mg",1,3],["muzzle_snds_H",1,3],["muzzle_snds_L",1,3],["muzzle_snds_M",1,3],["muzzle_snds_B",1,3],["muzzle_snds_H_MG",1,3],["muzzle_snds_acp",1,3],
["optic_AMS_khk",1,3],["optic_AMS_snd",1,3],["optic_KHS_blk",1,3],["optic_KHS_hex",1,3],["optic_KHS_old",1,3],["optic_KHS_tan",1,3]
],
[// Materials and supplies
["Exile_Item_Matches",1,2],["Exile_Item_CookingPot",1,2],["Exile_Item_Rope",1,2],["Exile_Item_DuctTape",1,8],["Exile_Item_ExtensionCord",1,8],["Exile_Item_FuelCanisterEmpty",1,2],
["Exile_Item_JunkMetal",1,10],["Exile_Item_LightBulb",1,10],["Exile_Item_MetalBoard",1,10],["Exile_Item_MetalPole",1,10],["Exile_Item_CamoTentKit",1,10],["Exile_Item_WorkBenchKit",1,10],
["Exile_Item_WoodWindowKit",1,10],["Exile_Item_WoodWallKit",1,10],["Exile_Item_WoodStairsKit",1,10],["Exile_Item_WoodGateKit",1,10],["Exile_Item_WoodDoorwayKit",1,10],["Exile_Item_MetalBoard",1,10],
["Exile_Item_MetalBoard",1,10],["Exile_Item_ExtensionCord",1,10],["Exile_Item_MetalPole",1,10],["Exile_Item_Sand",3,10],["Exile_Item_Cement",3,10],["Exile_Item_MetalWire",3,10],["Exile_Item_MetalScrews",3,10]
//
],
[//Items
["Exile_Item_InstaDoc",1,2],["NVGoggles",1,2],["Rangefinder",1,2],["Exile_Item_Bandage",1,3],["Exile_Item_Vishpirin",1,3],
["Exile_Item_Catfood",1,3],["Exile_Item_Surstromming",1,3],["Exile_Item_BBQSandwich",1,3],["Exile_Item_ChristmasTinner",1,3],["Exile_Item_SausageGravy",1,3],["Exile_Item_GloriousKnakworst",1,3],
["Exile_Item_BeefParts",1,3],["Exile_Item_Cheathas",1,3],["Exile_Item_Noodles",1,3],["Exile_Item_SeedAstics",1,3],["Exile_Item_Raisins",1,3],["Exile_Item_Moobar",1,3],["Exile_Item_InstantCoffee",1,3],["Exile_Item_EMRE",1,3],
["Exile_Item_PlasticBottleCoffee",1,3],["Exile_Item_PowerDrink",1,3],["Exile_Item_PlasticBottleFreshWater",1,3],["Exile_Item_Beer",1,3],["Exile_Item_EnergyDrink",1,3],["Exile_Item_MountainDupe",1,3]
],
[ // Backpacks
["B_AssaultPack_dgtl",1,2],["B_AssaultPack_khk",1,2],["B_AssaultPack_mcamo",1,2],["B_AssaultPack_cbr",1,2],["B_AssaultPack_rgr",1,2],["B_AssaultPack_sgg",1,2],
["B_Carryall_cbr",1,2],["B_Carryall_khk",1,2],["B_Carryall_mcamo",1,2],["B_Carryall_ocamo",1,2],["B_Carryall_oli",1,2],["B_Carryall_oucamo",1,2],
["B_FieldPack_blk",1,2],["B_FieldPack_cbr",1,2],["B_FieldPack_ocamo",1,2],["B_FieldPack_oucamo",1,2],
["B_Kitbag_cbr",1,2],["B_Kitbag_mcamo",1,2],["B_Kitbag_sgg",1,2],
["B_Parachute",1,2],["V_RebreatherB",1,2],["V_RebreatherIA",1,2],["V_RebreatherIR",1,2],
["B_TacticalPack_blk",1,2],["B_TacticalPack_mcamo",1,2],["B_TacticalPack_ocamo",1,2],["B_TacticalPack_oli",1,2],["B_TacticalPack_rgr",1,2],
["B_Bergen_blk",1,2],["B_Bergen_mcamo",1,2],["B_Bergen_rgr",1,2],["B_Bergen_sgg",1,2],
["B_HuntingBackpack",1,2],["B_OutdoorPack_blk",1,2],["B_OutdoorPack_blu",1,2],["B_OutdoorPack_tan",1,2]
]
];
blck_BoxLoot_Green =
[
[// Weapons
// Format is ["Weapon Name","Magazine Name"],
["arifle_Katiba_F","30Rnd_65x39_caseless_green"],
["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"],
["arifle_Mk20_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_plain_F","30Rnd_556x45_Stanag"],
["arifle_Mk20C_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_plain_F","30Rnd_556x45_Stanag"],
["arifle_MX_F","30Rnd_65x39_caseless_mag"],
["arifle_MX_GL_F","30Rnd_65x39_caseless_mag"],
["arifle_MXC_F","30Rnd_65x39_caseless_mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag"],
["arifle_SDAR_F","20Rnd_556x45_UW_mag"],
["arifle_TRG20_F","30Rnd_556x45_Stanag"],
["SMG_02_F","30Rnd_9x21_Mag"],
["SMG_01_F","30Rnd_45ACP_Mag_SMG_01"],
["Hgun_PDW2000_F","30Rnd_9x21_Mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["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_762x51_Box_Tracer"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["srifle_DMR_02_camo_F","10Rnd_338_Mag"],
["srifle_DMR_03_F","10Rnd_338_Mag"],
["srifle_DMR_04_Tan_F","10Rnd_338_Mag"],
["srifle_DMR_05_hex_F","10Rnd_338_Mag"],
["srifle_DMR_06_camo_F","10Rnd_338_Mag"]
],
[//Magazines
// Format is ["Magazine name, Minimum number to add, Maximum number to add],
["3rnd_HE_Grenade_Shell",2,4],
["30Rnd_65x39_caseless_green",3,6],
["30Rnd_556x45_Stanag",3,6],
["30Rnd_556x45_Stanag",3,6],
["30Rnd_45ACP_Mag_SMG_01",3,6],
["20Rnd_556x45_UW_mag",3,6],
["20Rnd_762x51_Mag",6,12],
["200Rnd_65x39_cased_Box",3,6],
["100Rnd_65x39_caseless_mag_Tracer",3,6],
["3rnd_HE_Grenade_Shell",1,3],
["HandGrenade",1,3],
// Marksman Pack Ammo
["10Rnd_338_Mag",1,4],
["10Rnd_338_Mag",1,4],
["10Rnd_127x54_Mag" ,1,4],
["10Rnd_127x54_Mag",1,4],
["10Rnd_93x64_DMR_05_Mag" ,1,4],
["10Rnd_93x64_DMR_05_Mag" ,1,4]
],
[ // Optics
["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Holosight",1,3],["acc_flashlight",1,3],["acc_pointer_IR",1,3],
["optic_Arco",1,3],["optic_Hamr",1,3],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Aco_smg",1,3],["optic_ACO_grn_smg",1,3],
["optic_Holosight",1,3],["optic_Holosight_smg",1,3],["optic_SOS",1,3],["optic_MRCO",1,3],["optic_DMS",1,3],["optic_Yorris",1,3],
["optic_MRD",1,3],["optic_LRPS",1,3],["optic_NVS",1,3],["optic_Nightstalker",1,2],["optic_Nightstalker",1,2],["optic_Nightstalker",1,2],
["optic_tws",1,3],["optic_tws_mg",1,3],["muzzle_snds_H",1,3],["muzzle_snds_L",1,3],["muzzle_snds_M",1,3],["muzzle_snds_B",1,3],["muzzle_snds_H_MG",1,3],["muzzle_snds_acp",1,3],
["optic_AMS_khk",1,3],["optic_AMS_snd",1,3],["optic_KHS_blk",1,3],["optic_KHS_hex",1,3],["optic_KHS_old",1,3],["optic_KHS_tan",1,3]
],
[// Materials and supplies
["Exile_Item_Matches",1,2],["Exile_Item_CookingPot",1,2],["Exile_Item_Rope",1,2],["Exile_Item_DuctTape",1,8],["Exile_Item_ExtensionCord",1,8],["Exile_Item_FuelCanisterEmpty",1,2],
["Exile_Item_JunkMetal",1,5],["Exile_Item_LightBulb",1,5],["Exile_Item_MetalBoard",1,5],["Exile_Item_MetalPole",1,5],["Exile_Item_CamoTentKit",1,5],["Exile_Item_WorkBenchKit",1,5],
["Exile_Item_MetalBoard",1,5],["Exile_Item_MetalWire",3,10],["Exile_Item_MetalScrews",3,10],["Exile_Item_ExtensionCord",1,5],["Exile_Item_MetalPole",1,5],["Exile_Item_Sand",2,5],["Exile_Item_Cement",2,5]
],
[//Items
["Exile_Item_InstaDoc",1,2],["NVGoggles",1,2],["Rangefinder",1,2],["Exile_Item_Bandage",1,6],["Exile_Item_Vishpirin",1,6],
["Exile_Item_Catfood",1,3],["Exile_Item_Surstromming",1,3],["Exile_Item_BBQSandwich",1,3],["Exile_Item_ChristmasTinner",1,3],["Exile_Item_SausageGravy",1,3],["Exile_Item_GloriousKnakworst",1,3],
["Exile_Item_BeefParts",1,3],["Exile_Item_Cheathas",1,3],["Exile_Item_Noodles",1,3],["Exile_Item_SeedAstics",1,3],["Exile_Item_Raisins",1,3],["Exile_Item_Moobar",1,3],["Exile_Item_InstantCoffee",1,3],["Exile_Item_EMRE",1,3],
["Exile_Item_PlasticBottleCoffee",1,3],["Exile_Item_PowerDrink",1,3],["Exile_Item_PlasticBottleFreshWater",1,3],["Exile_Item_Beer",1,3],["Exile_Item_EnergyDrink",1,3],["Exile_Item_MountainDupe",1,3]
],
[ // Backpacks
["B_AssaultPack_dgtl",1,2],["B_AssaultPack_khk",1,2],["B_AssaultPack_mcamo",1,2],["B_AssaultPack_cbr",1,2],["B_AssaultPack_rgr",1,2],["B_AssaultPack_sgg",1,2],
["B_Carryall_cbr",1,2],["B_Carryall_khk",1,2],["B_Carryall_mcamo",1,2],["B_Carryall_ocamo",1,2],["B_Carryall_oli",1,2],["B_Carryall_oucamo",1,2],
["B_FieldPack_blk",1,2],["B_FieldPack_cbr",1,2],["B_FieldPack_ocamo",1,2],["B_FieldPack_oucamo",1,2],
["B_Kitbag_cbr",1,2],["B_Kitbag_mcamo",1,2],["B_Kitbag_sgg",1,2],
["B_Parachute",1,2],["V_RebreatherB",1,2],["V_RebreatherIA",1,2],["V_RebreatherIR",1,2],
["B_TacticalPack_blk",1,2],["B_TacticalPack_mcamo",1,2],["B_TacticalPack_ocamo",1,2],["B_TacticalPack_oli",1,2],["B_TacticalPack_rgr",1,2],
["B_Bergen_blk",1,2],["B_Bergen_mcamo",1,2],["B_Bergen_rgr",1,2],["B_Bergen_sgg",1,2],
["B_HuntingBackpack",1,2],["B_OutdoorPack_blk",1,2],["B_OutdoorPack_blu",1,2],["B_OutdoorPack_tan",1,2]
]
];
blck_BoxLoot_Blue =
[
[// Weapons
["arifle_Katiba_F","30Rnd_65x39_caseless_green"],
["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"],
["arifle_Mk20_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_plain_F","30Rnd_556x45_Stanag"],
["arifle_Mk20C_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_plain_F","30Rnd_556x45_Stanag"],
["arifle_MX_F","30Rnd_65x39_caseless_mag"],
["arifle_MX_GL_F","30Rnd_65x39_caseless_mag"],
["arifle_MXC_F","30Rnd_65x39_caseless_mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag"],
["arifle_SDAR_F","20Rnd_556x45_UW_mag"],
["arifle_TRG20_F","30Rnd_556x45_Stanag"],
["SMG_02_F","30Rnd_9x21_Mag"],
["SMG_01_F","30Rnd_45ACP_Mag_SMG_01"],
["Hgun_PDW2000_F","30Rnd_9x21_Mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["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_762x51_Box_Tracer"]
],
[//Magazines
["3rnd_HE_Grenade_Shell",1,2],
["30Rnd_65x39_caseless_green",3,6],
["30Rnd_556x45_Stanag",3,6],
["30Rnd_556x45_Stanag",3,6],
["30Rnd_45ACP_Mag_SMG_01",3,6],
["20Rnd_556x45_UW_mag",3,6],
["20Rnd_762x51_Mag",3,10],
["200Rnd_65x39_cased_Box",3,6],
["100Rnd_65x39_caseless_mag_Tracer",3,6],
["3rnd_HE_Grenade_Shell",1,4],
["HandGrenade",1,3],
// Marksman Pack Ammo
["150Rnd_93x64_Mag",1,4],
["10Rnd_338_Mag",1,4],
["10Rnd_127x54_Mag" ,1,4],
["10Rnd_127x54_Mag",1,4],
["10Rnd_93x64_DMR_05_Mag" ,1,4]
],
[ // Optics
["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Holosight",1,3],["acc_flashlight",1,3],["acc_pointer_IR",1,3],
["optic_Arco",1,3],["optic_Hamr",1,3],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Aco_smg",1,3],["optic_ACO_grn_smg",1,3],
["optic_Holosight",1,3],["optic_Holosight_smg",1,3],["optic_SOS",1,3],["optic_MRCO",1,3],["optic_DMS",1,3],["optic_Yorris",1,3],
["optic_MRD",1,3],["optic_LRPS",1,3],["optic_NVS",1,3],["optic_Nightstalker",1,2],
["optic_tws",1,3],["optic_tws_mg",1,3],["muzzle_snds_H",1,3],["muzzle_snds_L",1,3],["muzzle_snds_M",1,3],["muzzle_snds_B",1,3],["muzzle_snds_H_MG",1,3],["muzzle_snds_acp",1,3],
["optic_AMS_khk",1,3],["optic_AMS_snd",1,3],["optic_KHS_blk",1,3],["optic_KHS_hex",1,3],["optic_KHS_old",1,3],["optic_KHS_tan",1,3]
],
[// Materials and supplies
["Exile_Item_Matches",1,2],["Exile_Item_CookingPot",1,2],["Exile_Item_Rope",1,2],["Exile_Item_DuctTape",1,3],["Exile_Item_ExtensionCord",1,2],["Exile_Item_FuelCanisterEmpty",1,2],
["Exile_Item_JunkMetal",1,6],["Exile_Item_LightBulb",1,6],["Exile_Item_MetalBoard",1,6],["Exile_Item_MetalPole",1,6],["Exile_Item_CamoTentKit",1,6]
],
[//Items
["Exile_Item_InstaDoc",1,2],["NVGoggles",1,2],["Rangefinder",1,2],["Exile_Item_Bandage",1,3],["Exile_Item_Vishpirin",1,3],
["Exile_Item_Catfood",1,3],["Exile_Item_Surstromming",1,3],["Exile_Item_BBQSandwich",1,3],["Exile_Item_ChristmasTinner",1,3],["Exile_Item_SausageGravy",1,3],["Exile_Item_GloriousKnakworst",1,3],
["Exile_Item_BeefParts",1,3],["Exile_Item_Cheathas",1,3],["Exile_Item_Noodles",1,3],["Exile_Item_SeedAstics",1,3],["Exile_Item_Raisins",1,3],["Exile_Item_Moobar",1,3],["Exile_Item_InstantCoffee",1,3],["Exile_Item_EMRE",1,3],
["Exile_Item_PlasticBottleCoffee",1,3],["Exile_Item_PowerDrink",1,3],["Exile_Item_PlasticBottleFreshWater",1,3],["Exile_Item_Beer",1,3],["Exile_Item_EnergyDrink",1,3],["Exile_Item_MountainDupe",1,3]
],
[ // Backpacks
["B_AssaultPack_dgtl",1,2],["B_AssaultPack_khk",1,2],["B_AssaultPack_mcamo",1,2],["B_AssaultPack_cbr",1,2],["B_AssaultPack_rgr",1,2],["B_AssaultPack_sgg",1,2],
["B_Carryall_cbr",1,2],["B_Carryall_khk",1,2],["B_Carryall_mcamo",1,2],["B_Carryall_ocamo",1,2],["B_Carryall_oli",1,2],["B_Carryall_oucamo",1,2],
["B_FieldPack_blk",1,2],["B_FieldPack_cbr",1,2],["B_FieldPack_ocamo",1,2],["B_FieldPack_oucamo",1,2],
["B_Kitbag_cbr",1,2],["B_Kitbag_mcamo",1,2],["B_Kitbag_sgg",1,2],
["B_Parachute",1,2],["V_RebreatherB",1,2],["V_RebreatherIA",1,2],["V_RebreatherIR",1,2],
["B_TacticalPack_blk",1,2],["B_TacticalPack_mcamo",1,2],["B_TacticalPack_ocamo",1,2],["B_TacticalPack_oli",1,2],["B_TacticalPack_rgr",1,2],
["B_Bergen_blk",1,2],["B_Bergen_mcamo",1,2],["B_Bergen_rgr",1,2],["B_Bergen_sgg",1,2],
["B_HuntingBackpack",1,2],["B_OutdoorPack_blk",1,2],["B_OutdoorPack_blu",1,2],["B_OutdoorPack_tan",1,2]
]
];
blck_BoxLoot_Red =
[
[// Weapons
["arifle_Katiba_F","30Rnd_65x39_caseless_green"],
["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"],
["arifle_Mk20_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_plain_F","30Rnd_556x45_Stanag"],
["arifle_Mk20C_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_F","30Rnd_556x45_Stanag"],
["arifle_Mk20_GL_plain_F","30Rnd_556x45_Stanag"],
["arifle_MX_F","30Rnd_65x39_caseless_mag"],
["arifle_MX_GL_F","30Rnd_65x39_caseless_mag"],
["arifle_MX_SW_Black_Hamr_pointer_F","100Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXC_F","30Rnd_65x39_caseless_mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag"],
["arifle_SDAR_F","20Rnd_556x45_UW_mag"],
["arifle_TRG20_F","30Rnd_556x45_Stanag"],
["SMG_02_F","30Rnd_9x21_Mag"],
["SMG_01_F","30Rnd_45ACP_Mag_SMG_01"],
["Hgun_PDW2000_F","30Rnd_9x21_Mag"],
["arifle_MXM_F","30Rnd_65x39_caseless_mag_Tracer"],
["arifle_MXM_Black_F","30Rnd_65x39_caseless_mag_Tracer"],
["srifle_DMR_01_F","10Rnd_762x51_Mag"],
["srifle_LRR_F","7Rnd_408_Mag"],
["srifle_EBR_F","20Rnd_762x51_Mag"],
["srifle_GM6_F","5Rnd_127x108_APDS_Mag"],
["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_762x51_Box_Tracer"],
["MMG_01_hex_F","150Rnd_93x64_Mag"],
["srifle_DMR_04_Tan_F","10Rnd_338_Mag"],
["srifle_DMR_06_camo_F","10Rnd_338_Mag"]
],
[//Magazines
["3rnd_HE_Grenade_Shell",1,5],["30Rnd_65x39_caseless_green",3,6],["30Rnd_556x45_Stanag",3,6],["30Rnd_556x45_Stanag",3,6],["30Rnd_45ACP_Mag_SMG_01",3,6],["20Rnd_556x45_UW_mag",3,6],
["10Rnd_762x51_Mag",3,6],["20Rnd_762x51_Mag",3,7],["200Rnd_65x39_cased_Box",3,6],["100Rnd_65x39_caseless_mag_Tracer",3,6],
// Marksman Pack Ammo
["150Rnd_93x64_Mag",1,4],
["10Rnd_338_Mag",1,4],
["10Rnd_127x54_Mag" ,1,4],
["10Rnd_127x54_Mag",1,4],
["10Rnd_93x64_DMR_05_Mag" ,1,4]
],
[ // Optics
["optic_SOS",1,2],["optic_LRPS",1,2],["optic_DMS",1,2],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Holosight",1,3],["acc_flashlight",1,3],["acc_pointer_IR",1,3],
["optic_Arco",1,3],["optic_Hamr",1,3],["optic_Aco",1,3],["optic_ACO_grn",1,3],["optic_Aco_smg",1,3],["optic_ACO_grn_smg",1,3],
["optic_Holosight",1,3],["optic_Holosight_smg",1,3],["optic_SOS",1,3],["optic_MRCO",1,3],["optic_DMS",1,3],["optic_Yorris",1,3],
["optic_MRD",1,3],["optic_LRPS",1,3],["optic_NVS",1,3],["optic_Nightstalker",1,2],
["optic_tws",1,3],["optic_tws_mg",1,3],["muzzle_snds_H",1,3],["muzzle_snds_L",1,3],["muzzle_snds_M",1,3],["muzzle_snds_B",1,3],["muzzle_snds_H_MG",1,3],["muzzle_snds_acp",1,3],
["optic_AMS_khk",1,3],["optic_KHS_blk",1,3],["optic_KHS_hex",1,3],["optic_KHS_old",1,3],["optic_KHS_tan",1,3]
],
[// Materials and supplies
["Exile_Item_Matches",1,2],["Exile_Item_CookingPot",1,2],["Exile_Item_Rope",1,2],["Exile_Item_DuctTape",1,8],["Exile_Item_ExtensionCord",1,8],["Exile_Item_FuelCanisterEmpty",1,2],
["Exile_Item_JunkMetal",1,5],["Exile_Item_LightBulb",1,5],["Exile_Item_MetalBoard",1,5],["Exile_Item_MetalPole",1,5],["Exile_Item_CamoTentKit",1,5],["Exile_Item_WorkBenchKit",1,5],
["Exile_Item_MetalBoard",1,5],["Exile_Item_MetalWire",3,10],["Exile_Item_MetalScrews",3,10],["Exile_Item_ExtensionCord",1,5],["Exile_Item_MetalPole",1,5],["Exile_Item_Sand",2,5],["Exile_Item_Cement",2,5]
],
[//Items
["Exile_Item_InstaDoc",1,2],["NVGoggles",1,2],["Exile_Item_Energydrink",1,4],["Exile_Item_Beer",1,3],["Rangefinder",1,2],
["Exile_Item_Catfood",1,3],["Exile_Item_Surstromming",1,3],["Exile_Item_BBQSandwich",1,3],["Exile_Item_ChristmasTinner",1,3],["Exile_Item_SausageGravy",1,3],["Exile_Item_GloriousKnakworst",1,3]
],
[ // Backpacks
["B_AssaultPack_dgtl",1,2],["B_AssaultPack_khk",1,2],["B_AssaultPack_mcamo",1,2],["B_AssaultPack_cbr",1,2],["B_AssaultPack_rgr",1,2],["B_AssaultPack_sgg",1,2],
["B_Carryall_cbr",1,2],["B_Carryall_khk",1,2],["B_Carryall_mcamo",1,2],["B_Carryall_ocamo",1,2],["B_Carryall_oli",1,2],["B_Carryall_oucamo",1,2],
["B_FieldPack_blk",1,2],["B_FieldPack_cbr",1,2],["B_FieldPack_ocamo",1,2],["B_FieldPack_oucamo",1,2],
["B_Kitbag_cbr",1,2],["B_Kitbag_mcamo",1,2],["B_Kitbag_sgg",1,2],
["B_Parachute",1,2],["V_RebreatherB",1,2],["V_RebreatherIA",1,2],["V_RebreatherIR",1,2],
["B_TacticalPack_blk",1,2],["B_TacticalPack_mcamo",1,2],["B_TacticalPack_ocamo",1,2],["B_TacticalPack_oli",1,2],["B_TacticalPack_rgr",1,2],
["B_Bergen_blk",1,2],["B_Bergen_mcamo",1,2],["B_Bergen_rgr",1,2],["B_Bergen_sgg",1,2],
["B_HuntingBackpack",1,2],["B_OutdoorPack_blk",1,2],["B_OutdoorPack_blu",1,2],["B_OutdoorPack_tan",1,2]
]
];
// Time the marker remains after completing the mission in seconds - experimental not yet implemented
blck_crateTypes = ["Box_FIA_Ammo_F","Box_FIA_Support_F","Box_FIA_Wps_F","I_SupplyCrate_F","Box_NATO_AmmoVeh_F","Box_East_AmmoVeh_F","IG_supplyCrate_F","Box_NATO_Wps_F","I_CargoNet_01_ammo_F","O_CargoNet_01_ammo_F","B_CargoNet_01_ammo_F"]; // Default crate type.
diag_log format["[blckeagls] Configurations for Exile Loaded"];
blck_configsLoaded = true;

View File

@ -0,0 +1,102 @@
// Place any overrides of the default configurations here.
// An example would be to move the center or change the dimensions for the map on which the missions are spawned so that only part of the map is used.
// Or map-specific configurations if you run the mission system on multiple servers. Our configurations are shown below as an example
diag_log "[blckeagls] Loading Configuration Overides";
_world = toLower format ["%1", worldName];
switch (_world) do
{
case"tanoa": {blck_maxCrashSites = 2};
case"namalsk": {
blck_enableOrangeMissions = 1;
blck_enableGreenMissions = 1;
blck_enableRedMissions = 1;
blck_enableBlueMissions = -1;
blck_enableHunterMissions = 1;
blck_enableScoutsMissions = -1;
// Define the maximum number of crash sites on the map at any one time
blck_maxCrashSites = -1; // recommended settings: 3 for Altis, 2 for Tanoa, 1 for smaller maps. Set to -1 to disable
}
};
if (blck_debugON) then
{
diag_log "[blckeagls] Debug seting is ON, Custom configurations used";
blck_mainThreadUpdateInterval = 10;
blck_enableOrangeMissions = 1;
blck_enableGreenMissions = 1;
blck_enableRedMissions = 1;
blck_enableBlueMissions = 1;
blck_enableHunterMissions = 1;
blck_enableScoutsMissions = 1;
//blck_maxCrashSites = -3;
blck_enabeUnderwaterMissions = 1;
blck_cleanupCompositionTimer = 5; // Time after mission completion at which items in the composition are deleted.
blck_AliveAICleanUpTime = 10; // Time after mission completion at which any remaining live AI are deleted.
blck_bodyCleanUpTimer = 20;
blck_SpawnEmplaced_Orange = 4; // Number of static weapons at Orange Missions
blck_SpawnEmplaced_Green = 3; // Number of static weapons at Green Missions
blck_SpawnEmplaced_Blue = 1; // Number of static weapons at Blue Missions
blck_SpawnEmplaced_Red = 2;
blck_SpawnVeh_Orange = 4; // Number of static weapons at Orange Missions
blck_SpawnVeh_Green = 3; // Number of static weapons at Green Missions
blck_SpawnVeh_Blue = 1; // Number of static weapons at Blue Missions
blck_SpawnVeh_Red = 2;
//blck_reinforcementsBlue = [0, 0, 0.0, 0]; // Chance of reinforcements, number of reinforcements, Chance of reinforcing heli patrols, chance of dropping supplies for the reinforcements
//blck_AIGrps_Blue = 1;
//blck_AIGrps_Red = 2;
//blck_AIGrps_Green = 3;
//blck_TMin_Major = 5;
//blck_TMin_Major2 = 6;
blck_TMin_Blue = 7;
blck_TMin_Red = 20;
blck_TMin_Green = 23;
blck_TMin_Orange = 20;
blck_TMin_Hunter = 15;
blck_TMin_Scouts = 20;
blck_TMin_Crashes = 5;
//Maximum Spawn time between missions in seconds
//blck_TMax_Major = 10;
//blck_TMax_Major2 = 11;
blck_TMax_Blue = 12;
blck_TMax_Red = 35;
blck_TMax_Green = 38;
blck_TMax_Orange = 31;
blck_TMax_Hunter = 40;
blck_TMax_Scouts = 45;
blck_TMax_Crashes = 15;
//blck_MissionTimout = 120; // 40 min
blck_SkillsBlue = [
["aimingAccuracy",0.01],
["aimingShake",0.01],
["aimingSpeed",0.01],
["endurance",0.01],
["spotDistance",0.01],
["spotTime",0.01],
["courage",0.01],
["reloadSpeed",0.80],
["commanding",0.8],
["general",1.00]
];
};

View File

@ -0,0 +1,51 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_chanceHeliPatrol","_endCondition","_chanceHeliLootDropped","_chanceLoot"];
diag_log "[blckeagls] Spawning Blue Mission with template = default";
private["_missionEnabled"];
_crateLoot = blck_BoxLoot_Blue;
_lootCounts = blck_lootCountsBlue;
_startMsg = "A group of Bandits was sighted in a nearby sector! Check the Blue marker on your map for the location!";
_endMsg = "The Sector at the Blue Marker is under survivor control!";
_markerLabel = "";
_markerType = ["ELIPSE",[175,175],"GRID"];
_markerColor = "ColorBlue";
_markerMissionName = "Bandit Patrol";
_missionLandscapeMode = "random"; // acceptable values are "none","random","precise"
_missionLandscape = ["Land_WoodPile_F","Land_BagFence_Short_F","Land_WoodPile_F","Land_BagFence_Short_F","Land_WoodPile_F","Land_BagFence_Short_F","Land_FieldToilet_F","Land_TentDome_F","Land_TentDome_F","Land_TentDome_F","Land_TentDome_F","Land_CargoBox_V1_F","Land_CargoBox_V1_F"]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Blue;
_maxNoAI = blck_MaxAI_Blue;
_noAIGroups = blck_AIGrps_Blue;
_noVehiclePatrols = blck_SpawnVeh_Blue;
_noEmplacedWeapons = blck_SpawnEmplaced_Blue;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = 0; //blck_reinforcementsBlue select 0;
_noPara = 2; //blck_reinforcementsBlue select 1;
_chanceHeliPatrol = 0;//blck_reinforcementsBlue select 2;
_chanceLoot = 0.992; //blck_reinforcementsBlue select 3;
private["_weap","_mags","_backpacks","_optics","_loadout","_reinforcementLootCounts"];
_weap = 3 + floor(random(4));
_mags = 8 + floor(random(6));
_backpacks = 1 + floor(random(2));
_optics = 1 + floor(random(6));
_loadout = 1 + floor(random(3));
_reinforcementLootCounts = [_weap,_mags,_optics,0,0,_backpacks];
diag_log format["blueDefault:: _chanceReinforcements = %1 and _chanceLoot = %2", _chanceReinforcements, _chanceLoot];
//diag_log format["blueDefault:: default reinforcement settings are %1",blck_reinforcementsBlue];
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,39 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Blue Mission with template = default2";
_crateLoot = blck_BoxLoot_Blue;
_lootCounts = blck_lootCountsBlue;
_startMsg = "A group of Bandits was sighted in a nearby sector! Check the Blue marker on your map for the location!";
_endMsg = "The Sector at the Blue Marker is under survivor control!";
_markerLabel = "";
_markerType = ["ELIPSE",[175,175],"GRID"];
_markerColor = "ColorBlue";
_markerMissionName = "Bandit Patrol";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = []; // list of objects to spawn as landscape
_missionLootBoxes = [
["Box_NATO_Wps_F",_crateLoot,[0,0,0]], // Standard loot crate with standard loadout
["Land_PaperBox_C_EPOCH",_crateLoot,[-5,-5,0]], // No Weapons, Magazines, or optics; 10 each construction supplies and food/drink items, 3 backpacks
["Land_CargoBox_V1_F",_crateLoot,[7, 5.4,0]]]; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = [["I_G_Offroad_01_armed_F","I_G_Offroad_01_armed_F"]]; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Blue;
_maxNoAI = blck_MaxAI_Blue;
_noAIGroups = blck_AIGrps_Blue;
_noVehiclePatrols = blck_SpawnVeh_Blue;
_noEmplacedWeapons = blck_SpawnEmplaced_Blue;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsBlue select 0;
_noPara = blck_reinforcementsBlue select 1;
_helipatrol = blck_reinforcementsBlue select 2;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,53 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Blue Mission with template = medicalCamp";
_crateLoot = blck_BoxLoot_Blue;
_lootCounts = blck_lootCountsBlue;
_startMsg = "A Bandit Medical camp has been spotted. Check the Blue marker on your map for its location";
_endMsg = "The Bandit Medical camp at the Blue Marker is under survivor control!";
_markerLabel = "";
_markerType = ["ELIPSE",[175,175],"GRID"];
_markerColor = "ColorBlue";
_markerMissionName = "Medical Camp";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = [
["Land_dp_transformer_F",[1.698242,-10.4668,-0.00763702],271.32,1,0,[],"","",true,false],
["Land_Wreck_BRDM2_F",[1.37012,13.498,0.00109863],184.487,0.00819469,0.830999,[],"","",true,false],
["Land_BagBunker_Small_F",[18.4512,-3.66406,0.00780487],305.003,1,0,[],"","",true,false],
["Land_Cargo_HQ_V1_F",[-20.1367,11.7539,0],90.8565,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-22.707,-3.75586,-0.0130234],44.9901,1,0,[],"","",true,false],
["Land_Cargo_House_V1_F",[24.3584,7.45313,0.00111389],91.6329,1,0,[],"","",true,false],
["StorageBladder_01_fuel_forest_F",[1.29492,29.3184,0.000999451],179.65,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-9.45996,31.252,0.02005],184.595,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-13.0459,32.668,-0.0283051],184.595,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-11.5957,33.125,-0.598007],184.595,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-8.98145,34.5801,-0.00514221],184.592,1,0,[],"","",true,false],
["Land_Addon_02_V1_ruins_F",[24.8369,24.6582,-0.00820923],90.9637,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-10.9443,35.0449,0.577057],184.592,1,0,[],"","",true,false],
["Land_Cargo20_military_green_F",[14.6533,32.9004,0.000480652],90.0989,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-23.0186,28.6738,-0.0271301],120.012,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[37.1504,34.5742,0.0146866],255,1,0,[],"","",true,false]
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Blue;
_maxNoAI = blck_MaxAI_Blue;
_noAIGroups = blck_AIGrps_Blue;
_noVehiclePatrols = blck_SpawnVeh_Blue;
_noEmplacedWeapons = blck_SpawnEmplaced_Blue;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsBlue select 0;
_noPara = blck_reinforcementsBlue select 1;
_chanceHeliPatrol = blck_reinforcementsBlue select 2;
_chanceLoot = blck_reinforcementsBlue select 3;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,80 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Blue Mission with template = redCamp";
_crateLoot = blck_BoxLoot_Blue;
_lootCounts = blck_lootCountsBlue;
_startMsg = "A temporary Bandit camp has been spotted. Check the Blue marker on your map for its location";
_endMsg = "The temporary Bandit Blue camp at the Blue Marker is under player control";
_markerLabel = "";
_markerType = ["ELIPSE",[175,175],"GRID"];
_markerColor = "ColorBlue";
_markerMissionName = "Bandit Camp";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = [
["Land_CampingChair_V1_F",[1.32227,2.07813,8.2016e-005],108.293,1,0],
["Land_CampingChair_V1_F",[-2.01465,2.91992,3.05176e-005],236.049,1,0],
["FirePlace_burning_F",[0.0302734,4.26563,2.47955e-005],359.997,1,0],
["Land_CampingChair_V1_F",[2.47168,4.21484,0.000102997],108.293,1,0],
["Land_CampingChair_V1_F",[-1.86816,5.07422,3.05176e-005],319.489,1,0],
["Land_CampingChair_V1_F",[0.915039,6.20898,1.71661e-005],51.7207,1,0],
["Land_Sleeping_bag_brown_F",[8.27441,0.609375,0.00414658],98.0314,1,0],
["Land_Sleeping_bag_brown_F",[8.27344,2.76758,0.00447083],91.7928,1,0],
["Land_Sleeping_bag_brown_F",[7.9082,4.95898,-0.00173759],85.1176,1,0],
["Land_Garbage_square3_F",[-4.95508,8.24023,0.00018692],60.0024,1,0],
["Land_Camping_Light_F",[8.92773,3.80273,-0.000205994],344.236,1,0],
["Land_Sleeping_bag_brown_F",[7.32129,7.55859,-0.0051899],60.1216,1,0],
["Land_TentDome_F",[-9.75488,3.13477,0.00125313],146.574,1,0],
["Land_WoodPile_F",[-0.322266,9.97266,-0.000553131],35.0017,1,0],
["Land_Razorwire_F",[-0.0185547,-9.84961,0.0752335],1.7831,1,0],
["Land_CampingChair_V1_folded_F",[3.8584,9.59375,0],60,1,0],
["Land_TentDome_F",[-8.76855,7.85156,-0.00471497],207.522,1,0],
["Land_BagFence_Round_F",[8.99707,-8.01367,-0.00951576],326.002,1,0],
["Land_BagFence_Round_F",[-10.8164,-6.33594,-0.0038681],59.9991,1,0],
["Land_TentDome_F",[-7.12207,11.8398,-0.00328445],231.101,1,0],
["Land_CampingTable_small_F",[-4.62598,13.2754,7.62939e-005],344.243,1,0],
["Land_Camping_Light_F",[-4.5957,13.332,0.687943],344.243,1,0],
["Land_Razorwire_F",[15.5459,0.605469,0.145557],102.505,1,0],
["Land_BagFence_Round_F",[7.16211,13.8516,0.000429153],221.639,1,0],
["Land_Razorwire_F",[15.9678,8.35938,0.0635166],85.7459,1,0],
["Land_Razorwire_F",[-19.1553,-1.61328,-0.0238552],70.0997,1,0],
["Land_Razorwire_F",[-12.3906,-15.4492,0.0128002],19.2641,1,0],
["Land_Razorwire_F",[-19.4629,5.67969,0.0492821],102.505,1,0],
["Land_BagFence_Round_F",[-11.2891,17.6777,-0.00759888],128.563,1,0],
["Land_Razorwire_F",[15.2949,-14.3027,0.0502853],139.224,1,0],
["Land_Razorwire_F",[15.2852,16.2656,-0.0208111],85.1363,1,0],
["Land_Razorwire_F",[4.80273,21.8223,-0.0563145],49.2133,1,0],
["Land_Razorwire_F",[-17.7891,13.4863,-0.0646877],102.5,1,0],
["Land_Razorwire_F",[-14.7109,20.2871,0.0674477],306.189,1,0],
["Land_BagFence_Round_F",[25.3975,-6.08008,0.00466537],272.26,1,0],
["Land_Wreck_Truck_F",[26.6289,12.2441,0.00333214],344.243,1,0],
["Land_GarbageBags_F",[-24.9463,17.3066,0.000968933],60.0003,1,0],
["Land_BagFence_Round_F",[11.167,28.832,-0.00405121],178.394,1,0],
["Land_BagFence_Round_F",[-6.36914,30.6953,-0.000207901],178.378,1,0],
["Land_Wreck_Hunter_F",[21.0391,25.9707,0.0118179],325.412,1,0],
["Land_Camping_Light_F",[-33.7852,10.0371,0.000759125],344.235,1,0],
["Land_BagFence_Round_F",[-34.3232,10.1035,0.00181007],60.0012,1,0]
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Blue;
_maxNoAI = blck_MaxAI_Blue;
_noAIGroups = blck_AIGrps_Blue;
_noVehiclePatrols = blck_SpawnVeh_Blue;
_noEmplacedWeapons = blck_SpawnEmplaced_Blue;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsBlue select 0;
_noPara = blck_reinforcementsBlue select 1;
_chanceHeliPatrol = blck_reinforcementsBlue select 2;
_chanceLoot = blck_reinforcementsBlue select 3;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,44 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Blue Mission with template = resupplyCamp";
_crateLoot = blck_BoxLoot_Blue;
_lootCounts = blck_lootCountsBlue;
_startMsg = "A Bandit resupply camp has been spotted. Check the Blue marker on your map for its location";
_endMsg = "The Bandit resupply camp at the Blue Marker is under player control";
_markerLabel = "";
_markerType = ["ELIPSE",[175,175],"GRID"];
_markerColor = "ColorBlue";
_markerMissionName = "Resupply Camp";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = [
["Land_Cargo_Patrol_V1_F",[-29.41016,0.13477,-0.0224228],359.992,1,0,[],"","",true,false],
["Land_Cargo_House_V1_F",[29.2988,-0.1,0.150505],54.9965,0,0.848867,[],"","",true,false],
["CamoNet_INDP_big_F",[-20.4346,15.43164,-0.00395203],54.9965,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-20.4346,15.43164,-0.0138168],119.996,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-20.3604,-15.6035,-0.0130463],44.9901,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[18.4453,-15.791,0.00744629],305.003,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[18.3711,15.5703,0.0101624],254.999,1,0,[],"","",true,false],
["CamoNet_INDP_big_F",[18.3711,15.5703,-0.00395203],54.9965,1,0,[],"","",true,false]
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Blue;
_maxNoAI = blck_MaxAI_Blue;
_noAIGroups = blck_AIGrps_Blue;
_noVehiclePatrols = blck_SpawnVeh_Blue;
_noEmplacedWeapons = blck_SpawnEmplaced_Blue;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsBlue select 0;
_noPara = blck_reinforcementsBlue select 1;
_chanceHeliPatrol = blck_reinforcementsBlue select 2;
_chanceLoot = blck_reinforcementsBlue select 3;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,22 @@
private["_pathBlue","_missionListBlue"];
_pathScouts = "Scouts";
_missionListScouts = ["Scouts"];
_pathHunters = "Hunters";
_missionListHunters = ["Hunters"];
_pathBlue = "Blue";
_missionListBlue = ["default"/*,"default2","medicalCamp","redCamp","resupplyCamp"*/];
_pathRed = "Red";
_missionListRed = [/*"default","default2","medicalCamp",*/"redCamp"/*,"resupplyCamp"*/];
_pathGreen = "Green";
_missionListGreen = [/*"default","default2",*/"medicalCamp"/*,"redCamp","resupplyCamp"*/];
_pathOrange = "Orange";
_missionListOrange = [/*"default","default2","medicalCamp","redCamp",*/"resupplyCamp"];
_pathHeliCrashes = "HeliCrashes";

View File

@ -0,0 +1,34 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Green Mission with template = default";
_crateLoot = blck_BoxLoot_Green;
_lootCounts = blck_lootCountsGreen;
_startMsg = "A group of Bandits was sighted in a nearby sector! Check the Green marker on your map for the location!";
_endMsg = "The Sector at the Green Marker is under survivor control!";
_markerLabel = "";
_markerType = ["ELIPSE",[225,225],"GRID"];
_markerColor = "ColorGreen";
_markerMissionName = "Bandit Patrol";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = []; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Green;
_maxNoAI = blck_MaxAI_Green;
_noAIGroups = blck_AIGrps_Green;
_noVehiclePatrols = blck_SpawnVeh_Green;
_noEmplacedWeapons = blck_SpawnEmplaced_Green;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsGreen select 0;
_noPara = blck_reinforcementsGreen select 1;
_helipatrol = blck_reinforcementsGreen select 2;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,38 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Green Mission with template = default2";
_crateLoot = blck_BoxLoot_Green;
_lootCounts = blck_lootCountsGreen;
_startMsg = "A group of Bandits was sighted in a nearby sector! Check the Green marker on your map for the location!";
_endMsg = "The Sector at the Green Marker is under survivor control!";
_markerLabel = "";
_markerType = ["ELIPSE",[225,225],"GRID"];
_markerColor = "ColorGreen";
_markerMissionName = "Bandit Patrol";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = []; // list of objects to spawn as landscape
_missionLootBoxes = [
["Box_NATO_Wps_F",_crateLoot,[0,0,0]], // Standard loot crate with standard loadout
["Land_PaperBox_C_EPOCH",_crateLoot,[-5,-5,0]], // No Weapons, Magazines, or optics; 10 each construction supplies and food/drink items, 3 backpacks
["Land_CargoBox_V1_F",_crateLoot,[7, 5.4,0]]]; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = [["I_G_Offroad_01_armed_F","I_G_Offroad_01_armed_F"]]; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Green;
_maxNoAI = blck_MaxAI_Green;
_noAIGroups = blck_AIGrps_Green;
_noVehiclePatrols = blck_SpawnVeh_Green;
_noEmplacedWeapons = blck_SpawnEmplaced_Green;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsGreen select 0;
_noPara = blck_reinforcementsGreen select 1;
_helipatrol = blck_reinforcementsGreen select 2;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,65 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Green Mission with template = medicalCamp";
_crateLoot = blck_BoxLoot_Green;
_lootCounts = blck_lootCountsGreen;
_startMsg = "A Bandit Medical camp has been spotted. Check the Green marker on your map for its location";
_endMsg = "The Bandit Medical camp at the Green Marker is under survivor control!";
_markerLabel = "";
_markerType = ["ELIPSE",[225,225],"GRID"];
_markerColor = "ColorGreen";
_markerMissionName = "Medical Camp";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = [
["Flag_AAF_F",[3,3,0],0,1,0,[],"","",true,false],
["Land_dp_transformer_F",[1.698242,-10.4668,-0.00763702],271.32,1,0,[],"","",true,false],
["Land_Wreck_BRDM2_F",[1.37012,13.498,0.00109863],184.487,0.00819469,0.830999,[],"","",true,false],
["Land_BagBunker_Small_F",[18.4512,-3.66406,0.00780487],305.003,1,0,[],"","",true,false],
["Land_Cargo_HQ_V1_F",[-20.1367,11.7539,0],90.8565,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-22.707,-3.75586,-0.0130234],44.9901,1,0,[],"","",true,false],
["Land_Cargo_House_V1_F",[24.3584,7.45313,0.00111389],91.6329,1,0,[],"","",true,false],
["StorageBladder_01_fuel_forest_F",[1.29492,29.3184,0.000999451],179.65,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-9.45996,31.252,0.02005],184.595,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-13.0459,32.668,-0.0283051],184.595,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-11.5957,33.125,-0.598007],184.595,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-8.98145,34.5801,-0.00514221],184.592,1,0,[],"","",true,false],
["Land_Addon_02_V1_ruins_F",[24.8369,24.6582,-0.00820923],90.9637,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-10.9443,35.0449,0.577057],184.592,1,0,[],"","",true,false],
["Land_Cargo20_military_green_F",[14.6533,32.9004,0.000480652],90.0989,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-23.0186,28.6738,-0.0271301],120.012,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[37.1504,34.5742,0.0146866],255,1,0,[],"","",true,false]
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Green;
_maxNoAI = blck_MaxAI_Green;
_noAIGroups = blck_AIGrps_Green;
_noVehiclePatrols = blck_SpawnVeh_Green;
_noEmplacedWeapons = blck_SpawnEmplaced_Green;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = 0.5; //blck_reinforcementsBlue select 0;
_noPara = 4; //blck_reinforcementsBlue select 1;
_chanceHeliPatrol = 0;//blck_reinforcementsBlue select 2;
_chanceLoot = 0.33; //blck_reinforcementsBlue select 3;
private["_weap","_mags","_backpacks","_optics","_loadout"];
_weap = 3 + floor(random(4));
_mags = 8 + floor(random(6));
_backpacks = 1 + floor(random(2));
_optics = 3 + floor(random(6));
_reinforcementLootCounts = [_weap,_mags,_optics,0,0,_backpacks];
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,79 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Green Mission with template = redCamp";
_crateLoot = blck_BoxLoot_Green;
_lootCounts = blck_lootCountsGreen;
_startMsg = "A temporary Bandit camp has been spotted. Check the Green marker on your map for its location";
_endMsg = "The temporary Bandit Green camp at the Green Marker is under player control";
_markerLabel = "";
_markerType = ["ELIPSE",[225,225],"GRID"];
_markerColor = "ColorGreen";
_markerMissionName = "Bandit Camp";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = [
["Land_CampingChair_V1_F",[1.32227,2.07813,8.2016e-005],108.293,1,0],
["Land_CampingChair_V1_F",[-2.01465,2.91992,3.05176e-005],236.049,1,0],
["FirePlace_burning_F",[0.0302734,4.26563,2.47955e-005],359.997,1,0],
["Land_CampingChair_V1_F",[2.47168,4.21484,0.000102997],108.293,1,0],
["Land_CampingChair_V1_F",[-1.86816,5.07422,3.05176e-005],319.489,1,0],
["Land_CampingChair_V1_F",[0.915039,6.20898,1.71661e-005],51.7207,1,0],
["Land_Sleeping_bag_brown_F",[8.27441,0.609375,0.00414658],98.0314,1,0],
["Land_Sleeping_bag_brown_F",[8.27344,2.76758,0.00447083],91.7928,1,0],
["Land_Sleeping_bag_brown_F",[7.9082,4.95898,-0.00173759],85.1176,1,0],
["Land_Garbage_square3_F",[-4.95508,8.24023,0.00018692],60.0024,1,0],
["Land_Camping_Light_F",[8.92773,3.80273,-0.000205994],344.236,1,0],
["Land_Sleeping_bag_brown_F",[7.32129,7.55859,-0.0051899],60.1216,1,0],
["Land_TentDome_F",[-9.75488,3.13477,0.00125313],146.574,1,0],
["Land_WoodPile_F",[-0.322266,9.97266,-0.000553131],35.0017,1,0],
["Land_Razorwire_F",[-0.0185547,-9.84961,0.0752335],1.7831,1,0],
["Land_CampingChair_V1_folded_F",[3.8584,9.59375,0],60,1,0],
["Land_TentDome_F",[-8.76855,7.85156,-0.00471497],207.522,1,0],
["Land_BagFence_Round_F",[8.99707,-8.01367,-0.00951576],326.002,1,0],
["Land_BagFence_Round_F",[-10.8164,-6.33594,-0.0038681],59.9991,1,0],
["Land_TentDome_F",[-7.12207,11.8398,-0.00328445],231.101,1,0],
["Land_CampingTable_small_F",[-4.62598,13.2754,7.62939e-005],344.243,1,0],
["Land_Camping_Light_F",[-4.5957,13.332,0.687943],344.243,1,0],
["Land_Razorwire_F",[15.5459,0.605469,0.145557],102.505,1,0],
["Land_BagFence_Round_F",[7.16211,13.8516,0.000429153],221.639,1,0],
["Land_Razorwire_F",[15.9678,8.35938,0.0635166],85.7459,1,0],
["Land_Razorwire_F",[-19.1553,-1.61328,-0.0238552],70.0997,1,0],
["Land_Razorwire_F",[-12.3906,-15.4492,0.0128002],19.2641,1,0],
["Land_Razorwire_F",[-19.4629,5.67969,0.0492821],102.505,1,0],
["Land_BagFence_Round_F",[-11.2891,17.6777,-0.00759888],128.563,1,0],
["Land_Razorwire_F",[15.2949,-14.3027,0.0502853],139.224,1,0],
["Land_Razorwire_F",[15.2852,16.2656,-0.0208111],85.1363,1,0],
["Land_Razorwire_F",[4.80273,21.8223,-0.0563145],49.2133,1,0],
["Land_Razorwire_F",[-17.7891,13.4863,-0.0646877],102.5,1,0],
["Land_Razorwire_F",[-14.7109,20.2871,0.0674477],306.189,1,0],
["Land_BagFence_Round_F",[25.3975,-6.08008,0.00466537],272.26,1,0],
["Land_Wreck_Truck_F",[26.6289,12.2441,0.00333214],344.243,1,0],
["Land_GarbageBags_F",[-24.9463,17.3066,0.000968933],60.0003,1,0],
["Land_BagFence_Round_F",[11.167,28.832,-0.00405121],178.394,1,0],
["Land_BagFence_Round_F",[-6.36914,30.6953,-0.000207901],178.378,1,0],
["Land_Wreck_Hunter_F",[21.0391,25.9707,0.0118179],325.412,1,0],
["Land_Camping_Light_F",[-33.7852,10.0371,0.000759125],344.235,1,0],
["Land_BagFence_Round_F",[-34.3232,10.1035,0.00181007],60.0012,1,0]
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Green;
_maxNoAI = blck_MaxAI_Green;
_noAIGroups = blck_AIGrps_Green;
_noVehiclePatrols = blck_SpawnVeh_Green;
_noEmplacedWeapons = blck_SpawnEmplaced_Green;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsGreen select 0;
_noPara = blck_reinforcementsGreen select 1;
_helipatrol = blck_reinforcementsGreen select 2;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,43 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Green Mission with template = resupplyCamp";
_crateLoot = blck_BoxLoot_Green;
_lootCounts = blck_lootCountsGreen;
_startMsg = "A Bandit resupply camp has been spotted. Check the Green marker on your map for its location";
_endMsg = "The Bandit resupply camp at the Green Marker is under player control";
_markerLabel = "";
_markerType = ["ELIPSE",[225,225],"GRID"];
_markerColor = "ColorGreen";
_markerMissionName = "Resupply Camp";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = [
["Land_Cargo_Patrol_V1_F",[-29.41016,0.13477,-0.0224228],359.992,1,0,[],"","",true,false],
["Land_Cargo_House_V1_F",[29.2988,-0.1,0.150505],54.9965,0,0.848867,[],"","",true,false],
["CamoNet_INDP_big_F",[-20.4346,15.43164,-0.00395203],54.9965,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-20.4346,15.43164,-0.0138168],119.996,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-20.3604,-15.6035,-0.0130463],44.9901,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[18.4453,-15.791,0.00744629],305.003,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[18.3711,15.5703,0.0101624],254.999,1,0,[],"","",true,false],
["CamoNet_INDP_big_F",[18.3711,15.5703,-0.00395203],54.9965,1,0,[],"","",true,false]
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Green;
_maxNoAI = blck_MaxAI_Green;
_noAIGroups = blck_AIGrps_Green;
_noVehiclePatrols = blck_SpawnVeh_Green;
_noEmplacedWeapons = blck_SpawnEmplaced_Green;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsGreen select 0;
_noPara = blck_reinforcementsGreen select 1;
_helipatrol = blck_reinforcementsGreen select 2;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,34 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Orange Mission with template = default";
diag_log "[blckeagls] Spawning Orange Mission with template = default";
_crateLoot = blck_BoxLoot_Orange;
_lootCounts = blck_lootCountsOrange;
_startMsg = "A group of Bandits was sighted in a nearby sector! Check the Orange marker on your map for the location!";
_endMsg = "The Sector at the Orange Marker is under survivor control!";
_markerLabel = "";
_markerType = ["ELIPSE",[250,250],"GRID"];
_markerColor = "ColorOrange";
_markerMissionName = "Bandit Patrol";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = []; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Orange;
_maxNoAI = blck_MaxAI_Orange;
_noAIGroups = blck_AIGrps_Orange;
_noVehiclePatrols = blck_SpawnVeh_Orange;
_noEmplacedWeapons = blck_SpawnEmplaced_Orange;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsOrange select 0;
_noPara = blck_reinforcementsOrange select 1;
_helipatrol = blck_reinforcementsOrange select 2;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,53 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
_crateLoot =
[
[// Weapons
],
[//Magazines
],
[ // Optics
],
[// Materials and supplies
],
[//Items
],
[ // Backpacks
]
];
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Orange Mission with template = default2";
_crateLoot = blck_BoxLoot_Orange;
_lootCounts = blck_lootCountsOrange;
_startMsg = "A group of Bandits was sighted in a nearby sector! Check the Orange marker on your map for the location!";
_endMsg = "The Sector at the Orange Marker is under survivor control!";
_markerLabel = "";
_markerType = ["ELIPSE",[250,250],"GRID"];
_markerColor = "ColorOrange";
_markerMissionName = "Bandit Patrol";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = []; // list of objects to spawn as landscape
_missionLootBoxes = [
["Box_NATO_Wps_F",_crateLoot,[0,0,0]], // Standard loot crate with standard loadout
["Land_PaperBox_C_EPOCH",_crateLoot,[-5,-5,0]], // No Weapons, Magazines, or optics; 10 each construction supplies and food/drink items, 3 backpacks
["Land_CargoBox_V1_F",_crateLoot,[7, 5.4,0]]]; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = [["I_G_Offroad_01_armed_F","I_G_Offroad_01_armed_F"]]; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Orange;
_maxNoAI = blck_MaxAI_Orange;
_noAIGroups = blck_AIGrps_Orange;
_noVehiclePatrols = blck_SpawnVeh_Orange;
_noEmplacedWeapons = blck_SpawnEmplaced_Orange;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsOrange select 0;
_noPara = blck_reinforcementsOrange select 1;
_helipatrol = blck_reinforcementsOrange select 2;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,52 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Orange Mission with template = medicalCamp";
_crateLoot = blck_BoxLoot_Orange;
_lootCounts = blck_lootCountsOrange;
_startMsg = "A Bandit Medical camp has been spotted. Check the Orange marker on your map for its location";
_endMsg = "The Bandit Medical camp at the Orange Marker is under survivor control!";
_markerLabel = "";
_markerType = ["ELIPSE",[250,250],"GRID"];
_markerColor = "ColorOrange";
_markerMissionName = "Medical Camp";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = [
["Land_dp_transformer_F",[1.698242,-10.4668,-0.00763702],271.32,1,0,[],"","",true,false],
["Land_Wreck_BRDM2_F",[1.37012,13.498,0.00109863],184.487,0.00819469,0.830999,[],"","",true,false],
["Land_BagBunker_Small_F",[18.4512,-3.66406,0.00780487],305.003,1,0,[],"","",true,false],
["Land_Cargo_HQ_V1_F",[-20.1367,11.7539,0],90.8565,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-22.707,-3.75586,-0.0130234],44.9901,1,0,[],"","",true,false],
["Land_Cargo_House_V1_F",[24.3584,7.45313,0.00111389],91.6329,1,0,[],"","",true,false],
["StorageBladder_01_fuel_forest_F",[1.29492,29.3184,0.000999451],179.65,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-9.45996,31.252,0.02005],184.595,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-13.0459,32.668,-0.0283051],184.595,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-11.5957,33.125,-0.598007],184.595,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-8.98145,34.5801,-0.00514221],184.592,1,0,[],"","",true,false],
["Land_Addon_02_V1_ruins_F",[24.8369,24.6582,-0.00820923],90.9637,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-10.9443,35.0449,0.577057],184.592,1,0,[],"","",true,false],
["Land_Cargo20_military_green_F",[14.6533,32.9004,0.000480652],90.0989,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-23.0186,28.6738,-0.0271301],120.012,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[37.1504,34.5742,0.0146866],255,1,0,[],"","",true,false]
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Orange;
_maxNoAI = blck_MaxAI_Orange;
_noAIGroups = blck_AIGrps_Orange;
_noVehiclePatrols = blck_SpawnVeh_Orange;
_noEmplacedWeapons = blck_SpawnEmplaced_Orange;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsOrange select 0;
_noPara = blck_reinforcementsOrange select 1;
_helipatrol = blck_reinforcementsOrange select 2;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,79 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Orange Mission with template = redCamp";
_crateLoot = blck_BoxLoot_Orange;
_lootCounts = blck_lootCountsOrange;
_startMsg = "A temporary Bandit camp has been spotted. Check the Orange marker on your map for its location";
_endMsg = "The temporary Bandit Orange camp at the Orange Marker is under player control";
_markerLabel = "";
_markerType = ["ELIPSE",[250,250],"GRID"];
_markerColor = "ColorOrange";
_markerMissionName = "Bandit Camp";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = [
["Land_CampingChair_V1_F",[1.32227,2.07813,8.2016e-005],108.293,1,0],
["Land_CampingChair_V1_F",[-2.01465,2.91992,3.05176e-005],236.049,1,0],
["FirePlace_burning_F",[0.0302734,4.26563,2.47955e-005],359.997,1,0],
["Land_CampingChair_V1_F",[2.47168,4.21484,0.000102997],108.293,1,0],
["Land_CampingChair_V1_F",[-1.86816,5.07422,3.05176e-005],319.489,1,0],
["Land_CampingChair_V1_F",[0.915039,6.20898,1.71661e-005],51.7207,1,0],
["Land_Sleeping_bag_brown_F",[8.27441,0.609375,0.00414658],98.0314,1,0],
["Land_Sleeping_bag_brown_F",[8.27344,2.76758,0.00447083],91.7928,1,0],
["Land_Sleeping_bag_brown_F",[7.9082,4.95898,-0.00173759],85.1176,1,0],
["Land_Garbage_square3_F",[-4.95508,8.24023,0.00018692],60.0024,1,0],
["Land_Camping_Light_F",[8.92773,3.80273,-0.000205994],344.236,1,0],
["Land_Sleeping_bag_brown_F",[7.32129,7.55859,-0.0051899],60.1216,1,0],
["Land_TentDome_F",[-9.75488,3.13477,0.00125313],146.574,1,0],
["Land_WoodPile_F",[-0.322266,9.97266,-0.000553131],35.0017,1,0],
["Land_Razorwire_F",[-0.0185547,-9.84961,0.0752335],1.7831,1,0],
["Land_CampingChair_V1_folded_F",[3.8584,9.59375,0],60,1,0],
["Land_TentDome_F",[-8.76855,7.85156,-0.00471497],207.522,1,0],
["Land_BagFence_Round_F",[8.99707,-8.01367,-0.00951576],326.002,1,0],
["Land_BagFence_Round_F",[-10.8164,-6.33594,-0.0038681],59.9991,1,0],
["Land_TentDome_F",[-7.12207,11.8398,-0.00328445],231.101,1,0],
["Land_CampingTable_small_F",[-4.62598,13.2754,7.62939e-005],344.243,1,0],
["Land_Camping_Light_F",[-4.5957,13.332,0.687943],344.243,1,0],
["Land_Razorwire_F",[15.5459,0.605469,0.145557],102.505,1,0],
["Land_BagFence_Round_F",[7.16211,13.8516,0.000429153],221.639,1,0],
["Land_Razorwire_F",[15.9678,8.35938,0.0635166],85.7459,1,0],
["Land_Razorwire_F",[-19.1553,-1.61328,-0.0238552],70.0997,1,0],
["Land_Razorwire_F",[-12.3906,-15.4492,0.0128002],19.2641,1,0],
["Land_Razorwire_F",[-19.4629,5.67969,0.0492821],102.505,1,0],
["Land_BagFence_Round_F",[-11.2891,17.6777,-0.00759888],128.563,1,0],
["Land_Razorwire_F",[15.2949,-14.3027,0.0502853],139.224,1,0],
["Land_Razorwire_F",[15.2852,16.2656,-0.0208111],85.1363,1,0],
["Land_Razorwire_F",[4.80273,21.8223,-0.0563145],49.2133,1,0],
["Land_Razorwire_F",[-17.7891,13.4863,-0.0646877],102.5,1,0],
["Land_Razorwire_F",[-14.7109,20.2871,0.0674477],306.189,1,0],
["Land_BagFence_Round_F",[25.3975,-6.08008,0.00466537],272.26,1,0],
["Land_Wreck_Truck_F",[26.6289,12.2441,0.00333214],344.243,1,0],
["Land_GarbageBags_F",[-24.9463,17.3066,0.000968933],60.0003,1,0],
["Land_BagFence_Round_F",[11.167,28.832,-0.00405121],178.394,1,0],
["Land_BagFence_Round_F",[-6.36914,30.6953,-0.000207901],178.378,1,0],
["Land_Wreck_Hunter_F",[21.0391,25.9707,0.0118179],325.412,1,0],
["Land_Camping_Light_F",[-33.7852,10.0371,0.000759125],344.235,1,0],
["Land_BagFence_Round_F",[-34.3232,10.1035,0.00181007],60.0012,1,0]
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Orange;
_maxNoAI = blck_MaxAI_Orange;
_noAIGroups = blck_AIGrps_Orange;
_noVehiclePatrols = blck_SpawnVeh_Orange;
_noEmplacedWeapons = blck_SpawnEmplaced_Orange;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsOrange select 0;
_noPara = blck_reinforcementsOrange select 1;
_helipatrol = blck_reinforcementsOrange select 2;;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,55 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Orange Mission with template = resupplyCamp";
_crateLoot = blck_BoxLoot_Orange;
_lootCounts = blck_lootCountsOrange;
_startMsg = "A Bandit resupply camp has been spotted. Check the Orange marker on your map for its location";
_endMsg = "The Bandit resupply camp at the Orange Marker is under player control";
_markerLabel = "";
_markerType = ["ELIPSE",[250,250],"GRID"];
_markerColor = "ColorOrange";
_markerMissionName = "Resupply Camp";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = [
["Flag_AAF_F",[3,3,0],0,1,0,[],"","",true,false],
["Land_Cargo_Patrol_V1_F",[-29.41016,0.13477,-0.0224228],359.992,1,0,[],"","",true,false],
["Land_Cargo_House_V1_F",[29.2988,-0.1,0.150505],54.9965,0,0.848867,[],"","",true,false],
["CamoNet_INDP_big_F",[-20.4346,15.43164,-0.00395203],54.9965,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-20.4346,15.43164,-0.0138168],119.996,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-20.3604,-15.6035,-0.0130463],44.9901,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[18.4453,-15.791,0.00744629],305.003,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[18.3711,15.5703,0.0101624],254.999,1,0,[],"","",true,false],
["CamoNet_INDP_big_F",[18.3711,15.5703,-0.00395203],54.9965,1,0,[],"","",true,false]
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Orange;
_maxNoAI = blck_MaxAI_Orange;
_noAIGroups = blck_AIGrps_Orange;
_noVehiclePatrols = blck_SpawnVeh_Orange;
_noEmplacedWeapons = blck_SpawnEmplaced_Orange;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = 0;
_noPara = 5;
_chanceHeliPatrol = 0;
_chanceLoot = 0.33;
private["_weap","_mags","_backpacks","_optics","_loadout"];
_weap = 4 + floor(random(4));
_mags = 12 + floor(random(6));
_backpacks = 1 + floor(random(2));
_optics = 5 + floor(random(6));
_reinforcementLootCounts = [_weap,_mags,_optics,0,0,_backpacks];
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,34 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Red Mission with template = default";
_crateLoot = blck_BoxLoot_Red;
_lootCounts = blck_lootCountsRed;
_startMsg = "A group of Bandits was sighted in a nearby sector! Check the Red marker on your map for the location!";
_endMsg = "The Sector at the Red Marker is under survivor control!";
_markerLabel = "";
_markerType = ["ELIPSE",[200,200],"GRID"];
_markerColor = "ColorRed";
_markerMissionName = "Bandit Patrol";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = []; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Red;
_maxNoAI = blck_MaxAI_Red;
_noAIGroups = blck_AIGrps_Red;
_noVehiclePatrols = blck_SpawnVeh_Red;
_noEmplacedWeapons = blck_SpawnEmplaced_Red;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsRed select 0;
_noPara = blck_reinforcementsRed select 1;
_helipatrol = blck_reinforcementsRed select 2;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,41 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Red Mission with template = default2";
_crateLoot = blck_BoxLoot_Red;
_lootCounts = blck_lootCountsRed;
_startMsg = "A group of Bandits was sighted in a nearby sector! Check the Blue marker on your map for the location!";
_endMsg = "The Sector at the Blue Marker is under survivor control!";
_markerLabel = "";
_markerType = ["ELIPSE",[200,200],"GRID"];
_markerColor = "ColorRed";
_markerMissionName = "Bandit Patrol";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = []; // list of objects to spawn as landscape
_missionLootBoxes = [
["Box_NATO_Wps_F",_crateLoot,[0,0,0]], // Standard loot crate with standard loadout
["Land_PaperBox_C_EPOCH",_crateLoot,[-5,-5,0]], // No Weapons, Magazines, or optics; 10 each construction supplies and food/drink items, 3 backpacks
["Land_CargoBox_V1_F",_crateLoot,[7, 5.4,0]]]; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = [["I_G_Offroad_01_armed_F","I_G_Offroad_01_armed_F"]]; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Red;
_maxNoAI = blck_MaxAI_Red;
_noAIGroups = blck_AIGrps_Red;
_noVehiclePatrols = blck_SpawnVeh_Red;
_noEmplacedWeapons = blck_SpawnEmplaced_Red;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsRed select 0;
_noPara = blck_reinforcementsRed select 1;
_helipatrol = blck_reinforcementsRed select 2;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,52 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Red Mission with template = medicalCamp";
_crateLoot = blck_BoxLoot_Red;
_lootCounts = blck_lootCountsRed;
_startMsg = "A Bandit Medical camp has been spotted. Check the Red marker on your map for its location";
_endMsg = "The Bandit Medical camp at the Red Marker is under survivor control!";
_markerLabel = "";
_markerType = ["ELIPSE",[200,200],"GRID"];
_markerColor = "ColorRed";
_markerMissionName = "Medical Camp";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = [
["Land_dp_transformer_F",[1.698242,-10.4668,-0.00763702],271.32,1,0,[],"","",true,false],
["Land_Wreck_BRDM2_F",[1.37012,13.498,0.00109863],184.487,0.00819469,0.830999,[],"","",true,false],
["Land_BagBunker_Small_F",[18.4512,-3.66406,0.00780487],305.003,1,0,[],"","",true,false],
["Land_Cargo_HQ_V1_F",[-20.1367,11.7539,0],90.8565,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-22.707,-3.75586,-0.0130234],44.9901,1,0,[],"","",true,false],
["Land_Cargo_House_V1_F",[24.3584,7.45313,0.00111389],91.6329,1,0,[],"","",true,false],
["StorageBladder_01_fuel_forest_F",[1.29492,29.3184,0.000999451],179.65,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-9.45996,31.252,0.02005],184.595,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-13.0459,32.668,-0.0283051],184.595,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-11.5957,33.125,-0.598007],184.595,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-8.98145,34.5801,-0.00514221],184.592,1,0,[],"","",true,false],
["Land_Addon_02_V1_ruins_F",[24.8369,24.6582,-0.00820923],90.9637,1,0,[],"","",true,false],
["Land_GarbageBags_F",[-10.9443,35.0449,0.577057],184.592,1,0,[],"","",true,false],
["Land_Cargo20_military_green_F",[14.6533,32.9004,0.000480652],90.0989,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-23.0186,28.6738,-0.0271301],120.012,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[37.1504,34.5742,0.0146866],255,1,0,[],"","",true,false]
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Red;
_maxNoAI = blck_MaxAI_Red;
_noAIGroups = blck_AIGrps_Red;
_noVehiclePatrols = blck_SpawnVeh_Red;
_noEmplacedWeapons = blck_SpawnEmplaced_Red;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsRed select 0;
_noPara = blck_reinforcementsRed select 1;
_helipatrol = blck_reinforcementsRed select 2;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,91 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Red Mission with template = redCamp";
_crateLoot = blck_BoxLoot_Red;
_lootCounts = blck_lootCountsRed;
_startMsg = "A temporary Bandit camp has been spotted. Check the Red marker on your map for its location";
_endMsg = "The temporary Bandit Red camp at the Red Marker is under player control";
_markerLabel = "";
_markerType = ["ELIPSE",[200,200],"GRID"];
_markerColor = "ColorRed";
_markerMissionName = "Bandit Camp";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = [
["Flag_AAF_F",[3,3,0],0,1,0,[],"","",true,false],
["Land_CampingChair_V1_F",[1.32227,2.07813,8.2016e-005],108.293,1,0],
["Land_CampingChair_V1_F",[-2.01465,2.91992,3.05176e-005],236.049,1,0],
["FirePlace_burning_F",[0.0302734,4.26563,2.47955e-005],359.997,1,0],
["Land_CampingChair_V1_F",[2.47168,4.21484,0.000102997],108.293,1,0],
["Land_CampingChair_V1_F",[-1.86816,5.07422,3.05176e-005],319.489,1,0],
["Land_CampingChair_V1_F",[0.915039,6.20898,1.71661e-005],51.7207,1,0],
["Land_Sleeping_bag_brown_F",[8.27441,0.609375,0.00414658],98.0314,1,0],
["Land_Sleeping_bag_brown_F",[8.27344,2.76758,0.00447083],91.7928,1,0],
["Land_Sleeping_bag_brown_F",[7.9082,4.95898,-0.00173759],85.1176,1,0],
["Land_Garbage_square3_F",[-4.95508,8.24023,0.00018692],60.0024,1,0],
["Land_Camping_Light_F",[8.92773,3.80273,-0.000205994],344.236,1,0],
["Land_Sleeping_bag_brown_F",[7.32129,7.55859,-0.0051899],60.1216,1,0],
["Land_TentDome_F",[-9.75488,3.13477,0.00125313],146.574,1,0],
["Land_WoodPile_F",[-0.322266,9.97266,-0.000553131],35.0017,1,0],
["Land_Razorwire_F",[-0.0185547,-9.84961,0.0752335],1.7831,1,0],
["Land_CampingChair_V1_folded_F",[3.8584,9.59375,0],60,1,0],
["Land_TentDome_F",[-8.76855,7.85156,-0.00471497],207.522,1,0],
["Land_BagFence_Round_F",[8.99707,-8.01367,-0.00951576],326.002,1,0],
["Land_BagFence_Round_F",[-10.8164,-6.33594,-0.0038681],59.9991,1,0],
["Land_TentDome_F",[-7.12207,11.8398,-0.00328445],231.101,1,0],
["Land_CampingTable_small_F",[-4.62598,13.2754,7.62939e-005],344.243,1,0],
["Land_Camping_Light_F",[-4.5957,13.332,0.687943],344.243,1,0],
["Land_Razorwire_F",[15.5459,0.605469,0.145557],102.505,1,0],
["Land_BagFence_Round_F",[7.16211,13.8516,0.000429153],221.639,1,0],
["Land_Razorwire_F",[15.9678,8.35938,0.0635166],85.7459,1,0],
["Land_Razorwire_F",[-19.1553,-1.61328,-0.0238552],70.0997,1,0],
["Land_Razorwire_F",[-12.3906,-15.4492,0.0128002],19.2641,1,0],
["Land_Razorwire_F",[-19.4629,5.67969,0.0492821],102.505,1,0],
["Land_BagFence_Round_F",[-11.2891,17.6777,-0.00759888],128.563,1,0],
["Land_Razorwire_F",[15.2949,-14.3027,0.0502853],139.224,1,0],
["Land_Razorwire_F",[15.2852,16.2656,-0.0208111],85.1363,1,0],
["Land_Razorwire_F",[4.80273,21.8223,-0.0563145],49.2133,1,0],
["Land_Razorwire_F",[-17.7891,13.4863,-0.0646877],102.5,1,0],
["Land_Razorwire_F",[-14.7109,20.2871,0.0674477],306.189,1,0],
["Land_BagFence_Round_F",[25.3975,-6.08008,0.00466537],272.26,1,0],
["Land_Wreck_Truck_F",[26.6289,12.2441,0.00333214],344.243,1,0],
["Land_GarbageBags_F",[-24.9463,17.3066,0.000968933],60.0003,1,0],
["Land_BagFence_Round_F",[11.167,28.832,-0.00405121],178.394,1,0],
["Land_BagFence_Round_F",[-6.36914,30.6953,-0.000207901],178.378,1,0],
["Land_Wreck_Hunter_F",[21.0391,25.9707,0.0118179],325.412,1,0],
["Land_Camping_Light_F",[-33.7852,10.0371,0.000759125],344.235,1,0],
["Land_BagFence_Round_F",[-34.3232,10.1035,0.00181007],60.0012,1,0]
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Red;
_maxNoAI = blck_MaxAI_Red;
_noAIGroups = blck_AIGrps_Red;
_noVehiclePatrols = blck_SpawnVeh_Red;
_noEmplacedWeapons = blck_SpawnEmplaced_Red;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = 0.10; //blck_reinforcementsBlue select 0;
_noPara = 2; //blck_reinforcementsBlue select 1;
_chanceHeliPatrol = 0;//blck_reinforcementsBlue select 2;
_chanceLoot = 0.10; //blck_reinforcementsBlue select 3;
private["_weap","_mags","_backpacks","_optics","_loadout"];
_weap = 3 + floor(random(4));
_mags = 8 + floor(random(6));
_backpacks = 1 + floor(random(2));
_optics = 1 + floor(random(6));
_reinforcementLootCounts = [_weap,_mags,_optics,0,0,_backpacks];
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,43 @@
/*
Mission Compositions by Bill prepared for DBD Clan
*/
private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape",
"_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons",
"_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition"];
diag_log "[blckeagls] Spawning Red Mission with template = resupplyCamp";
_crateLoot = blck_BoxLoot_Red;
_lootCounts = blck_lootCountsRed;
_startMsg = "A Bandit resupply camp has been spotted. Check the Red marker on your map for its location";
_endMsg = "The Bandit resupply camp at the Red Marker is under player control";
_markerLabel = "";
_markerType = ["ELIPSE",[200,200],"GRID"];
_markerColor = "ColorRed";
_markerMissionName = "Resupply Camp";
_missionLandscapeMode = "precise"; // acceptable values are "none","random","precise"
_missionLandscape = [
["Land_Cargo_Patrol_V1_F",[-29.41016,0.13477,-0.0224228],359.992,1,0,[],"","",true,false],
["Land_Cargo_House_V1_F",[29.2988,-0.1,0.150505],54.9965,0,0.848867,[],"","",true,false],
["CamoNet_INDP_big_F",[-20.4346,15.43164,-0.00395203],54.9965,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-20.4346,15.43164,-0.0138168],119.996,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[-20.3604,-15.6035,-0.0130463],44.9901,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[18.4453,-15.791,0.00744629],305.003,1,0,[],"","",true,false],
["Land_BagBunker_Small_F",[18.3711,15.5703,0.0101624],254.999,1,0,[],"","",true,false],
["CamoNet_INDP_big_F",[18.3711,15.5703,-0.00395203],54.9965,1,0,[],"","",true,false]
]; // list of objects to spawn as landscape
_missionLootBoxes = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionLootVehicles = []; // Parameters are "Box Item Code", array defining the loot to be spawned, and position.
_missionEmplacedWeapons = []; // can be used to define the precise placement of static weapons [[1,2,3] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used
_minNoAI = blck_MinAI_Red;
_maxNoAI = blck_MaxAI_Red;
_noAIGroups = blck_AIGrps_Red;
_noVehiclePatrols = blck_SpawnVeh_Red;
_noEmplacedWeapons = blck_SpawnEmplaced_Red;
_uniforms = blck_SkinList;
_headgear = blck_headgear;
_chanceReinforcements = blck_reinforcementsRed select 0;
_noPara = blck_reinforcementsRed select 1;
_helipatrol = blck_reinforcementsRed select 2;
_endCondition = "playerNear"; // Options are "allUnitsKilled", "playerNear", "playerNear"
_timeout = -1;
#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf";

View File

@ -0,0 +1,29 @@
// time.sqf
// by CRE4MPIE
// GamersInc.NET 2015
// Creds to AWOL, A3W, LouD for inspiration
private["_startTime"];
_startTime = diag_tickTime;
if (!isServer) exitWith {};
diag_log "[blckeagls] Time Acceleration Begun ----- >>>>>";
_world = toLower format ["%1", worldName];
private["_nightAccel","_dayAccel","_duskAccel"];
switch (_world) do {
case "altis":{_nightAccel = 3;_dayAccel=0.5; _duskAccel = 3;};
case "napf":{_nightAccel = 12; _dayAccel = 2;_duskAccel = 6;};
case "namalsk":{_nightAccel = 12; _dayAccel = 2;_duskAccel = 6;};
case "tanoa":{_nightAccel = 12; _dayAccel = 3.2;_duskAccel = 6;};
};
while {true} do
{
switch (sunOrMoon) do {
case {sunOrMoon < 0.1}: {setTimeMultiplier _nightAccel; diag_log format["time accel updated to %1; sunOrMoon = %2; time of day = %3",_nightAccel,sunOrMoon,dayTime];};
case {sunOrMoon > 0.5}: {setTimeMultiplier _dayAccel;diag_log format["time accel updated to %1; sunOrMoon = %2; time of day = %3",_dayAccel,sunOrMoon,dayTime];};
default {setTimeMultiplier _duskAccel;diag_log format["time accel updated to %1; sunOrMoon = %2; time of day = %3",_duskAccel,sunOrMoon,dayTime];};
};
uiSleep 300;
};
diag_log format["Time Acceleration Module Loaded in %1 seconds",(diag_tickTime - _startTime)];

View File

@ -0,0 +1,87 @@
/*
blck Mission system by Ghostrider-DBD-
Loosely based on the AI mission system by blckeagls ver 2.0.2
Contributions by Narines: bug fixes, testing, 'fired' event handler
Ideas or code from that by Vampire and KiloSwiss have been used for certain functions.
10/22/16 Version 6.2 Build 8-14-16
bug fixes
10/21/16 Version 6.2 Build 7
Redid system for markers which are now defined in the mission template reducing dependence on client side configurations for each mission or marker type.
Bug-fixes for helicrashes including ensuring that live AI are despawned after a certain time.
10-1-16 Version 6.1.4 Build 6
1) Added back the time acceleration module
9-25-16 Version 6.1.4 Build 6
1) Added metadata for Australia 5.0.1
2) Fixed bugs with the IED notifications used when a player is penalized for illeagal AI Kills. _fnc_processIlegalKills (server side) and blckClient (client side) reworked. _this select 0 etc was replaced with params[] throughout. Many minor errors were corrected.
9/24/16 Version 6.1.3 Build 5
1) Re-wrote the SLS crate spawning code which now relies on functions for crate spawning and generating a smoke source already used by the mission system. Replaced old functions with newer ones (e.g., params[] and selectRandom). Found a few bugs. Broke the script up into several discrete functions. Tested on Exile and Epoch,
2) Reworked the code for generating a smoke source. Added additional options with defaults set using params[].
9-19-16 Ver 6.1.2/11/16
Minor bug fixes to support Exile.
Corrected errors with scout and hunter missions trying to spawn using Epoch headgear.
Corrected error wherein AI were spawned as Epoch soldiers
Inactivated a call to an exile function that had no value
9-15-16 vER 6.1.1
1) Reverted to the old spawnUnits routine because the new one was not spawning AI at Scouts and Hunters correctly.
9-13-16 Ver 6.10
1) Added waypoints for spawned AI Vehicles.
2) Reworked the logic for generating the positions of these waypoints
3) Added loiter waypoints in addition to move wayponts.
4) Reworked the param/params for spawnUnits
5) several other minor optimizations.
9-3-16 Ver 6.0
1) Re-did the custom_server folder so the mod automatically starts. Blck_client.sqf no longer calls the mod from the server.
2) Added a variable blck_modType which presently can be either "Epoch" or "Exile" with the aim of having a single mission system for both mods.
3) Added a more intelligent method for loading key components (variables, functions, and map-specific parameters).
4) Re-did all code to automatically select correct parameters to run correctly on either exile or epoch servers.
5) Added the Exile Static Loot Crate Spawner; Re-did this to load either an exile or epoch version as needed since a lot of the variables and also the locations tables are unique.
6) Added the Dynamic Loot system from Exile again with Exile and Epoch specific configurations; here the difference is only in the location tables.
7) Pulled the map addons function from the Exile build and added a functionality to spawn addons appropriately for map and mod type.
8) Helicrashes redone to provide more variability in the types of wrecks, loot and challenge. These are spawned by a new file Crashes2.sqf
9) Added a setting to determine the number of crash sites spawned at any one time: blck_maxCrashSites. Set to -1 to disable altogether.
10) Added settings to enable / disable specific mission classes, e.g., blck_enableOrangeMissions. Set to 1 to enable, -1 to disable.
8-14-16
Added mission timout feature, set blck_missionTimout = -1 to disble;
Changed to use of params for all .sqf which also eliminated calls to BIS_fnc_params
changed to selectRandom for all .sqf
some changes to client side functions to eliminate the public variable event handler (credits to IT07 for showing the way)
Added the armed powerler to the list of default mission vehicles.
2/28/16
1) Bug fixes completed. Cleanup of bodies is now properly separated from cleanup of live AI. Cleanup of vehicles with live AI is now working correctly.
2) Released to servers this morning.
3) Next step will be to add in the heli reinforcements for ver 5.2.
2/20/16
Bugfixes and enhancements.
1) added checks for nearby bases or nearby players when spawning missions.
2) Fixed typos in Medical Camp missions.
3) Added two new modes for completing mission: 1) mission is complete when all AI are killed; 2) mission is complete when player reaches the crate OR when all AI are killed.
In Progress
1) Mission timouts
2) Added optional reinforcments via helicopters which can then patrol the mission area.
2/11/16
Major Update to Build 5.0
1) All missions but heli crashes are spawned using a single mission timer and mission spawner
2) The mission timer now calles a file containing the mission parameters. The mission spawner is included and run from that file.
3) A kill feed was added reporting each AI kill.
4) AI kills are now handled via an event handler run on the server for forward compatability with headless clients.
5) Multiple minor errors and bug fixes related to mission difficulty, AI loadouts, loot and other parameters were included.
6) The first phase of restructuring of the file structure has been completed. Most code for functions and units has been moved to a compiles directory in Compiles\Units and Compiles\Functions.
7) Some directionality and randomness was added where mission objects are spawned at random locations from an array of objects to give the missions more of a feeling of a perimeter defense where H-barrier and other objects were added.
8) As part of the restructuing, variables were moved from AIFunctions to a separate file.
9) Bugs in routines for cleanup of dead and live AI were fixed. A much simpler system for tracking live AI, dead AI, locations of active and recent missions, was implemented because of the centralization of the mission spawning to a single script

View File

@ -0,0 +1,19 @@
class CfgPatches {
class custom_server {
units[] = {};
weapons[] = {};
requiredVersion = 0.1;
requiredAddons[] = {};
};
};
class CfgFunctions {
class blck_init {
class blck_start {
file = "\q\addons\custom_server\init";
class init {
postInit = 1;
};
};
};
};

View File

@ -0,0 +1,96 @@
/*
AI Mission for Epoch and Exile Mods to Arma 3
Originally Compiled by blckeagls @ Zombieville.net
Code was modified by Narines fixing several bugs.
Modified by Ghostrider with thanks to ctbcrwker for input, testing, and troubleshooting.
Credits to Vampire, Narines, KiloSwiss, blckeagls, theFUCHS, lazylink, Mark311 who wrote mission systems upon which this one is based and who's code is used with modification in some parts of this addon.
Thanks to cyncrwler for testing and bug fixes.
*/
private ["_version","_versionDate"];
_blck_version = "6.3 Build 9";
_blck_versionDate = "10-23-16 1:00 AM";
private["_blck_loadingStartTime"];
_blck_loadingStartTime = diag_tickTime;
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_variables.sqf";
waitUntil {(isNil "blck_variablesLoaded") isEqualTo false;};
waitUntil{blck_variablesLoaded};
blck_variablesLoaded = nil;
//sleep 1;
// compile functions
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_functions.sqf";
waitUntil {(isNil "blck_functionsCompiled") isEqualTo false;};
waitUntil{blck_functionsCompiled};
blck_functionsCompiled = nil;
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\MapAddons\MapAddons_init.sqf";
private["_modType"];
_modType = [] call blck_getModType;
if (_modType isEqualTo "Epoch") then
{
diag_log format["[blckeagls] Loading Mission System using Parameters for %1",_modType];
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Configs\blck_configs_epoch.sqf";
waitUntil {(isNil "blck_configsLoaded") isEqualTo false;};
waitUntil{blck_configsLoaded};
blck_configsLoaded = nil;
};
if (_modType isEqualTo "Exile") then
{
diag_log format["[blckeagls] Loading Mission System using Parameters for %1",_modType];
call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Configs\blck_configs_exile.sqf";
waitUntil {(isNil "blck_configsLoaded") isEqualTo false;};
waitUntil{blck_configsLoaded};
blck_configsLoaded = nil;
};
diag_log "[blckeagls] Loading Map-specific information";
execVM "\q\addons\custom_server\Compiles\Functions\GMS_fnc_findWorld.sqf";
waitUntil {(isNil "blck_worldSet") isEqualTo false;};
waitUntil{blck_worldSet};
blck_worldSet = nil;
// set up the lists of available missions for each mission category
diag_log "[blckeagls] Loading Mission Lists";
#include "\q\addons\custom_server\Missions\GMS_missionLists.sqf";
diag_log format["[blckeagls] version %1 Build %2 for mod = %3 Loaded in %4 seconds",_blck_versionDate,_blck_version,_modType,diag_tickTime - _blck_loadingStartTime]; //,blck_modType];
diag_log format["blckeagls] waiting for players to join ---- >>>>"];
waitUntil{{isPlayer _x}count playableUnits > 0};
diag_log "[blckeagls] Player Connected, loading mission system";
// Load any user-defined specifications or overrides
_scriptDone = execVM "\q\addons\custom_server\Configs\blck_custom_config.sqf";
waitUntil{scriptDone _scriptDone};
//Start the mission timers
if (blck_enableOrangeMissions == 1) then
{
[_missionListOrange,_pathOrange,"OrangeMarker","orange",blck_TMin_Orange,blck_TMax_Orange] spawn blck_fnc_missionTimer;//Starts major mission system (Orange Map Markers)
};
if (blck_enableGreenMissions == 1) then
{
[_missionListGreen,_pathGreen,"GreenMarker","green",blck_TMin_Green,blck_TMax_Green] spawn blck_fnc_missionTimer;//Starts major mission system 2 (Green Map Markers)
};
if (blck_enableRedMissions == 1) then
{
[_missionListRed,_pathRed,"RedMarker","red",blck_TMin_Red,blck_TMax_Red] spawn blck_fnc_missionTimer;//Starts minor mission system (Red Map Markers)//Starts minor mission system 2 (Red Map Markers)
};
if (blck_enableBlueMissions == 1) then
{
[_missionListBlue,_pathBlue,"BlueMarker","blue",blck_TMin_Blue,blck_TMax_Blue] spawn blck_fnc_missionTimer;//Starts minor mission system (Blue Map Markers)
};
diag_log "[blckeagls] >>--- Completed initialization";
blck_Initialized = true;
publicVariable "blck_Initialized";
//diag_log format["[blckeagls] Mission system settings:blck_debugON = %4 blck_useSmokeAtCrates = %1 blck_useMines = %2 blck_useStatic = %3 blck_useVehiclePatrols %4",blck_useSmokeAtCrates,blck_useMines,blck_useStatic,blck_debugON,blck_useVehiclePatrols];
//diag_log format["[blckeagls] AI Settings: blck_useNVG = %1 blck_useLaunchers = %2",blck_useNVG,blck_useLaunchers];
//diag_log format["[blckeagls] AI Runover and other Vehicle Kill settings: blck_RunGear = %1 blck_VG_Gear =%2 blck_VK_RunoverDamage = %3 blck_VK_GunnerDamage = %4",blck_RunGear,blck_VG_Gear,blck_VK_RunoverDamage,blck_VK_GunnerDamage];
//[] execVM "\q\addons\custom_server\Compiles\Functions\GMS_fnc_monitor.sqf";

View File

@ -0,0 +1,14 @@
private["_startTime"];
_startTime = diag_tickTime;
[] spawn {
while {true} do
{
blck_serverFPS = diag_FPS;
publicVariable "blck_serverFPS";
uiSleep 3;
};
};

View File

@ -0,0 +1,10 @@
///////////////////////////////////////////////
// prevent the system from being started twice
//////////////////////////////////////////////
if !(isNil "blck_missionSystemRunning") exitWith {};
blck_missionSystemRunning = true;
/////////////////////////////////////////////
// Run the initialization routinge
////////////////////////////////////////////
execVM "\q\addons\custom_server\init\blck_init.sqf";

18
AdjustingSettings.txt Normal file
View File

@ -0,0 +1,18 @@
** Adjusting settings.
First, create a backup of all files.
Second, if your rpt log shows errors after a change, revert to the defaults and try again.
Third, settings that determine how messages are displayed are your mission file (i.e, epoch.Altis.pbo) in debug\blckClient.sqf.
Here you can use dynamic messages, hints, or titleText/cutText to display your messages.
Lastly, settings for the missions themselves have been moved to @epochhive\custom_server\configs.
There are two different config files, one for exile and a second for epoch.
There is a third config file which you can use to add additional map-specific or mod-specific settings.
For example, you might want only some missions to be running on a small map like Namalsk.

82
INSTALLATION.txt Normal file
View File

@ -0,0 +1,82 @@
Installation:
/////////////////////////////
// MPMissions - modify your mission pbo (epoch.Altis.pbo) as follows.
1) Unpack the Zip file to a folder in a convenient location.
2) Unpack your mission pbo (epoch.Altis.pbo or Exile.Altis.pbo).
3) Open the folder you just created.
4) Copy the debug folder from MPMissions\epoch.Altis.
5) Merge the line in MPMissions\epoch.Altis\init.sqf with your init.sqf, or use the one provided if you do not have one.
6) Repack your mission.pbo.
///////////////////////////
// @epochhive\addons
7) pack @epochhive\addons\custom_server
8) Copy custom_server.pbo to the @epochhive\addons folder on your server.
/////////////////////////
// Battleye Exceptions
9) update the scripts.txt file in the Battleye directory in your server directory as directed below.
7 deletemarker
!"_MainMarker
7 setMarker
!"_MainMarker"
7 createMarker
!"_MainMarker"
10) Add the following to publicvariable.txt
!="blck_Message"
11) Start your server and join. By default missions will start spawning in around 5-10 min.
//////////////////////////
// Adjusting configurations settings
a) Unpack custom_server.pbo
b) Make a backup of the relevant configuration file (custom_server\Configs\epoch_configs.sqf)
c) open the configuration file custom_server\Configs\epoch_configs.sqf) in Notepad++ or another text editor
d) Modify settings as desired.
e) Repack custom_server.pbo
///////////////////////
// Can I add map, mod or server-specific overrides for certain settings?
Yes !
You can use blck_custom_config.sqf to code any overrides you like. An example for changing some settings for Namalsk is provided.
////////////////////////
// What is this blck_debugON variable about?
It turns on accelerated mission spawning by default and activated additional logging.
You can turn it on or of in custom_server\Compiles\blck_variables.sqf.
Be careful about what you change in this file.
///////////////////////////////////////////
// Further customization
Just about anything about the missions can be modified. The mission template (see Missions\Orange\supply_camp.sqf and Missions\Blue\default.sqf for examples) allow you to define mission specific parameters.
To create a new mission, make a copy of a mission template (e.g., custom_server\Blue\default.sqf). Edit the parameters to your liking and rename to file appropriately.
Add the file name (e.g., "newmissions.sqf") the the mission list found in custom_server\Missions.
That mission will now be spawned whenever it is selected from teh list.
Items you can edit include includes:
the objects that are spawned,
The vehicles AI patrol in,
The loot added to loot chests, which can either be that defined in the default configurations or something custom for that particular loot container or mission,
The objects that are spawned with the AI, which could be a few objects as is the case with the default missions or an entire base,
Whether the objects are spawned in a precise ordered way or randomly (see the Missions\Blue\default.sqf for an example of randomly spawned objects),
The difficulty of the mission,
Settings for the mission system as a whole, and default values for most variables, are found in the mod-specific config (blck_configs_epoch.sqf or blck_configs_exile.sqf).
You can set whether:
whether vehicles are spawned as loot and whether they have anything inside them,
whether mines are spawned (better not have these if you have vehicle patrols),
whether players get to keep the AI patrol vehicles,
whether smoke is present to indicate the location of the mission,
whether players are penalized for running over AI or killing them with certain vehicle guns,
whether map markers are centered over the mission or not

13
License.md Normal file
View File

@ -0,0 +1,13 @@
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/

View File

@ -0,0 +1,158 @@
////////////////////////////////////////////
// Start Server-side functions and Create, Display Mission Messages for blckeagls mission system for Arma 3 Epoch
// Last Updated 8/14/16
// by Ghostrider-DbD-
//////////////////////////////////////////
if (hasInterface) then
{
//diag_log "[blckeagls] initializing client variables";
blck_MarkerPeristTime = 300;
blck_useHint = true;
blck_useSystemChat = true;
blck_useTitleText = false;
blck_useDynamic = false;
blck_aiKilluseSystemChat = true;
blck_aiKilluseDynamic = false;
blck_aiKilluseTitleText = false;
blck_processingMsg = -1;
blck_processingKill = -1;
blck_message = "";
fn_dynamicNotification = {
private["_text","_screentime","_xcoord","_ycoord"];
params["_mission","_message"];
waitUntil {blck_processingMsg < 0};
blck_processingMsg = 1;
_screentime = 7;
_text = format[
"<t align='left' size='0.8' color='#4CC417'>%1</t><br/><br/>
<t align='left' size='0.6' color='#F0F0F0'>%2</t><br/>",
_mission,_message
];
_ycoord = [safezoneY + safezoneH - 0.8,0.7];
_xcoord = [safezoneX + safezoneW - 0.5,0.35];
[_text,_xcoord,_ycoord,_screentime,0.5] spawn BIS_fnc_dynamicText;
uiSleep 3; // 3 second delay before the next message
blck_processingMsg = -1;
};
//diag_log "[blckeagls] initializing client functions";
fn_missionNotification = {
params["_event","_message","_mission"];
if (blck_useSystemChat) then {systemChat format["%1",_message];};
if (blck_useTitleText) then {titleText [_message, "PLAIN DOWN",5];uiSleep 5; titleText ["", "PLAIN DOWN",5]};
if (blck_useHint) then {
hint parseText format[
"<t align='center' size='2.0' color='#f29420'>%1</t><br/>
<t size='1.5' color='#01DF01'>______________</t><br/><br/>
<t size='1.5' color='#ffff00'>%2</t><br/>
<t size='1.5' color='#01DF01'>______________</t><br/><br/>
<t size='1.5' color='#FFFFFF'>Any loot you find is yours as payment for eliminating the threat!</t>",_mission,_message
];
};
if (blck_useDynamic) then {
[_mission,_message] call fn_dynamicNotification;
};
//diag_log format["_fn_missionNotification ====] Paremeters _event %1 _message %2 _mission %3",_event,_message,_mission];
};
fn_reinforcementsNotification = {
};
fn_AI_KilledNotification = {
private["_message","_text","_screentime","_xcoord","_ycoord"];
_message = _this select 0;
//diag_log format["_fn_AI_KilledNotification ====] Paremeters _event %1 _message %2 _mission %3",_message];
if (blck_aiKilluseSystemChat) then {systemChat format["%1",_message];};
if (blck_aiKilluseTitleText) then {titleText [_message, "PLAIN DOWN",5];uiSleep 5; titleText ["", "PLAIN DOWN",5]};
if (blck_aiKilluseDynamic) then {
//diag_log format["blckClient.sqf:: dynamic messaging called for mission %2 with message of %1",_message];
waitUntil{blck_processingKill < 0};
blck_processingKill = 1;
_text = format["<t align='left' size='0.5' color='#4CC417'>%1</t>",_message];
_xcoord = [safezoneX,0.8];
_ycoord = [safezoneY + safezoneH - 0.5,0.2];
_screentime = 5;
[" "+ _text,_xcoord,_ycoord,_screentime] spawn BIS_fnc_dynamicText;
uiSleep 3;
blck_processingKill = -1;
};
};
//"blck_Message" addPublicVariableEventHandler
fn_handleMessage = {
//private["_event","_msg","_mission"];
diag_log format["blck_Message ====] Paremeters = _this = %1",_this];
params["_event","_message","_mission"];
diag_log format["blck_Message ====] Paremeters _event %1 _message %2 paramter #3 %3",_event,_message,_mission];
switch (_event) do
{
case "start":
{
playSound "UAV_05";
diag_log "switch start";
//_mission = _this select 1 select 2;
[_event,_message,_mission] spawn fn_missionNotification;
};
case "end":
{
playSound "UAV_03";
diag_log "switch end";
//_mission = _this select 1 select 2;
[_event,_message,_mission] spawn fn_missionNotification;
};
case "aikilled":
{
//diag_log "switch aikilled";
[_message] spawn fn_AI_KilledNotification;
};
case "DLS":
{
if ( (player distance _mission) < 1000) then {playsound "AddItemOK"; hint _message;systemChat _message};
};
case "reinforcements":
{
if ( (player distance _mission) < 1000) then {playsound "AddItemOK"; ["Alert",_message] call fn_dynamicNotification;};
diag_log "---->>>> Reinforcements Spotted";
};
case "IED":
{
["IED","Bandits targeted your vehicle with an IED"] call fn_dynamicNotification;
for "_i" from 1 to 3 do {playSound "BattlefieldExplosions3_3D";uiSleep 0.3;};
};
};
};
//diag_log "[blckeagls] spawning JIP markers";
if (!isNil "blck_OrangeMarker") then {[blck_OrangeMarker] execVM "debug\spawnMarker.sqf"};
if (!isNil "blck_GreenMarker") then {[blck_GreenMarker] execVM "debug\spawnMarker.sqf"};
if (!isNil "blck_RedMarker") then {[blck_RedMarker] execVM "debug\spawnMarker.sqf"};
if (!isNil "blck_BlueMarker") then {[blck_BlueMarker] execVM "debug\spawnMarker.sqf"};
diag_log "blck client loaded ver 8/14/16 1.0 7:47 AM";
//diag_log "[blckeagls] starting client loop";
private["_start"];
_start = diag_tickTime;
while {true} do
{
if !(blck_Message isEqualTo "") then
{
diag_log format["[blckClient] blck_Message = %1", blck_message];
private["_message"];
_message = blck_message;
_message spawn fn_handleMessage;
blck_Message = "";
} else
{
uiSleep 0.3;
};
};
};

Some files were not shown because too many files have changed in this diff Show More