Merge pull request #2 from Ghostrider-DbD-/Corrected-Issues-With-Vehicle-Patrols
Corrected issues with vehicle patrols
This commit is contained in:
commit
b7b23e17ee
1
@epochhive/addons/custom_server/$PBOPREFIX$
Normal file
1
@epochhive/addons/custom_server/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
q\addons\custom_server
|
1
@epochhive/addons/custom_server/$PREFIX$
Normal file
1
@epochhive/addons/custom_server/$PREFIX$
Normal file
@ -0,0 +1 @@
|
||||
q\addons\custom_server
|
@ -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];
|
||||
};
|
||||
*/
|
||||
|
@ -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];
|
||||
};
|
||||
*/
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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;
|
@ -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;
|
@ -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];
|
||||
|
||||
|
@ -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;
|
||||
*/
|
||||
};
|
||||
|
@ -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;
|
||||
|
||||
};
|
||||
};
|
||||
*/
|
@ -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]
|
||||
|
@ -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)];
|
||||
|
@ -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)];
|
||||
|
@ -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
|
@ -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
|
@ -0,0 +1,14 @@
|
||||
|
||||
|
||||
private["_startTime"];
|
||||
_startTime = diag_tickTime;
|
||||
[] spawn {
|
||||
while {true} do
|
||||
{
|
||||
blck_serverFPS = diag_FPS;
|
||||
publicVariable "blck_serverFPS";
|
||||
uiSleep 3;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -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";
|
@ -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
|
@ -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)];
|
||||
|
@ -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];
|
@ -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)];
|
||||
|
@ -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;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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))];
|
||||
};
|
||||
};
|
@ -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];
|
||||
};
|
@ -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];
|
||||
};
|
@ -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
|
||||
};
|
@ -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
|
@ -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;
|
||||
};
|
||||
};
|
@ -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
|
@ -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;
|
@ -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
|
@ -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
|
@ -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;
|
@ -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;
|
||||
|
@ -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
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
||||
};
|
@ -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];
|
@ -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;
|
||||
};
|
@ -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"];
|
@ -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;
|
||||
|
@ -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"]
|
||||
|
@ -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
|
@ -0,0 +1,8 @@
|
||||
params["_unit"];
|
||||
|
||||
removeVest _unit;
|
||||
//removeHeadgear _this;
|
||||
removeGoggles _unit;
|
||||
removeAllItems _unit;
|
||||
removeAllWeapons _unit;
|
||||
removeBackpackGlobal _unit;
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
@ -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";
|
||||
};
|
||||
};
|
@ -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
|
@ -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;
|
@ -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
|
||||
|
||||
|
@ -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"];
|
@ -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;
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
@ -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
|
@ -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];
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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" ;
|
||||
};
|
||||
};
|
||||
|
||||
|
115
@epochhive/addons/custom_server/Compiles/blck_functions.sqf
Normal file
115
@epochhive/addons/custom_server/Compiles/blck_functions.sqf
Normal 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;
|
38
@epochhive/addons/custom_server/Compiles/blck_variables.sqf
Normal file
38
@epochhive/addons/custom_server/Compiles/blck_variables.sqf
Normal 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;
|
191
@epochhive/addons/custom_server/Compiles/passToHCs.sqf
Normal file
191
@epochhive/addons/custom_server/Compiles/passToHCs.sqf
Normal 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";
|
||||
};
|
||||
|
||||
};
|
861
@epochhive/addons/custom_server/Configs/blck_configs_epoch.sqf
Normal file
861
@epochhive/addons/custom_server/Configs/blck_configs_epoch.sqf
Normal 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;
|
882
@epochhive/addons/custom_server/Configs/blck_configs_exile.sqf
Normal file
882
@epochhive/addons/custom_server/Configs/blck_configs_exile.sqf
Normal 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;
|
102
@epochhive/addons/custom_server/Configs/blck_custom_config.sqf
Normal file
102
@epochhive/addons/custom_server/Configs/blck_custom_config.sqf
Normal 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]
|
||||
];
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
51
@epochhive/addons/custom_server/Missions/Blue/default.sqf
Normal file
51
@epochhive/addons/custom_server/Missions/Blue/default.sqf
Normal 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";
|
39
@epochhive/addons/custom_server/Missions/Blue/default2.sqf
Normal file
39
@epochhive/addons/custom_server/Missions/Blue/default2.sqf
Normal 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";
|
@ -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";
|
||||
|
80
@epochhive/addons/custom_server/Missions/Blue/redCamp.sqf
Normal file
80
@epochhive/addons/custom_server/Missions/Blue/redCamp.sqf
Normal 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";
|
||||
|
||||
|
@ -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";
|
@ -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";
|
34
@epochhive/addons/custom_server/Missions/Green/default.sqf
Normal file
34
@epochhive/addons/custom_server/Missions/Green/default.sqf
Normal 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";
|
38
@epochhive/addons/custom_server/Missions/Green/default2.sqf
Normal file
38
@epochhive/addons/custom_server/Missions/Green/default2.sqf
Normal 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";
|
@ -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";
|
||||
|
79
@epochhive/addons/custom_server/Missions/Green/redCamp.sqf
Normal file
79
@epochhive/addons/custom_server/Missions/Green/redCamp.sqf
Normal 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";
|
||||
|
||||
|
@ -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";
|
34
@epochhive/addons/custom_server/Missions/Orange/default.sqf
Normal file
34
@epochhive/addons/custom_server/Missions/Orange/default.sqf
Normal 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";
|
53
@epochhive/addons/custom_server/Missions/Orange/default2.sqf
Normal file
53
@epochhive/addons/custom_server/Missions/Orange/default2.sqf
Normal 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";
|
@ -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";
|
||||
|
79
@epochhive/addons/custom_server/Missions/Orange/redCamp.sqf
Normal file
79
@epochhive/addons/custom_server/Missions/Orange/redCamp.sqf
Normal 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";
|
||||
|
||||
|
@ -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";
|
34
@epochhive/addons/custom_server/Missions/Red/default.sqf
Normal file
34
@epochhive/addons/custom_server/Missions/Red/default.sqf
Normal 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";
|
41
@epochhive/addons/custom_server/Missions/Red/default2.sqf
Normal file
41
@epochhive/addons/custom_server/Missions/Red/default2.sqf
Normal 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";
|
||||
|
||||
|
52
@epochhive/addons/custom_server/Missions/Red/medicalCamp.sqf
Normal file
52
@epochhive/addons/custom_server/Missions/Red/medicalCamp.sqf
Normal 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";
|
||||
|
91
@epochhive/addons/custom_server/Missions/Red/redCamp.sqf
Normal file
91
@epochhive/addons/custom_server/Missions/Red/redCamp.sqf
Normal 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";
|
||||
|
||||
|
@ -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";
|
29
@epochhive/addons/custom_server/TimeAccel/Time.sqf
Normal file
29
@epochhive/addons/custom_server/TimeAccel/Time.sqf
Normal 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)];
|
||||
|
87
@epochhive/addons/custom_server/changeLog.sqf
Normal file
87
@epochhive/addons/custom_server/changeLog.sqf
Normal 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
|
19
@epochhive/addons/custom_server/config.cpp
Normal file
19
@epochhive/addons/custom_server/config.cpp
Normal 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;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
96
@epochhive/addons/custom_server/init/blck_init.sqf
Normal file
96
@epochhive/addons/custom_server/init/blck_init.sqf
Normal 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";
|
14
@epochhive/addons/custom_server/init/broadcastServerFPS.sqf
Normal file
14
@epochhive/addons/custom_server/init/broadcastServerFPS.sqf
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
|
||||
private["_startTime"];
|
||||
_startTime = diag_tickTime;
|
||||
[] spawn {
|
||||
while {true} do
|
||||
{
|
||||
blck_serverFPS = diag_FPS;
|
||||
publicVariable "blck_serverFPS";
|
||||
uiSleep 3;
|
||||
};
|
||||
};
|
||||
|
||||
|
10
@epochhive/addons/custom_server/init/fn_init.sqf
Normal file
10
@epochhive/addons/custom_server/init/fn_init.sqf
Normal 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
18
AdjustingSettings.txt
Normal 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
82
INSTALLATION.txt
Normal 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
13
License.md
Normal 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/
|
158
MPMissions/Exile.Altis/debug/blckClient.sqf
Normal file
158
MPMissions/Exile.Altis/debug/blckClient.sqf
Normal 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
Loading…
Reference in New Issue
Block a user