diff --git a/@ExileServer/addons/custom_server/$PBOPREFIX$ b/@ExileServer/addons/custom_server/$PBOPREFIX$ new file mode 100644 index 0000000..f1604b0 --- /dev/null +++ b/@ExileServer/addons/custom_server/$PBOPREFIX$ @@ -0,0 +1 @@ +q\addons\custom_server \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/$PREFIX$ b/@ExileServer/addons/custom_server/$PREFIX$ new file mode 100644 index 0000000..f1604b0 --- /dev/null +++ b/@ExileServer/addons/custom_server/$PREFIX$ @@ -0,0 +1 @@ +q\addons\custom_server \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_AIM.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_AIM.sqf new file mode 100644 index 0000000..d84b4e4 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_AIM.sqf @@ -0,0 +1,27 @@ +//This script sends Message Information to allplayers +// Last modified 1/4/17 by Ghostrider-DBD- +/* + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//blck_Message = _this; +params["_msg",["_players",playableUnits]]; +if (blck_debugLevel > 1) then {diag_log format["AIM.sqf ===] _this = %1 | _msg = %2 | _players = %3",_this,_msg, _players];}; +blck_Message = _msg; +{ + //diag_log format["AIM.sqf ===] _ = %2, and (owner _x) = %1", (owner _x), _x]; + (owner _x) publicVariableClient "blck_Message"; +} forEach _players; +/* +if (_modType isEqualTo "Exile") then +{ + [_blck_Message] remoteExec["fn_blck_MessageHandler",0]; +}; +*/ + diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_GroupsOnAISide.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_GroupsOnAISide.sqf new file mode 100644 index 0000000..dcbcf5e --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_GroupsOnAISide.sqf @@ -0,0 +1,24 @@ +/* + Determines the total number of spawned groups on the side used by the mission system and returns this value. + By Ghostrider-DbD- + Last updated 12/21/16 +/* + By Ghostrider-DbD- + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private _Groups_AI_Side = 0; + +{ + if ( (side _x) isEqualTo blck_AI_Side) then {_Groups_AI_Side = _Groups_AI_Side + 1;}; +}forEach allGroups; +//diag_log format["_fnc_groupsOnAISide:: -- >> allGroups = %1 | _Groups_AI_Side = %2",allGroups, _Groups_AI_Side]; + +// Return the number of groups used. +_Groups_AI_Side diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_addItemToCrate.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_addItemToCrate.sqf new file mode 100644 index 0000000..dd1bb1d --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_addItemToCrate.sqf @@ -0,0 +1,63 @@ +/* + [_item,_crate] call blck_addItemToCrate; + where + _crate is a container such as ammo box or vehicle + _item is a string or array. + If _item is a string then add 1 of that item to the container. + If _item is an array with 2 elements ["itemName",3] then assume that the first element is a string and is the name of the item, and the second is the number to add. + if _item is an array with 3 elements ["itemName",2,6] assume that the first element is the item name (string), the second the min # to add and the third the max # to add. + by Ghostrider-DbD- + 11/14/16 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + + params["_itemInfo","_crate",["_addAmmo",0]]; + private["_isRifle","_isMagazine","_isBackpack"]; + _isWeapon = false; + _isMagazine = false; + _isBackpack = false; + _quant = 0; + #ifdef blck_debugMode + diag_log format["blck_addItemToCrate:: -- >> itemInfo = %1 | _crate %2 | _addAmmo %3",_itemInfo, _crate, _addAmmo]; + #endif + if (typeName _itemInfo isEqualTo "STRING") then {_item = _itemInfo; _quant = 1}; // case where only the item descriptor was provided + if (typeName _itemInfo isEqualTo "ARRAY") then { + + if (count _itemInfo isEqualTo 2) then {_item = _itemInfo select 0; _quant = _itemInfo select 1;}; // case where item descriptor and quantity were provided + if (count _itemInfo isEqualto 3) then { + _item = _itemInfo select 0; + _quant = (_itemInfo select 1) + round(random((_itemInfo select 2) - (_itemInfo select 1))); + }; // case where item descriptor, min number and max number were provided. + }; + if (((typeName _item) isEqualTo "STRING") && (_item != "")) then + { + if (isClass(configFile >> "CfgWeapons" >> _item)) then { + _crate addWeaponCargoGlobal [_item,_quant]; + _isWeapon = true; + _count = 0; + if (typeName _addAmmo isEqualTo "SCALAR") then + { + _count = _addAmmo; + }; + if (typeName _addAmmo isEqualto "ARRAY") then + { + _count = (_addAmmo select 0) + (round(random((_addAmmo select 1) - (_addAmmo select 0)))); + }; + _ammo = getArray (configFile >> "CfgWeapons" >> _item >> "magazines"); + for "_i" from 1 to _count do + { + _crate addMagazineCargoGlobal [selectRandom _ammo,1]; + }; + }; + if (_item isKindOf ["Bag_Base", configFile >> "CfgVehicles"]) then {_crate addBackpackCargoGlobal [_item,_quant]; _isBackpack = true;}; + if (isClass(configFile >> "CfgMagazines" >> _item)) then {_crate addMagazineCargoGlobal [_item,_quant]; _isMagazine = true;}; + if (!_isWeapon && !_isMagazine && _isBackpack && isClass(configFile >> "CfgVehicles" >> _item)) then {_crate addItemCargoGlobal [_item,_quant]}; + }; diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_allPlayers.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_allPlayers.sqf new file mode 100644 index 0000000..88809e1 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_allPlayers.sqf @@ -0,0 +1,24 @@ +////////////////////////////////////////////////////// +// Returns an array of all players on the server +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 2/24/17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +///////////////////////////////////////////////////// + +private ["_result"]; + +_result = []; +{ + if (isPlayer _x) then { _result pushback _x }; +} forEach playableUnits; +_result diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_broadcastServerFPS.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_broadcastServerFPS.sqf new file mode 100644 index 0000000..81f51d1 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_broadcastServerFPS.sqf @@ -0,0 +1,19 @@ + + +/* + By Ghostrider-DbD- + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +blck_serverFPS = diag_FPS; +publicVariable "blck_serverFPS"; + + + + diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_cleanEmptyGroups.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_cleanEmptyGroups.sqf new file mode 100644 index 0000000..2d6a911 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_cleanEmptyGroups.sqf @@ -0,0 +1,29 @@ +/* + call as [] call blck_fnc_cleanEmptyGroups; + Deletes any empty groups and thereby prevents errors resulting from createGroup returning nullGroup. + By Ghostrider-DbD- + 11/16/16 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +#ifdef blck_debugMode +if (blck_debugLevel > 2) then +{ + diag_log format ["_fnc_cleanEmptyGroups:: -- >> group count = %1 ",(count allGroups)]; + diag_log format ["_fnc_cleanEmptyGroups:: -- >> Group count AI side = %1", call blck_fnc_groupsOnAISide]; +}; +#endif + +private _grp = +allGroups; +{ + //diag_log format["_fnc_cleanEmptyGroups:: - >> type of object _x = %1",typeName _x]; + if ((count units _x) isEqualTo 0) then {deleteGroup _x}; +}forEach _grp; +if (blck_debugLevel > 2) then {diag_log "_fnc_cleanEmptyGroups:: -- >> exiting function";}; + diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_emptyObject.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_emptyObject.sqf new file mode 100644 index 0000000..2519fdc --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_emptyObject.sqf @@ -0,0 +1,18 @@ + + /* + Remove all inventory from an object. + By Ghostrider-DbD0 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + params["_veh"]; + clearWeaponCargoGlobal _veh; + clearMagazineCargoGlobal _veh; + clearBackpackCargoGlobal _veh; + clearItemCargoGlobal _veh; diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_findPositionsAlongARadius.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_findPositionsAlongARadius.sqf new file mode 100644 index 0000000..af4ce3a --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_findPositionsAlongARadius.sqf @@ -0,0 +1,37 @@ +/* + Generates an array of equidistant positions along the circle of diameter _radius + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 1-22-17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_locs","_startDir","_currentDir","_Arc","_dist","_newpos"]; +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 + + + diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf new file mode 100644 index 0000000..3dc19ae --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf @@ -0,0 +1,131 @@ +// 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 1-22-17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_findNew","_coords","_dist","_xpos","_ypos","_newPos","_townPos","_pole"]; + +_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 distance2D _coords) < blck_MinDistanceFromMission) then { + _findNew = true; + }; + }forEach DBD_HeliCrashSites; + + { + if ( ((_x select 0) distance2D _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 distance2D _coords) < blck_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) distance2D _coords) < blck_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 distance2D _coords < 200) exitWith { + _findNew = true; + }; + } forEach blck_townLocations; + + // check for nearby plot pole/freq jammer within 800 meters + _mod = call blck_fnc_getModType; + _pole = ""; + if (_mod isEqualTo "Epoch") then {_pole = "PlotPole_EPOCH"}; + if (_mod isEqualTo "Exile") then {_pole = "Exile_Construction_Flag_Static"}; + //diag_log format["_fnc_findSafePosn:: -- >> _mod = %1 and _pole = %2",_mod,_pole]; + { + if ((_x distance2D _coords) < 600) then + { + _findNew = true; + }; + }forEach nearestObjects[player, [_pole], 800]; + + // check to be sure we do not spawn a mission on top of a player. + { + if (isPlayer _x && (_x distance2D _coords) < 600) then + { + _findNew = true; + }; + }forEach playableUnits; + + if (toLower(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; diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_findWorld.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_findWorld.sqf new file mode 100644 index 0000000..5d9bafb --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_findWorld.sqf @@ -0,0 +1,67 @@ +/* + 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 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_blck_WorldName"]; + +_blck_WorldName = toLower format ["%1", worldName]; +_blck_worldSize = worldSize; + +diag_log format["[blckeagls] Loading Map-specific settings with worldName = %1",_blck_WorldName]; + +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 "[blckeagls] Altis-specific settings for Epoch loaded"; + blck_mapCenter = [6322,7801,0]; + blck_mapRange = 21000; + }; + case "stratis":{ + diag_log "[blckeagls] Stratis-specific settings loaded"; + blck_mapCenter = [6322,7801,0]; + blck_mapRange = 4500; + }; // Add Central, East and West respawns/traders + case "chernarus":{ + diag_log "[blckeagls] Chernarus-specific settings loaded"; + blck_mapCenter = [7100, 7750, 0]; //centerPosition = {7100, 7750, 300}; + blck_mapRange = 5300; + }; + case "chernarus_summer":{blck_mapCenter = [7100, 7750, 0]; blck_mapRange = 6000;}; + case "bornholm":{ + //diag_log "Bornholm-specific settings loaded"; + blck_mapCenter = [11240, 11292, 0]; + blck_mapRange = 14400; + }; + case "esseker":{ + diag_log "Esseker-specific settings loaded"; + blck_mapCenter = [6049.26,6239.63,0]; //centerPosition = {7100, 7750, 300}; + blck_mapRange = 6000; + }; + 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;}; + case "panthera3":{blck_mapCenter = [4400, 4400, 0];blck_mapRange = 4400;}; + case "isladuala":{blck_mapCenter = [4400, 4400, 0];blck_mapRange = 4400;}; + case "sauerland":{blck_mapCenter = [12800, 12800, 0];blck_mapRange = 12800;}; + case "trinity":{blck_mapCenter = [6400, 6400, 0];blck_mapRange = 6400;}; + case "utes":{blck_mapCenter = [3500, 3500, 0];blck_mapRange = 3500;}; + case "zargabad":{blck_mapCenter = [4096, 4096, 0];blck_mapRange = 4096;}; + case "fallujah":{blck_mapCenter = [3500, 3500, 0];blck_mapRange = 3500;}; + case "tavi":{blck_mapCenter = [10370, 11510, 0];blck_mapRange = 14090;}; + case "lingor":{blck_mapCenter = [4400, 4400, 0];blck_mapRange = 4400;}; + case "takistan":{blck_mapCenter = [5500, 6500, 0];blck_mapRange = 5000;}; + default {_blck_WorldName = "default";blck_mapCenter = [6322,7801,0]; blck_mapRange = 6000}; +}; + +blck_worldSet = true; diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_getModType.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_getModType.sqf new file mode 100644 index 0000000..a78bfc3 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_getModType.sqf @@ -0,0 +1,19 @@ +/* + Based on code by IT07 written for VEMF_r + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +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 diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_getTraderCitesEpoch.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_getTraderCitesEpoch.sqf new file mode 100644 index 0000000..be245c1 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_getTraderCitesEpoch.sqf @@ -0,0 +1,23 @@ +// pull trader cities from config +/* + By Ghostrider-DbD- + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +if !(blck_blacklistTraderCities) exitWith {}; +diag_log format["[blckeagls] Adding Trader Cities to blacklisted locations based on setting for blck_blacklistTraderCities = %1",blck_blacklistTraderCities]; +private _traderCites = allMapMarkers; + +{ + if (_x in ["center","respawn_east","respawn_west","respawn_north"] && blck_blacklistTraderCities) then + { + blck_locationBlackList pushback [getMarkerPos _x,1000]; + //if (blck_debugON) then {diag_log format["[blckeagls] _fnc_getTraderCitiesEpoch:: -- >> Added epoch trader city location at %1", (getMarkerPos _x)];}; + }; +}forEach _traderCites; diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_getTraderCitesExile.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_getTraderCitesExile.sqf new file mode 100644 index 0000000..c9c9529 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_getTraderCitesExile.sqf @@ -0,0 +1,31 @@ +// pull trader cities from config +/* + By Ghostrider-DbD- + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private _traderCites = allMapMarkers; +_tc = []; +{ + if (blck_debugON) then {diag_log format["[blckeagls] _fnc_getExileLocations :: -- >> Evaluating Markertype of %1", (getMarkerType _x)];}; + if (getMarkerType _x isEqualTo "ExileTraderZone" && blck_blacklistTraderCities) then { + blck_locationBlackList pushback [(getMarkerPos _x),1000]; + if (blck_debugON) then {diag_log format["[blckeagls] _fnc_getExileLocations :: -- >> Added Exile Trader location at %1", (getMarkerPos _x)];}; + }; + + if ((getMarkerType _x isEqualTo "ExileSpawnZone") && blck_blacklistSpawns) then { + blck_locationBlackList pushback [(getMarkerPos _x),1000]; + if (blck_debugON) then {diag_log format["[blckeagls] _fnc_getExileLocations :: -- >> Added Exile Spawn location at %1", (getMarkerPos _x)];}; + }; + // + if (getMarkerType _x isEqualTo "ExileConcreteMixerZone" && blck_listConcreteMixerZones) then { + blck_locationBlackList pushback [(getMarkerPos _x),1000]; + if (blck_debugON) then {diag_log format["[blckeagls] _fnc_getExileLocations :: -- >> Added Exile Concrete Mixer location at %1", (getMarkerPos _x)];}; + }; +}forEach _traderCites; diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_giveTakeCrypto.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_giveTakeCrypto.sqf new file mode 100644 index 0000000..2140f28 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_giveTakeCrypto.sqf @@ -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 . + Contact : halvhjearne@gmail.com +*/ + params["_player","_nr"]; + private["_cIndex","_vars","_current_crypto","_current_cryptoRaw","_playerCryptoLimit"]; + _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]; + + diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_loadLootItemsFromArray.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_loadLootItemsFromArray.sqf new file mode 100644 index 0000000..1e8a2d2 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_loadLootItemsFromArray.sqf @@ -0,0 +1,57 @@ +/* + Depends on blck_fnc_addItemToCrate + + call as: + + [_item,_crate] call blck_fnc_loadLootFromItemsArray; + + where + _crate is a container such as ammo box or vehicle + _loadout is an array containing either 2 or 3 elements. The first array is always an array of items to add. Items can be formated as ["item1","item1"], as [["item1",3],["item2",2]] or as [["item1",2,4],["item2",3,5]]. + See GMS_fnc_addItemToCrate for information about the acceptable formates for the items "item1" ... "itemN". + + The second and optional third element in the array specify the number of times the script will randomly select an item from the array of items and load it into the crate. + For example: + case 1: [["item1",...,"itemN"],6]; The script will randomly select from the array of item names 6 times and call the loot loader each time. + case 2: [["item1",...,"itemN"],6, 9]; As above except that an item will be selected a minimum of 6 and maximum of 9 times. + + by Ghostrider-DbD- + 6/7/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + + params["_loadout","_crate",["_addAmmo",0]]; + #ifdef blck_debugMode + diag_log format["blck_fnc_loadLootFromItemsArray:: _this %1",_this]; + diag_log format["blck_fnc_loadLootFromItemsArray:: _crate %1 | _addAmmo %2 | _loadout %3",_crate,_addAmmo,_loadout]; + #endif + if ((_loadout select 0) isEqualTo []) exitWith {}; + { + private["_tries","_q","_item"]; + _tries = 0; + #ifdef blck_debugMode + diag_log format["blck_fnc_loadLootFromItemsArray:: -- >> now loading for %1",_x]; + #endif + _q = _x select 1; // this can be a number or array. + if ( (typeName _q) isEqualTo "ARRAY") then // Assume the array contains a min/max number to add + { + if ((count _q) isEqualTo 2) then {_tries = (_q select 0) + round(random(((_q select 1) - (_q select 0))));} else {_tries = 0;}; + }; + if ((typeName _q) isEqualTo "SCALAR") then + { + _tries = _q; + }; + for "_i" from 1 to _tries do + { + _item = selectRandom (_x select 0); + [_item,_crate,_addAmmo] call blck_fnc_addItemToCrate; + }; + }forEach _loadout; diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf new file mode 100644 index 0000000..0dd64a9 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_mainThread.sqf @@ -0,0 +1,68 @@ +/* + By Ghostrider-DbD- + Last modified 4-5-17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +diag_log format["starting _fnc_mainThread with time = %1",diag_tickTime]; + +#ifdef DBDserver +diag_log "running DBDServer version of _fnc_mainThread"; +#endif + +private["_modType","_timer1sec","_timer5sec","_timer20sec","_timer5min","_timer5min"]; +_timer1sec = diag_tickTime; +_timer5sec = diag_tickTime; +_timer20sec = diag_tickTime; +_timer1min = diag_tickTime; +_timer5min = diag_tickTime; +_modType = [] call blck_fnc_getModType; +while {true} do +{ + uiSleep 1; + //diag_log format["mainThread:: -- > time = %1",diag_tickTime]; + if (diag_tickTime - _timer1sec > 1) then + { + [] call blck_fnc_vehicleMonitor; + #ifdef DBDserver + [] call blck_fnc_broadcastServerFPS; + #endif + _timer1sec = diag_tickTime; + }; + if (diag_tickTime - _timer5sec > 5) then + { + _timer5sec = diag_tickTime; + [] call blck_fnc_missionGroupMonitor; + }; + if (diag_tickTime - _timer20sec > 20) then + { + [] call blck_fnc_cleanupAliveAI; + [] call blck_fnc_cleanupObjects; + [] call blck_fnc_cleanupDeadAI; + _timer20sec = diag_tickTime; + //diag_log format["_mainThread::-->> diag_tickTime = %1",diag_tickTime]; + }; + if (diag_tickTime - _timer1min > 60) then + { + _timer1min = diag_tickTime; + [] call blck_fnc_spawnPendingMissions; + //[] call blck_fnc_missionGroupMonitor; + if (_modType isEqualTo "Epoch") then + { + [] call blck_fnc_cleanEmptyGroups; + }; // Exile cleans up empty groups automatically so this should not be needed with that mod. + }; + if (blck_useTimeAcceleration) then + { + if (diag_tickTime - _timer5min > 30) then { + [] call blck_fnc_timeAcceleration; + _timer5min = diag_tickTime; + }; + }; +}; diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_monitorHC.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_monitorHC.sqf new file mode 100644 index 0000000..a52058c --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_monitorHC.sqf @@ -0,0 +1,32 @@ +/* + Check if an HC is connected and if so transfer some AI to it. + By Ghostrider-DbD- + Last modified 11-8-16 +/* + By Ghostrider-DbD- + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private _hc = missionNamespace getVariable["HC1","null"]; +diag_log format["monitorHC::->> _hc = %1",_hc]; +if !( (typeName _hc isEqualTo "OBJECT" || _hc isEqualTo "null") ) exitWith {}; + +if (typeOf _hc isEqualTo "HeadlessClient_F") then // a valid headless client is connected +{ + private _hcOwner = owner _hc; + private _xfered = 0; + { + if (!(isPlayer _x) && (groupOwner _x != _hcOwner) ) then { + _x setGroupOwner (_hcOwner); + _xfered = +1; + diag_log format["monitorHC::-->> group %1 transfered to HC1",_x]; + }; + if (_xfered isEqualTo 6) exitWith {}; + }forEach allGroups; +}; diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRange.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRange.sqf new file mode 100644 index 0000000..0d13b45 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRange.sqf @@ -0,0 +1,42 @@ +////////////////////////////////////////////////////// +// 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 + Last Modified 2/24/17 +/* + By Ghostrider-DbD- + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +///////////////////////////////////////////////////// + +private ["_result","_players"]; +params["_pos","_dist",["_onFootOnly",false]]; +_players = call blck_fnc_allPlayers; +_result = false; + +//diag_log format["_fnc_playerInRange:: -> _pos = %1 and _dist = %2 and _result = %3",_pos,_dist,_result]; +if !(_onFootOnly) then +{ + { + //diag_log format["_fnc_playerInRange:: !_onFootOnly -> _pos = %1 and _player = %2 and distance = %3",_pos,_x, _pos distance _x]; + if ((_x distance2D _pos) < _dist) exitWith {_result = true;}; + } forEach _players; +}; + +if (_onFootOnly) then +{ + { + //diag_log format["_fnc_playerInRange:: onfootOnly -> _pos = %1 and _player = %2 and distance = %3",_pos,_x, _pos distance2d _x]; + if ( ((_x distance2D _pos) < _dist) && (vehicle _x isEqualTo _x)) exitWith {_result = true;}; + } forEach _players; +}; +//diag_log format["_fnc_playerInRange:: returning with _result = %1",_result]; +_result diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRangeArray.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRangeArray.sqf new file mode 100644 index 0000000..b73b8da --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_playerInRangeArray.sqf @@ -0,0 +1,29 @@ +////////////////////////////////////////////////////// +// 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 + Last Modified 2/24/17 +/* + By Ghostrider-DbD- + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +///////////////////////////////////////////////////// + +private ["_result"]; +params["_locations","_dist",["_onFootOnly",false]]; +//diag_log format["_fnc_playerInRangeArray: _locations = %1 | _dist = %2 | _onFootOnly = %3",_locations,_dist, _onFootOnly]; +_result = false; +{ + _result = [_x,_dist,_onFootOnly] call blck_fnc_playerInRange; + if (_result) exitWith {}; +} forEach _locations; +//diag_log format["_fnc_playerInRangeArray: _locations = %1 |_return = %2",_result]; +_result diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_randomPosn.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_randomPosn.sqf new file mode 100644 index 0000000..bb91d4d --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_randomPosn.sqf @@ -0,0 +1,30 @@ +////////////////////////////////////////////// +// 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 +/* + By Ghostrider-DbD- + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +//////////////////////////////////////////// + +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] + diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_timedOut.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_timedOut.sqf new file mode 100644 index 0000000..2a5c2ad --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_timedOut.sqf @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////// +// test if a timeout condition exists. +// by Ghostrider-DBD- +// Last modified 1/22/17 +// [_startTime] call blck_fnc_timedOut +// Returns true (timed out) or false (not timed out) +/* + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +///////////////////////////////////////////////////// + +params["_startTime"]; +private["_return"]; +if ((diag_tickTime - _startTime) > blck_MissionTimout ) then {_return = true} else {_return = false}; +//diag_log format["fnc_timedOut:: blck_MissionTimout = %2 || _return = %1",_return,blck_MissionTimout]; +_return; diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_waitTimer.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_waitTimer.sqf new file mode 100644 index 0000000..ac77f8b --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_fnc_waitTimer.sqf @@ -0,0 +1,27 @@ +/* + 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; +/* + By Ghostrider-DbD- + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +private["_wait","_Tstart"]; +params["_min","_max"]; + +_wait = round( _min + (_max - _min) ); +uiSleep _wait; + +true diff --git a/@ExileServer/addons/custom_server/Compiles/Functions/GMS_getModType.sqf b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_getModType.sqf new file mode 100644 index 0000000..0e5be23 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Functions/GMS_getModType.sqf @@ -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 diff --git a/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_changeToMoveWaypoint.sqf b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_changeToMoveWaypoint.sqf new file mode 100644 index 0000000..4cf18b2 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_changeToMoveWaypoint.sqf @@ -0,0 +1,93 @@ +// Changes type of waypont0 for the specified group to "MOVE" and updates time stamps, WP postion and Timout parameters accordinglyD. +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last modified 4/23/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +#ifdef blck_debugMode +//diag_log "_fnc_changeToMoveWaypoint: blck_debugMode enabled"; +#endif +private["_group","_wp","_wpPos","_dis","_arc","_dir","_newPos","_marker","_center","_minDis","_maxDis"]; + +_group = group _this; +_group setcombatmode "YELLOW"; +_group setBehaviour "COMBAT"; +_group setVariable["timeStamp",diag_tickTime]; +_wp = [_group, 0]; +_wpPos = getPos ((units _group) select 0); +_dir = _group getVariable["wpDir",0]; +_center = _group getVariable ["patrolCenter",_wpPos]; +if (_group getVariable["wpMode","random"] isEqualTo "random") then +{ + _dir = random(360); +} else { + _dir = (_group getVariable["wpDir",0]) + 70; + _group setVariable["wpDir",_dir]; +}; +_minDis = _group getVariable["minDis",25]; +_maxDis = _group getVariable["maxDis",30]; +_dis = (_minDis) + random( (_maxDis) - (_minDis) ); +_newPos = (_center) getPos[_dis,_dir]; +_wp setWPPos [_newPos select 0, _newPos select 1]; +_wp setWaypointCompletionRadius (_group getVariable["wpRadius",30]); +_wp setWaypointType "MOVE"; +_wp setWaypointName "move"; +_wp setWaypointBehaviour "COMBAT"; +_wp setWaypointCombatMode "YELLOW"; +_wp setWaypointTimeout [1,1.1,1.2]; +_group setCurrentWaypoint _wp; +#ifdef blck_debugMode +if (blck_debugLevel > 2) then +{ + diag_log format["_fnc_changeToMoveWaypoint (4/25/17): _this = %1", _this]; + diag_log format["_fnc_changeToMoveWaypoint: typeName _this = %1", typeName _this]; + diag_log format["_fnc_changeToMoveWaypoint:_group = %1",_group]; + diag_log format["_fnc_changeToMoveWaypoint:_group timestamp updated to %1", _group getVariable "timeStamp"]; + diag_log format["_fnc_changeToMoveWaypoint:: -- >> wpMode %1 _dir %2 _dis %3 _center %4",_group getVariable["wpMode","random"], _dir, _dis,_center]; + diag_log format["_fnc_changeToMoveWaypoint:: -- >> group to update is %1 and new position is %2",_group, _newPos]; + diag_log format["_fnc_changeToMoveWaypoint:: -- >> group to update is %1 and new Waypoint position is %2",_group, getWPPos _wp]; + diag_log format["_fnc_changeToMoveWaypoint:_group %1 basic waypoint parameters updates", _group getVariable "timeStamp"]; + _marker =_group getVariable["wpMarker",""]; + _marker setMarkerColor "ColorBlue"; + diag_log format["_fnc_changeToMoveWaypoint:: -- >> Waypoint marker for group %1 have been configured as %2",_group, _group getVariable "wpMarker"]; +}; +#endif +if (_group getVariable["wpPatrolMode",""] isEqualTo "SAD") then +{ + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_changeToMoveWaypoint: seting waypoint script for group %1 to SAD Mode",_group]; + }; + _wp setWaypointStatements ["true","this call blck_fnc_changeToSADWaypoint; diag_log format['====Updating timestamp for group %1 and changing its WP to a SAD Waypoint',group this];"]; + #else + _wp setWaypointStatements ["true","this call blck_fnc_changeToSADWaypoint;"]; + #endif +}; +if (_group getVariable["wpPatrolMode",""] isEqualTo "SENTRY") then +{ + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_changeToMoveWaypoint: seting waypoint script for group %1 to SENTRY Mode",_group]; + }; + _wp setWaypointStatements ["true","this call blck_fnc_changeToSentryWaypoint; diag_log format['====Updating timestamp for group %1 and changing its WP to a SENTRY Waypoint',group this];"]; + #else + _wp setWaypointStatements ["true","this call blck_fnc_changeToSentryWaypoint;"]; + #endif +}; +#ifdef blck_debugMode +if (blck_debugLevel > 1) then +{ + diag_log format["_fnc_changeToMoveWaypoint:: -- >> Waypoint statements for group %1 have been configured as %2",_group, waypointStatements _wp]; +}; +#endif diff --git a/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_changeToSADWaypoint.sqf b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_changeToSADWaypoint.sqf new file mode 100644 index 0000000..a6b2c90 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_changeToSADWaypoint.sqf @@ -0,0 +1,52 @@ +// Sets the WP type for WP for the specified group and updates other atributes accordingly. +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last modified 4/29/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +#ifdef blck_debugMode +diag_log "_fnc_changeToSADWaypoint: blck_debugMode enabled"; +#endif + +private["_group","_wp"]; + +_group = group _this; +_group setVariable["timeStamp",diag_tickTime]; +_group setcombatmode "RED"; +_group setBehaviour "COMBAT"; +_wp = [_group, 0]; +_group setCurrentWaypoint _wp; +_wp setWaypointType "SAD"; +_wp setWaypointName "sad"; +_wp setWaypointBehaviour "COMBAT"; +_wp setWaypointCombatMode "RED"; +_wp setWaypointTimeout [10,15,20]; + +#ifdef blck_debugMode +_wp setWaypointStatements ["true","this call blck_fnc_changeToMoveWaypoint; diag_log format['====Updating timestamp for group %1 and changing its WP to a Move Waypoint',group this];"]; +#else +_wp setWaypointStatements ["true","this call blck_fnc_changeToMoveWaypoint;"]; +#endif + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then +{ + private ["_marker"]; + _marker = _group getVariable["wpMarker",""]; + _marker setMarkerColor "ColorRed"; + diag_log format["_fnc_changeToSADWaypoint:: -- :: _this = %1 and typName _this %2",_this, typeName _this]; + diag_log format["_fnc_changeToSADWaypoint:: -- >> group to update is %1 with typeName %2",_group, typeName _group]; + diag_log format["_fnc_changeToSADWaypoint:: -- >> Waypoint statements for group %1 have been configured as %2",_group, waypointStatements _wp]; + diag_log format["_fnc_changeToSADWaypoint:: -- >> Waypoint marker for group %1 have been configured as %2",_group, _group getVariable "wpMarker"]; +}; +#endif \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_changeToSentryWaypoint.sqf b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_changeToSentryWaypoint.sqf new file mode 100644 index 0000000..2fd52b8 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_changeToSentryWaypoint.sqf @@ -0,0 +1,49 @@ +// Sets the WP type for WP for the specified group and updates other atributes accordingly. +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last modified 4/29/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +#ifdef blck_debugMode +diag_log "_fnc_changeToSADWaypoint: blck_debugMode enabled"; +#endif +private["_group","_wp"]; + +_group = group _this; +_group setVariable["timeStamp",diag_tickTime]; +_wp = [_group, 0]; +_group setCurrentWaypoint _wp; +_group setcombatmode "RED"; +_group setBehaviour "COMBAT"; +_wp setWaypointType "SENTRY"; +_wp setWaypointName "sentry"; +_wp setWaypointBehaviour "COMBAT"; +_wp setWaypointCombatMode "RED"; +_wp setWaypointTimeout [10,15,20]; +#ifdef blck_debugMode +_wp setWaypointStatements ["true","this call blck_fnc_changeToMoveWaypoint; diag_log format['====Updating timestamp for group %1 and changing its WP to a Move Waypoint',group this];"]; +#else +_wp setWaypointStatements ["true","this call blck_fnc_changeToMoveWaypoint;"]; +#endif + +#ifdef blck_debugMode +if (blck_debugLevel >1) then +{ + diag_log format["_fnc_changeToSentryWaypoint:: -- :: _this = %1 and typName _this %2",_this, typeName _this]; + diag_log format["_fnc_changeToSentryWaypoint:: -- >> group to update is %1 with typeName %2",_group, typeName _group]; + private ["_marker"]; + _marker = _group getVariable["wpMarker",""]; + _marker setMarkerColor "ColorYellow"; + diag_log format["_fnc_changeToSentryWaypoint:: -- >> Waypoint statements for group %1 have been configured as %2",_group, waypointStatements _wp]; + diag_log format["_fnc_changeToSentryWaypoint:: -- >> Waypoint marker for group %1 have been configured as %2",_group, _group getVariable "wpMarker"]; +}; +#endif \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_cleanEmptyGroups.sqf b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_cleanEmptyGroups.sqf new file mode 100644 index 0000000..9233b0c --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_cleanEmptyGroups.sqf @@ -0,0 +1,30 @@ +/* + call as [] call blck_fnc_cleanEmptyGroups; + Deletes any empty groups and thereby prevents errors resulting from createGroup returning nullGroup. + By Ghostrider-DbD- + 3/18/17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +#ifdef blck_debugMode +if (blck_debugLevel > 2) then +{ + diag_log format ["_fnc_cleanEmptyGroups:: -- >> group count = %1 ",(count allGroups)]; + diag_log format ["_fnc_cleanEmptyGroups:: -- >> Group count AI side = %1", call blck_fnc_groupsOnAISide]; +}; +#endif + +private _grp = allGroups; +{ + //diag_log format["_fnc_cleanEmptyGroups:: - >> type of object _x = %1",typeName _x]; + if ((count units _x) isEqualTo 0) then {deleteGroup _x}; +}forEach _grp; +#ifdef blck_debugMode +if (blck_debugLevel > 2) then {diag_log "_fnc_cleanEmptyGroups:: -- >> exiting function";}; +#endif diff --git a/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_emplacedWeaponWaypoint.sqf b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_emplacedWeaponWaypoint.sqf new file mode 100644 index 0000000..b0926be --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_emplacedWeaponWaypoint.sqf @@ -0,0 +1,26 @@ +// Sets the WP type for WP for the specified group and updates other atributes accordingly. +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last modified 4/23/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_group","_wp"]; + +diag_log format["_fnc_changeToSADWaypoint:: -- :: _this = %1 and typName _this %2",_this, typeName _this]; +_group = group _this; + diag_log format["_fnc_emplacedWeaponWaypoint:: -- >> group to update is %1 with typeName %2",_group, typeName _group]; +_group setVariable["timeStamp",diag_tickTime]; +_wp = [_group, 0]; +_group setCurrentWaypoint _wp; + diag_log format["_fnc_emplacedWeaponWaypoint:: -- >> group to update is %1 waypoints updated at %2",_group, (_group getVariable["timeStamp",diag_tickTime])]; + diff --git a/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_missionGroupMonitor.sqf b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_missionGroupMonitor.sqf new file mode 100644 index 0000000..5afd5b1 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_missionGroupMonitor.sqf @@ -0,0 +1,203 @@ +/* + [] call blck_fnc_waypointMonitor; + + Scans all groups in for those that have been stuck in a particular waypoint for an excessive time and checks if they are in combat. + If not it directs them to the next waypoint. + It uses a timestamp attached to the group that is cleared upon waypoint completion. + + By Ghostrider-DbD- + Last modified 3/14/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//diag_log format["_fnc_missionGroupMonitor (4/29:4:09 PM)::-->> running function at diag_tickTime = %1 with blck_fnc_missionGroupMonitor = %2",diag_tickTime,blck_monitoredMissionAIGroups]; +#ifdef blck_debugMode + //diag_log format["_fnc_missionGroupMonitor:: blck_debugMode defined"]; +#endif +_fn_allPlayers = { + private ["_players"]; + _players = []; + { + if (isPlayer _x) then {_players pushback _x}; + }forEach playableUnits; + //diag_log format["_fn_allPlayers::-->> result s %1",_players]; + _players +}; + +_fn_aliveGroupUnits = { + private["_grp","_aliveUnits"]; + _grp = _this select 0; + _aliveUnits = []; + { + if ( alive _x) then {_aliveUnits pushback _x}; + } forEach (units _grp); + _aliveUnits +}; + +_fn_inCombat = { + private["_grp","_targets","_players","_aliveUnits"]; + _grp = _this select 0; + _players = [] call _fn_allPlayers; + _aliveUnits = [_grp] call _fn_aliveGroupUnits; + _inCombat = false; + { + _targets = _x findNearestEnemy (position _x); + if !(isNull _targets) exitWith {_inCombat = true}; + } forEach _aliveUnits; + //diag_log format["_fn_inCombat::-->> _grp to test is %1 and result is %2",_grp,_inCombat]; + _inCombat; +}; + +_fn_removeEmptyOrNullGroups = { + //diag_log format["_fn_removeEmptyOrNullGroups::-->> excuting function at %1",diag_tickTime]; + // Remove any null groups (which will occur if all units in the group are dead) or groups with no alive AI. + for "_i" from 0 to ((count blck_monitoredMissionAIGroups) - 1) do + { + private["_grp"]; + if (_i >= (count blck_monitoredMissionAIGroups)) exitWith {}; + _grp = blck_monitoredMissionAIGroups select _i; + if (_grp isEqualTo grpNull) then { + blck_monitoredMissionAIGroups set[_i, -1]; + blck_monitoredMissionAIGroups = blck_monitoredMissionAIGroups - [-1]; + //diag_log "_fnc_waypointMonitor::-->> deleting a NULL-GROUP"; + }; + if ({alive _x} count units _grp < 1) then { + blck_monitoredMissionAIGroups = blck_monitoredMissionAIGroups - [_grp]; + //diag_log "_fnc_waypointMonitor::-->> deleting an empty group"; + }; + }; +}; + +_fn_monitorGroupWaypoints = { + { + private["_timeStamp","_index","_unit","_soldierType"]; + + _timeStamp = _x getVariable ["timeStamp",0]; + if (_timeStamp isEqualTo 0) then { + _x setVariable["timeStamp",diag_tickTime]; + //diag_log format["_fn_monitorGroupWaypoints::--> updating timestamp for group %1 at time %2",_x,diag_tickTime]; + }; + _soldierType = _x getVariable["soldierType","null"]; + //diag_log format["_fn_monitorGroupWaypoints::--> soldierType for group %1 = %2 and timeStamp = %3",_x,_soldierType,_timeStamp]; + + if (_soldierType isEqualTo "infantry") then + { + if (diag_tickTime > (_x getVariable "timeStamp") + 60) then + { + _units = [_x] call _fn_aliveGroupUnits; + if (count _units > 0) then + { + private _leader = leader _x; + (_leader) call blck_fnc_changeToMoveWaypoint; + #ifdef blck_debugMode + if (blck_debugLevel > 2) then {diag_log format["_fnc_missionGroupMonitor: infantry group %1 stuck, waypoint reset",_x];}; + #endif + /* + if ( (getPos _leader) distance2d (_group getVariable "patrolCenter") > 200) then + { + + }; + */ + }; + + }; + }; + if (_soldierType isEqualTo "vehicle") then + { + if (diag_tickTime > (_x getVariable "timeStamp") + 60) then + { + _units = [_x] call _fn_aliveGroupUnits; + if (count _units > 0) then + { + private _leader = leader _x; + (_leader) call blck_fnc_changeToMoveWaypoint; + #ifdef blck_debugMode + if (blck_debugLevel > 2) then {diag_log format["_fnc_missionGroupMonitor: vehicle group %1 stuck, waypoint reset",_x];}; + #endif + /* + if ( (getPos _leader) distance2d (_group getVariable "patrolCenter") > 200) then + { + }; + */ + }; + + }; + }; + if (_soldierType isEqualTo "helicopter") then + { + if (diag_tickTime > (_x getVariable "timeStamp") + 60) then + { + _units = [_x] call _fn_aliveGroupUnits; + if (count _units > 0) then + { + private _leader = leader _x; + (_leader) call blck_fnc_changeToMoveWaypoint; + #ifdef blck_debugMode + if (blck_debugLevel > 2) then {diag_log format["_fnc_missionGroupMonitor: helicopter group %1 stuck, waypoint reset",_x];}; + #endif + /* + if ( (getPos _leader) distance2d (_group getVariable "patrolCenter") > 200) then + { + + }; + */ + }; + + }; + }; + } forEach blck_monitoredMissionAIGroups; +}; + +_fn_simulationMonitor = { + _modType = call blck_fnc_getModType; + if (_modType isEqualTo "Exile") then + { + _playerType = ["Exile_Unit_Player"]; + }else{ + _playerType = ["Epoch_Male_F","Epoch_Female_F"]; + }; + { + // player nearEntities [["Car", "Motorcycle", "Tank"], 50]; + _players = (leader _x) nearEntities [_playerType, 1800]; + if (count _players > 0) then + { + // Be sure simulation is on for all units in the group + if !(_x getVariable["blck_simulationStatus",false]) then + { + _x setVariable["blck_simulationStatus",true]; + { + _x enableSimulationGlobal true; + }forEach (units _x); + }; + }else{ + // Be sure simulation is off for all units in the group. + if !(_x getVariable["blck_simulationStatus",true]) then + { + _x setVariable["blck_simulationStatus",false]; + { + _x enableSimulationGlobal false; + }forEach (units _x); + }; + }; + } forEach blck_monitoredMissionAIGroups; +}; +//////// +// Start of main function +//////// +#ifdef blck_debugMode +if (blck_debugLevel > 2) then {diag_log format["_fnc_missionGroupMonitor: executing function at %1",diag_tickTime];}; +#endif +[] call _fn_removeEmptyOrNullGroups; +uiSleep 0.1; +[] call _fn_monitorGroupWaypoints; + +#ifndef useDynamicSimulation +[] call _fn_simulationMonitor; +#endif \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_setNextWaypoint.sqf b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_setNextWaypoint.sqf new file mode 100644 index 0000000..daaed11 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_setNextWaypoint.sqf @@ -0,0 +1,95 @@ +// Sets the WP type for WP for the specified group and updates other atributes accordingly. +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last modified 3/14/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_group","_wp","_index","_pattern","_mode","_arc","_dis","_wpPos"]; + +_group = group _this; + +_group setVariable["timeStamp",diag_tickTime]; +_group setcombatmode "YELLOW"; +_group setBehaviour "COMBAT" +_wp = [_group, 0]; + +_pattern = _group getVariable["wpPattern",[]]; +_index = _group getVariable["wpIndex",0]; +_index = _index + 1; +_minDis = _group getVariable["minDis",0]; +_maxDis = _group getVariable["maxDis",0]; +dir = (_group getVariable["wpDir",0]) + _group getVariable["wpArc",360/5]; +_group setVariable["wpDir",_dir]; + +diag_log format["_fnc_setNextWaypoint: -> _minDis = %1 | _maxDis = %2 | _arc = %3",_minDis,_maxDis,_arc]; +if (_index >= (count _pattern)) then +{ + _index = 0; +} else { + diag_log format["_fnc_setNextWaypoint: -> waypoint index for group %1 is currently %2 with _pattern = %4 and count _pattern = %3",_group,_index, count _pattern,_pattern]; +}; + +_group setVariable["wpIndex",_index]; +_type = _pattern select _index; + +#ifdef blck_debugMode +diag_log format["_fnc_setNextWaypoint: -> waypoint for group %1 to be updated to mode %2 at position %3 with index %4",_group,_type,waypointPosition _wp, _index]; +#endif + +// revisit this to account for dead units. use waypointPosition if possible. +_wpPos = waypointPosition _wp; + +_wp setWaypointType _type; +_wp setWaypointName toLower _type; +if (_type isEqualTo (toLower "move")) then +{ + _dis = (_minDis) + random( (_maxDis) - (_minDis) ); + if (_group getVariable["wpMode",""] isEqualTo "random") then + { + _dir = random(360) + } else { + _dir = _group getVariable["wpDir",0] + _group getVariable["wpArc",360/5]; + }; + _group setVariable["wpDir",_dir]; + _oldPos = waypointPosition _wp; + + _newPos = (_group getVariable ["patrolCenter",_wpPos]) getPos[_dis,_arc]; + _wp setWPPos [_newPos select 0, _newPos select 1]; + + #ifdef blck_debugMode + diag_log format["_fnc_setNextWaypoint: -- > for group %5 | _dis = %1 | _arc = %2 _oldPos = %3 | _newPos = %4",_dis,_arc,_oldPos,_newPos,_group]; + #endif + + _wp setWaypointTimeout [1.0,1.1,1.2]; + //_wp setWaypointTimeout [20,25,30]; +} else { + _wp setWaypointTimeout [20,25,30]; + _newPos = _wpPos; + _wp setWPPos _newPos; + + #ifdef blck_debugMode + diag_log format["_fnc_setNextWaypoint: - waypoint position for group %1 not changed",_group]; + #endif +}; + +#ifdef blck_debugMode +diag_log format["_fnc_setNextWaypoint: -> waypoint for group %1 set to mode %2 at position %3 with index %4",_group,_type,waypointPosition _wp, _index]; +diag_log format["_fnc_setNextWaypoint:-> waypoint statements for group %1 = %2",_group, waypointStatements [_group,_index]]; +#endif + +_wp setWaypointBehaviour blck_groupBehavior; +_wp setWaypointCombatMode blck_combatMode; +_group setCurrentWaypoint _wp; + + + diff --git a/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_setWaypoints-v2.sqf b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_setWaypoints-v2.sqf new file mode 100644 index 0000000..2e5fa30 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_setWaypoints-v2.sqf @@ -0,0 +1,95 @@ +// Sets up waypoints for a specified group. +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last modified 3/22/17 + ** Here for record keeping only; not used ** + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + +private["_dir","_arc","_noWp","_newpos","_wpradius","_wp"]; +params["_pos","_minDis","_maxDis","_group",["_mode","random"],["_pattern",["MOVE","SAD"]]]; + +/* +_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; +*/ + + +_group setVariable["patrolCenter",_pos]; +_group setVariable["minDis",_minDis]; +_group setVariable["maxDis",_maxDis]; +_group setVariable["timeStamp",diag_tickTime]; +_group setVariable["arc",0]; +_group setVariable["wpRadius",30]; +_group setVariable["wpMode",_mode]; +_group setVariable["wpPattern",_pattern]; +_group setVariable["wpIndex",0]; + +_dir = 0; +_arc = 30; +_noWp = 1; +_wpradius = 30; +_newPos = _pos getPos [(_minDis+(random (_maxDis - _minDis))), _dir]; +_wp = [_group, 0]; + +#ifdef wpModeMove +_wp setWaypointType "MOVE"; +_wp setWaypointName "move"; +_wp setWaypointTimeout [1,1.1,1.2]; +_wp setWaypointStatements ["true","this call blck_fnc_setNextWaypoint;diag_log format['====Updating waypoint to for group %1',group this];"]; +#else +_wp setWaypointType "SAD"; +_wp setWaypointName "sad"; +_wp setWaypointTimeout [20,25,30]; +_wp setWaypointStatements ["true","this call blck_fnc_setNextWaypoint;diag_log format['====Updating waypointfor group %1',group this];"]; +#endif + +_wp setWaypointBehaviour "COMBAT"; +_wp setWaypointCombatMode "RED"; +//_wp setWaypointTimeout [1,1.1,1.2]; +_group setCurrentWaypoint _wp; + +/* +Code for Build 44 as a referemce/ +private["_dist","_dir","_arc","_xpos","_ypos","_newpos","_wpradius","_wpnum","_oldpos"]; +params["_pos","_minDis","_maxDis","_group"]; + +_wpradius = 30; +_wpnum = 6; +_dir = random 360; +_arc = 360/_wpnum; + +for "_i" from 0 to (_wpnum - 1) do +{ + _dir = _dir + _arc; + _dist = (_minDis+(random (_maxDis - _minDis))); + _newpos = _pos getPos [_dist, _arc]; + + _wp = _group addWaypoint [_newpos, 0]; + _wp setWaypointTimeout [1, 1.1, 1.2]; + _wp setWaypointType "MOVE"; + _wp setWaypointBehaviour "COMBAT"; + _wp setWaypointCombatMode "RED"; + _wp setWaypointName "move"; + _wp = _group addWaypoint [_newpos, 0]; + _wp setWaypointTimeout [15,20,25]; + _wp setWaypointType "SAD"; + _wp setWaypointBehaviour "COMBAT"; + _wp setWaypointCombatMode "RED"; + _wp setWaypointName "sad"; +}; +deleteWaypoint [_group, 0]; +_group setVariable["wpIndex",0]; +_wp = _group addWaypoint [_newpos, _wpradius]; +_wp setWaypointType "CYCLE"; diff --git a/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_setWaypoints.sqf b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_setWaypoints.sqf new file mode 100644 index 0000000..50ca01d --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_setWaypoints.sqf @@ -0,0 +1,92 @@ +// Sets up waypoints for a specified group. +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last modified 3/17/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + +private["_dir","_arc","_noWp","_newpos","_wpradius","_wp"]; +params["_pos","_minDis","_maxDis","_group",["_mode","random"],["_patrolMode","SAD"]]; + +/* +_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; +*/ + + +_group setVariable["patrolCenter",_pos]; +_group setVariable["minDis",_minDis]; +_group setVariable["maxDis",_maxDis]; +_group setVariable["timeStamp",diag_tickTime]; +_group setVariable["arc",0]; +_group setVariable["wpRadius",30]; +_group setVariable["wpMode",_mode]; + +_dir = 0; +_arc = 30; +_noWp = 1; +_wpradius = 30; +_newPos = _pos getPos [(_minDis+(random (_maxDis - _minDis))), _dir]; +_wp = [_group, 0]; + +#ifdef wpModeMove +_wp setWaypointType "MOVE"; +_wp setWaypointName "move"; +_wp setWaypointTimeout [1,1.1,1.2]; +_wp setWaypointStatements ["true","this call blck_fnc_changeToSADWaypoint;diag_log format['====Updating waypoint to SAD for group %1',group this];"]; +#else +_wp setWaypointType "SAD"; +_wp setWaypointName "sad"; +_wp setWaypointTimeout [20,25,30]; +_wp setWaypointStatements ["true","this call blck_fnc_changeToMoveWaypoint;diag_log format['====Updating waypoint to Move for group %1',group this];"]; +#endif + +_wp setWaypointBehaviour blck_groupBehavior; +_wp setWaypointCombatMode blck_combatMode; +_group setCurrentWaypoint _wp; + +/* +Code for Build 44 as a referemce/ +private["_dist","_dir","_arc","_xpos","_ypos","_newpos","_wpradius","_wpnum","_oldpos"]; +params["_pos","_minDis","_maxDis","_group"]; + +_wpradius = 30; +_wpnum = 6; +_dir = random 360; +_arc = 360/_wpnum; + +for "_i" from 0 to (_wpnum - 1) do +{ + _dir = _dir + _arc; + _dist = (_minDis+(random (_maxDis - _minDis))); + _newpos = _pos getPos [_dist, _arc]; + + _wp = _group addWaypoint [_newpos, 0]; + _wp setWaypointTimeout [1, 1.1, 1.2]; + _wp setWaypointType "MOVE"; + _wp setWaypointBehaviour "COMBAT"; + _wp setWaypointCombatMode "RED"; + _wp setWaypointName "move"; + _wp = _group addWaypoint [_newpos, 0]; + _wp setWaypointTimeout [15,20,25]; + _wp setWaypointType "SAD"; + _wp setWaypointBehaviour "COMBAT"; + _wp setWaypointCombatMode "RED"; + _wp setWaypointName "sad"; +}; +deleteWaypoint [_group, 0]; +_group setVariable["wpIndex",0]; +_wp = _group addWaypoint [_newpos, _wpradius]; +_wp setWaypointType "CYCLE"; diff --git a/@epochhive/addons/custom_server/GMS_fnc_setupWaypoints.sqf b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_setupWaypoints.sqf similarity index 100% rename from @epochhive/addons/custom_server/GMS_fnc_setupWaypoints.sqf rename to @ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_setupWaypoints.sqf diff --git a/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_spawnGroup.sqf b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_spawnGroup.sqf new file mode 100644 index 0000000..091daaf --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Groups/GMS_fnc_spawnGroup.sqf @@ -0,0 +1,117 @@ +/* + Spawn and configure a group + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last modified 4/25/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_numbertospawn","_groupSpawned","_safepos","_weaponList","_useLauncher","_launcherType"]; + +params["_pos", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], "_center", ["_minDist",20], ["_maxDist",35], ["_uniforms",blck_SkinList], ["_headGear",blck_headgear],["_configureWaypoints",true] ]; +if (blck_debugLevel > 1) then +{ + diag_log format["[blckeagls] _fnc_spawnGroup called parameters: _numai1 %1, _numbai2 %2, _skillLevel %3, _center %4",_numai1,_numai2,_skillLevel,_center]; +}; +//Spawns correct number of AI +if (_numai2 > _numai1) then +{ + _numbertospawn = floor( (random (_numai2 - _numai1) + _numai1 ) ); +} else { + _numbertospawn = _numai2; +}; + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then +{ + diag_log format["spawnGroup.sqf: _numbertospawn = %1",_numbertospawn]; +}; +#endif + +_groupSpawned = createGroup blck_AI_Side; + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then +{ + diag_log format["spawnGroup.sqf: _groupSpawned = %1",_groupSpawned]; +}; +#endif +if !(isNull _groupSpawned) then +{ + #ifdef blck_debugMode + if (blck_debugLevel > 1) then {diag_log format["_fnc_spawnGroup:: -- >> Group created = %1",_groupSpawned]}; + #endif + _groupSpawned setVariable["groupVehicle",objNull]; + + #ifdef useDynamicSimulation + _groupSpawned enableDynamicSimulation true; + #endif + + _groupSpawned setcombatmode "RED"; + _groupSpawned setBehaviour "COMBAT"; + _groupSpawned allowfleeing 0; + _groupSpawned setspeedmode "FULL"; + _groupSpawned setFormation blck_groupFormation; + _groupSpawned setVariable ["blck_group",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); + // params["_pos","_minDis","_maxDis","_group",["_mode","random"],["_pattern",["MOVE","SAD"]]]; + if (_configureWaypoints) then + { + [_pos,_minDist,_maxDist,_groupSpawned,"random","SAD","infantry"] spawn blck_fnc_setupWaypoints; + }; + //[_pos,_minDist,_maxDist,_groupSpawned,"random","SENTRY"] spawn blck_fnc_setupWaypoints; + //diag_log format["_fnc_spawnGroup: blck_fnc_setupWaypoints called for group %1",_groupSpawned]; + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["fnc_spawnGroup:: Group spawned was %1 with units of %2",_groupSpawned, units _groupSpawned]; + }; + #endif + +} else { + diag_log "_fnc_spawnGroup:: ERROR CONDITION : NULL GROUP CREATED"; +}; +_groupSpawned diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc__loadLootItemsFromArray.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc__loadLootItemsFromArray.sqf new file mode 100644 index 0000000..dcd068a --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc__loadLootItemsFromArray.sqf @@ -0,0 +1,51 @@ +/* + Depends on blck_fnc_addItemToCrate + + call as: + + [_item,_crate] call blck_fnc_loadLootFromItemsArray; + + where + _crate is a container such as ammo box or vehicle + _loadout is an array containing either 2 or 3 elements. The first array is always an array of items to add. Items can be formated as ["item1","item1"], as [["item1",3],["item2",2]] or as [["item1",2,4],["item2",3,5]]. + See GMS_fnc_addItemToCrate for information about the acceptable formates for the items "item1" ... "itemN". + + The second and optional third element in the array specify the number of times the script will randomly select an item from the array of items and load it into the crate. + For example: + case 1: [["item1",...,"itemN"],6]; The script will randomly select from the array of item names 6 times and call the loot loader each time. + case 2: [["item1",...,"itemN"],6, 9]; As above except that an item will be selected a minimum of 6 and maximum of 9 times. + + by Ghostrider-DbD- + 11/14/16 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + + params["_loadout","_crate",["_addAmmo",0]]; + if ((_loadout select 0) isEqualTo []) exitWith {}; + { + private["_tries","_q","_item"]; + _tries = 0; + //diag_log format["_fn_loadLoot:: -- >> now loading for %1",_x]; + _q = _x select 1; // this can be a number or array. + if ( (typeName _q) isEqualTo "ARRAY") then // Assume the array contains a min/max number to add + { + if ((count _q) isEqualTo 2) then {_tries = (_q select 0) + round(random(((_q select 1) - (_q select 0))));} else {_tries = 0;}; + }; + if ((typeName _q) isEqualTo "SCALAR") then + { + _tries = _q; + }; + for "_i" from 1 to _tries do + { + _item = selectRandom (_x select 0); + [_item,_crate,_addAmmo] call blck_fnc_addItemToCrate; + }; + }forEach _loadout; diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_addItemToCrate.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_addItemToCrate.sqf new file mode 100644 index 0000000..20cecaa --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_addItemToCrate.sqf @@ -0,0 +1,61 @@ +/* + [_item,_crate] call blck_addItemToCrate; + where + _crate is a container such as ammo box or vehicle + _item is a string or array. + If _item is a string then add 1 of that item to the container. + If _item is an array with 2 elements ["itemName",3] then assume that the first element is a string and is the name of the item, and the second is the number to add. + if _item is an array with 3 elements ["itemName",2,6] assume that the first element is the item name (string), the second the min # to add and the third the max # to add. + by Ghostrider-DbD- + 11/14/16 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + + params["_itemInfo","_crate",["_addAmmo",0]]; + private["_isRifle","_isMagazine","_isBackpack"]; + _isWeapon = false; + _isMagazine = false; + _isBackpack = false; + _quant = 0; + //diag_log format["_fn_addItemToCrate:: -- >> itemInfor = %1",_itemInfo]; + if (typeName _itemInfo isEqualTo "STRING") then {_item = _itemInfo; _quant = 1}; // case where only the item descriptor was provided + if (typeName _itemInfo isEqualTo "ARRAY") then { + + if (count _itemInfo isEqualTo 2) then {_item = _itemInfo select 0; _quant = _itemInfo select 1;}; // case where item descriptor and quantity were provided + if (count _itemInfo isEqualto 3) then { + _item = _itemInfo select 0; + _quant = (_itemInfo select 1) + round(random((_itemInfo select 2) - (_itemInfo select 1))); + }; // case where item descriptor, min number and max number were provided. + }; + if (((typeName _item) isEqualTo "STRING") && (_item != "")) then + { + if (isClass(configFile >> "CfgWeapons" >> _item)) then { + _crate addWeaponCargoGlobal [_item,_quant]; + _isWeapon = true; + _count = 0; + if (typeName _addAmmo isEqualTo "SCALAR") then + { + _count = _addAmmo; + }; + if (typeName _addAmmo isEqualto "ARRAY") then + { + _count = (_addAmmo select 0) + (round(random((_addAmmo select 1) - (_addAmmo select 0)))); + }; + _ammo = getArray (configFile >> "CfgWeapons" >> _item >> "magazines"); + for "_i" from 1 to _count do + { + _crate addMagazineCargoGlobal [selectRandom _ammo,1]; + }; + }; + if (_item isKindOf ["Bag_Base", configFile >> "CfgVehicles"]) then {_crate addBackpackCargoGlobal [_item,_quant]; _isBackpack = true;}; + if (isClass(configFile >> "CfgMagazines" >> _item)) then {_crate addMagazineCargoGlobal [_item,_quant]; _isMagazine = true;}; + if (!_isWeapon && !_isMagazine && _isBackpack && isClass(configFile >> "CfgVehicles" >> _item)) then {_crate addItemCargoGlobal [_item,_quant]}; + }; diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_addLiveAItoQue.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_addLiveAItoQue.sqf new file mode 100644 index 0000000..aee5b71 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_addLiveAItoQue.sqf @@ -0,0 +1,22 @@ +/* + 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 3-13-17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//diag_log format["_fnc_addLiveAIToQue:: -> when called, blck_liveMissionAI = %1",blck_liveMissionAI]; +params["_aiList","_timeDelay"]; +//diag_log format["_fnc_addLiveAIToQue:: -->> _aiList = %1 || _timeDelay = %2",_aiList,_timeDelay]; +blck_liveMissionAI pushback [_aiList, (diag_tickTime + _timeDelay)]; +//diag_log format["_fnc_addLiveAIToQue:: -> blck_fnc_addLiveAI updated to %1",blck_liveMissionAI]; + diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_addMIssionToQue.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_addMIssionToQue.sqf new file mode 100644 index 0000000..70f967e --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_addMIssionToQue.sqf @@ -0,0 +1,37 @@ +/* + 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 1-21-17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//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",1],["_allowReinforcements",true]]; + +for "_i" from 1 to _noMissions do +{ + private _waitTime = diag_tickTime + (_tMin) + random((_tMax) - (_tMin)); + // 0 1 2 3 4 5 6 7 8 + private _mission = [_missionList,_path,format["%1%2",_marker,_i],_difficulty,_tMin,_tMax,_waitTime,[0,0,0],_allowReinforcements]; + + #ifdef blck_debugMode + if (blck_debugLevel > 0) then {diag_log format["-fnc_addMissionToQue::-->> _mission = %1",_mission];}; + #endif + + blck_pendingMissions pushback _mission; +}; + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then {diag_log format["_fnc_addMissionToQue:: -- >> Result - blck_pendingMissions = %1",blck_pendingMissions];}; +#endif \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_addObjToQue.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_addObjToQue.sqf new file mode 100644 index 0000000..043c1ae --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_addObjToQue.sqf @@ -0,0 +1,22 @@ +/* + 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 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_objList","_timeDelay"]; +//diag_log format["_fnc_addObjToQue:: -- >> _objList = %1 || _timeDelay = %2",_objList,_timeDelay]; +//diag_log format["_fnc_addObjToQue:: (11) -- >> blck_oldMissionObjects prior to update = %1",blck_oldMissionObjects]; +blck_oldMissionObjects pushback [_objList, (diag_tickTime + _timeDelay)]; +//diag_log format["_fnc_addObjToQue:: (11) -- >> blck_oldMissionObjects after update = %1",blck_oldMissionObjects]; + diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf new file mode 100644 index 0000000..b79dbb4 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_cleanUpObjects.sqf @@ -0,0 +1,63 @@ + // 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 4-11-17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +_fn_deleteObjects = { + params["_objects"]; + + #ifdef blck_debugMode + if (blck_debugLevel > 0) then {diag_log format["_fn_deleteObjects:: -> _objects = %1",_objects];}; + #endif + + { + #ifdef blck_debugMode + if (blck_debugLevel > 1) then {diag_log format["_fnc_cleanUpObjects: -> deleting object %1",_x];}; + #endif + + deleteVehicle _x; + } forEach _objects; +}; + +//diag_log format["_fnc_cleanUpObjects called at %1",diag_tickTime]; +private["_oldObjs"]; +for "_i" from 1 to (count blck_oldMissionObjects) do +{ + if (_i <= count blck_oldMissionObjects) then + { + _oldObjs = blck_oldMissionObjects select (_i - 1); + //diag_log format["_fnc_cleanUpObjects ::-->> evaluating missionObjects = %1 with delete time of %3 and diag_tickTime %2",_oldObjs,diag_tickTime, _oldObjs select 1]; + if (diag_tickTime > (_oldObjs select 1) ) then { + //diag_log format["_fn_deleteObjects:: (50) cleaning up mission objects %1",_oldObjs]; + [_oldObjs select 0] call _fn_deleteObjects; + uiSleep 0.1; + blck_oldMissionObjects set[(_i - 1), -1]; + blck_oldMissionObjects = blck_oldMissionObjects - [-1]; + + #ifdef blck_debugMode + //diag_log format["_fn_deleteObjects:: blck_oldMissionObjects updated from %1",_obj]; + if (blck_debugLevel > 1) then {diag_log format["_fn_deleteObjects:: (48) blck_oldMissionObjects updated to %1",blck_oldMissionObjects];}; + #endif + }; + }; +}; + + + + + + diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_clearMines.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_clearMines.sqf new file mode 100644 index 0000000..8dd5b91 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_clearMines.sqf @@ -0,0 +1,23 @@ +// removes mines in a region centered around a specific position. +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 8-13-16 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +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; + diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf new file mode 100644 index 0000000..d008f72 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_endMission.sqf @@ -0,0 +1,101 @@ +/* + + [_mines,_objects,_blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_mission] call blck_fnc_endMission; + schedules deletion of all remaining alive AI and mission objects. + Updates the mission que. + Updates mission markers. + By Ghostrider-DbD- + 3/17/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + params["_mines","_objects","_crates","_blck_AllMissionAI","_endMsg","_blck_localMissionMarker","_coords","_mission",["_aborted",false],["_vehicles",[]]]; + #ifdef blck_debugMode + if (blck_debugLevel > 0) then { + diag_log format["_fnc_endMission: _blck_localMissionMarker %1 | _coords %2 | _mission %3 | _aborted %4",_blck_localMissionMarker,_coords,_mission,_aborted]; + diag_log format["_fnc_endMission: _aborted = %1",_aborted]; + }; + #endif + + private["_cleanupAliveAITimer","_cleanupCompositionTimer"]; + if (blck_useSignalEnd && !_aborted) then + { + //diag_log format["**** Minor\SM1.sqf:: _crate = %1",_crates select 0]; + [_crates select 0] spawn blck_fnc_signalEnd; + + #ifdef blck_debugMode + if (blck_debugLevel > 0) then + { + diag_log format["[blckeagls] _fnc_endMission:: (18) SignalEnd called: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; + }; + #endif + + }; + + if (_aborted) then + { + #ifdef blck_debugMode + if (blck_debugLevel > 0) then { + diag_log format["_fnc_endMission: Mission Aborted, setting all timers to 0"]; + }; + #endif + + _cleanupCompositionTimer = 0; + _cleanupAliveAITimer = 0; + } else { + + #ifdef blck_debugMode + if (blck_debugLevel > 0) then { + diag_log format["_fnc_endMission: Mission Completed without errors, setting all timers to default values"]; + }; + #endif + + _cleanupCompositionTimer = blck_cleanupCompositionTimer; + _cleanupAliveAITimer = blck_AliveAICleanUpTimer; + [["end",_endMsg,_blck_localMissionMarker select 2]] call blck_fnc_messageplayers; + [_blck_localMissionMarker select 1, _markerClass] execVM "debug\missionCompleteMarker.sqf"; + }; + + // Using a variable attached to the crate rather than the global setting to be sure we do not fill a crate twice. + // the "lootLoaded" loaded should be set to true by the crate filler script so we can use that for our check. + { + //diag_log format["_fnc_endMission: for crate %1 lootLoaded = %2",_x,_x getVariable["lootLoaded",false]]; + if !(_x getVariable["lootLoaded",false]) then + { + // _crateLoot,_lootCounts are defined above and carry the loot table to be used and the number of items of each category to load + [_x,_crateLoot,_lootCounts] call blck_fnc_fillBoxes; + }; + }forEach _crates; + { + private ["_v","_posnVeh"]; + _posnVeh = blck_monitoredVehicles find _x; // returns -1 if the vehicle is not in the array else returns 0-(count blck_monitoredVehicles -1) + if (_posnVeh >= 0) then + { + //diag_log format["_fnc_endMission: setting missionCompleted for vehicle %1 to %2",_x,diag_tickTime]; + (blck_monitoredVehicles select _posnVeh) setVariable ["missionCompleted", diag_tickTime]; + } else { + _x setVariable ["missionCompleted", diag_tickTime]; + blck_monitoredVehicles pushback _x; + }; + } forEach _vehicles; + + [_mines] spawn blck_fnc_clearMines; + //diag_log format["_fnc_endMission: (23) _objects = %1",_objects]; + [_objects, _cleanupCompositionTimer] spawn blck_fnc_addObjToQue; + //diag_log format["_fnc_endMission:: (26) _blck_AllMissionAI = %1",_blck_AllMissionAI]; + [_blck_AllMissionAI, (_cleanupAliveAITimer)] spawn blck_fnc_addLiveAItoQue; + [_blck_localMissionMarker select 0] execVM "debug\deleteMarker.sqf"; + blck_ActiveMissionCoords = blck_ActiveMissionCoords - [ _coords]; + blck_recentMissionCoords pushback [_coords,diag_tickTime]; + //diag_log format["_fnc_endMission:: (34) _mission = %1",_mission]; + [_mission,"inactive",[0,0,0]] call blck_fnc_updateMissionQue; + blck_missionsRunning = blck_missionsRunning - 1; + + _aborted \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_fillBoxes.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_fillBoxes.sqf new file mode 100644 index 0000000..d9df832 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_fillBoxes.sqf @@ -0,0 +1,94 @@ + +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 11-11-16 + Fill a crate with items + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + private["_a1","_item","_diff"]; + params["_crate","_boxLoot","_itemCnts"]; + + _itemCnts params["_wepCnt","_magCnt","_opticsCnt","_materialsCnt","_itemCnt","_bkcPckCnt"]; + + 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; + if (typeName _item isEqualTo "ARRAY") then // Check whether weapon name is part of an array that might also specify an ammo to use + { + _crate addWeaponCargoGlobal [_item select 0,1]; // if yes then assume the first element in the array is the weapon name + if (count _item >1) then { // if the array has more than one element assume the second is the ammo to use. + _crate addMagazineCargoGlobal [_item select 1, 1 + round(random(3))]; + } else { // if the array has only one element then lets load random ammo for it + _crate addMagazineCargoGlobal [selectRandom (getArray (configFile >> "CfgWeapons" >> (_item select 0) >> "magazines")), 1 + round(random(3))]; + }; + } else { + if (_item isKindOf ["Rifle", configFile >> "CfgWeapons"]) then + { + _crate addWeaponCargoGlobal [_item, 1]; + _crate addMagazineCargoGlobal [selectRandom (getArray (configFile >> "CfgWeapons" >> _item >> "magazines")), 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))]; + }; + }; diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_missionAIareDead.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_missionAIareDead.sqf new file mode 100644 index 0000000..d1873e4 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_missionAIareDead.sqf @@ -0,0 +1,28 @@ +// removes mines in a region centered around a specific position. +/* + [_missionAIGroups] call blck_fnc_missionAIareDead; // _missionAIGroups is an array of groups. + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-13-17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params ["_missionAIGroups"]; +private["_allAIDead","_group"]; + +_allAIDead = true; + +{ + _group = _x; // done for coding clarity only - actually less efficient this way + if ( {alive _x) count (units _group) > 0 ) exitWith {_allAIDead = false}; +} forEach _missionAIGroups; + +_allAIDead; + diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf new file mode 100644 index 0000000..13ad30f --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_missionSpawner.sqf @@ -0,0 +1,433 @@ +/* + Generic Mission Spawner + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last modified 4/11/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private ["_abort","_crates","_aiGroup","_objects","_groupPatrolRadius","_missionLandscape","_mines","_blck_AllMissionAI","_blck_localMissionMarker","_AI_Vehicles","_timeOut","_aiDifficultyLevel"]; +params["_coords","_mission",["_allowReinforcements",true]]; +diag_log format["_missionSpawner (18):: _allowReinforcements = %1",_allowReinforcements]; + +//////// +// set all variables needed for the missions +// data is pulled either from the mission description or from the _mission variable passsed as a parameter +// Deal with situations where some of these variables might not be defined as well. +//////// + +// _mission params[_missionListOrange,_pathOrange,"OrangeMarker","orange",blck_TMin_Orange,blck_TMax_Orange]; +_markerClass = _mission select 2; +_aiDifficultyLevel = _mission select 3; + +if (blck_debugLevel > 0) then {diag_log format["_fnc_mainThread:: -->> _markerClass = %1",_markerClass];}; + +[_mission,"active",_coords] call blck_fnc_updateMissionQue; +blck_ActiveMissionCoords pushback _coords; +diag_log format["[blckeagls] missionSpawner (17):: Initializing mission: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; + +private["_chanceHeliPatrol","_noPara","_reinforcementLootCounts","_chanceLoot","_heliCrew","_loadCratesTiming"]; + +if (isNil "_markerColor") then {_markerColor = "ColorBlack"}; +if (isNil "_markerType") then {_markerType = ["mil_box",[]]}; +//if (isNil "_timeOut") then {_timeOut = -1;}; +if (isNil "_loadCratesTiming") then {_loadCratesTiming = blck_loadCratesTiming}; // valid choices are "atMissionCompletion" and "atMissionSpawn"; + +private["_useMines","_blck_AllMissionAI","_delayTime","_groupPatrolRadius"]; +if (isNil "_useMines") then {_useMines = blck_useMines;}; + +_objects = []; +_mines = []; +_crates = []; +_aiGroup = []; +_missionAIVehicles = []; +_blck_AllMissionAI = []; +_AI_Vehicles = []; +_blck_localMissionMarker = [_markerClass,_coords,"","",_markerColor,_markerType]; +_delayTime = 1; +_groupPatrolRadius = 50; + +if (blck_labelMapMarkers select 0) then +{ + //diag_log "labeling map markers *****"; + _blck_localMissionMarker set [2, _markerMissionName]; +}; +if !(blck_preciseMapMarkers) then +{ + //diag_log "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? +if (blck_debugLevel > 0) then {diag_log "missionSpawner:: (91) message players and spawn a mission marker";}; +[["start",_startMsg,_blck_localMissionMarker select 2]] call blck_fnc_messageplayers; +[_blck_localMissionMarker] execVM "debug\spawnMarker.sqf"; + +#ifdef blck_debugMode +if (blck_debugLevel > 0) then {diag_log "missionSpawner:: (94) waiting for player to trigger the mission";}; +#endif +//////// +// All parameters are defined, lets wait until a player is nearby or the mission has timed out +//////// + +private["_wait","_missionStartTime","_playerInRange","_missionTimedOut"]; +_missionStartTime = diag_tickTime; +_playerInRange = false; +_missionTimedOut = false; +_wait = true; +if (blck_debugLevel > 0) then {diag_log "missionSpawner:: (105) starting mission trigger loop"}; + +while {_wait} do +{ + #ifdef blck_debugMode + //diag_log "missionSpawner:: top of mission trigger loop"; + if (blck_debugLevel > 2) exitWith {_playerInRange = true;}; + #endif + + if ([_coords, blck_TriggerDistance, false] call blck_fnc_playerInRange) exitWith {_playerInRange = true;}; + if ([_missionStartTime] call blck_fnc_timedOut) exitWith {_missionTimedOut = true;}; + uiSleep 5; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["missionSpawner:: Trigger Loop - blck_debugLevel = %1 and _coords = %2",blck_debugLevel, _coords]; + diag_log format["missionSpawner:: Trigger Loop - players in range = %1",{isPlayer _x && _x distance2D _coords < blck_TriggerDistance} count allPlayers]; + diag_log format["missionSpawner:: Trigger Loop - timeout = %1", [_missionStartTime] call blck_fnc_timedOut]; + }; + #endif +}; + +if (_missionTimedOut) exitWith +{ +/* + +*/ + // Deal with the case in which the mission timed out. + //["timeOut",_endMsg,_blck_localMissionMarker select 2] call blck_fnc_messageplayers; + blck_recentMissionCoords pushback [_coords,diag_tickTime]; + blck_ActiveMissionCoords = blck_ActiveMissionCoords - [ _coords]; + [_mission,"inactive",[0,0,0]] call blck_fnc_updateMissionQue; + blck_missionsRunning = blck_missionsRunning - 1; + [_blck_localMissionMarker select 0] call compile preprocessfilelinenumbers "debug\deleteMarker.sqf"; + //_blck_localMissionMarker set [1,[0,0,0]]; + //_blck_localMissionMarker set [2,""]; + [_objects, 0.1] spawn blck_fnc_cleanupObjects; + + #ifdef blck_debugMode + if (blck_debugLevel > 0) then + { + diag_log format["[blckeagls] missionSpawner:: (105) Mission Timed Out: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; + }; + #endif +}; + +//////// +// Spawn the mission objects, loot chest, and AI +//////// +#ifdef blck_debugMode +if (blck_debugLevel > 0) then +{ + diag_log format["[blckeagls] missionSpawner:: (112) -- >> Mission tripped: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; +}; +#endif + +if (count _missionLootBoxes > 0) then +{ + _crates = [_coords,_missionLootBoxes,_loadCratesTiming] call blck_fnc_spawnMissionCrates; +} +else +{ + _crates = [_coords,[[selectRandom blck_crateTypes,[0,0,0],_crateLoot,_lootCounts]], _loadCratesTiming] call blck_fnc_spawnMissionCrates; + +}; + +if (blck_cleanUpLootChests) then +{ + _objects append _crates; +}; + +//uisleep 2; +#ifdef blck_debugMode +if (blck_debugLevel > 0) then +{ + diag_log format["[blckeagls] missionSpawner:: (136) Crates Spawned: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; +}; +#endif + +private ["_temp"]; +if (blck_SmokeAtMissions select 0) then // spawn a fire and smoke near the crate +{ + _temp = [_coords,blck_SmokeAtMissions select 1] call blck_fnc_smokeAtCrates; + if (typeName _temp isEqualTo "ARRAY") then + { + _objects append _temp; + }; +}; + +uiSleep _delayTime; +if (_useMines) then +{ + _mines = [_coords] call blck_fnc_spawnMines; + //uiSleep _delayTime;; +}; +uiSleep _delayTime; +_temp = []; +if (_missionLandscapeMode isEqualTo "random") then +{ + _temp = [_coords,_missionLandscape, 3, 15, 2] call blck_fnc_spawnRandomLandscape; +} else { + _temp = [_coords, floor(random(360)),_missionLandscape,true] call blck_fnc_spawnCompositionObjects; + //uiSleep 1; +}; +if (typeName _temp isEqualTo "ARRAY") then +{ + _objects append _temp; +}; +//diag_log format["_fnc_missionSpawner:: (181)->> _objects = %1",_objects]; + +#ifdef blck_debugMode +if (blck_debugLevel > 0) then +{ + diag_log format["[blckeagls] missionSpawner:: (170) Landscape spawned: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; +}; +#endif + +uiSleep _delayTime;; + +_temp = [_missionLootVehicles] call blck_fnc_spawnMissionLootVehicles; +//uisleep 1; +_crates append _temp; + +uiSleep _delayTime; + +_abort = false; +_temp = [[],[],false]; +_temp = [_coords, _minNoAI,_maxNoAI,_aiDifficultyLevel,_uniforms,_headGear] call blck_fnc_spawnMissionAI; +//[_coords, _minNoAI,_maxNoAI,_aiDifficultyLevel,_uniforms,_headGear] call blck_fnc_spawnMissionAI; + +#ifdef blck_debugMode +if (blck_debugLevel > 2) then { + diag_log format["missionSpawner :: (185) blck_fnc_spawnMissionAI returned a value of _temp = %1",_temp]; uiSleep 1; +}; + +_abort = _temp select 1; +if (blck_debugLevel > 2) then { + diag_log format["missionSpawner :: (190) blck_fnc_spawnMissionAI returned a value of _abort = %1",_abort]; uiSleep 1; +}; +#endif + +if (_abort) exitWith +{ + if (blck_debugLevel > 1) then { + diag_log "missionSpawner:: (194) grpNull returned, mission termination criteria met, calling blck_fnc_endMission" + }; + [_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_mission,true] call blck_fnc_endMission; +}; +if !(_abort) then +{ + _blck_AllMissionAI append (_temp select 0); +}; + +uiSleep _delayTime; + +#ifdef blck_debugMode +if (blck_debugLevel > 0) then +{ + diag_log format["[blckeagls] missionSpawner:: (202) AI Patrols Spawned: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; +}; +#endif + +_temp = [[],[],false]; +_abort = false; +private["_patrolVehicles"]; +if (blck_useVehiclePatrols && (_noVehiclePatrols > 0)) then +{ + _temp = [_coords,_noVehiclePatrols,_aiDifficultyLevel,_uniforms,_headGear,_markerClass] call blck_fnc_spawnMissionVehiclePatrols; + //[_coords,_noVehiclePatrols,_aiDifficultyLevel,_uniforms,_headGear,_markerClass] call blck_fnc_spawnMissionVehiclePatrols; + #ifdef blck_debugMode + if (blck_debugLevel > 1) then { + diag_log format["missionSpawner :: (216) blck_fnc_spawnMissionVehiclePatrols returned _temp = %1",_temp]; + }; + #endif + + if (typeName _temp isEqualTo "ARRAY") then + { + _abort = _temp select 2; + }; + if !(_abort) then + { + _patrolVehicles = _temp select 0; + _blck_AllMissionAI append (_temp select 1); + + #ifdef blck_debugMode + if (blck_debugLevel > 0) then + { + diag_log format["[blckeagls] missionSpawner:: (272) Vehicle Patrols Spawned: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; + }; + #endif + + }; +}; + +if (_abort) exitWith +{ + #ifdef blck_debugMode + if (blck_debugLevel > 0) then { + diag_log "missionSpawner:: (222) grpNull returned, mission termination criteria met, calling blck_endMission"; + }; + #endif + + [_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_mission,true] call blck_fnc_endMission; +}; + +uiSleep _delayTime; +_temp = [[],[],false]; +_abort = false; + +#ifdef blck_debugMode +if (blck_debugLevel > 0) then {diag_log format["missionSpawner:: (234) preparing to spawn emplaced weapons for _coords %4 | _markerClass %3 | blck_useStatic = %1 | _noEmplacedWeapons = %2",blck_useStatic,_noEmplacedWeapons,_markerClass,_coords];}; +#endif + +if (blck_useStatic && (_noEmplacedWeapons > 0)) then +{ + // params["_missionEmplacedWeapons","_noEmplacedWeapons","_aiDifficultyLevel","_coords","_uniforms","_headGear"]; + _temp = [_missionEmplacedWeapons,_noEmplacedWeapons,_aiDifficultyLevel,_coords,_uniforms,_headGear] call blck_fnc_spawnEmplacedWeaponArray; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format ["missionSpawner:: (232) blck_fnc_spawnEmplacedWeaponArray returned _temp = %1",_temp]; + }; + #endif + + if (typeName _temp isEqualTo "ARRAY") then + { + _abort = _temp select 2; + }; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format ["missionSpawner:: (241) _abort = %1",_abort]; + + }; + #endif + + if !(_abort) then + { + _objects append (_temp select 0); + _blck_AllMissionAI append (_temp select 1); + + #ifdef blck_debugMode + if (blck_debugLevel > 0) then + { + diag_log format["[blckeagls] missionSpawner:: (253) Static Weapons Spawned: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; + }; + #endif + }; +}; +if (_abort) exitWith +{ + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log "missionSpawner:: (261) grpNull ERROR in blck_fnc_spawnEmplacedWeaponArray, mission termination criteria met, calling blck_endMission"; + }; + #endif + + [_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_mission,true,_patrolVehicles] call blck_fnc_endMission; +}; + +if (_allowReinforcements) then +{ + _weaponList = [_aiDifficultyLevel] call blck_fnc_selectAILoadout; + temp = []; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["[blckeagls] missionSpawner:: (268) calling in reinforcements: Current mission: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; + }; + #endif + + //params["_coords","_aiSkillsLevel","_weapons","_uniforms","_headgear"]; + _temp = [_coords,_aiDifficultyLevel,_weaponList,_uniforms,_headGear] call blck_fnc_spawnMissionReinforcements; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["missionSpawner:: _temp = %1",_temp]; + }; + #endif + + if (typeName _temp isEqualTo "ARRAY") then + { + _abort = _temp select 2; + _objects pushback (_temp select 0); + _blck_AllMissionAI append (_temp select 1); + }; + if (_abort) then + { + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log "missionSpawner:: (276) grpNul or ERROR in blck_fnc_spawnMissionReinforcements, mission termination criteria met, calling blck_endMission"; + }; + #endif + + [_mines,_objects,_crates, _blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_mission,true,_patrolVehicles] call blck_fnc_endMission; + }; +}; +// Trigger for mission end +//diag_log format["[blckeagls] mission Spawner _endCondition = %1",_endCondition]; +private["_missionComplete","_endIfPlayerNear","_endIfAIKilled"]; +_missionComplete = -1; +_startTime = diag_tickTime; + +switch (_endCondition) do +{ + case "playerNear": {_endIfPlayerNear = true;_endIfAIKilled = false;}; + case "allUnitsKilled": {_endIfPlayerNear = false;_endIfAIKilled = true;}; + case "allKilledOrPlayerNear": {_endIfPlayerNear = true;_endIfAIKilled = true;}; +}; +//diag_log format["missionSpawner :: (269) _endIfPlayerNear = %1 _endIfAIKilled= %2",_endIfPlayerNear,_endIfAIKilled]; +private["_locations"]; +_locations = [_coords]; +{ + _locations pushback (getPos _x); +} forEach _crates; + +//diag_log format["missionSpawner:: _coords = %1 | _crates = %2 | _locations = %3",_coords,_crates,_locations]; +//diag_log format["missionSpawner:: Waiting for player to satisfy mission end criteria of _endIfPlayerNear %1 with _endIfAIKilled %2",_endIfPlayerNear,_endIfAIKilled]; +while {_missionComplete isEqualTo -1} do +{ + //if (blck_debugLevel isEqualTo 3) exitWith {uiSleep 300}; + if ((_endIfPlayerNear) && [_locations,10,true] call blck_fnc_playerInRangeArray) exitWith {}; + if ((_endIfAIKilled) && ({alive _x} count _blck_AllMissionAI) < 1 /*[_blck_AllMissionAI] call blck_fnc_missionAIareDead*/ ) exitWith {}; + //diag_log format["missionSpawner:: (283) missionCompleteLoop - > players near = %1 and ai alive = %2",[_coords,20] call blck_fnc_playerInRange, {alive _x} count _blck_AllMissionAI]; + uiSleep 4; +}; + +#ifdef blck_debugMode +if (blck_debugLevel > 0) then +{ + diag_log format["[blckeagls] missionSpawner:: (414) Mission completion criteria fulfilled: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; + diag_log format["missionSpawner :: (415) _endIfPlayerNear = %1 _endIfAIKilled= %2",_endIfPlayerNear,_endIfAIKilled]; +}; +#endif +//diag_log format["[blckeagls] missionSpawner:: (418) calling endMission: _cords %1 : _markerClass %2 : _aiDifficultyLevel %3 _markerMissionName %4",_coords,_markerClass,_aiDifficultyLevel,_markerMissionName]; + +private["_result"]; +_result = [_mines,_objects,_crates,_blck_AllMissionAI,_endMsg,_blck_localMissionMarker,_coords,_mission,false,_patrolVehicles] call blck_fnc_endMission; + +//diag_log format["[blckeagls] missionSpawner:: (420)end of mission: blck_fnc_endMission returned value of %1","pending"]; + diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_selectAILoadout.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_selectAILoadout.sqf new file mode 100644 index 0000000..38cfb60 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_selectAILoadout.sqf @@ -0,0 +1,30 @@ +/* + [ + _missionColor // ["blue","red","green","orange"] + ] call blck_fnc_selectAILoadout; + + returns: + _lootarray + by Ghostrider-DbD- + 1/9-17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_weaponList","_missionColor"]; + +_missionColor = _this select 0; +switch (_missionColor) 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;}; +}; +_weaponList diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf new file mode 100644 index 0000000..9eac353 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_signalEnd.sqf @@ -0,0 +1,49 @@ +////////////////////////////////////////////////////// +// 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 +///////////////////////////////////////////////////// +/* + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + 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; + }; + }; diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_smokeAtCrates.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_smokeAtCrates.sqf new file mode 100644 index 0000000..7f118ac --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_smokeAtCrates.sqf @@ -0,0 +1,66 @@ +/* + 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 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +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 diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnBaseObjects.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnBaseObjects.sqf new file mode 100644 index 0000000..1e0980a --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnBaseObjects.sqf @@ -0,0 +1,36 @@ +/* + Spawn objects from an array using offsects from a central location. + The code provided by M3Editor EDEN has been addapted to add checks for vehicles, should they be present. + Returns an array of spawned objects. + version of 1/13/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_center","_azi","_objects","_setVector"]; + +private ["_newObjs"]; + +_newObjs = []; + +{ + //diag_log format["_fnc_spawnBaseObjects::-->> _x = %1",_x]; + private _obj = (_x select 0) createVehicle [0,0,0]; + _newObjs pushback _obj; + _obj setDir ( (_x select 2) + _azi); + _obj setPosATL (_center vectorAdd (_x select 1)); + _obj enableSimulationGlobal true; + _obj allowDamage true; + // Lock any vehicles placed as part of the mission landscape. Note that vehicles that can be taken by players can be added via the mission template. + if ( (typeOf _obj) isKindOf "LandVehicle" || (typeOf _obj) isKindOf "Air" || (typeOf _obj) isKindOf "Sea") then + { + [_obj] call blck_fnc_configureMissionVehicle; + }; +} forEach _objects; +_newObjs diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCrate.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCrate.sqf new file mode 100644 index 0000000..24cb52a --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnCrate.sqf @@ -0,0 +1,32 @@ +/* + 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 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +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; +[_crate] call blck_fnc_emptyObject; +_crate; diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf new file mode 100644 index 0000000..316ef3e --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf @@ -0,0 +1,124 @@ +/* + + [_missionEmplacedWeapons,_noEmplacedWeapons,_aiDifficultyLevel,_coords,_uniforms,_headGear] call blck_fnc_spawnEmplacedWeaponArray; + Last modified 4/27/17 + By Ghostrider-DbD- + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_missionEmplacedWeapons","_noEmplacedWeapons","_aiDifficultyLevel","_coords","_uniforms","_headGear"]; +private["_return","_emplacedWeps","_emplacedAI","_wep","_units","_gunner","_abort","_pos","_mode"]; +_emplacedWeps = []; +_emplacedAI = []; +_units = []; +_abort = false; +_pos = []; +_mode = "vector"; + +#ifdef blck_debugMode +//diag_log "_fnc_spawnEmplacedWeaponArray start"; +#endif + +// Define _missionEmplacedWeapons if not already configured. +if (_missionEmplacedWeapons isEqualTo []) then +{ + _mode = "world"; + _missionEmplacedWeaponPositions = [_coords,_noEmplacedWeapons,35,50] call blck_fnc_findPositionsAlongARadius; + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnEmplacedWeaponArray: creating random spawn locations: _missionEmplacedWeaponsPositions = %1", _missionEmplacedWeaponPositions]; + }; + #endif + { + _static = selectRandom blck_staticWeapons; + //diag_log format["_fnc_spawnEmplacedWeaponArray: creating spawn element [%1,%2]",_static,_x]; + _missionEmplacedWeapons pushback [_static,_x]; + //diag_log format["_fnc_spawnEmplacedWeaponArray: _mi updated to %1",_missionEmplacedWeapons]; + } forEach _missionEmplacedWeaponPositions; +}; + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then +{ + diag_log format["_fnc_spawnEmplacedWeaponArray:: starting static weapon spawner with _missionEmplacedWeapons = %1", _missionEmplacedWeapons]; +}; +#endif + +{ + if (_mode isEqualTo "vector") then + { + _pos = _coords vectorAdd (_x select 1); + } else { + _pos = (_x select 1); + }; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnEmplacedWeaponArray: _coords = %1 | offset = %2 | final _pos = 53",_coords,_x select 1, _pos]; + }; + #endif + + // params["_pos", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], "_center", ["_minDist",20], ["_maxDist",35], ["_uniforms",blck_SkinList], ["_headGear",blck_headgear] ]; + _empGroup = [(_x select 1),1,1,_aiDifficultyLevel,(_x select 1),1,2,_uniforms,_headGear,false] call blck_fnc_spawnGroup; + + _empGroup setcombatmode "RED"; + _empGroup setBehaviour "COMBAT"; + [(_x select 1),0.01,0.02,_empGroup,"random","SAD","emplaced"] spawn blck_fnc_setupWaypoints; + if (isNull _empGroup) exitWith {_abort = _true}; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnEmplacedWeaponArray:: typeName _empGroup = %1 and _empGroup = %2 and _x = %3",typeName _empGroup, _empGroup,_x]; + }; + #endif + + // params["_vehType","_pos",["_clearInventory",true]]; + _wep = [(_x select 0),[0,0,0],false] call blck_fnc_spawnVehicle; + _empGroup setVariable["groupVehicle",_wep]; + _wep setVariable["vehicleGroup",_empGroup]; + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnEmplacedWeaponArray (23) spawnVehicle returned value of _wep = %1",_wep]; + }; + #endif + + _wep setVariable["DBD_vehType","emplaced"]; + _wep setPosATL _pos; + [_wep,false] call blck_fnc_configureMissionVehicle; + _emplacedWeps pushback _wep; + _units = units _empGroup; + _gunner = _units select 0; + _gunner moveingunner _wep; + _emplacedAI append _units; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnEmplacedWeaponArray:: position of emplaced weapon = %1 and targetd position is %2",getPos _wep, _pos]; + diag_log format["_fnc_spawnEmplacedWeaponArray:: _gunner = %1 and crew _wep = %2",_gunner, crew _wep]; + }; + #endif + +} forEach _missionEmplacedWeapons; +blck_monitoredVehicles append _emplacedWeps; +_return = [_emplacedWeps,_emplacedAI,_abort]; + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then +{ + diag_log format["_fnc_spawnEmplacedWeaponArray:: returning with _return = _emplacedWeps = %1",_return]; +}; +#endif + +_return diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMines.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMines.sqf new file mode 100644 index 0000000..f6703c3 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMines.sqf @@ -0,0 +1,46 @@ +// 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 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +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 diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionAI.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionAI.sqf new file mode 100644 index 0000000..b54dace --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionAI.sqf @@ -0,0 +1,222 @@ +/* + blck_fnc_spawnMissionAI + by Ghostrider-DbD- + 3/17/17 + [_coords, // center of the area within which to spawn AI + _minNoAI, // minimum number of AI to spawn + _maxNoAI, // Max number of AI to spawn + _aiDifficultyLevel, // AI level [blue, red, etc] + _uniforms, // Uniforms to use - note default is blck_sSkinList + _headGear // headgear to use - blck_BanditHeager is the default + ] call blck_fnc_spawnMissionAI + returns an array of the units spawned + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + params["_coords",["_minNoAI",3],["_maxNoAI",6],["_aiDifficultyLevel","red"],["_uniforms",blck_SkinList],["_headGear",blck_BanditHeadgear]]; + private["_unitsToSpawn","_unitsPerGroup","_ResidualUnits","_newGroup","_blck_AllMissionAI","_abort"]; + _unitsToSpawn = round(_minNoAI + round(random(_maxNoAI - _minNoAI))); + _unitsPerGroup = floor(_unitsToSpawn/_noAIGroups); + _ResidualUnits = _unitsToSpawn - (_unitsPerGroup * _noAIGroups); + _blck_AllMissionAI = []; + _abort = false; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionAI (30):: _unitsToSpawn %1 ; _unitsPerGroup %2 _ResidualUnits %3",_unitsToSpawn,_unitsPerGroup,_ResidualUnits]; + }; + #endif + + switch (_noAIGroups) do + { + case 1: { // spawn the group near the mission center + + #ifdef blck_debugMode + //params["_pos", ["_numai1",5], ["_numai2",10], ["_skillLevel","red"], "_center", ["_minDist",20], ["_maxDist",35], ["_uniforms",blck_SkinList], ["_headGear",blck_headgear] ]; + if (blck_debugLevel > 2) then + { + diag_log format["missionSpawner: Spawning Groups: _noAIGroups=1"]; + }; + #endif + + _newGroup = [_coords,_unitsToSpawn,_unitsToSpawn,_aiDifficultyLevel,_coords,25,30,_uniforms,_headGear,true] call blck_fnc_spawnGroup; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_spawnMissionAI (37):: case 1 - > _newGroup = %1",_newGroup]; + }; + #endif + + if (isNull _newGroup) then + { + _abort = true; + } + else + { + _newAI = units _newGroup; + blck_monitoredMissionAIGroups pushback _newGroup; + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_spawnMissionAI(41): Spawning Groups: _noAIGroups=1 _newGroup=%1 _newAI = %2",_newGroup, _newAI]; + }; + #endif + + _blck_AllMissionAI append _newAI; + + }; + }; + case 2: { + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_spawnMissionAI(47): Spawning Groups: _noAIGroups=2"]; // spawn groups on either side of the mission area + }; + #endif + + _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,15,25,_uniforms,_headGear] call blck_fnc_spawnGroup; + if (isNull _newGroup) then + { + _abort = true; + } + else + { + _newAI = units _newGroup; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_spawnMissionAI(61): case 2: _newGroup=%1",_newGroup]; + }; + #endif + + _blck_AllMissionAI append _newAI; + }; + }forEach _groupLocations; + + }; + case 3: { // spawn one group near the center of the mission and the rest on the perimeter + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_spawnMissionAI (68): Spawning Groups: _noAIGroups=3"]; + }; + #endif + + + _newGroup = [_coords,_unitsPerGroup + _ResidualUnits,_unitsPerGroup + _ResidualUnits,_aiDifficultyLevel,_coords,10,15,_uniforms,_headGear] call blck_fnc_spawnGroup; + if (isNull _newGroup) then + { + _abort = true; + } + else + { + _newAI = units _newGroup; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_spawnMissionAI (73): Case 3: _newGroup=%1",_newGroup]; + }; + #endif + + _blck_AllMissionAI append _newAI; + + _groupLocations = [_coords,2,20,35] call blck_fnc_findPositionsAlongARadius; + { + _newGroup = [_x,_unitsPerGroup,_unitsPerGroup,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup; + if (isNull _newGroup) then + { + _abort = true; + } + else + { + _newAI = units _newGroup; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_spawnMissionAI(78): Case 3: line 81: _newGroup = %1",_newGroup]; + }; + #endif + + _blck_AllMissionAI append _newAI; + }; + }forEach _groupLocations; + }; + }; + default { // spawn one group near the center of the mission and the rest on the perimeter + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_spawnMissionAI (88): case 4:"]; + }; + #endif + + _newGroup = [_coords,_unitsPerGroup + _ResidualUnits,_unitsPerGroup + _ResidualUnits,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup; + if (isNull _newGroup) then + { + _abort = true; + }; + _newAI = units _newGroup; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_spawnMissionAI(92): Spawning Groups: _noAIGroups=1 _newGroup=%1 _newAI = %2",_newGroup, _newAI]; + }; + #endif + + _blck_AllMissionAI append _newAI; + _groupLocations = [_coords,(_noAIGroups - 1),20,40] call blck_fnc_findPositionsAlongARadius; + { + _newGroup = [_x,_unitsPerGroup,_unitsPerGroup,_aiDifficultyLevel,_coords,1,12,_uniforms,_headGear] call blck_fnc_spawnGroup; + if (isNull _newGroup) then + { + _abort = true; + } + else + { + _newAI = units _newGroup; + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_spawnMissionAI(99): _newGroup=%1",_newGroup]; + }; + _blck_AllMissionAI append _newAI; + }; + }forEach _groupLocations; + }; + }; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionAI(133): _abort = %1 | _blck_AllMissionAI = %2",_abort,_blck_AllMissionAI]; + }; + #endif + + private["_return"]; + _return = [_blck_AllMissionAI,_abort]; + _return diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionCrates.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionCrates.sqf new file mode 100644 index 0000000..30678fe --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionCrates.sqf @@ -0,0 +1,48 @@ +/* + 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 3-20-17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private ["_objs","_pos","_offset"]; +params[ ["_coords", [0,0,0]], ["_crates",[]], ["_loadCrateTiming","atMissionSpawn"] ]; + +if ((count _coords) == 2) then // assume only X and Y offsets are provided +{ + _coords pushback 0;; // calculate the world coordinates +}; +_objs = []; +{ + _x params["_crateType","_crateOffset","_lootArray","_lootCounts"]; + //_pos = [(_coords select 0)+(_crateOffset select 0),(_coords select 1) + (_crateOffset select 1),(_coords select 2)+(_crateOffset select 2)]; // calculate the world coordinates + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionCrates: _crateType = %1 | _crateOffset = %2 | _lootArray = %3 | _lootCounts = %4",_crateType,_crateOffset,_lootArray,_lootCounts]; + }; + #endif + _pos = _coords vectorAdd _crateOffset; + _crate = [_pos,_crateType] call blck_fnc_spawnCrate; + _objs pushback _crate; + if (_loadCrateTiming isEqualTo "atMissionSpawn") then + { + //diag_log format["_fnc_spawnMissionCrates::-> loading loot at mission spawn for crate %1",_x]; + [_crate,_lootArray,_lootCounts] call blck_fnc_fillBoxes; + _crate setVariable["lootLoaded",true]; + } + else + { + //diag_log format["_fnc_spawnMissionCrates::-> not loading crate loot at this time for crate %1",_x]; + }; +}forEach _crates; + +_objs diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionHeli.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionHeli.sqf new file mode 100644 index 0000000..f3528ef --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionHeli.sqf @@ -0,0 +1,75 @@ + +/* + By Ghostrider-DbD- + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_coords","_grpPilot","_chanceLoot"]; +_chopperType = selectRandom blck_AIHelis; +_grpPilot setVariable["groupVehicle",_chopperType]; +#ifdef blck_debugMode +diag_log format["_fnc_missionSpawner:: _chopperType seleted = %1",_chopperType]; +#endif + +_spawnVector = round(random(360)); +_spawnDistance = 1000; // + floor(random(1500)); // We need the heli to be on-site quickly to minimize the chance that a small mission has been completed before the paratroops are deployed and added to the list of live AI for the mission +_dropLoot = (random(1) < _chanceLoot); + +// Use the new functionality of getPos +// https://community.bistudio.com/wiki/getPos +_spawnPos = _coords getPos [_spawnDistance,_spawnVector]; + +#ifdef blck_debugMode +diag_log format["_fnc_missionSpawner:: vector was %1 with distance %2 yielding a spawn position of %3 at distance from _coords of %4",_spawnVector,_spawnDistance,_spawnPos, (_coords distance2d _spawnPos)]; +#endif + +_grpPilot setBehaviour "CARELESS"; +_grpPilot setCombatMode "RED"; +_grpPilot setSpeedMode "FULL"; +_grpPilot allowFleeing 0; + +private["_supplyHeli"]; +//create helicopter and spawn it +_supplyHeli = createVehicle [_chopperType, _spawnPos, [], 90, "FLY"]; +blck_monitoredVehicles pushback _supplyHeli; +[_supplyHeli] call blck_fnc_protectVehicle; +_supplyHeli setVariable["vehicleGroup",_grpPilot]; + +_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; + +_unitPilot = _grpPilot createUnit ["I_helipilot_F", getPos _supplyHeli, [], 0, "FORM"]; +_unitPilot setSkill 1; +_unitPilot assignAsDriver _supplyHeli; +_unitPilot moveInDriver _supplyHeli; +_grpPilot selectLeader _unitPilot; +_grpPilot setVariable["paraGroup",_paraGroup]; + +#ifdef blck_debugMode +diag_log format["_fnc_missionSpawner:: heli spawned and pilot added"]; +#endif + +//set waypoint for helicopter +//params["_pos","_minDis","_maxDis","_group",["_mode","random"],["_wpPatrolMode","SAD"],["_soldierType","null"] ]; +[_coords,25,40,_grpPilot,"random","SAD","helicpoter"] spawn blck_fnc_setupWaypoints; + +#ifdef blck_debugMode +diag_log format["_fnc_missionSpawner:: initial pilot waypoints set"]; +#endif + +_supplyHeli diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionLootVehicles.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionLootVehicles.sqf new file mode 100644 index 0000000..5b2f75c --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionLootVehicles.sqf @@ -0,0 +1,41 @@ +/* + [_missionLootVehicles] call blck_fnc_spawnMissionLootVehicles; + returns _vehs, an array of vehicles spawned. + by Ghostridere-DbD- + 3/20/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_missionLootVehicles",["_loadCrateTiming","atMissionSpawn"]]; +private _vehs = []; +{ + //diag_log format["spawnMissionCVehicles.sqf _x = %1",_x]; + _x params["_vehType","_vehOffset","_lootArray","_lootCounts"]; + //diag_log format["spawnMissionCVehicles: _vehType = %1 | _vehOffset = %2 | _lootArray = %3 | _lootCounts = %4",_vehType,_vehOffset,_lootArray,_lootCounts]; + _pos = _coords vectorAdd _vehOffset; + _veh = [_vehType, _pos] call blck_fnc_spawnVehicle; + [_veh] call blck_fnc_emptyObject; + _veh setVehicleLock "UNLOCKED"; + { + _veh removeAllEventHandlers _x; + }forEach ["getin","getout"]; + if (_loadCrateTiming isEqualTo "atMissionSpawn") then + { + //diag_log format["blck_fnc_spawnMissionLootVehicles::-> loading loot at mission spawn for veh %1",_x]; + [_veh,_lootArray,_lootCounts] call blck_fnc_fillBoxes; + _veh setVariable["lootLoaded",true]; + } + else + { + //diag_log format["blck_fnc_spawnMissionLootVehicles::-> not loading veh loot at this time for veh %1",_x]; + }; + _vehs pushback _veh; +}forEach _missionLootVehicles; +_vehs diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf new file mode 100644 index 0000000..a9a031e --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf @@ -0,0 +1,94 @@ +/* + [_coords,_noVehiclePatrols,_aiDifficultyLevel,_uniforms,_headGear] call blck_fnc_spawnMissionVehiclePatrols + by Ghostrider-DbD- + 3/17/17 + returns [] if no groups could be created + returns [_AI_Vehicles,_missionAI] otherwise; + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_coords","_noVehiclePatrols","_aiDifficultyLevel","_uniforms","_headGear",["_missionType","unspecified"]]; + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then +{ + diag_log format["_fnc_spawnMissionVehiclePatrols:: _coords = %1 | _noVehiclePatrols = %2 | _aiDifficultyLevel = %3 | _missionType = %4",_coords,_noVehiclePatrols,_aiDifficultyLevel,_missionType]; +}; +#endif + +private["_vehGroup","_patrolVehicle","_vehiclePatrolSpawns","_missionAI","_missiongroups","_vehicles","_return","_vehiclePatrolSpawns","_randomVehicle","_return","_abort"]; +_vehicles = []; +_missionAI = []; +_abort = false; + +_vehiclePatrolSpawns = [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPositionsAlongARadius; + +{ + private ["_spawnPos"]; + _spawnPos = _x; + _vehGroup = [_spawnPos,3,3,_aiDifficultyLevel,_coords,1,2,_uniforms,_headGear,false] call blck_fnc_spawnGroup; + if (isNull _vehGroup) exitWith + { + _abort = true; + }; + if !(isNull _vehGroup) then + { + blck_monitoredMissionAIGroups pushBack _vehGroup; + }; + + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionVehiclePatrols: group spawned = %1",_vehGroup]; + diag_log format["_fnc_spawnMissionVehiclePatrols (40):: -> _missionType = %3 _vehGroup = %1 and units _vehGroup = %2",_vehGroup, units _vehGroup,_missionType]; + }; + #endif + + _randomVehicle = selectRandom blck_AIPatrolVehicles; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionVehiclePatrols: _randomVehicle = %1",_randomVehicle]; + diag_log format["_fnc_spawnMissionVehiclePatrols:: -> randomly selected vehicle = %1",_randomVehicle]; + }; + #endif + + //params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",30],["_maxDis",45],["_group",grpNull]]; + _patrolVehicle = [_coords,_spawnPos,_randomVehicle,35,45,_vehGroup] call blck_fnc_spawnVehiclePatrol; + _vehGroup setVariable["groupVehicle",_randomVehicle]; + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionVehiclePatrols (65):: - > patrol vehicle spawned was %1",_patrolVehicle]; + }; + #endif + + if !(isNull _patrolVehicle) then + { + _patrolVehicle setVariable["vehicleGroup",_vehGroup]; + _vehicles pushback _patrolVehicle; + _missionAI append (units _vehGroup); + }; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionVehiclePatrols:: -- > _vehicles updated to %1",_vehicles]; + }; + #endif + +} forEach _vehiclePatrolSpawns; + +blck_monitoredVehicles append _vehicles; +_return = [_vehicles, _missionAI, _abort]; + +_return diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnPendingMissions.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnPendingMissions.sqf new file mode 100644 index 0000000..65e95ed --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnPendingMissions.sqf @@ -0,0 +1,67 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last modified 4/29/17 + checks the status of each entry in +/* + By Ghostrider-DbD- + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +#ifdef blck_debugMode +if (blck_debugLevel > 0) then { + diag_log format["_fnc_spawnPendingMissions:: blck_pendingMissions = %1", blck_pendingMissions]; +}; +diag_log format["_fnc_spawnPendingMissions: -- >> blck_missionsRunning = %1",blck_missionsRunning]; +#endif + +if (blck_missionsRunning >= blck_maxSpawnedMissions) exitWith { + + #ifdef blck_debugMode + if (blck_debugLevel > 0) then { + diag_log "_fnc_spawnPendingMissions:: --- >> Maximum number of missions is running; function exited without attempting to find a new mission to spawn"; + }; + #endif +}; + +private["_coords","_missionName","_missionPath","_search","_readyToSpawnQue","_missionToSpawn","_allowReinforcements"]; +_readyToSpawnQue = []; +{ + if ( (diag_tickTime > (_x select 6)) && ((_x select 6) > 0) ) then + { + _readyToSpawnQue pushback _x; + }; +} forEach blck_pendingMissions; +#ifdef blck_debugMode +if (blck_debugLevel > 0) then +{ + diag_log format["_fnc_spawnPendingMissions:: --- >> _readyToSpawnQue = %1",_readyToSpawnQue]; +}; +#endif +if (count _readyToSpawnQue > 0) then +{ + _missionToSpawn = selectRandom _readyToSpawnQue; + + #ifdef blck_debugMode + if (blck_debugLevel > 0) then + { + diag_log format["_fnc_spawnPendingMissions:: -- >> blck_missionsRunning = %1 and blck_maxSpawnedMissions = %2 so _canSpawn = %3",blck_missionsRunning,blck_maxSpawnedMissions, (blck_maxSpawnedMissions - blck_missionsRunning)]; + }; + #endif + + _coords = [] call blck_fnc_FindSafePosn; + _coords pushback 0; + _missionName = selectRandom (_missionToSpawn select 0); + _missionPath = _missionToSpawn select 1; + _allowReinforcements = _missionToSpawn select 8; + [_coords,_missionToSpawn,_allowReinforcements] execVM format["\q\addons\custom_server\Missions\%1\%2.sqf",_missionPath,_missionName]; + blck_missionsRunning = blck_missionsRunning + 1; +}; +true diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf new file mode 100644 index 0000000..c26457b --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_spawnRandomLandscape.sqf @@ -0,0 +1,40 @@ +/* + 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 1/22/17 + copyright 2016 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +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; + +#ifdef blck_debugMode +if (blck_debugLevel > 2) then {diag_log format["_fnc_spawnRandomLandscape::-->> _objects = %1",_objects];}; +#endif + +_objects diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_updateMissionQue.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_updateMissionQue.sqf new file mode 100644 index 0000000..1e2af28 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/GMS_fnc_updateMissionQue.sqf @@ -0,0 +1,59 @@ +/* + 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 1-22-17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_mission","_status",["_coords",[0,0,0]] ]; + +#ifdef blck_debugMode +if (blck_debugLevel > 0) then {diag_log format["_fnc_updateMissionQue :: _mission = %1 | _status = %2 | _coords = %3",_mission,_status,_coords];}; +#endif + +private["_index","_element","_waitTime"]; + +_index = blck_pendingMissions find _mission; +if (_index > -1) then +{ + #ifdef blck_debugMode + if (blck_debuglevel > 0) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions began as %1",blck_pendingMissions];}; + #endif + + _element = blck_pendingMissions select _index; + + #ifdef blck_debugMode + if (blck_debuglevel > 0) then {diag_log format["_fnc_updateMissionQue:: -- >> _element before update = %1",_element];}; + #endif + + if (toLower(_status) isEqualTo "active") then { + _element set[6, -1]; + _element set[7,_coords]; + }; + if (toLower(_status) isEqualTo "inactive") then + { + _waitTime = (_element select 4) + random((_element select 5) - (_element select 4)); + _element set[6, diag_tickTime + _waitTime]; + _element set [7,[0,0,0]]; + }; + + #ifdef blck_debugMode + if (blck_debuglevel > 0) then {diag_log format["_fnc_updateMissionQue:: -- >> _element after update = %1",_element];}; + #endif + + blck_pendingMissions set [_index, _element]; + + #ifdef blck_debugMode + if (blck_debuglevel > 0) then {diag_log format ["_fnc_updateMissionQue :: blck_pendingMissions after update = %1",blck_pendingMissions];}; + #endif +}; + + diff --git a/@ExileServer/addons/custom_server/Compiles/Missions/otl7_Mapper.sqf b/@ExileServer/addons/custom_server/Compiles/Missions/otl7_Mapper.sqf new file mode 100644 index 0000000..059edc8 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Missions/otl7_Mapper.sqf @@ -0,0 +1,47 @@ +/* +Pulled from Arma + version of 11/9/16 +*/ + +params["_center","_azi","_objs","_setVector"]; + + +private ["_newObjs"]; + +//If the object array is in a script, call it. +//_objs = call (compile (preprocessFileLineNumbers _script)); + +_newObjs = []; + +{ + private _object = (_x select 0) createVehicle [0,0,0]; + _newObjs pushback _object; + _object setDir ( (_x select 2) + _azi); + _object setPosATL (_center vectorAdd (_x select 1)); + _object enableSimulationGlobal true; + _object allowDamage true; + // Lock any vehicles placed as part of the mission landscape. Note that vehicles that can be taken by players can be added via the mission template. + if ( (typeOf _object) isKindOf "LandVehicle" || (typeOf _object) isKindOf "Air" || (typeOf _object) isKindOf "Sea") then + { + #ifdef blck_debugMode + diag_log format["MAP ADDONS:: Locking vehicle of type %1",typeOf _object]; + #endif + //_object = _x select 0; + _object setVehicleLock "LOCKEDPLAYER"; + _object 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]; + hint "Use of this vehicle is forbidden"; + }]; + + clearItemCargoGlobal _object; + clearWeaponCargoGlobal _object; + clearMagazineCargoGlobal _object; + clearBackpackCargoGlobal _object; + }; +} forEach _objects; +_newObjs + + +_newObjs diff --git a/@ExileServer/addons/custom_server/Compiles/Reinforcements/GMS_fnc_sendHeliHome.sqf b/@ExileServer/addons/custom_server/Compiles/Reinforcements/GMS_fnc_sendHeliHome.sqf new file mode 100644 index 0000000..908af48 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Reinforcements/GMS_fnc_sendHeliHome.sqf @@ -0,0 +1,36 @@ +/* + Author: Ghostrider-DbD- + Inspiration: blckeagls / A3EAI / VEMF / IgiLoad / SDROP + License: Attribution-NonCommercial-ShareAlike 4.0 International + Last Modified 1/23/17 +*/ +params["_grpPilot"]; +private["_heli","_pilot"]; +_pilot = (units _grpPilot) select 0; +_heli = vehicle _pilot; +diag_log "reinforcements deployed:: send heli back to spawn"; +[[_heli], 300 /* 5 min*/] spawn blck_fnc_addObjToQue; +// select a random location abotu 2K from the mission +_spawnVector = round(random(360)); +_spawnDistance = 2000; +_pos = getPos _heli; + +// Use the new functionality of getPos +// https://community.bistudio.com/wiki/getPos +_home = _pos getPos [_spawnDistance,_spawnVector]; + +// Send the heli back to base +_grpPilot = group this; +[_grpPilot, 0] setWPPos _pos; +[_grpPilot, 0] setWaypointType "MOVE"; +[_grpPilot, 0] setWaypointSpeed "FULL"; +[_grpPilot, 0] setWaypointBehaviour "CARELESS"; +[_grpPilot, 0] setWaypointCompletionRadius 200; +[_grpPilot, 0] setWaypointStatements ["true", "{deleteVehicle _x} forEach units group this;deleteVehicle (vehicle this);diag_log ""helicopter and crew deleted"""]; +[_grpPilot, 0] setWaypointName "GoHome"; +[_grpPilot,0] setWaypointTimeout [0.5,0.5,0.5]; + + +diag_log "reinforcements:: sending Heli Home"; + + diff --git a/@ExileServer/addons/custom_server/Compiles/Reinforcements/GMS_fnc_spawnParaCrate.sqf b/@ExileServer/addons/custom_server/Compiles/Reinforcements/GMS_fnc_spawnParaCrate.sqf new file mode 100644 index 0000000..d5da18f --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Reinforcements/GMS_fnc_spawnParaCrate.sqf @@ -0,0 +1,83 @@ +/* + 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 + _lootCounts, + _lootSetting // [blue, red, green, orange] + ] call blck_spawnHeliParaCrate +*/ + +params["_supplyHeli","_lootCounts"]; + +private ["_chute","_crate"]; +_crate = ""; +_chute = ""; + +diag_log "_fnc_spawnParaCrate:: 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, 100], [], 0, "FLY"]; +[_chute] call blck_fnc_protectVehicle; +_chute setPos [_offset select 0, _offset select 1, 100 ]; //(_offset select 2) - 10]; + +diag_log format["_fnc_spawnParaCrate:: 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["_fnc_spawnParaCrate:: crate spawned %1 at position %2 and attached to %3",_crate, getPos _crate, attachedTo _crate]; + + +switch (_lootSetting) 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["_fnc_spawnParaCrate:: 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["_fnc_spawnParaCrate:: 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) ) exitWith + { + uiSleep 10; // give some time for everything to settle + detach _crate; + deleteVehicle _chute; + if (surfaceIsWater (getPos _crate)) then + { + deleteVehicle _crate; + } else + { + [_crate] call blck_fnc_signalEnd; + }; + }; + }; +}; + +[_crate,_chute] call _fn_monitorCrate; +[[_crate], 1200 /* 20 min*/] spawn blck_fnc_addObjToQue; \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/Compiles/TimeAccel/GMS_fnc_Time.sqf b/@ExileServer/addons/custom_server/Compiles/TimeAccel/GMS_fnc_Time.sqf new file mode 100644 index 0000000..d4baf2c --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/TimeAccel/GMS_fnc_Time.sqf @@ -0,0 +1,72 @@ +// GMS_fnc_time.sqf +// by Ghostrider-DBD_ +// Last Updated 12/21/16 +// Creds to AWOL, A3W, LouD and Creampie for insights. + +//if (!isServer) exitWith {}; + +/* + blck_timeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below + // which can be set using the corresponding variables in the config file for that mod. + + blck_timeAccelerationDay = 1; // Daytime time accelearation + blck_timeAccelerationDusk = 3; // Dawn/dusk time accelearation + blck_timeAccelerationNight = 6; // Nighttim time acceleration + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private ["_arr","_sunrise","_sunset","_time"]; +_arr = date call BIS_fnc_sunriseSunsetTime; +_sunrise = _arr select 0; +_sunset = _arr select 1; +_time = dayTime; + + +// blck_debugMode3 +#ifdef blck_debugMode +if (blck_debugLevel > 2) then +{ + diag_log "fnc_Time:: Debug settings ON"; + diag_log format["_fnc_Time:: -- > _sunrise = %1 | _sunset = %2 | _time = %3",_sunrise,_sunset,_time]; +}; +#endif + +// Night +if (_time > (_sunset + 0.5) || _time < (_sunrise - 0.5)) exitWith { + setTimeMultiplier blck_timeAccelerationNight; + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["NIGHT TIMGE ADJUSTMENT:: time accel updated to %1; time of day = %2",timeMultiplier,dayTime]; + }; + #endif +}; + +// Day +if (_time > (_sunrise + 0.5) && _time < (_sunset - 0.5)) exitWith { + setTimeMultiplier blck_timeAccelerationDay; + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + + diag_log format["DAYTIME ADJUSTMENT:: time accel updated to %1; time of day = %2",timeMultiplier,dayTime]; + }; + #endif +}; + +// default +setTimeMultiplier blck_timeAccelerationDusk; +#ifdef blck_debugMode +if (blck_debugLevel > 2) then +{ + diag_log format["DUSK ADJUSTMENT:: time accel updated to %1; time of day = %2",timeMultiplier,dayTime]; +}; +#endif + + diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_EH_AIHandleDamage.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_EH_AIHandleDamage.sqf new file mode 100644 index 0000000..694086a --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_EH_AIHandleDamage.sqf @@ -0,0 +1,31 @@ +/* + + Deals with instances in which a unit is damaged (not in use). + By Ghostrider-DbD- + Last modified 4-11-17 + + 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. + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private ["_unit","_killer","_group","_deleteAI_At"]; +_unit = _this select 0; +_source = _this select 3; + +if (isPlayer _source) then { + [_unit,_source] call GRMS_fnc_alertGroup; +}; diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_EH_AIHit.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_EH_AIHit.sqf new file mode 100644 index 0000000..e83f11a --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_EH_AIHit.sqf @@ -0,0 +1,51 @@ +/* + By Ghostrider-DbD- + Last Modified 7-27-17 + + Handles the case where a unit is hit. + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private ["_unit","_instigator","_group","_wp"]; +//diag_log format["_EH_AIHit::-->> _this = %1",_this]; +_unit = _this select 0 select 0; +_instigator = _this select 0 select 3; + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then +{ + diag_log format["EH_AIHit:: _units = %1 and _instigator = %2 units damage is %3",_unit,_instigator, damage _unit]; +}; +#endif + +if (!(alive _unit)) exitWith {}; +if (!(isPlayer _instigator)) exitWith {}; +[_unit,_instigator] call blck_fnc_alertGroupUnits; +[_instigator] call blck_fnc_alertNearbyVehicles; +_group = group _unit; +//_group setBehavior "COMBAT"; +_wp = [_group, currentWaypoint _group]; +_wp setWaypointBehaviour "COMBAT"; +_group setCombatMode "RED"; +_wp setWaypointCombatMode "RED"; + +if (_unit getVariable ["hasHealed",false]) exitWith {}; +if ((damage _unit) > 0.1 ) then +{ + //diag_log format["_EH_AIHit::-->> Healing unit %1",_unit]; + _unit setVariable["hasHealed",true,true]; + _unit addMagazine "SmokeShellOrange"; + _unit fire "SmokeShellMuzzle"; + _unit addItem "FAK"; + _unit action ["HealSoldierSelf", _unit]; + _unit setDamage 0; + _unit removeItem "FAK"; +}; + diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_EH_AIKilled.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_EH_AIKilled.sqf new file mode 100644 index 0000000..d7e8151 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_EH_AIKilled.sqf @@ -0,0 +1,19 @@ + +/* + Killed handler for _units + By Ghostrider-DbD + Last Modified 4-11-17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_unit","_killer"]; + +//diag_log format["EH_AIKilled:: _units = %1 and _killer = %2",_unit,_killer]; +[_unit,_killer] remoteExec ["blck_fnc_processAIKill",2]; diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_EH_unitWeaponReloaded.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_EH_unitWeaponReloaded.sqf new file mode 100644 index 0000000..9671043 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_EH_unitWeaponReloaded.sqf @@ -0,0 +1,42 @@ +/* + + Handle case where a unit reloads weapon. + This was used in place of fired event handlers to add realism and deal with issues with the arma engine post v1.64 + By Ghostrider-DbD- + Last modified 4-11-17 + + https://community.bistudio.com/wiki/Arma_3:_Event_Handlers/Reloaded + + The EH returns array in _this variable of the following format [entity, weapon, muzzle, newMagazine, (oldMagazine)], where: + + entity: Object - unit or vehicle to which EH is assigned + weapon: String - weapon that got reloaded + muzzle: String - weapons muzzle that got reloaded + newMagazine: Array - new magazine info in format [magazineClass, ammoCount, magazineID, magazineCreator], where: + magazineClass: String - class name of the magazine + ammoCount: Number - amount of ammo in magazine + magazineID: Number - global magazine id + magazineCreator: Number - owner of the magazine creator + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//private ["_unit","_mag"]; +//_unit = _this select 0; +//_mag = _this select 3 select 0; +(_this select 0) addMagazine (_this select 3 select 0); +#ifdef blck_debugMode +if (blck_debugON) then { + //diag_log format["_EH_unitWeaponReloaded:: unit %1 reloaded weapon %2 with magazine %3",_this select 0, (_this select 3 select 0)]; + //diag_log format["_EH_unitWeaponReloaded:: unit %1 currently has the following magazines 2",_this select 0,magazines (_this select 0)]; +}; +#endif +//if (blck_debugLevel > 2) then (diag_log format["_EH_unitWeaponReloaded:: one magazine of type %1 added to inventory of unit %2",_mag,_unit]; + + diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_alertGroupUnits.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_alertGroupUnits.sqf new file mode 100644 index 0000000..9b94a23 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_alertGroupUnits.sqf @@ -0,0 +1,24 @@ +/* + by Ghostrider + 7-27-17 + Alerts the leader of a group of the location of an enemy. + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_knowsAbout","_intelligence","_group"]; +params["_unit","_target"]; +_intelligence = _unit getVariable ["intelligence",1]; +_group = group _unit; +{ + _knowsAbout = _x knowsAbout _target; + _x reveal [_target,_knowsAbout + _intelligence]; +}forEach units _group; + + diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyLeader.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyLeader.sqf new file mode 100644 index 0000000..4e0c961 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyLeader.sqf @@ -0,0 +1,25 @@ +/* + by Ghostrider + 4-5-17 + Alerts the leader of a group of the location of an enemy. + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_knowsAbout","_intelligence","_group"]; +params["_unit","_target"]; +_intelligence = _unit getVariable ["intelligence",1]; +_group = group _unit; +{ + _knowsAbout = _x knowsAbout _target; + _x reveal [_target,_knowsAbout + _intelligence]; +}forEach units _group; + + + diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyUnits.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyUnits.sqf new file mode 100644 index 0000000..ff3a71d --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyUnits.sqf @@ -0,0 +1,30 @@ +/* + by Ghostrider + 9-20-15 + Allerts all units within a certain radius of the location of a killer. + ** Not in use at this time; reserved for the future ** + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +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) distance2D (position _unit)) <= _alertDist) then { + _knowsAbout = _x knowsAbout _killer; + _x reveal [_killer, _knowsAbout + _intelligence]; + //diag_log "Killer revealed"; + } + } forEach allUnits; +}; diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyVehicles.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyVehicles.sqf new file mode 100644 index 0000000..cd12b74 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyVehicles.sqf @@ -0,0 +1,38 @@ +/* + by Ghostrider + 4-5-17 + Alerts the units of nearby vehicles of the location of an enemy. + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_target"]; + +_fn_alertGroupUnits = { + params["_group","_target"]; + private["_intelligence","_knowsAbout"]; + _intelligence = (leader _group) getVariable ["intelligence",1]; + { + _knowsAbout = _x knowsAbout _target; + _x reveal [_target,_knowsAbout + _intelligence]; + }forEach (units _group); +}; + +_fn_allertNearbyVehicleGroups = { + params["_vehicles","_target"]; + private["_vehGroup"]; + { + _vehGroup = _x getVariable["vehicleGroup",grpNull]; + if (_target distance2D (leader _vehGroup) < 1000) then {[_vehGroup,_target] call _fn_alertGroupUnits;}; + }forEach _vehicles; +}; + +[blck_monitoredVehicles,_target] call _fn_allertNearbyVehicleGroups; + + diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_cleanupAliveAI.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_cleanupAliveAI.sqf new file mode 100644 index 0000000..b904443 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_cleanupAliveAI.sqf @@ -0,0 +1,68 @@ +/* + Delete alive AI. + Now called from the main thread which tracks the time elapsed so that we no longer spawn a wait timer for each completed mission. + by Ghostrider + Last updated 4/11/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +/* +_fn_deleteAIfromList = { + params["_aiList"]; + #ifdef blck_debugMode + if (blck_debugLevel > 0) then {diag_log format["_fn_deleteAIfromList:: _aiList = %1",_aiList];}; + #endif + + { + #ifdef blck_debugMode + if (blck_debugLevel > 1) then {diag_log format["_fn_deleteAIfromList:: -> deleteing AI Unit %1",_x];}; + #endif + + [_x] call blck_fnc_deleteAI; + }forEach _aiList; +}; + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then {diag_log format["_fnc_cleanupAliveAI called at %1",diag_tickTime];}; +#endif +*/ +for "_i" from 1 to (count blck_liveMissionAI) do +{ + if ((_i) <= count blck_liveMissionAI) then + { + _units = blck_liveMissionAI select (_i - 1); + //diag_log format["_fnc_cleanupAliveAI:: (34) evaluating with delete time = %2 and diag_tickTime %1", diag_tickTime, _units select 1]; + if (diag_tickTime > (_units select 1) ) then + { + //diag_log format["_fnc_cleanupAliveAI:: cleaning up AI group %1",_units]; + { + + //diag_log format["_fnc_cleanupAliveAI:: deleting unit %1",_x]; + //diag_log format["_fnc_cleanupAliveAI:: vehicle _x = %1",vehicle _x]; + //diag_log format["_fnc_cleanupAliveAI:: objectParent _x = %1",objectParent _x]; + + if ((alive _x) && !(isNull objectParent _x)) then // mark the vehicle for deletion + { + //diag_log format["_fnc_cleanupAliveAI: deleteing objectParent %1 [%3] for unit %2",objectParent _x, _x, typeName (objectParent _x), typeOf (objectParent _x)]; + [objectParent _x] call blck_fn_deleteAIvehicle; + }; + [_x] call blck_fnc_deleteAI; + }forEach (_units select 0); + uiSleep 0.1; + blck_liveMissionAI set[(_i - 1), -1]; + blck_liveMissionAI = blck_liveMissionAI - [-1]; // Remove that list of live AI from the list. + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then {diag_log format["_fnc_mainTread:: blck_liveMissionAI updated to %1",blck_liveMissionAI];}; + #endif + }; + }; +}; + diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_cleanupDeadAI.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_cleanupDeadAI.sqf new file mode 100644 index 0000000..e8c9867 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_cleanupDeadAI.sqf @@ -0,0 +1,31 @@ +/* + Delete Dead AI and nearby weapons after an appropriate period. + by Ghostrider + Last updated 1/24/17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +#ifdef blck_debugMode +if (blck_debugLevel > 2) then {diag_log format["fnc_cleanupDeadAI called at time %1",diag_tickTime];}; +#endif + +private["_aiList","_ai"]; +_aiList = +blck_deadAI; +{ + if ( diag_tickTime > _x getVariable ["blck_cleanupAt",0] ) then // DBD_DeleteAITimer + { + _ai = _x; + { + deleteVehicle _x; + }forEach nearestObjects [getPos _ai,["WeaponHolderSimulated","GroundWeapoonHolder"],3]; + blck_deadAI = blck_deadAI - [_ai]; + deleteVehicle _ai; + }; +} forEach _aiList; + diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_deleteAI.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_deleteAI.sqf new file mode 100644 index 0000000..78fa2a0 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_deleteAI.sqf @@ -0,0 +1,29 @@ +/* + Delete a unit. + by Ghostrider + Last updated 1/22/17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_ai","_group"]; +params["_unit"]; + +//if (blck_debugLevel > 2) then {diag_log format["_fnc_deleteAI::-> deleting unit = %1",_unit];}; + +{ + _unit removeAllEventHandlers _x; +}forEach ["Killed","Fired","HandleDamage","HandleHeal","FiredNear"]; +private _group = (group _unit); +[_unit] joinSilent grpNull; +deleteVehicle _unit; +if (count units _group isEqualTo 0) then +{ + deletegroup _group; +}; + diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf new file mode 100644 index 0000000..046d8ba --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf @@ -0,0 +1,74 @@ +/* + Handle AI Deaths + Last Modified 7/27/17 + By Ghostrider-DBD- + Copyright 2016 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_group","_isLegal","_weapon","_lastkill","_kills","_message","_killstreakMsg"]; +params["_unit","_killer","_isLegal"]; + +_unit setVariable ["blck_cleanupAt", (diag_tickTime) + blck_bodyCleanUpTimer, true]; + +blck_deadAI pushback _unit; +_group = group _unit; +[_unit] joinSilent grpNull; +if (count(units _group) < 1) then { + #ifdef useDynamicSimulation + _group enableDynamicSimulation false; + #endif + deleteGroup _group; +}; +if (blck_launcherCleanup) then {[_unit] spawn blck_fnc_removeLaunchers;}; +if (blck_removeNVG) then {[_unit] spawn blck_fnc_removeNVG;}; +if !(isPlayer _killer) exitWith {}; +[_unit,_killer] call blck_fnc_alertGroupUnits; +[_killer] call blck_fnc_alertNearbyVehicles; +_group = group _unit; +_wp = [_group, currentWaypoint _group]; +_wp setWaypointBehaviour "COMBAT"; +_group setCombatMode "RED"; +_wp setWaypointCombatMode "RED"; +{ + _unit removeAllEventHandlers _x; +}forEach ["Killed","Fired","HandleDamage","HandleHeal","FiredNear","Hit"]; + +_isLegal = [_unit,_killer] call blck_fnc_processIlleagalAIKills; + +if !(_isLegal) exitWith {}; + +_lastkill = _killer getVariable["blck_lastkill",diag_tickTime]; +_killer setVariable["blck_lastkill",diag_tickTime]; +_kills = (_killer getVariable["blck_kills",0]) + 1; +if ((diag_tickTime - _lastkill) < 240) then +{ + _killer setVariable["blck_kills",_kills]; +} else { + _killer setVariable["blck_kills",0]; +}; + +if (blck_useKillMessages) then +{ + _weapon = currentWeapon _killer; + _killstreakMsg = format[" %1X KILLSTREAK",_kills]; + + if (blck_useKilledAIName) then + { + _message = format["[blck] %2: killed by %1 from %3m",name _killer,name _unit,round(_unit distance _killer)]; + }else{ + _message = format["[blck] %1 killed with %2 from %3 meters",name _killer,getText(configFile >> "CfgWeapons" >> _weapon >> "DisplayName"), round(_unit distance _killer)]; + }; + _message =_message + _killstreakMsg; + //diag_log format["[blck] unit killed message is %1",_message,""]; + [["aikilled",_message,"victory"],playableUnits] call blck_fnc_messageplayers; +}; +[_unit,_killer] call blck_fnc_rewardKiller; + + diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_processIlleagalAIKills.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_processIlleagalAIKills.sqf new file mode 100644 index 0000000..33d8566 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_processIlleagalAIKills.sqf @@ -0,0 +1,97 @@ +/* + by Ghostrider + 6-1-17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +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["_unit","_vk"]; + private["_unit"]; + { + if ( ( (getPos _vk) distance2d (getPos _x) ) < 500 ) then + { + _x reveal [_vk, 4]; + _x dowatch _vk; + _x doTarget _vk; + if (_unit getVariable ["Launcher",""] != "") then + { + _x selectWeapon (secondaryWeapon _unit); + _x fireAtTarget [_vk,_unit getVariable ["Launcher"]]; + } else { + _x doTarget _vk; + _x doFire _vk; + }; + }; + } forEach (call blck_fnc_allPlayers); +}; + +_fn_applyVehicleDamage = { // apply a bit of damage + private["_vd"]; + params["_vk"]; + _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"]; + //diag_log format["fn_msgIED:: -- >> msg = %1 and owner _killer = %2",blck_Message, (owner _killer)]; + [["IED","",0,0],[_killer]] call blck_fnc_MessagePlayers; +}; + +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; + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["<<--->> Unit %1 was run over by %2",_unit,_killer]; + }; + #endif + }; + 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 { + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["!!---!! Unit was killed by a forbidden vehicle or gun",_unit]; + }; + #endif + 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 diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_removeGear.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_removeGear.sqf new file mode 100644 index 0000000..8c42bc0 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_removeGear.sqf @@ -0,0 +1,22 @@ +/* + Remove all gear from an AI _unit + By Ghostrider-DbD- + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_unit"]; + +removeVest _unit; +removeHeadgear _unit; +removeGoggles _unit; +removeAllItems _unit; +removeAllWeapons _unit; +removeBackpackGlobal _unit; +removeUniform _unit; diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_removeLaunchers.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_removeLaunchers.sqf new file mode 100644 index 0000000..a1159ad --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_removeLaunchers.sqf @@ -0,0 +1,31 @@ +/* + by Ghostrider + 1-22-17 + Removes an AI launcher and ammo + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_launcher","_launcherRounds"]; +params["_unit"]; // = _this select 0; +_launcher = _unit getVariable ["Launcher",""]; +_unit removeWeapon _Launcher; +if (_launcher != "") then +{ + _unit removeWeapon _Launcher; + { + if (_launcher in weaponCargo _x) exitWith { + deleteVehicle _x; + }; + } forEach ((getPosATL _unit) nearObjects ["WeaponHolderSimulated",10]); + _launcherRounds = getArray (configFile >> "CfgWeapons" >> _Launcher >> "magazines"); //0; + { + if(_x in _launcherRounds) then {_unit removeMagazine _x;}; + } count magazines _unit; +}; + diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_removeNVG.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_removeNVG.sqf new file mode 100644 index 0000000..a4bb7e3 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_removeNVG.sqf @@ -0,0 +1,24 @@ +/* + by Ghostrider + 8-13-16 + Remove NVG from AI + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +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"; + }; +}; diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_rewardKiller.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_rewardKiller.sqf new file mode 100644 index 0000000..e818124 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_rewardKiller.sqf @@ -0,0 +1,120 @@ + +/* + calculate a reward player for AI Kills in crypto. + Code fragment adapted from VEMF + call as [_unit,_killer] call blck_fnc_rewardKiller; + Last modified 6/3/17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_unit","_killer"]; +//diag_log format["rewardKiller:: _unit = %1 and _killer %2",_unit,_killer]; + +private["_modType","_reward","_maxReward","_dist","_killstreakReward","_distanceBonus","_newKillerScore","_newKillerFrags","_money"]; +_modType = call blck_fnc_getModType; + +//diag_log format["[blckeagles] rewardKiller:: - _modType = %1",_modType]; +//if (_modType isEqualTo "Epoch") exitWith {}; // Have players pull crypto from AI bodies now that this feature is available. + +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 }; + + private _killstreakReward=+(_kills*2); + //diag_log format["fnd_rewardKiller:: _bonus returned will be %1",_reward]; + if (blck_addAIMoney) then + { + [_killer,_reward + _killstreakReward] call blck_fnc_giveTakeCrypto; + }; + if (blck_useKillScoreMessage) then + { + [["showScore",[_reward,"",_kills],""],[_killer]] call blck_fnc_messageplayers; + }; + }; +}; + +/* +_player setVariable ["ExileHunger", _data select 4]; +_player setVariable ["ExileThirst", _data select 5]; +_player setVariable ["ExileAlcohol", _data select 6]; +_player setVariable ["ExileTemperature", _data select 44]; +_player setVariable ["ExileWetness", _data select 45]; +*/ + +if (_modType isEqualTo "Exile") then +{ + private["_distanceBonus","_overallRespectChange","_newKillerScore","_newKillerFrags","_maxReward","_money","_message"]; + /* + // Temporary fix for the Loss of Respect Bug. + diag_log format["GMS_fnc_rewardKiller.sqf:: _killer name = %2 | ExileScore = %1 | Kills %3",_killer getVariable [ "ExileScore", 0 ], name _killer, _killer getVariable["ExileKills",0]]; + diag_log format["GMS_fnc_rewardKiller.sqf:: _killer = %1 | vehicle _killer = %2 | objectParent _killer %3",_killer, vehicle _killer, objectParent _killer]; + diag_log format["GMS_fnc_rewardKiller.sqf:: _killer is gunner = %1 | killer is driver = %2",_killer isEqualTo gunner objectParent _killer,_killer isEqualTo driver objectParent _killer]; + diag_log format["GMS_fnc_rewardKiller.sqf:: _killer ExileOwnerUID = %1 ",_killer getVariable["ExileOwnerUID",0]]; // ExileOwnerUID + diag_log format["GMS_fnc_rewardKiller.sqf:: _killer ExileHunger = %1 ",_killer getVariable["ExileHunger",0]]; // ExileOwnerUID + diag_log format["GMS_fnc_rewardKiller.sqf:: _killer ExileThirst = %1 ",_killer getVariable["ExileThirst",0]]; // ExileOwnerUID + diag_log format["GMS_fnc_rewardKiller.sqf:: _killer ExileAlcohol = %1 ",_killer getVariable["ExileAlcohol",0]]; // ExileOwnerUID + diag_log format["GMS_fnc_rewardKiller.sqf:: _killer ExileWetness = %1 ",_killer getVariable["ExileWetness",0]]; // ExileOwnerUID + */ + if ( (isPlayer _killer) && (_killer getVariable["ExileHunger",0] > 0) && (_killer getVariable["ExileThirst",0] > 0) ) then + { + _distanceBonus = floor((_unit distance _killer)/100); + _killstreakBonus = 3 * (_killer getVariable["blck_kills",0]); + _respectGained = 25 + _distanceBonus + _killstreakBonus; + _score = _killer getVariable ["ExileScore", 0]; + //diag_log format["GMS_fnc_rewardKiller.sqf:: ExileScore = %1",_killer getVariable ["ExileScore", 0]]; + _score = _score + (_respectGained); + //diag_log format["GMS_fnc_rewardKiller.sqf:: _new = %1",_score]; + _killer setVariable ["ExileScore", _score]; + format["setAccountScore:%1:%2", _score,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; + //_message = ["showFragRequest",_respectGained]; + _killer call ExileServer_object_player_sendStatsUpdate; + if (blck_useKillScoreMessage) then + { + [["showScore",[_respectGained,_distanceBonus,_kills]], [_killer]] call blck_fnc_messageplayers; + }; + }; +}; + + +/* + if (_overallRespectChange > 0) then { + _score = _killer getVariable ["ExileScore", 0]; + _score = _score + _overallRespectChange; + _killer setVariable ["ExileScore", _score]; + format["setAccountScore:%1:%2", _score,_killerPlayerUID] call ExileServer_system_database_query_fireAndForget; + [_killer, "showFragRequest", [_killerRespectPoints]] call A3XAI_sendExileMessage; + }; + + //["systemChatRequest", [_killMessage]] call ExileServer_system_network_send_broadcast; //To-do: Non-global version + _newKillerFrags = _killer getVariable ["ExileKills", 0]; + _killer setVariable ["ExileKills", _newKillerFrags + 1]; + format["addAccountKill:%1", _killerPlayerUID] call ExileServer_system_database_query_fireAndForget; + + _killer call ExileServer_object_player_sendStatsUpdate; +}; diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_setSkill.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_setSkill.sqf new file mode 100644 index 0000000..85b8fa6 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_setSkill.sqf @@ -0,0 +1,20 @@ +/* + Set skills for an AI Unit + by Ghostrider + Last updated 8/14/16 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +// Self explanatory +// [_group, _skill] call blck_setSkill; +params ["_unit","_skillsArrray"]; + +{ + _unit setSkill [(_x select 0),(_x select 1)]; +} forEach _skillsArrray; diff --git a/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf new file mode 100644 index 0000000..46ee104 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Units/GMS_fnc_spawnUnit.sqf @@ -0,0 +1,184 @@ +/* + Original Code by blckeagls + Modified by Ghostrider + Logic for adding AI Ammo, GL Shells and Attachments addapted from that by Buttface (A3XAI). + Everything having to do with spawning and configuring an AI should happen here + Last Modified 1/22/17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//Defines private variables so they don't interfere with other scripts +private ["_i","_weap","_skin","_ai1","_skillLevel","_aiSkills", + "_launcherRound","_index","_ammoChoices"]; + +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; // List of weapons with which to arm the AI +//_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; // skins to add to AI +//_headGear = [_this, 6, _shemag] call BIS_fnc_param;// headGear to add to AI + +if (isNull _aiGroup) exitWith {diag_log "[blckeagls] ERROR CONDITION:-->> NULL-GROUP Provided to _fnc_spawnUnit"}; + +_ai1 = ObjNull; +private _modType = call blck_fnc_getModType; +if (_modType isEqualTo "Epoch") then +{ + "I_Soldier_EPOCH" createUnit [_pos, _aiGroup, "_ai1 = this", 0.7, "COLONEL"]; + switch(_skillLevel) do + { + case "blue":{_ai1 setVariable["Crypto",1 + floor(random(blck_maxMoneyBlue)),true];}; + case "red":{_ai1 setVariable["Crypto",2 + floor(random(blck_maxMoneyRed)),true];}; + case "green":{_ai1 setVariable["Crypto",3 + floor(random(blck_maxMoneyGreen)),true];}; + case "orange":{_ai1 setVariable["Crypto",4 + floor(random(blck_maxMoneyOrange)),true];}; + }; +}; +if (_modType isEqualTo "Exile") then +{ + "i_g_soldier_unarmed_f" createUnit [_pos, _aiGroup, "_ai1 = this", blck_baseSkill, "COLONEL"]; + switch(_skillLevel) do + { + case "blue":{_ai1 setVariable["ExileMoney",2 + floor(random(blck_maxMoneyBlue)),true];}; + case "red":{_ai1 setVariable["ExileMoney",4 + floor(random(blck_maxMoneyRed)),true];}; + case "green":{_ai1 setVariable["ExileMoney",6 + floor(random(blck_maxMoneyGreen)),true];}; + case "orange":{_ai1 setVariable["ExileMoney",8 + floor(random(blck_maxMoneyOrange)),true];}; + }; +}; +[_ai1] call blck_fnc_removeGear; +_skin = ""; +_counter = 1; +while {_skin isEqualTo "" && _counter < 10} do +{ + _skin = selectRandom _uniforms; + _ai1 forceAddUniform _skin; + _skin = uniform _ai1; + //diag_log format["_fnc_spawnUnit::-->> for unit _ai1 % uniform is %2",_ai1, uniform _ai1]; + _counter =+1; +}; +//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 +_ai1 addVest selectRandom blck_vests; + +if ( random (1) < blck_chanceBackpack) then +{ + //_bpck = selectRandom blck_backpack; + _ai1 addBackpack selectRandom blck_backpacks; +}; + +_weap = selectRandom _weaponList; +private["_optics","_pointers","_muzzles","_underbarrel","_legalOptics"]; +_ai1 addWeaponGlobal _weap; +_ammoChoices = getArray (configFile >> "CfgWeapons" >> _weap >> "magazines"); +_optics = getArray (configfile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems"); +_pointers = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems"); +_muzzles = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems"); +_underbarrel = getArray (configFile >> "CfgWeapons" >> _weap >> "WeaponSlotsInfo" >> "UnderBarrelSlot" >> "compatibleItems"); +_legalOptics = _optics - blck_blacklistedOptics; + +_ai1 addMagazines [selectRandom _ammoChoices, 3]; + +if (random 1 < 0.4) then {_ai1 addPrimaryWeaponItem (selectRandom _muzzles)}; +if (random 1 < 0.4) then {_ai1 addPrimaryWeaponItem (selectRandom _legalOptics);}; +if (random 1 < 0.4) then {_ai1 addPrimaryWeaponItem (selectRandom _pointers);}; +if (random 1 < 0.4) then {_ai1 addPrimaryWeaponItem (selectRandom _muzzles);}; +if (random 1 < 0.4) then {_ai1 addPrimaryWeaponItem (selectRandom _underbarrel);}; +if ((count(getArray (configFile >> "cfgWeapons" >> _weap >> "muzzles"))) > 1) then { + _ai1 addMagazine "1Rnd_HE_Grenade_shell"; +}; + +_weap = selectRandom blck_Pistols; +//diag_log format["[spawnUnit.sqf] _weap os %1",_weap]; +_ai1 addWeaponGlobal _weap; +_ammoChoices = getArray (configFile >> "CfgWeapons" >> _weap >> "magazines"); +_ai1 addMagazines [selectRandom _ammoChoices, 2]; + +//add random items to AI. _other = ["ITEM","COUNT"] +for "_i" from 1 to (1+floor(random(3))) do { + _ai1 addItem (selectRandom blck_ConsumableItems); +}; + +// Add an First Aid or Grenade 50% of the time +if (round(random 10) <= 5) then +{ + //_item = selectRandom blck_specialItems; + //diag_log format["spawnUnit.sqf] -- Item is %1", _item]; + _ai1 addItem selectRandom blck_specialItems; +}; + +if (_Launcher != "none") then +{ + private["_bpck"]; + _ai1 addWeaponGlobal _Launcher; + for "_i" from 1 to 3 do + { + _ai1 addItemToBackpack (getArray (configFile >> "CfgWeapons" >> _Launcher >> "magazines") select 0); // call BIS_fnc_selectRandom; + }; + _ai1 setVariable["Launcher",_launcher]; +}; + +if(sunOrMoon < 0.2 && blck_useNVG)then +{ + _ai1 addWeapon selectRandom blck_NVG; + _ai1 setVariable ["hasNVG", true]; + +} +else +{ + _ai1 setVariable ["hasNVG", false]; +}; + +// Infinite ammo +//_ai1 addeventhandler ["fired", {(_this select 0) setvehicleammo 1;}]; +_ai1 addEventHandler ["reloaded", {_this call compile preprocessfilelinenumbers blck_EH_unitWeaponReloaded;}]; +_ai1 addEventHandler ["killed",{ [(_this select 0), (_this select 1)] call compile preprocessfilelinenumbers blck_EH_AIKilled;}]; // changed to reduce number of concurrent threads, but also works as spawn blck_AIKilled; }]; +_ai1 addEventHandler ["Hit",{ [_this] call compile preprocessFileLineNumbers blck_EH_AHHit;}]; +//_ai1 addEventHandler ["FiredNear",{diag_log "-------->>>>>>>> Weapon fired Near Unit";}]; +//_ai1 addEventHandler ["FiredNear",{ [_this] call compile preprocessFileLineNumbers blck_EH_AIFiredNear;};]; + +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",blck_AIAlertDistance select _index,true]; +_ai1 setVariable ["intelligence",blck_AIIntelligence select _index,true]; +_ai1 setVariable ["GMS_AI",true,true]; + +_ai1 + + diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_configureMissionVehicle.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_configureMissionVehicle.sqf new file mode 100644 index 0000000..892dbea --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_configureMissionVehicle.sqf @@ -0,0 +1,36 @@ +// Configures a mission vehicle +/* + By Ghostrider-DBD- + Copyright 2016 + Last updated 3-14-17 + + spawns a vehicle of _vehType and mans it with units in _group. + returns _veh, the vehicle spawned. + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_veh",["_clearInventory",true]]; +private["_unit"]; +if (_clearInventory) then +{ + [_veh] call blck_fnc_emptyObject; +}; +_veh setVehicleLock "LOCKEDPLAYER"; +_veh addEventHandler ["GetIn",{ // Note: only fires when vehicle is local to player + private["_unit","_veh"]; + _unit = _this select 2; + _veh = _this select 0; + if (isPlayer _unit) then + { + _unit action ["eject",_veh]; + titleText ["You are not allowed to enter that vehicle at this time","PLAIN DOWN"]; + }; +}]; + +_veh diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_decomissionAIVehicle.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_decomissionAIVehicle.sqf new file mode 100644 index 0000000..cab77ef --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_decomissionAIVehicle.sqf @@ -0,0 +1,64 @@ +/* + By Ghostrider-DBD- + Copyright 2016 + Last updated 3-14-17 + + spawns a vehicle of _vehType and mans it with units in _group. + returns _veh, the vehicle spawned. + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +diag_log "Vehicle Decommisioning handler activated"; +params["_veh"]; + +if (_veh getVariable["DBD_vehType","none"] isEqualTo "emplaced") then // Deal with a static weapon +{ + if (blck_killEmptyStaticWeapons) then + { + if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: case of destroyed where vehicle = %1",_veh];}; + _veh setDamage 1; + _veh setVariable["blck_DeleteAt",diag_tickTime + 60]; + } else { + [_veh] call blck_fnc_releaseVehicleToPlayers; + }; +}else { // Deal with vehicles + if (blck_killEmptyAIVehicles) then + { + if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: case of patrol vehicle destroyed where vehicle = %1",_veh];}; + { + _veh setHitPointDamage [_x, 1]; + + } forEach ["HitLFWheel","HitLF2Wheel","HitRFWheel","HitRF2Wheel","HitEngine","HitLBWheel","HitLMWheel","HitRBWheel","HitRMWheel","HitTurret","HitGun","HitTurret","HitGun","HitTurret","HitGun","HitTurret","HitGun"]; + _veh setVariable["blck_DeleteAt",diag_tickTime + 60]; + } else { + if (blck_debugLevel > 0) then {diag_log format["_fnc_vehicleMonitor:: case of release vehicle = %1 to player with blck_monitoredVehicles = %2",_veh, blck_monitoredVehicles];}; + blck_monitoredVehicles = blck_monitoredVehicles - [_veh]; + if (blck_debugLevel > 0) then {diag_log format["_fnc_vehicleMonitor:: blck_monitoredVehicles updated to %1", blck_monitoredVehicles];}; + [_veh] call blck_fnc_releaseVehicleToPlayers; + }; +}; + +/* + +_ai_veh = _this select 0; + +_if (_ai_veh getVariable["disabled",false]) exitWith {}; + +_ai_veh setVariable["disabled",true]; +//_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; diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_protectVehicle.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_protectVehicle.sqf new file mode 100644 index 0000000..fbb63b8 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_protectVehicle.sqf @@ -0,0 +1,28 @@ +// Protect Vehicles from being cleaned up by the server +// Last modified 2/26/16 by Ghostrider-DBD- +/* + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_Vehicle"]; + +private["_modType"]; +_modType = call blck_fnc_getModType; +switch (_ModType) do { + case "Epoch": + { + #ifdef blck_debugMode + if (blck_debugLevel > 2) then {diag_log format["GMS_fnc_protectVehicle:: Tokens set for vehicle %1",_Vehicle];}; + #endif + //_Vehicle call EPOCH_server_vehicleInit; + _Vehicle call EPOCH_server_setVToken; + }; +}; + + diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_releaseVehicleToPlayers.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_releaseVehicleToPlayers.sqf new file mode 100644 index 0000000..68347b4 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_releaseVehicleToPlayers.sqf @@ -0,0 +1,43 @@ +/* + Handle the case that all AI assigned to a vehicle are dead. + Allows players to enter and use the vehicle. + + By Ghostrider-DBD- + Copyright 2016 + Last updated 3-24-17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + params["_v"]; + //diag_log format["_fnc_releastVehicletoPlayers.sqf: removing vehicle %1 from ",_v,blck_monitoredVehicles]; + //blck_monitoredVehicles = blck_monitoredVehicles - [_v]; + _v removeAllEventHandlers "GetIn"; + _v removeAllEventHandlers "GetOut"; + _v removeAllEventHandlers "Fired"; + _v removeAllEventHandlers "Reloaded"; + _v setVehicleLock "UNLOCKED" ; + _v setVariable["releasedToPlayers",true]; + [_v] call blck_fnc_emptyObject; + + + //{ + //_v removealleventhandlers _x; + //}forEach["Fired","Hit","HitPart","Reloaded","Dammaged","HandleDamage","GetIn","GetOut"]; + + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_vehicleMonitor:: case of patrol vehicle released to players where vehicle = %1",_v]; + }; + #endif + + + + diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_sendHeliHome.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_sendHeliHome.sqf new file mode 100644 index 0000000..908af48 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_sendHeliHome.sqf @@ -0,0 +1,36 @@ +/* + Author: Ghostrider-DbD- + Inspiration: blckeagls / A3EAI / VEMF / IgiLoad / SDROP + License: Attribution-NonCommercial-ShareAlike 4.0 International + Last Modified 1/23/17 +*/ +params["_grpPilot"]; +private["_heli","_pilot"]; +_pilot = (units _grpPilot) select 0; +_heli = vehicle _pilot; +diag_log "reinforcements deployed:: send heli back to spawn"; +[[_heli], 300 /* 5 min*/] spawn blck_fnc_addObjToQue; +// select a random location abotu 2K from the mission +_spawnVector = round(random(360)); +_spawnDistance = 2000; +_pos = getPos _heli; + +// Use the new functionality of getPos +// https://community.bistudio.com/wiki/getPos +_home = _pos getPos [_spawnDistance,_spawnVector]; + +// Send the heli back to base +_grpPilot = group this; +[_grpPilot, 0] setWPPos _pos; +[_grpPilot, 0] setWaypointType "MOVE"; +[_grpPilot, 0] setWaypointSpeed "FULL"; +[_grpPilot, 0] setWaypointBehaviour "CARELESS"; +[_grpPilot, 0] setWaypointCompletionRadius 200; +[_grpPilot, 0] setWaypointStatements ["true", "{deleteVehicle _x} forEach units group this;deleteVehicle (vehicle this);diag_log ""helicopter and crew deleted"""]; +[_grpPilot, 0] setWaypointName "GoHome"; +[_grpPilot,0] setWaypointTimeout [0.5,0.5,0.5]; + + +diag_log "reinforcements:: sending Heli Home"; + + diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnMissionHeli.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnMissionHeli.sqf new file mode 100644 index 0000000..5004a0f --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnMissionHeli.sqf @@ -0,0 +1,199 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-17-17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//params["_coords","_skillAI","_weapons","_uniforms","_headGear","_helis"]; +_coords = _this select 0; +_skillAI = _this select 1; +_weapons = _this select 2; +_uniforms = _this select 3; +_headGear = _this select 4; +_helis = _this select 5; + +/* + Handles upper level functions of reinforcements utilizing helicoptor patrols and/or spawned from a helicopter. + Calls on functions that spawn paratroops and/or loot chests at the heli's location. + + Tasks are: + 1) spawn a heli over the mission center. + 2) add crew and gunners + 3) spawn paratroops + 4) configure waypointScript + 5) return the _heli that was spawned. +*/ +#ifdef blck_debugMode +if (blck_debugLevel > 0) then +{ + diag_log format["_fnc_spawnMissionHeli (38):: _helis = %1",_helis]; +}; +#endif + +private["_grpPilot","_chopperType","_patrolHeli","_launcherType","_unitPilot","_unitCrew","_mags","_turret","_return","_abort"]; +_abort = false; +_grpPilot = createGroup blck_AI_Side; +if (isNull _grpPilot) then +{ + diag_log "BLCK_ERROR: _fnc_spawnMissionHeli::_->> NULL GROUP Returned for _grpPilot"; + _abort = true; +}; + +_grpParatroops = createGroup blck_AI_Side; +if (isNull _grpParatroops) then +{ + diag_log "BLCK_ERROR: _fnc_spawnMissionHeli::_->> NULL GROUP Returned for _grpParatroops"; + _abort = true; +}; +if (!(isNull _grpPilot) && !(isNull _grpParatroops)) then +{ + _grpPilot setBehaviour "COMBAT"; + _grpPilot setCombatMode "RED"; + _grpPilot setSpeedMode "NORMAL"; + _grpPilot allowFleeing 0; + _grpPilot setVariable["patrolCenter",_coords]; + _grpPilot setVariable["minDis",15]; + _grpPilot setVariable["maxDis",30]; + _grpPilot setVariable["timeStamp",diag_tickTime]; + _grpPilot setVariable["arc",0]; + _grpPilot setVariable["wpRadius",30]; + _grpPilot setVariable["wpMode","SAD"]; + + private["_supplyHeli"]; + //create helicopter and spawn it + _chopperType = selectRandom _helis; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionHeli (78):: _chopperType seleted = %1",_chopperType]; + }; + #endif + + _patrolHeli = createVehicle [_chopperType, _coords, [], 90, "FLY"]; + _grpPilot setVariable["groupVehicle",_patrolHeli]; + [_patrolHeli] call blck_fnc_protectVehicle; + _patrolHeli setFuel 1; + _patrolHeli engineOn true; + _patrolHeli flyInHeight 100; + _patrolHeli setVehicleLock "LOCKED"; + _patrolHeli addEventHandler ["GetOut",{(_this select 0) setFuel 0;(_this select 0) setDamage 1;}]; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionHeli (93):: heli %1 spawned",_patrolHeli]; + }; + #endif + + [_patrolHeli] call blck_fnc_emptyObject; + + _launcherType = "none"; + _unitPilot = _grpPilot createUnit ["I_helipilot_F", getPos _patrolHeli, [], 0, "FORM"]; + _unitPilot = [[100,100,100],_weapons,_grpPilot,_skillAI,_launcherType,_uniforms,_headGear] call blck_fnc_spawnAI; + _unitPilot setSkill 1; + _unitPilot assignAsDriver _patrolHeli; + _unitPilot moveInDriver _patrolHeli; + _grpPilot selectLeader _unitPilot; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionHeli (113):: pilot %1 spawned",_unitPilot]; + }; + #endif + + _turrets = allTurrets [_patrolHeli,false]; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log "_fnc_spawnMissionHeli (103): preparing to clear out blacklisted turrets"; + }; + #endif + + { + if ( (_patrolHeli weaponsTurret _x) in blck_blacklisted_heli_weapons) then + { + private["_mags","_turret"]; + _mags = _patrolHeli magazinesTurret _x; + _turret = _x; + { + _patrolHeli removeMagazines [_x,_turret]; + } forEach _mags; + _patrolHeli removeWeaponTurret _turret; + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionHeli (118)::-->> weapon %1 and its ammo removed from heli %2 for turret %3",_patrolHeli weaponsTurret _x,_patrolHeli, _x]; + }; + } + else + { + // B_helicrew_F + _unitCrew = [(getPosATL _patrolHeli),_weapons,_grpPilot,_skillAI,_launcherType,_uniforms,_headGear] call blck_fnc_spawnAI; + _unitCrew assignAsTurret [_patrolHeli, _x]; + _unitCrew moveInTurret [_patrolHeli, _x]; + + #ifdef blck_debugMode + diag_log format["_fnc_spawnMissionHeli (12798)::-- >> unit %1 moved into turret %2 of vehicle %3",_unitCrew,_x,_patrolHeli]; + #endif + }; + }forEach _turrets; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionHeli (133)::-->> Heli %1 outfited with a crew numbering %2",_patrolHeli, crew _patrolHeli]; + }; + #endif + + // params["_missionPos","_paraGroup",["_numAI",3],"_skillAI","_weapons","_uniforms","_headGear",["_heli",objNull],_grpParatroops]; + //params["_coords","_skillAI","_weapons","_uniforms","_headGear",["_grpParatroops",grpNull],["_heli",objNull]]; + if !(isNull _grpParatroops) then + { + [_coords,_skillAI,_weapons,_uniforms,_headGear,_grpParatroops,_patrolHeli] call blck_fnc_spawnMissionParatroops; + }; + + //set waypoint for helicopter + [_coords,30,35,_grpPilot,"random","SENTRY"] spawn blck_fnc_setupWaypoints; + + blck_monitoredMissionAIGroups pushBack _grpPilot; + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnMissionHeli (153):: initial pilot waypoints set"]; + [_patrolHeli] spawn { + params["_patrolHeli"]; + diag_log "_fnc_spawnMissionHeli:-> spawning crew monitoring loop"; + while {!isNull _patrolHeli} do + { + uiSleep 120; + diag_log format["_fnc_spawnMissionHeli:-> heli %1 has %2 crew alive",_patrolHeli, {alive _x} count crew _patrolHeli]; + diag_log format["_fnc_spawnMissionHeli:-> heli %1 fullCrew = %2",_patrolHeli, fullCrew _patrolHeli]; + }; + }; + }; + #endif + +}; +private["_ai"]; +_ai = (units _grpParatroops) + (units _grpPilot); +_return = [_patrolHeli,_ai,_abort]; + +#ifdef blck_debugMode +if (blck_debugLevel > 0) then +{ + diag_log format["_fnc_spawnMissionHeli:: function returning value for _return of %1",_return]; +}; +#endif + +_return; diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnMissionParatroops.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnMissionParatroops.sqf new file mode 100644 index 0000000..c945751 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnMissionParatroops.sqf @@ -0,0 +1,109 @@ +/* + Author: Ghostrider-DbD- + Inspiration: blckeagls / A3EAI / VEMF / IgiLoad / SDROP + License: Attribution-NonCommercial-ShareAlike 4.0 International + 3/17/17 + + This is basically a container that determines whether a paragroop group should be created and if so creates a group and passes it off to the routine that spawns the paratroops. + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_coords","_skillAI","_weapons","_uniforms","_headGear",["_grpParatroops",grpNull],["_heli",objNull]]; + +private["_grpParatroops","_chanceParatroops","_aborted","_return"]; + +_aiSkillsLevel = toLower _aiSkillsLevel; +_chanceParatroops = 0; +_noPara = 0; +_aborted = false; + +if (_aiSkillsLevel isEqualTo "blue") then { + + #ifdef blck_debugMode + if (blck_debugON) then {diag_log "_fnc_spawnMissionParatroops: BLUE difficulty settings applied";}; + #endif + + _chanceParatroops = blck_chanceParaBlue; + _noPara = blck_noParaBlue; +}; +if (_aiSkillsLevel isEqualTo "green") then { + + #ifdef blck_debugMode + if (blck_debugON) then {diag_log "_fnc_spawnMissionParatroops: GREEN difficulty settings applied";}; + #endif + + _chanceParatroops = blck_chanceParaGreen; + _noPara = blck_noParaGreen; +}; +if (_aiSkillsLevel isEqualTo "orange") then { + + #ifdef blck_debugMode + if (blck_debugON) then {diag_log "_fnc_spawnMissionParatroops: ORANGE difficulty settings applied";}; + #endif + + _chanceParatroops = blck_chanceParaOrange; + _noPara = blck_noParaOrange; +}; +if (_aiSkillsLevel isEqualTo "red") then { + + #ifdef blck_debugMode + if (blck_debugON) then {diag_log "_fnc_spawnMissionParatroops: RED difficulty settings applied";}; + #endif + + _chanceParatroops = blck_chanceParaRed; + _noPara = blck_noParaRed; +}; + +#ifdef blck_debugMode +if (blck_debugLevel > 2) then {diag_log format["_fnc_spawnMissionParatroops (47): _chanceParatroops %1",_chanceParatroops];}; +if (blck_debugLevel > 2) then {diag_log format["_fnc_spawnMissionParatroops (48): _coords %1 | _numAI %2 | _skillAI %3 | _grpParatroops %4 | _heli %5",_coords,_noPara,_skillAI,_grpParatroops,_heli];}; +#endif + +if ( (random(1) < _chanceParatroops)) then +{ + if (isNull _grpParatroops) then + { + _grpParatroops = createGroup blck_AI_Side; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_spawnMissionParatroops (53):No group passed as a parameter, _grpParatroops %4 created",_grpParatroops]; + }; + #endif + }; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log format["_fnc_spawnMissionParatroops (58): function running and group %1 successfully created; now calling blck_fnc_spawnParaUnits",_grpParatroops]; + }; + #endif + + //params["_missionPos","_paraGroup",["_numAI",3],"_skillAI","_weapons","_uniforms","_headGear",["_heli",objNull]]; + _aborted = [_coords,_grpParatroops,_noPara,_skillAI,_weapons,_uniforms,_headGear,_heli] call blck_fnc_spawnParaUnits; + //diag_log format["_fnc_spawnMissionParatroops: blck_fnc_spawnParaUnits returned a value of %1",_aborted]; +}; +#ifdef blck_debugMode +diag_log format["_fnc_spawnMissionParatroops: _aborted = %1",_aborted]; +#endif +if (_aborted) then +{ + _return = [[],true]; +} else { + _return = [(units _grpParatroops),false]; +}; + +#ifdef blck_debugMode +diag_log format["_fnc_spawnMissionParatroops:-> _return = %1 | _abort = %2",_return,_aborted]; +#endif + +_return + diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnParaCrate.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnParaCrate.sqf new file mode 100644 index 0000000..2198ec1 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnParaCrate.sqf @@ -0,0 +1,92 @@ +/* + 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 + _lootCounts, + _lootSetting // [blue, red, green, orange] + ] call blck_spawnHeliParaCrate + + ** here for future usage ** + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_supplyHeli","_lootCounts"]; + +private ["_chute","_crate"]; +_crate = ""; +_chute = ""; + +diag_log "_fnc_spawnParaCrate:: 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, 100], [], 0, "FLY"]; +[_chute] call blck_fnc_protectVehicle; +_chute setPos [_offset select 0, _offset select 1, 100 ]; //(_offset select 2) - 10]; + +diag_log format["_fnc_spawnParaCrate:: 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["_fnc_spawnParaCrate:: crate spawned %1 at position %2 and attached to %3",_crate, getPos _crate, attachedTo _crate]; + + +switch (_lootSetting) 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["_fnc_spawnParaCrate:: 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["_fnc_spawnParaCrate:: 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) ) exitWith + { + uiSleep 10; // give some time for everything to settle + detach _crate; + deleteVehicle _chute; + if (surfaceIsWater (getPos _crate)) then + { + deleteVehicle _crate; + } else + { + [_crate] call blck_fnc_signalEnd; + }; + }; + }; +}; + +[_crate,_chute] call _fn_monitorCrate; +[[_crate], 1200 /* 20 min*/] spawn blck_fnc_addObjToQue; diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnParaUnits.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnParaUnits.sqf new file mode 100644 index 0000000..810ef13 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnParaUnits.sqf @@ -0,0 +1,82 @@ +/* + Author: Ghostrider-DbD- + Inspiration: blckeagls / A3EAI / VEMF / IgiLoad / SDROP + License: Attribution-NonCommercial-ShareAlike 4.0 International + 3/17/17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_missionPos","_paraGroup","_numAI","_skillAI","_weapons","_uniforms","_headGear",["_heli",objNull]]; +private["_arc","_dir","_spawnPos","_chute","_unit","_launcherType","_aborted"]; +_aborted = false; + +#ifdef blck_debugMode +diag_log format["_fnc_spawnParaUnits (17)::_missionPos %1 | _paraGroup %2 | _numAI %3 | _skillAI %4 | _heli = %5",_missionPos,_paraGroup,_numAI,_skillAI,_heli]; +#endif + +if (isNull _paraGroup) then +{ + _aborted = true; +} else { + _paraGroup setVariable["groupVehicle",objNull]; + _launcherType = "none"; + private ["_arc","_spawnPos"]; + _arc = 45; + _dir = 0; + _pos = _missionPos; + for "_i" from 1 to _numAI do + { + if (_heli isKindOf "Air") then {_pos = getPos _heli}; + _spawnPos = _pos getPos[1.5,_dir]; + _chute = createVehicle ["Steerable_Parachute_F", [100, 100, 200], [], 0, "FLY"]; + [_chute] call blck_fnc_protectVehicle; + _unit = [[_spawnPos select 0, _spawnPos select 1, 100],_weapons,_paraGroup,_skillAI,_launcherType,_uniforms,_headGear] call blck_fnc_spawnAI; + _chute setPos [_spawnPos select 0, _spawnPos select 1, 125]; //(_offset select 2) - 10]; + _unit assignAsDriver _chute; + _unit moveInDriver _chute; + _unit allowDamage true; + _dir = _dir + _arc; + + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["_fnc_spawnParaUnits:: spawned unit %1, at location %2 and vehicle _unit %1",_unit,getPos _unit, vehicle _unit]; + }; + #endif + + uiSleep 2; + }; + _paraGroup selectLeader ((units _paraGroup) select 0); + //params["_pos","_minDis","_maxDis","_group"]; + // [_pos,_minDist,_maxDist,_groupSpawned,"random","SAD"] spawn blck_fnc_setupWaypoints; + [_missionPos,20,30,_paraGroup,"random","SAD","paraUnits"] call blck_fnc_setupWaypoints; + blck_monitoredMissionAIGroups pushback _paraGroup; + #ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log "_fnc_spawnParaUnits (44): All Units spawned"; + }; + #endif + +}; + +#ifdef blck_debugMode +diag_log format["_fnc_spawnParaUnits: _aborted = %1",_aborted]; +#endif + +_aborted; + + + diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnReinforcements.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnReinforcements.sqf new file mode 100644 index 0000000..013a10d --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnReinforcements.sqf @@ -0,0 +1,113 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-17-17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//params["_coords","_aiSkillsLevel","_weapons","_uniforms","_headgear"]; +_coords = _this select 0; +_aiSkillsLevel = _this select 1; +_weapons = _this select 2; +_uniforms = _this select 3; +_headgear = _this select 4; + +private["_chanceHeliPatrol","_return","_temp","_missionHelis"]; +#ifdef blck_debugMode +if (blck_debugLevel > 0) then {diag_log format["_fnc_spawnMissionReinforcements (25): Script Starting with _aiSkillsLevel = %1",_aiSkillsLevel]}; +#endif +_aiSkillsLevel = toLower _aiSkillsLevel; + +if (_aiSkillsLevel isEqualTo "blue") then { + #ifdef blck_debugMode + if (blck_debugLevel > 0) then {diag_log "_fnc_spawnMissionReinforcements (29): BLUE difficulty settings applied";}; + #endif + _chanceHeliPatrol = blck_chanceHeliPatrolBlue; + _missionHelis = blck_patrolHelisBlue; +}; +if (_aiSkillsLevel isEqualTo "green") then { + #ifdef blck_debugMode + if (blck_debugLevel > 0) then {diag_log "_fnc_spawnMissionReinforcements (34): GREEN difficulty settings applied";}; + #endif + _chanceHeliPatrol = blck_chanceHeliPatrolGreen; + _missionHelis = blck_patrolHelisGreen; +}; +if (_aiSkillsLevel isEqualTo "orange") then { + #ifdef blck_debugMode + if (blck_debugLevel > 0) then {diag_log "_fnc_spawnMissionReinforcements (39): ORANGE difficulty settings applied";}; + #endif + _chanceHeliPatrol = blck_chanceHeliPatrolOrange; + _missionHelis = blck_patrolHelisOrange; +}; +if (_aiSkillsLevel isEqualTo "red") then +{ + #ifdef blck_debugMode + if (blck_debugLevel > 0) then {diag_log "_fnc_spawnMissionReinforcements (46): RED difficulty settings applied";}; + #endif + _chanceHeliPatrol = blck_chanceHeliPatrolRed; + _missionHelis = blck_patrolHelisRed; +}; +#ifdef blck_debugMode +if (blck_debugLevel > 1) then {diag_log format["_fnc_spawnMissionReinforcements (50): Variables defined: _chanceHeliPatrol %1 | _missionHelis %2",_chanceHeliPatrol,_missionHelis];}; +#endif +if ( (_chanceHeliPatrol > 0) && (random (1) < _chanceHeliPatrol) ) then // if helipatrols are 'enabled' then paratroops will only drop if a heli spawns. + // The chance that they drop is linked to the value for them for that difficulty _aiSkillsLevel + //see _fnc_spannMissionParatroops for how this is handled. +{ + _temp = [objNull,[],false]; + //params["_coords","_aiSkillsLevel",,"_weapons","_uniforms","_headgear""_helis"]; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then + { + diag_log "_fnc_spawnMissionReinforcements (64): calling _fnc_spawnMissionHeli to spawn heli and paratroops"; + }; + #endif + + _temp = [_coords,_aiSkillsLevel,_weapons,_uniforms,_headgear,_missionHelis] call blck_fnc_spawnMissionHeli; + if (typeName _temp isEqualTo "ARRAY") then + { + _return = [_temp select 0, _temp select 1, _temp select 2]; + } + else + { + _return = [objNull, [], true]; + }; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then {diag_log format["_fnc_spawnMissionReinforcements (66): blck_fnc_spawnMissionHeli returned value of %1 for _return",_return];}; + #endif + +} else { + if (blck_debugLevel > 2) then {diag_log "_fnc_spawnMissionReinforcements (68): calling _fnc_spawnMissionParatroops to spawn para reinforcements";}; + _temp = [objNull,[],false]; + // params["_coords","_skillAI","_weapons","_uniforms","_headgear"]; + _temp = [_coords,_aiSkillsLevel,_weapons,_uniforms,_headgear] call blck_fnc_spawnMissionParatroops; + + #ifdef blck_debugMode + if (blck_debugLevel > 2) then { + diag_log format["_fnc_spawnMissionReinforcements (71):: blck_fnc_spawnMissionParatroops returned value for _paratroops of %1",_temp]; + }; + #endif + + if (typeName _temp isEqualTo "ARRAY") then + { + _return = [objNull, _temp select 0 /*units*/, _temp select 1 /*true/false*/]; + } else { + _return = [objNull, [],true]; + }; +}; + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then {diag_log format["_fnc_spawnMissionReinforcements (74):: _return = %1",_return];}; +#endif + +_return \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf new file mode 100644 index 0000000..059f532 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehicle.sqf @@ -0,0 +1,36 @@ +/* + Spawn a vehicle and protect it against cleanup by Epoch + Returns the object (vehicle) created. + By Ghostrider-DBD- + Last modified 1-27-17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_veh","_modType"]; +params["_vehType","_pos",["_clearInventory",true]]; + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then {diag_log format["spawnVehicle.sqf: _vehType = %1 | _pos = %2",_vehType,_pos];}; +#endif + +_veh = createVehicle[_vehType, _pos, [], 0, "NONE"]; +[_veh] call blck_fnc_protectVehicle; + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then {diag_log format["spawnVehicle.sqf:: vehicle spawned is %1",_veh];}; +#endif +// params["_veh",["_clearInventory",true]]; +[_veh,_clearInventory] call blck_fnc_configureMissionVehicle; + +#ifdef blck_debugMode +if (blck_debugLevel > 1) then {diag_log format["spawnVehicle:: returning parameter _veh = %1",_veh];}; +#endif + +_veh + diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehiclePatrol.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehiclePatrol.sqf new file mode 100644 index 0000000..4ae0985 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_spawnVehiclePatrol.sqf @@ -0,0 +1,115 @@ +/* + By Ghostrider-DBD- + Copyright 2016 + Last updated 3-17-17 + + spawns a vehicle of _vehType and mans it with units in _group. + returns _veh, the vehicle spawned. + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_vehType","_safepos","_veh"]; +params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",30],["_maxDis",45],["_group",grpNull]]; + + +//_center Center of the mission area - this is usuall the position treated as the center by the mission spawner. Vehicles will patrol the perimeter of the mission area. +// _pos the approximate spawn point for the vehicle +//_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 + +//#ifdef blck_debugMode +if (blck_debugLevel > 1) then +{ + diag_log format["_fnc_spawnVehiclePatrol:: _center = %1 | _pos = %2 | _vehType = %3 | _group = %4",_center,_pos,_vehType,_group]; +}; +//#endif + +if !(isNull _group) then +{ // exitWith {diag_log "[blckeagls] ERROR CONDITION:-->> NULL-GROUP Provided to _fnc_spawnVehiclePatrol"; objNull;}; + _veh = [_vehType,_pos] call blck_fnc_spawnVehicle; + _group setVariable["groupVehicle",_veh]; + //#ifdef blck_debugMode + if (blck_debugLevel > 1) then + { + diag_log format["spawnVehiclePatrol:: vehicle spawned is %1 of typeof %2",_veh, typeOf _veh]; + }; + //#endif + + 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); + + // params["_pos","_minDis","_maxDis","_group",["_mode","random"],["_pattern",["MOVE","SAD"]]]; + _group setcombatmode "RED"; + _group setBehaviour "COMBAT"; + [_center,_minDis,_maxDis,_group,"perimeter","SAD","vehicle"] spawn blck_fnc_setupWaypoints; +}; +//#ifdef blck_debugMode +if (blck_debugLevel > 1) then +{ + diag_log format["_fnc_spawnVehiclePatrol::->> _veh = %1",_veh]; +}; +//#endif +_veh + /* + while {(count (waypoints _group)) > 0} do + { + deleteWaypoint ((waypoints _group) select 0); + }; + + _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]; + + + if (_i isEqualTo 1) then + { + _wp = [_group, 0]; + _wp setWaypointPosition [_p2, 25]; + } else { + _wp = _group addWaypoint [_p2, 25]; + }; + _wp setWaypointType "MOVE"; + _wp setWaypointName "move"; + _wp setWaypointBehaviour "AWARE"; + _wp setWaypointCombatMode blck_combatMode; + _wp setWaypointTimeout [1,1.1,1.2]; + _wp = _group addWaypoint [_p2, 25]; + _wp setWaypointType "SAD"; + _wp setWaypointName "sentry"; + _wp setWaypointBehaviour "AWARE"; + _wp setWaypointCombatMode blck_combatMode; + _wp setWaypointTimeout [10,17.5,25]; + }; + _wp = _group addWaypoint [_pos, 25]; + _wp setWaypointType "CYCLE"; + _group setVariable["wpIndex",0]; + +}; + + +*/ + diff --git a/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_vehicleMonitor.sqf b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_vehicleMonitor.sqf new file mode 100644 index 0000000..6163a20 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/Vehicles/GMS_fnc_vehicleMonitor.sqf @@ -0,0 +1,176 @@ +/* + 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. + + Logic: + 1) Mission ended; players can keep vehicles BUT not all vehicle AI were killed - > delete vehicle when live AI are killed; + 2) Vehicle has a blck_deleteAT timer set - > delete vehicle; + 3) All AI killed an players may NOT keep vehicles - > detroy vehicle + 4) All AI Killed and players MAY keep vehicles -> release vehicle + 5) vehicle ammo low AND vehicle gunner is alive - > reloaded + + By Ghostrider-DBD- + Copyright 2016 + Last updated 1-22-17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//diag_log "_fnc_vehicleMonitor: starting function"; +#ifdef blck_debugMode + //diag_log format["_fnc_vehicleMonitor:: blck_debugMode defined"]; +#endif + +_fn_releaseVehicle = { + params["_v"]; + blck_monitoredVehicles = blck_monitoredVehicles - [_veh]; + _v setVehicleLock "UNLOCKED" ; + //_v setVariable["releasedToPlayers",true]; + //[_v] call blck_fnc_emptyObject; + { + _v removealleventhandlers _x; + } forEach ["GetIn","GetOut","fired","hit","hitpart","reloaded","dammaged","HandleDamage"]; + + #ifdef blck_debugMode + if (blck_debugLevel > 3) then + { + diag_log format["_fnc_vehicleMonitor:: case of patrol vehicle released to players where vehicle = %1",_v]; + }; + #endif +}; + +_fn_destroyVehicleAndCrew = { + params["_veh"]; + private["_crew"]; + _crew = crew _veh; + {[_x] call blck_fnc_deleteAI;} forEach _crew; + [_veh] call blck_fn_deleteAIvehicle; +}; + +_fn_reloadAmmo = { + params["_veh"]; + private ["_crew","_mag","_allMags","_cnt"]; + // https://community.bistudio.com/wiki/fullCrew + // 0 1 2 3 4 + // returns Array - format [[unit,role,cargoIndex,turretPath,personTurret], ...] + //diag_log format["_fnc_vehicleMonitor:: (65) _veh = %1",_veh]; + if ({alive _x and !(isPlayer _x)} count (crew _veh) > 0) then + { + _crew = fullCrew _veh; + //diag_log format["_fnc_vehicleMonitor:: (67) _crew = %1",_crew]; + { + //diag_log format ["_fnc_vehicleMonitor:: (69) _x = %1",_x]; + _mag = _veh currentMagazineTurret (_x select 3); + if (count _mag > 0) then + { + //diag_log format["_fnc_vehicleMonitor:: (71) _mag is typeName %1", typeName _mag]; + //diag_log format ["_fnc_vehicleMonitor:: (71) length _mag = %2 and _mag = %1",_mag,count _mag]; + _allMags = magazinesAmmo _veh; + //diag_log format["_fnc_vehicleMonitor:: (71) _allMags = %1",_allMags]; + _cnt = ( {_mag isEqualTo (_x select 0)}count _allMags); + //diag_log format["_fnc_vehicleMonitor:: (75) _cnt = %1",_cnt]; + if (_cnt < 2) then {_veh addMagazineCargo [_mag,2]}; + }; + } forEach _crew; + }; +}; +blck_fn_deleteAIvehicle = { + params["_veh"]; + { + _veh removeAllEventHandlers _x; + }forEach ["Hit","HitPart","GetIn","GetOut","Fired","FiredNear"]; + blck_monitoredVehicles = blck_monitoredVehicles - [_veh]; + deleteVehicle _veh; +}; +private ["_veh","_vehList"]; +_vehList = +blck_monitoredVehicles; + +#ifdef blck_debugMode +if (blck_debugLevel > 3) then {diag_log format["_fnc_vehicleMonitor:: function called at %1 with _vehList %2 and blck_monitoredVehicles %3",diag_tickTime,_vehList,blck_monitoredVehicles];}; +#endif + +{ + _veh = _x; // (purely for clarity at this point, _x could be used just as well) + + #ifdef blck_debugMode + if (blck_debugLevel > 3) then + { + diag_log format["_fnc_vehicleMonitor: vehicle %1 with missionCompleted = %2 being evaluated",_x, _x getVariable"missionCompleted",0]; + }; + #endif + private["_evaluate"]; + _evaluate = true; + // Case where vehicle has been marked for deletion after a certain time. + if ( (_veh getVariable["blck_DeleteAt",0] > 0) && (diag_tickTime > _veh getVariable "blck_DeleteAt")) then + { + [_veh] call _fn_destroyVehicleAndCrew; + _evaluate = false; + }; + + // Case where is an emplaced / static wweapon and has no alive crew and such vehicles should be 'killed' or release to players + if (_evaluate) then + { + if ( (_veh getVariable["DBD_vehType","none"] isEqualTo "emplaced") && {alive _x} count crew _veh isEqualTo 0) then + { + if (blck_killEmptyStaticWeapons) then + { + #ifdef blck_debugMode + if (blck_debugLevel > 3) then {diag_log format["_fnc_vehicleMonitor:: case of destroyed where vehicle = %1",_veh];}; + #endif + + _veh setDamage 1; + _veh setVariable["blck_DeleteAt",diag_tickTime + 60]; + }else { + [_veh] call _fn_releaseVehicle; + }; + _evaluate = false; + }; + }; + + // Case where a vehicle is NOT an emplaced / static weapon and has no alive crew and such vehicles should be 'killed' or release to players + if (_evaluate) then + { + if (_veh getVariable["DBD_vehType","none"] isEqualTo "none" && ({alive _x} count crew _veh isEqualTo 0) ) then + { + if (blck_killEmptyAIVehicles) then + { + _veh setDamage 0.7; + _veh setVariable["blck_DeleteAt",diag_tickTime + 60]; + } else { + [_veh] call _fn_releaseVehicle; + }; + _evaluate = false; + }; + }; + + // Case where a vehicle is part of a mission that has been completed and containes live AI. + if (_evaluate) then + { + if ( _veh getVariable["missionCompleted",0] > 0 && ({alive _x} count crew _veh > 0)) then + { + private["_cleanupTimer"]; + _cleanupTimer = _veh getVariable["cleanupTimer",0]; // The time delat to deleting any alive AI units + // "missionCompleted" = the time at which the mission was completed or aborted + if (diag_tickTime > ((blck_AliveAICleanUpTimer - 70) + (_veh getVariable["missionCompleted",0])) ) then + { + [_veh] call _fn_destroyVehicleAndCrew; + _evaluate = false; + }; + }; + }; + + if (_evaluate) then + { + [_veh] call _fn_reloadAmmo; + }; +}forEach _vehList; + + + diff --git a/@ExileServer/addons/custom_server/Compiles/blck_functions.sqf b/@ExileServer/addons/custom_server/Compiles/blck_functions.sqf new file mode 100644 index 0000000..2169262 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/blck_functions.sqf @@ -0,0 +1,112 @@ +/* + AI Mission for Epoch Mod for Arma 3 + By Ghostrider + Functions and global variables used by the mission system. + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +//blck_functionsCompiled = false; + +// General functions +blck_fnc_waitTimer = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_waitTimer.sqf"; +blck_fnc_timedOut = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_timedOut.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"; +blck_fnc_monitorHC = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_monitorHC.sqf"; +blck_fnc_timeAcceleration = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\TimeAccel\GMS_fnc_Time.sqf"; +blck_fnc_getModType = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getModType.sqf"; // Test if Epoch or Exile is loaded +blck_fnc_groupsOnAISide = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_GroupsOnAISide.sqf"; // Returns the number of groups on the side used by AI +blck_fnc_emptyObject = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_emptyObject.sqf"; +blck_fnc_playerInRange = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_playerInRange.sqf"; +blck_fnc_playerInRangeArray = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_playerInRangeArray.sqf"; // GMS_fnc_playerInRangeArray +blck_fnc_mainThread = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_mainThread.sqf"; +blck_fnc_allPlayers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_allPlayers.sqf"; +blck_fnc_addItemToCrate = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_addItemToCrate.sqf"; +blck_fnc_loadLootItemsFromArray = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_loadLootItemsFromArray.sqf"; + +#ifdef DBDserver +blck_fnc_broadcastServerFPS = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Functions\GMS_fnc_broadcastServerFPS.sqf"; +diag_log "blck_functions loaded using DBDServer settings ---- >>>> "; +#endif + +// 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 + +// Mission-related functions +blck_fnc_selectAILoadout = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_selectAILoadout.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_spawnPendingMissions = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnPendingMissions.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_missionTimer = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionTimer.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"; +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\GMS_fnc_spawnBaseObjects.sqf"; +blck_fnc_spawnRandomLandscape = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnRandomLandscape.sqf"; +blck_fnc_spawnMissionVehiclePatrols = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionVehiclePatrols.sqf"; +blck_fnc_spawnEmplacedWeaponArray = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnEmplacedWeaponArray.sqf"; +blck_fnc_spawnMissionAI = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionAI.sqf"; +blck_fnc_spawnMissionLootVehicles = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_spawnMissionLootVehicles.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. +blck_fnc_endMission = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_endMission.sqf"; +blck_fnc_missionAIareDead = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionAIareDead.sqf"; + +// 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_setupWaypoints.sqf"; // Set default waypoints for a group +blck_fnc_missionGroupMonitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_missionGroupMonitor.sqf"; // Monitors active groups for those that are stuck in an SAD waypoint but not in combat +blck_fnc_changeToSADWaypoint = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_changeToSADWaypoint.sqf"; +blck_fnc_changeToMoveWaypoint = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_changeToMoveWaypoint.sqf"; +blck_fnc_changeToSentryWaypoint = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_changeToSentryWaypoint.sqf"; // +//blck_fnc_setNextWaypoint = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_setNextWaypoint.sqf"; +blck_fnc_cleanEmptyGroups = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Groups\GMS_fnc_cleanEmptyGroups.sqf"; // GMS_fnc_cleanEmptyGroups + +// Functions specific to vehicles, whether wheeled, aircraft or static +blck_fnc_spawnVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnVehicle.sqf"; +blck_fnc_spawnVehiclePatrol = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnVehiclePatrol.sqf"; +blck_fnc_protectVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_protectVehicle.sqf"; +blck_fnc_configureMissionVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_configureMissionVehicle.sqf"; +blck_fnc_vehicleMonitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_vehicleMonitor.sqf"; +blck_fnc_spawnMissionReinforcements = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnReinforcements.sqf"; +blck_fnc_spawnMissionHeli = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnMissionHeli.sqf"; +blck_fnc_spawnMissionParatroops = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnMissionParatroops.sqf"; // Lumped here because these 'jump' from aircraft +blck_fnc_spawnParaUnits = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnParaUnits.sqf"; // Lumped here because these 'jump' from aircraft +blck_fnc_releaseVehicleToPlayers = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_releaseVehicleToPlayers.sqf"; // GMS_fnc_releaseVehicleToPlayers + +// 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_AHHit = "\q\addons\custom_server\Compiles\Units\GMS_EH_AIHit.sqf"; +blck_EH_AIFiredNear = "\q\addons\custom_server\Compiles\Units\GMS_EH_AIFiredNear.sqf"; +blck_EH_unitWeaponReloaded = "\q\addons\custom_server\Compiles\Units\GMS_EH_unitWeaponReloaded.sqf"; +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_alertGroupUnits = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_alertGroupUnits.sqf"; +blck_fnc_alertNearbyVehicles = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_alertNearbyVehicles.sqf"; +blck_fnc_processIlleagalAIKills = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_processIlleagalAIKills.sqf"; +blck_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"; +blck_fnc_deleteAI = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_deleteAI.sqf"; + +diag_log "[blckeagls] Functions Loaded"; +blck_functionsCompiled = true; diff --git a/@ExileServer/addons/custom_server/Compiles/blck_variables.sqf b/@ExileServer/addons/custom_server/Compiles/blck_variables.sqf new file mode 100644 index 0000000..8dfbf12 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/blck_variables.sqf @@ -0,0 +1,46 @@ +/* + 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. + -------------------------- + 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/ +*/ +#include"\q\addons\custom_server\Configs\blck_defines.hpp"; + +blck_debugON = false; +blck_debugLevel = 0; // Sets level of detail for debugging info - WIP. +blck_minFPS = 10; + +//////////////////////////////////////////////// +// Do Not Touch Anything Below This Line +/////////////////////////////////////////////// +blck_townLocations = []; //nearestLocations [blck_mapCenter, ["NameCity","NameCityCapital"], 30000]; +blck_ActiveMissionCoords = []; +blck_recentMissionCoords = []; +blck_locationBlackList = []; +blck_monitoredVehicles = []; +blck_livemissionai = []; +blck_monitoredMissionAIGroups = []; // Used to track groups in active missions for whatever purpose +blck_oldMissionObjects = []; +blck_pendingMissions = []; +blck_missionsRunning = 0; +blck_activeMissions = []; +blck_deadAI = []; +#ifdef useDynamicSimulation +"Group" setDynamicSimulationDistance 1800; +enableDynamicSimulationSystem true; +#endif +// 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; diff --git a/@ExileServer/addons/custom_server/Compiles/passToHCs.sqf b/@ExileServer/addons/custom_server/Compiles/passToHCs.sqf new file mode 100644 index 0000000..4eeed69 --- /dev/null +++ b/@ExileServer/addons/custom_server/Compiles/passToHCs.sqf @@ -0,0 +1,83 @@ +/* + * 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 || !blck_useHC) exitWith {}; + +diag_log "passToHCs: Started"; + +//waitUntil {!isNil "HC"}; +//waitUntil {!isNull HC}; +_wait = true; +while {_wait} do{ + if (isNil "HC1") then + { + diag_log "passToHCs: HC not connected"; + } else { + diag_log format["passToHCs: owner HC1 = %1", owner HC1]; + _wait = false; + }; + sleep 15; +}; + + +_HC1_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 = 10; // 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 { + uisleep rebalanceTimer; + try { + _HC1_ID = owner HC1; + + if (_HC1_ID > 2) then { + diag_log format ["passToHCs: Found HC with Client ID %1", _HC1_ID]; + } else { + diag_log "passToHCs: [WARN] HC disconnected"; + + HC1 = objNull; + _HC1_ID = -1; + }; + } catch { diag_log format ["passToHCs: [ERROR] [HC] %1", _exception]; HC = objNull; _HC1_ID = -1; }; + { + if (!isNull HC1) then + { + // Pass the AI + _numTransfered = 0; + + 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 { + if (_numTransfered < 5) then + { + diag_log format["group %1 should be moved to an HC",_x]; + _rc = _x setGroupOwner _HC1_ID; + if ( _rc ) then { _numTransfered = _numTransfered + 1; }; + }; + }; + + } else { + diag_log format["group %1 does not belong to blckeagls mission system",_x]; + }; + + } forEach (allGroups); +}; \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/Configs/blck_configs.sqf b/@ExileServer/addons/custom_server/Configs/blck_configs.sqf new file mode 100644 index 0000000..9f1bfc6 --- /dev/null +++ b/@ExileServer/addons/custom_server/Configs/blck_configs.sqf @@ -0,0 +1,399 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-17-17 + + -------------------------- + 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/ +*/ + + #include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + if (blck_debugON) then {diag_log "[blckeagls] Loading blck_configs.sqf";}; + + /* + Configuration for Addons that support the overall Mission system. + These are a module to spawn map addons generated with the Eden Editor + And a moduel to spawn static loot crates at specific location + A time acceleration module. + */ + + blck_spawnMapAddons = false; // When true map addons will be spawned based on parameters define in custum_server\MapAddons\MapAddons_init.sqf + blck_spawnStaticLootCrates = false; // When true, static loot crates will be spawned and loaded with loot as specified in custom_server\SLS\SLS_init_Epoch.sqf (or its exile equivalent). + + // Note that you can define map-specific variants in custom_server\configs\blck_custom_config.sqf + blck_useTimeAcceleration = false; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below. + blck_timeAccelerationDay = 1; // Daytime time accelearation + blck_timeAccelerationDusk = 4; // Dawn/dusk time accelearation + blck_timeAccelerationNight = 8; // Nighttim time acceleration + + /************************************************************** + + BLACKLIST LOCATIONS + + **************************************************************/ + // if true then missions will not spawn within 1000 m of spawn points for Altis, Bornholm, Cherno, Esseker or stratis. + blck_blacklistTraderCities = true; // Set this = true if you would like the mission system to automatically search for the locations of the Epoch/Exile trader cities. Note that these are added to the list of blacklisted locations for Epoch for the most common maps. + + /*********************************************************** + + GENERAL MISSION SYSTEM CONFIGURATION + + ***********************************************************/ + //////// + // Headless Client Configurations + blck_useHC = false; // Not Yet Working + + /////////////////////////////// + // Kill message configurations + // These determine whether and when messages are sent to players regarding AI Kills or illegal kills that might damage a vehicle. + blck_useKillMessages = false; // when true a message will be broadcast to all players each time an AI is killed; may impact server performance. + blck_useKillScoreMessage = true; // when true a tile is displayed to the killer with the kill score information + blck_useIEDMessages = true; // Displayes a message when a player vehicle detonates and IED (such as would happen if a player killed AI with a forbidden weapon). + + /////////////////////////////// + // 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 + + + //Minimum distance between missions + blck_MinDistanceFromMission = 2000; + + /////////////////////////////// + // Mission Smoke and Signals + /////////////////////////////// + + // global loot crate options + // Options to spawn a smoking wreck near the crate. 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/chemlight will appear at the loot crate for 2 min after mission completion. + blck_loadCratesTiming = "atMissionCompletion"; // valid choices are "atMissionCompletion" and "atMissionSpawn"; + + /////////////////////////////// + // 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 + + + /////////////////////////////// + // MISC MISSION PARAMETERS + /////////////////////////////// + blck_useKilledAIName = true; // When false, the name of the killer (player), weapon and distance are displayed; otherwise the name of the player, distance and name of AI unit killed are shown. + blck_useMines = false; // when true mines are spawned around the mission area. these are cleaned up when a player reaches the crate. Turn this off if you have vehicle patrols. + blck_cleanupCompositionTimer = 1200; // Mission objects will be deleted after the mission is completed after a deley set by this timer. + blck_cleanUpLootChests = false; // when true, loot crates will be deleted together with other mission objects. + blck_MissionTimout = 60*60; // 60 min - missions will timeout and respawn in another location. This prevents missions in impossible locations from persisting. + + /////////////////////////////// + // Paratroop Settings + // AI paratrooper reinforcement paramters + // The behavior of these can be linked to some degree to the spawning of patrolling helis. + // For example, if you always want a helicopter to spawn paratroops set the value 1. + // If you never want helicopters to spawn them set the value to 0. + blck_chanceParaBlue = 0.1; // [0 - 1] set to 0 to deactivate and 1 to always have paratroops spawn over the center of the mission. + blck_noParaBlue = 3; // [1-N] + + blck_chanceParaRed = 0.3; + blck_noParaRed = 3; + + blck_chanceParaGreen = 0.4; + blck_noParaGreen = 0.4; + + blck_chanceParaOrange = 0.5; + blck_noParaOrange = 4; + + // Supplemental Loot Parameters. + + /////////////////////////////// + // Heli Patrol Heli Types + // Armed Helis + ////////////////////////////// + _blck_littleBirds = ["B_Heli_Light_01_armed_F"]; // AH-9 Pawnee (WEST) + _blck_armed_hellcats = ["I_Heli_light_03_F"]; + _blck_armed_orcas = ["O_Heli_Light_02_F","O_Heli_Light_02_v2_F"]; + _blck_armed_ghosthawks = ["B_Heli_Transport_01_F","B_Heli_Transport_01_camo_F"]; + _blck_armed_hurons = ["B_Heli_Transport_03_F","B_Heli_Transport_03_black_F"]; + _blck_armed_attackHelis = ["B_Heli_Attack_01_F"]; + _blck_armed_heavyAttackHelis = ["O_Heli_Attack_02_F","O_Heli_Attack_02_black_F"]; + blck_blacklisted_heli_ammo = ["24Rnd_missiles","24Rnd_PG_missiles","12Rnd_PG_missiles","2Rnd_LG_scalpel","6Rnd_LG_scalpel","8Rnd_LG_scalpel","M_Scalpel_AT ","14Rnd_80mm_rockets","38Rnd_80mm_rockets"]; + blck_blacklisted_heli_weapons = ["missiles_SCALPEL","missiles_titan","rockets_Skyfire","missiles_DAGR","missiles_DAR"]; + + + /////////////////////////////// + // Heli Patrol Settings + /////////////////////////////// + + blck_chanceHeliPatrolBlue = 0; //[0 - 1] Set to 0 to deactivate and 1 to always have a heli spawn over the mission center and patrol the mission area. The chance of paratroops dropping from the heli is defined by blck_chancePara(Blue|Red|Green|Orange) above. + blck_patrolHelisBlue = _blck_littleBirds; + + blck_chanceHeliPatrolRed = 0; // 0.4; + blck_patrolHelisRed = _blck_littleBirds; + + blck_chanceHeliPatrolGreen = 0; + blck_patrolHelisGreen = _blck_littleBirds; + + blck_chanceHeliPatrolOrange = 0; + blck_patrolHelisOrange = _blck_littleBirds; //_blck_armed_hellcats+_blck_armed_orcas; + + + //////////////////// + // Enable / Disable Missions + //////////////////// + + // Maximum number of missions shown on the map at any one time. + #ifdef DBDserver + blck_maxSpawnedMissions = 6; + #else + // Change this value to reduce the number of spawned missions at any one time. + blck_maxSpawnedMissions = 4; + #endif + + //Set to -1 to disable. Values of 2 or more force the mission spawner to spawn copies of that mission - this feature is not recommended because you may run out of available groups. + blck_enableOrangeMissions = 1; + blck_enableGreenMissions = 1; + blck_enableRedMissions = 1; + blck_enableBlueMissions = 1; + #ifdef DBDserver + blck_enableHunterMissions = 1; + blck_enableScoutsMissions = 1; + blck_maxcrashsites = 3; + #endif + + //////////////////// + // 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; + #ifdef DBDserver + blck_TMin_Hunter = 120; + blck_TMin_Scouts = 115; + blck_TMin_Crashes = 115; + //blck_TMin_UMS = 200; + #endif + + //Maximum Spawn time between missions in seconds + blck_TMax_Orange = 360; + blck_TMax_Green = 300; + blck_TMax_Blue = 200; + blck_TMax_Red = 250; + #ifdef DBDserver + blck_TMax_Hunter = 200; + blck_TMax_Scouts = 200; + blck_TMax_Crashes = 200; + //blck_TMax_UMS = 280; + #endif + + /////////////////////////////// + // AI VEHICLE PATROL PARAMETERS + /////////////////////////////// + + 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 outor been killed. + + //////////////////// + // Mission Vehicle Settings + //////////////////// + //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_killEmptyStaticWeapons = true; // When true, static weapons will have damage set to 1 when the AI manning them is killed. + blck_staticWeapons = ["B_HMG_01_high_F"/*,"B_GMG_01_high_F","O_static_AT_F"*/]; // [0.50 cal, grenade launcher, AT Launcher] + + //////////////////// + // Mission Static Weapon Settings + //////////////////// + + // 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 + + + + /**************************************************************** + + GENERAL AI SETTINGS + + ****************************************************************/ + + blck_groupBehavior = "SENTRY"; // Suggested choices are "SAD", "SENTRY", "AWARE" https://community.bistudio.com/wiki/ArmA:_AI_Combat_Modes + 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_addAIMoney = true; + 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_removeNVG = false; // When true, NVG will be removed from AI when they are killed. + 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_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_AliveAICleanUpTimer = 1200; // Time after mission completion at which any remaining live AI are deleted. + + // How precisely player locations will be revealed to AI after an AI kill + // values are ordered as follows [blue, red, green, orange]; + blck_AIAlertDistance = [150,225,250,300]; // Radius within which AI will be notified of enemy activity. Depricated as a group-sed system is used now. The group is informed of the enemy location when a group member is hit or killed. + //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.3, 0.5, 0.7, 0.9]; + + blck_baseSkill = 1.0; // The overal skill of the AI - range 0.1 to 1.0. + + /*************************************************************** + + 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 = 5; + blck_SkillsOrange = [ + ["aimingAccuracy",0.4],["aimingShake",0.7],["aimingSpeed",0.7],["endurance",1.00],["spotDistance",1.0],["spotTime",1.0],["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 = 4; + blck_SkillsGreen = [ + ["aimingAccuracy",0.3],["aimingShake",0.65],["aimingSpeed",0.65],["endurance",0.9],["spotDistance",0.9],["spotTime",0.9],["courage",0.9],["reloadSpeed",0.9],["commanding",0.9],["general",0.75] + ]; + + // Red Missions + blck_MinAI_Red = 12; + blck_MaxAI_Red = 15; + blck_AIGrps_Red = 3; + blck_SkillsRed = [ + ["aimingAccuracy",0.2],["aimingShake",0.6],["aimingSpeed",0.6],["endurance",0.80],["spotDistance",0.7],["spotTime",0.8],["courage",0.80],["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.5],["aimingSpeed",0.5],["endurance",0.50],["spotDistance",0.6],["spotTime",0.6],["courage",0.60],["reloadSpeed",0.60],["commanding",0.7],["general",0.60] + ]; + + // Add some money to AI; only works with Exile for now. + blck_maxMoneyOrange = 25; + blck_maxMoneyGreen = 20; + blck_maxMoneyRed = 15; + blck_maxMoneyBlue = 10; + + #ifdef DBDserver + blck_AIAlertDistance = [150,225,250,300]; // Radius within which AI will be notified of enemy activity. Depricated as a group-sed system is used now. The group is informed of the enemy location when a group member is hit or killed. + //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.3, 0.5, 0.7, 0.9]; + + blck_baseSkill = 0.7; // The overal skill of the AI - range 0.1 to 1.0. + + /*************************************************************** + + 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 = 5; + blck_SkillsOrange = [ + ["aimingAccuracy",0.2],["aimingShake",0.5],["aimingSpeed",0.7],["endurance",1.00],["spotDistance",1.0],["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 = 4; + blck_SkillsGreen = [ + ["aimingAccuracy",0.18],["aimingShake",0.45],["aimingSpeed",0.65],["endurance",0.9],["spotDistance",0.9],["spotTime",0.65],["courage",0.9],["reloadSpeed",0.9],["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.4],["aimingSpeed",0.6],["endurance",0.80],["spotDistance",0.7],["spotTime",0.6],["courage",0.80],["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.12],["aimingShake",0.3],["aimingSpeed",0.5],["endurance",0.50],["spotDistance",0.6],["spotTime",0.6],["courage",0.60],["reloadSpeed",0.60],["commanding",0.7],["general",0.60] + ]; + + // Add some money to AI; only works with Exile for now. + blck_maxMoneyOrange = 25; + blck_maxMoneyGreen = 20; + blck_maxMoneyRed = 15; + blck_maxMoneyBlue = 10; + #endif + + private["_modType"]; + _modType = [] call blck_fnc_getModType; + if (_modType isEqualTo "Epoch") then + { + diag_log format["[blckeagls] Loading Mission System using Parameters for %1",_modType]; + execVM "\q\addons\custom_server\Configs\blck_configs_epoch.sqf"; + waitUntil {(isNil "blck_configsEpochLoaded") isEqualTo false;}; + waitUntil{blck_configsEpochLoaded}; + blck_configsEpochLoaded = nil; + diag_log "[blckeagles] Running getTraderCitiesEpoch to get location of trader cities"; + execVM "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitesEpoch.sqf"; + }; + if (_modType isEqualTo "Exile") then + { + diag_log format["[blckeagls] Loading Mission System using Parameters for %1",_modType]; + execVM "\q\addons\custom_server\Configs\blck_configs_exile.sqf"; + waitUntil {(isNil "blck_configsExileLoaded") isEqualTo false;}; + waitUntil{blck_configsExileLoaded}; + blck_configsExileLoaded = nil; + if (blck_blacklistTraderCities || blck_blacklistSpawns || blck_listConcreteMixerZones) then {execVM "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitesExile.sqf";}; + }; + blck_configsLoaded = true; diff --git a/@ExileServer/addons/custom_server/Configs/blck_configs_epoch.sqf b/@ExileServer/addons/custom_server/Configs/blck_configs_epoch.sqf new file mode 100644 index 0000000..b29a572 --- /dev/null +++ b/@ExileServer/addons/custom_server/Configs/blck_configs_epoch.sqf @@ -0,0 +1,845 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 5-21-17 + + -------------------------- + 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/ +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//////////// +// Epoch-specific settings +//////////// + + // list of locations that are protected against mission spawns + + switch (toLower(worldName)) do + { + case "altis": { + blck_locationBlackList append [ + //Add location as [[xpos,ypos,0],minimumDistance], + // Note that there should not be a comma after the last item in this table + [[10800,10641,0],1000] // isthmus - missions that spawn here often are glitched. + ]; + }; + case "tanoa": { + blck_locationBlackList append [ ]; + }; + }; + +/********************************************************************************* + +AI WEAPONS, UNIFORMS, VESTS AND GEAR + +**********************************************************************************/ + + blck_AI_Side = RESISTANCE; + blck_AIPatrolVehicles = ["B_G_Offroad_01_armed_EPOCH","B_LSV_01_armed_F"]; // Type of vehicle spawned to defend AI bases + + #define useAPEX 1 + + // Blacklisted itesm + blck_blacklistedOptics = ["optic_Nightstalker","optic_tws","optic_tws_mg"]; + + // AI Weapons and Attachments + blck_bipods = ["bipod_01_F_blk","bipod_01_F_mtp","bipod_01_F_snd","bipod_02_F_blk","bipod_02_F_hex","bipod_02_F_tan","bipod_03_F_blk","bipod_03_F_oli"]; + + blck_Optics_Holo = ["optic_Hamr","optic_MRD","optic_Holosight","optic_Holosight_smg","optic_Aco","optic_ACO_grn","optic_ACO_grn_smg","optic_Aco_smg","optic_Yorris"]; + blck_Optics_Reticule = ["optic_Arco","optic_MRCO"]; + blck_Optics_Scopes = [ + "optic_AMS","optic_AMS_khk","optic_AMS_snd", + "optic_DMS", + "optic_KHS_blk","optic_KHS_hex","optic_KHS_old","optic_KHS_tan", + "optic_LRPS", + "optic_Nightstalker", + "optic_NVS", + "optic_SOS" + //"optic_tws", + //"optic_tws_mg", + ]; + blck_Optics_Apex = [ + //Apex + "optic_Arco_blk_F", "optic_Arco_ghex_F", + "optic_DMS_ghex_F", + "optic_Hamr_khk_F", + "optic_ERCO_blk_F","optic_ERCO_khk_F","optic_ERCO_snd_F", + "optic_SOS_khk_F", + "optic_LRPS_tna_F","optic_LRPS_ghex_F", + "optic_Holosight_blk_F","optic_Holosight_khk_F","optic_Holosight_smg_blk_F" + ]; + blck_Optics = blck_Optics_Holo + blck_Optics_Reticule + blck_Optics_Scopes; + + #ifdef useAPEX + blck_Optics = blck_Optics + blck_Optics_Apex; + #endif + blck_bipods = [ + "bipod_01_F_blk","bipod_01_F_mtp","bipod_01_F_snd","bipod_02_F_blk","bipod_02_F_hex","bipod_02_F_tan","bipod_03_F_blk","bipod_03_F_oli", + //Apex + "bipod_01_F_khk" + ]; + + blck_silencers = [ + "muzzle_snds_338_black","muzzle_snds_338_green","muzzle_snds_338_sand","muzzle_snds_93mmg","muzzle_snds_93mmg_tan","muzzle_snds_acp","muzzle_snds_B", + "muzzle_snds_H","muzzle_snds_H_MG","muzzle_snds_H_SW","muzzle_snds_L","muzzle_snds_M", + //Apex + "muzzle_snds_H_khk_F","muzzle_snds_H_snd_F","muzzle_snds_58_blk_F","muzzle_snds_m_khk_F","muzzle_snds_m_snd_F","muzzle_snds_B_khk_F","muzzle_snds_B_snd_F", + "muzzle_snds_58_wdm_F","muzzle_snds_65_TI_blk_F","muzzle_snds_65_TI_hex_F","muzzle_snds_65_TI_ghex_F","muzzle_snds_H_MG_blk_F","muzzle_snds_H_MG_khk_F" + ]; + + blck_RifleSniper = [ + "srifle_EBR_F","srifle_GM6_F","srifle_LRR_F","srifle_DMR_01_F" + ]; + + blck_RifleAsault_556 = [ + "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","arifle_SDAR_F" + ]; + + blck_RifleAsault_650 = [ + "arifle_Katiba_F","arifle_Katiba_C_F","arifle_Katiba_GL_F","arifle_MXC_F","arifle_MX_F","arifle_MX_GL_F","arifle_MXM_F" + ]; + + blck_RifleAsault = blck_RifleAsault_556 + blck_RifleAsault_650; + + 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" + ]; + blck_apexWeapons = ["arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F", + "arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F", + "arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F", + "arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_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_650 + blck_RifleLMG + blck_DLC_Sniper + blck_DLC_MMG; + blck_WeaponList_Green = blck_RifleSniper + blck_RifleAsault_650 +blck_RifleLMG + blck_DLC_MMG + blck_apexWeapons; + blck_WeaponList_Blue = blck_RifleOther + blck_RifleAsault_556 +blck_RifleAsault_650; + blck_WeaponList_Red = blck_RifleAsault_556 + blck_RifleSniper + blck_RifleAsault_650 + blck_RifleLMG; + + #ifdef useAPEX + + blck_WeaponList_Orange = blck_WeaponList_Orange + blck_apexWeapons; + blck_WeaponList_Green = blck_WeaponList_Green + blck_apexWeapons; + #endif + + blck_baseBackpacks = ["B_Carryall_ocamo","B_Carryall_oucamo","B_Carryall_mcamo","B_Carryall_oli","B_Carryall_khk","B_Carryall_cbr" ]; + blck_ApexBackpacks = [ + "B_Bergen_mcamo_F","B_Bergen_dgtl_F","B_Bergen_hex_F","B_Bergen_tna_F","B_AssaultPack_tna_F","B_Carryall_ghex_F", + "B_FieldPack_ghex_F","B_ViperHarness_blk_F","B_ViperHarness_ghex_F","B_ViperHarness_hex_F","B_ViperHarness_khk_F", + "B_ViperHarness_oli_F","B_ViperLightHarness_blk_F","B_ViperLightHarness_ghex_F","B_ViperLightHarness_hex_F","B_ViperLightHarness_khk_F","B_ViperLightHarness_oli_F" + ]; + + #ifdef useAPEX + blck_backpacks = blck_baseBackpacks + blck_ApexBackpacks; + #endif + + 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", + + //Apex + "H_MilCap_tna_F", + "H_MilCap_ghex_F", + "H_Booniehat_tna_F", + "H_Beret_gen_F", + "H_MilCap_gen_F", + "H_Cap_oli_Syndikat_F", + "H_Cap_tan_Syndikat_F", + "H_Cap_blk_Syndikat_F", + "H_Cap_grn_Syndikat_F" + ]; + 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", + "H_Helmet_Skate", + "H_HelmetB_TI_tna_F", + // Apex + //"H_HelmetO_ViperSP_hex_F", + //"H_HelmetO_ViperSP_ghex_F", + "H_HelmetB_tna_F", + "H_HelmetB_Enh_tna_F", + "H_HelmetB_Light_tna_F", + "H_HelmetSpecO_ghex_F", + "H_HelmetLeaderO_ghex_F", + "H_HelmetO_ghex_F", + "H_HelmetCrew_O_ghex_F" + ]; + 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", + //Apex + "U_B_T_Soldier_F", + "U_B_T_Soldier_AR_F", + "U_B_T_Soldier_SL_F", + //"U_B_T_Sniper_F", + //"U_B_T_FullGhillie_tna_F", + "U_B_CTRG_Soldier_F", + "U_B_CTRG_Soldier_2_F", + "U_B_CTRG_Soldier_3_F", + "U_B_GEN_Soldier_F", + "U_B_GEN_Commander_F", + "U_O_T_Soldier_F", + "U_O_T_Officer_F", + //"U_O_T_Sniper_F", + //"U_O_T_FullGhillie_tna_F", + "U_O_V_Soldier_Viper_F", + "U_O_V_Soldier_Viper_hex_F", + "U_I_C_Soldier_Para_1_F", + "U_I_C_Soldier_Para_2_F", + "U_I_C_Soldier_Para_3_F", + "U_I_C_Soldier_Para_4_F", + "U_I_C_Soldier_Para_5_F", + "U_I_C_Soldier_Bandit_1_F", + "U_I_C_Soldier_Bandit_2_F", + "U_I_C_Soldier_Bandit_3_F", + "U_I_C_Soldier_Bandit_4_F", + "U_I_C_Soldier_Bandit_5_F", + "U_I_C_Soldier_Camo_F", + "U_C_man_sport_1_F", + "U_C_man_sport_2_F", + "U_C_man_sport_3_F", + "U_C_Man_casual_1_F", + "U_C_Man_casual_2_F", + "U_C_Man_casual_3_F", + "U_C_Man_casual_4_F", + "U_C_Man_casual_5_F", + "U_C_Man_casual_6_F", + "U_B_CTRG_Soldier_urb_1_F", + "U_B_CTRG_Soldier_urb_2_F", + "U_B_CTRG_Soldier_urb_3_F" + ]; + + 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 = ["PartOreGold","PartOreSilver","PartOre","ItemGoldBar","ItemSilverBar", + "ItemGoldBar10oz","ItemTopaz","ItemOnyx","ItemSapphire","ItemAmethyst", + "ItemEmerald","ItemCitrine","ItemRuby","ItemQuartz","ItemJade", + "ItemGarnet","ItemKiloHemp"]; + blck_epochBuildingSupplies = ["PartPlankPack","CinderBlocks","MortarBucket","ItemScraps", + "ItemCorrugated","ItemCorrugatedLg","ItemSolar","ItemCables", + "ItemBattery","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 + #ifdef useAPEX + "arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F", + "arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F", + "arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F", + "arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F", + #endif + ["MultiGun","EnergyPackLg"], + ["arifle_Katiba_F","30Rnd_65x39_caseless_green"], + ["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"], + ["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"], + ["M14_EPOCH","20Rnd_762x51_Mag"], + ["M14Grn_EPOCH","20Rnd_762x51_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"], + ["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] + // Apex Ammo + ], + [ // 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"], + #ifdef useAPEX + "arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F", + "arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F", + "arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F", + "arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F", + #endif + ["MultiGun","EnergyPackLg"], + ["arifle_Katiba_F","30Rnd_65x39_caseless_green"], + ["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"], + ["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"], + ["M14_EPOCH","20Rnd_762x51_Mag"], + ["M14Grn_EPOCH","20Rnd_762x51_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"], + ["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_configsEpochLoaded = true; diff --git a/@ExileServer/addons/custom_server/Configs/blck_configs_exile.sqf b/@ExileServer/addons/custom_server/Configs/blck_configs_exile.sqf new file mode 100644 index 0000000..8c4c5bf --- /dev/null +++ b/@ExileServer/addons/custom_server/Configs/blck_configs_exile.sqf @@ -0,0 +1,843 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-14-17 + + -------------------------- + 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/ +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//////////// +// Exile-specific settings +//////////// + +// list of locations that are protected against mission spawns + +switch (toLower(worldName)) do +{ + case "altis": { + blck_locationBlackList append [ + //Add location as [[xpos,ypos,0],minimumDistance], + // Note that there should not be a comma after the last item in this table + [[10800,10641,0],1000] // isthmus - missions that spawn here often are glitched. + ]; + }; + case "tanoa": { + blck_locationBlackList append [ ]; + }; +}; + +/********************************************************************************* + +AI WEAPONS, UNIFORMS, VESTS AND GEAR + +**********************************************************************************/ + + blck_blacklistSpawns = false; + blck_listConcreteMixerZones = false; + blck_AI_Side = EAST; + blck_AIPatrolVehicles = ["Exile_Car_Offroad_Armed_Guerilla01","Exile_Car_Offroad_Armed_Guerilla02","Exile_Car_BTR40_MG_Green","Exile_Car_BTR40_MG_Camo","Exile_Car_HMMWV_M134_Green","Exile_Car_HMMWV_M134_Desert",/*"Exile_Car_HMMWV_M134_Desert","Exile_Car_HMMWV_M2_Desert",*/"B_LSV_01_armed_F"]; // Type of vehicle spawned to defend AI bases + + // Blacklisted itesm + blck_blacklistedOptics = ["optic_Nightstalker","optic_tws","optic_tws_mg"]; + + // AI Weapons and Attachments + blck_bipods = ["bipod_01_F_blk","bipod_01_F_mtp","bipod_01_F_snd","bipod_02_F_blk","bipod_02_F_hex","bipod_02_F_tan","bipod_03_F_blk","bipod_03_F_oli"]; + + blck_Optics_Holo = ["optic_Hamr","optic_MRD","optic_Holosight","optic_Holosight_smg","optic_Aco","optic_ACO_grn","optic_ACO_grn_smg","optic_Aco_smg","optic_Yorris"]; + blck_Optics_Reticule = ["optic_Arco","optic_MRCO"]; + blck_Optics_Scopes = [ + "optic_AMS","optic_AMS_khk","optic_AMS_snd", + "optic_DMS", + "optic_KHS_blk","optic_KHS_hex","optic_KHS_old","optic_KHS_tan", + "optic_LRPS", + "optic_Nightstalker", + "optic_NVS", + "optic_SOS" + //"optic_tws", + //"optic_tws_mg", + ]; + + #ifdef useAPEX + blck_Optics_Apex = [ + //Apex + "optic_Arco_blk_F", "optic_Arco_ghex_F", + "optic_DMS_ghex_F", + "optic_Hamr_khk_F", + "optic_ERCO_blk_F","optic_ERCO_khk_F","optic_ERCO_snd_F", + "optic_SOS_khk_F", + "optic_LRPS_tna_F","optic_LRPS_ghex_F", + "optic_Holosight_blk_F","optic_Holosight_khk_F","optic_Holosight_smg_blk_F" + ]; + blck_Optics = blck_Optics_Holo + blck_Optics_Reticule + blck_Optics_Scopes; + blck_Optics = blck_Optics + blck_Optics_Apex; + #endif + + blck_bipods = [ + "bipod_01_F_blk","bipod_01_F_mtp","bipod_01_F_snd","bipod_02_F_blk","bipod_02_F_hex","bipod_02_F_tan","bipod_03_F_blk","bipod_03_F_oli", + //Apex + "bipod_01_F_khk" + ]; + + blck_silencers = [ + "muzzle_snds_338_black","muzzle_snds_338_green","muzzle_snds_338_sand","muzzle_snds_93mmg","muzzle_snds_93mmg_tan","muzzle_snds_acp","muzzle_snds_B", + "muzzle_snds_H","muzzle_snds_H_MG","muzzle_snds_H_SW","muzzle_snds_L","muzzle_snds_M", + //Apex + "muzzle_snds_H_khk_F","muzzle_snds_H_snd_F","muzzle_snds_58_blk_F","muzzle_snds_m_khk_F","muzzle_snds_m_snd_F","muzzle_snds_B_khk_F","muzzle_snds_B_snd_F", + "muzzle_snds_58_wdm_F","muzzle_snds_65_TI_blk_F","muzzle_snds_65_TI_hex_F","muzzle_snds_65_TI_ghex_F","muzzle_snds_H_MG_blk_F","muzzle_snds_H_MG_khk_F" + ]; + + blck_RifleSniper = [ + "srifle_EBR_F","srifle_GM6_F","srifle_LRR_F","srifle_DMR_01_F" + ]; + + blck_RifleAsault_556 = [ + "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","arifle_SDAR_F" + ]; + + blck_RifleAsault_650 = [ + "arifle_Katiba_F","arifle_Katiba_C_F","arifle_Katiba_GL_F","arifle_MXC_F","arifle_MX_F","arifle_MX_GL_F","arifle_MXM_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_650 + blck_RifleLMG + blck_DLC_Sniper + blck_DLC_MMG; + blck_WeaponList_Green = blck_RifleSniper + blck_RifleAsault_650 +blck_RifleLMG + blck_DLC_MMG; + blck_WeaponList_Blue = blck_RifleOther + blck_RifleAsault_556 + blck_RifleAsault_650; + blck_WeaponList_Red = blck_RifleAsault_556 + blck_RifleSniper + blck_RifleAsault_650 + blck_RifleLMG; + + #ifdef useAPEX + blck_apexWeapons = ["arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F", + "arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F", + "arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F", + "arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F"]; + + blck_WeaponList_Orange = blck_WeaponList_Orange + blck_apexWeapons; + blck_WeaponList_Green = blck_WeaponList_Green + blck_apexWeapons; + #endif + + blck_baseBackpacks = ["B_Carryall_ocamo","B_Carryall_oucamo","B_Carryall_mcamo","B_Carryall_oli","B_Carryall_khk","B_Carryall_cbr" ]; + + #ifdef useAPEX + blck_ApexBackpacks = [ + "B_Bergen_mcamo_F","B_Bergen_dgtl_F","B_Bergen_hex_F","B_Bergen_tna_F","B_AssaultPack_tna_F","B_Carryall_ghex_F", + "B_FieldPack_ghex_F","B_ViperHarness_blk_F","B_ViperHarness_ghex_F","B_ViperHarness_hex_F","B_ViperHarness_khk_F", + "B_ViperHarness_oli_F","B_ViperLightHarness_blk_F","B_ViperLightHarness_ghex_F","B_ViperLightHarness_hex_F","B_ViperLightHarness_khk_F","B_ViperLightHarness_oli_F" + ]; + blck_backpacks = blck_baseBackpacks + blck_ApexBackpacks; + #endif + + 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", + "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", + //Apex + + "H_MilCap_tna_F", + "H_MilCap_ghex_F", + "H_Booniehat_tna_F", + "H_Beret_gen_F", + "H_MilCap_gen_F", + "H_Cap_oli_Syndikat_F", + "H_Cap_tan_Syndikat_F", + "H_Cap_blk_Syndikat_F", + "H_Cap_grn_Syndikat_F" + ]; + 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", + "H_Helmet_Skate", + "H_HelmetB_TI_tna_F", + // Apex + //"H_HelmetO_ViperSP_hex_F", + //"H_HelmetO_ViperSP_ghex_F", + "H_HelmetB_tna_F", + "H_HelmetB_Enh_tna_F", + "H_HelmetB_Light_tna_F", + "H_HelmetSpecO_ghex_F", + "H_HelmetLeaderO_ghex_F", + "H_HelmetO_ghex_F", + "H_HelmetCrew_O_ghex_F" + ]; + 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 + // I have commented out some high visibility uniforms that can be reserved for players or special missions. + // for example, you could have a uniform list specified in a mission template. + "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", + //Apex + "U_B_T_Soldier_F", + "U_B_T_Soldier_AR_F", + "U_B_T_Soldier_SL_F", + //"U_B_T_Sniper_F", + //"U_B_T_FullGhillie_tna_F", + "U_B_CTRG_Soldier_F", + "U_B_CTRG_Soldier_2_F", + "U_B_CTRG_Soldier_3_F", + "U_B_GEN_Soldier_F", + "U_B_GEN_Commander_F", + "U_O_T_Soldier_F", + "U_O_T_Officer_F", + //"U_O_T_Sniper_F", + //"U_O_T_FullGhillie_tna_F", + "U_O_V_Soldier_Viper_F", + "U_O_V_Soldier_Viper_hex_F", + "U_I_C_Soldier_Para_1_F", + "U_I_C_Soldier_Para_2_F", + "U_I_C_Soldier_Para_3_F", + "U_I_C_Soldier_Para_4_F", + "U_I_C_Soldier_Para_5_F", + "U_I_C_Soldier_Bandit_1_F", + "U_I_C_Soldier_Bandit_2_F", + "U_I_C_Soldier_Bandit_3_F", + "U_I_C_Soldier_Bandit_4_F", + "U_I_C_Soldier_Bandit_5_F", + "U_I_C_Soldier_Camo_F", + "U_C_man_sport_1_F", + "U_C_man_sport_2_F", + "U_C_man_sport_3_F", + "U_C_Man_casual_1_F", + "U_C_Man_casual_2_F", + "U_C_Man_casual_3_F", + "U_C_Man_casual_4_F", + "U_C_Man_casual_5_F", + "U_C_Man_casual_6_F", + "U_B_CTRG_Soldier_urb_1_F", + "U_B_CTRG_Soldier_urb_2_F", + "U_B_CTRG_Soldier_urb_3_F" + ]; + + 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", + #ifdef useAPEX + //Apex + "V_TacChestrig_grn_F", + "V_TacChestrig_oli_F", + "V_TacChestrig_cbr_F", + "V_PlateCarrier1_tna_F", + "V_PlateCarrier2_tna_F", + "V_PlateCarrierSpec_tna_F", + "V_PlateCarrierGL_tna_F", + "V_HarnessO_ghex_F", + "V_HarnessOGL_ghex_F", + "V_BandollierB_ghex_F", + "V_TacVest_gen_F", + "V_PlateCarrier1_rgr_noflag_F", + #endif + "V_PlateCarrier2_rgr_noflag_F" + ]; + + //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 + #ifdef useAPEX + "arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F", + "arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F", + "arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F", + "arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F", + #endif + ["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"], + #ifdef useAPEX + "arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F", + "arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F", + "arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F", + "arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F", + #endif + ["arifle_Katiba_F","30Rnd_65x39_caseless_green"], + ["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"], + ["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_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_configsExileLoaded = true; diff --git a/@ExileServer/addons/custom_server/Configs/blck_configs_exile_mil.sqf b/@ExileServer/addons/custom_server/Configs/blck_configs_exile_mil.sqf new file mode 100644 index 0000000..9d6073b --- /dev/null +++ b/@ExileServer/addons/custom_server/Configs/blck_configs_exile_mil.sqf @@ -0,0 +1,865 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-14-17 + + -------------------------- + 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/ +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//////////// +// Exile-specific settings +//////////// + +// list of locations that are protected against mission spawns + +switch (toLower(worldName)) do +{ + case "altis": { + blck_locationBlackList append [ + //Add location as [[xpos,ypos,0],minimumDistance], + // Note that there should not be a comma after the last item in this table + [[10800,10641,0],1000] // isthmus - missions that spawn here often are glitched. + ]; + }; + case "tanoa": { + blck_locationBlackList append [ ]; + }; +}; + +/********************************************************************************* + +AI WEAPONS, UNIFORMS, VESTS AND GEAR + +**********************************************************************************/ + + blck_blacklistSpawns = false; + blck_listConcreteMixerZones = false; + blck_AI_Side = EAST; + blck_AIPatrolVehicles = + [ + //"Exile_Car_Offroad_Armed_Guerilla01", + //"Exile_Car_Offroad_Armed_Guerilla02", + //"Exile_Car_BTR40_MG_Green", + //"Exile_Car_BTR40_MG_Camo", + //"Exile_Car_HMMWV_M134_Green", + //"Exile_Car_HMMWV_M134_Desert", + //"Exile_Car_HMMWV_M134_Desert", + //"Exile_Car_HMMWV_M2_Desert", + //"B_LSV_01_armed_F", + //"_MRAP_02_gmg_ghex_F", + "O_MRAP_02_hmg_ghex_F", + "O_MRAP_03_gmg_ghex_F", + "O_MRAP_03_hmg_ghex_F", + "B_MBT_01_cannon_F", + "B_MBT_01_mlrs_base_F", + "B_MBT_01_mlrs_F", + "B_MBT_01_TUSK_F", + "B_APC_Tracked_01_AA_F", + "B_APC_Tracked_01_CRV_F", + "B_APC_Tracked_01_rcws_F" + ]; // Type of vehicle spawned to defend AI bases + + // Blacklisted itesm + blck_blacklistedOptics = ["optic_Nightstalker","optic_tws","optic_tws_mg"]; + + // AI Weapons and Attachments + blck_bipods = ["bipod_01_F_blk","bipod_01_F_mtp","bipod_01_F_snd","bipod_02_F_blk","bipod_02_F_hex","bipod_02_F_tan","bipod_03_F_blk","bipod_03_F_oli"]; + + blck_Optics_Holo = ["optic_Hamr","optic_MRD","optic_Holosight","optic_Holosight_smg","optic_Aco","optic_ACO_grn","optic_ACO_grn_smg","optic_Aco_smg","optic_Yorris"]; + blck_Optics_Reticule = ["optic_Arco","optic_MRCO"]; + blck_Optics_Scopes = [ + "optic_AMS","optic_AMS_khk","optic_AMS_snd", + "optic_DMS", + "optic_KHS_blk","optic_KHS_hex","optic_KHS_old","optic_KHS_tan", + "optic_LRPS", + "optic_Nightstalker", + "optic_NVS", + "optic_SOS", + "optic_tws", + "optic_tws_mg" + ]; + + #ifdef useAPEX + blck_Optics_Apex = [ + //Apex + "optic_Arco_blk_F", "optic_Arco_ghex_F", + "optic_DMS_ghex_F", + "optic_Hamr_khk_F", + "optic_ERCO_blk_F","optic_ERCO_khk_F","optic_ERCO_snd_F", + "optic_SOS_khk_F", + "optic_LRPS_tna_F","optic_LRPS_ghex_F", + "optic_Holosight_blk_F","optic_Holosight_khk_F","optic_Holosight_smg_blk_F" + ]; + blck_Optics = blck_Optics_Holo + blck_Optics_Reticule + blck_Optics_Scopes; + blck_Optics = blck_Optics + blck_Optics_Apex; + #endif + + blck_bipods = [ + "bipod_01_F_blk","bipod_01_F_mtp","bipod_01_F_snd","bipod_02_F_blk","bipod_02_F_hex","bipod_02_F_tan","bipod_03_F_blk","bipod_03_F_oli", + //Apex + "bipod_01_F_khk" + ]; + + blck_silencers = [ + "muzzle_snds_338_black","muzzle_snds_338_green","muzzle_snds_338_sand","muzzle_snds_93mmg","muzzle_snds_93mmg_tan","muzzle_snds_acp","muzzle_snds_B", + "muzzle_snds_H","muzzle_snds_H_MG","muzzle_snds_H_SW","muzzle_snds_L","muzzle_snds_M", + //Apex + "muzzle_snds_H_khk_F","muzzle_snds_H_snd_F","muzzle_snds_58_blk_F","muzzle_snds_m_khk_F","muzzle_snds_m_snd_F","muzzle_snds_B_khk_F","muzzle_snds_B_snd_F", + "muzzle_snds_58_wdm_F","muzzle_snds_65_TI_blk_F","muzzle_snds_65_TI_hex_F","muzzle_snds_65_TI_ghex_F","muzzle_snds_H_MG_blk_F","muzzle_snds_H_MG_khk_F" + ]; + + blck_RifleSniper = [ + "srifle_EBR_F","srifle_GM6_F","srifle_LRR_F","srifle_DMR_01_F" + ]; + + blck_RifleAsault_556 = [ + "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","arifle_SDAR_F" + ]; + + blck_RifleAsault_650 = [ + "arifle_Katiba_F","arifle_Katiba_C_F","arifle_Katiba_GL_F","arifle_MXC_F","arifle_MX_F","arifle_MX_GL_F","arifle_MXM_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_650 + blck_RifleLMG + blck_DLC_Sniper + blck_DLC_MMG; + blck_WeaponList_Green = blck_RifleSniper + blck_RifleAsault_650 +blck_RifleLMG + blck_DLC_MMG; + blck_WeaponList_Blue = blck_RifleOther + blck_RifleAsault_556 + blck_RifleAsault_650; + blck_WeaponList_Red = blck_RifleAsault_556 + blck_RifleSniper + blck_RifleAsault_650 + blck_RifleLMG; + + #ifdef useAPEX + blck_apexWeapons = ["arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F", + "arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F", + "arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F", + "arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F"]; + + blck_WeaponList_Orange = blck_WeaponList_Orange + blck_apexWeapons; + blck_WeaponList_Green = blck_WeaponList_Green + blck_apexWeapons; + #endif + + blck_baseBackpacks = ["B_Carryall_ocamo","B_Carryall_oucamo","B_Carryall_mcamo","B_Carryall_oli","B_Carryall_khk","B_Carryall_cbr" ]; + + #ifdef useAPEX + blck_ApexBackpacks = [ + "B_Bergen_mcamo_F","B_Bergen_dgtl_F","B_Bergen_hex_F","B_Bergen_tna_F","B_AssaultPack_tna_F","B_Carryall_ghex_F", + "B_FieldPack_ghex_F","B_ViperHarness_blk_F","B_ViperHarness_ghex_F","B_ViperHarness_hex_F","B_ViperHarness_khk_F", + "B_ViperHarness_oli_F","B_ViperLightHarness_blk_F","B_ViperLightHarness_ghex_F","B_ViperLightHarness_hex_F","B_ViperLightHarness_khk_F","B_ViperLightHarness_oli_F" + ]; + blck_backpacks = blck_baseBackpacks + blck_ApexBackpacks; + #endif + + 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", + "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", + //Apex + + "H_MilCap_tna_F", + "H_MilCap_ghex_F", + "H_Booniehat_tna_F", + "H_Beret_gen_F", + "H_MilCap_gen_F", + "H_Cap_oli_Syndikat_F", + "H_Cap_tan_Syndikat_F", + "H_Cap_blk_Syndikat_F", + "H_Cap_grn_Syndikat_F" + ]; + 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", + "H_Helmet_Skate", + "H_HelmetB_TI_tna_F", + // Apex + //"H_HelmetO_ViperSP_hex_F", + //"H_HelmetO_ViperSP_ghex_F", + "H_HelmetB_tna_F", + "H_HelmetB_Enh_tna_F", + "H_HelmetB_Light_tna_F", + "H_HelmetSpecO_ghex_F", + "H_HelmetLeaderO_ghex_F", + "H_HelmetO_ghex_F", + "H_HelmetCrew_O_ghex_F" + ]; + 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 + // I have commented out some high visibility uniforms that can be reserved for players or special missions. + // for example, you could have a uniform list specified in a mission template. + "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", + //Apex + "U_B_T_Soldier_F", + "U_B_T_Soldier_AR_F", + "U_B_T_Soldier_SL_F", + //"U_B_T_Sniper_F", + //"U_B_T_FullGhillie_tna_F", + "U_B_CTRG_Soldier_F", + "U_B_CTRG_Soldier_2_F", + "U_B_CTRG_Soldier_3_F", + "U_B_GEN_Soldier_F", + "U_B_GEN_Commander_F", + "U_O_T_Soldier_F", + "U_O_T_Officer_F", + //"U_O_T_Sniper_F", + //"U_O_T_FullGhillie_tna_F", + "U_O_V_Soldier_Viper_F", + "U_O_V_Soldier_Viper_hex_F", + "U_I_C_Soldier_Para_1_F", + "U_I_C_Soldier_Para_2_F", + "U_I_C_Soldier_Para_3_F", + "U_I_C_Soldier_Para_4_F", + "U_I_C_Soldier_Para_5_F", + "U_I_C_Soldier_Bandit_1_F", + "U_I_C_Soldier_Bandit_2_F", + "U_I_C_Soldier_Bandit_3_F", + "U_I_C_Soldier_Bandit_4_F", + "U_I_C_Soldier_Bandit_5_F", + "U_I_C_Soldier_Camo_F", + "U_C_man_sport_1_F", + "U_C_man_sport_2_F", + "U_C_man_sport_3_F", + "U_C_Man_casual_1_F", + "U_C_Man_casual_2_F", + "U_C_Man_casual_3_F", + "U_C_Man_casual_4_F", + "U_C_Man_casual_5_F", + "U_C_Man_casual_6_F", + "U_B_CTRG_Soldier_urb_1_F", + "U_B_CTRG_Soldier_urb_2_F", + "U_B_CTRG_Soldier_urb_3_F" + ]; + + 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", + #ifdef useAPEX + //Apex + "V_TacChestrig_grn_F", + "V_TacChestrig_oli_F", + "V_TacChestrig_cbr_F", + "V_PlateCarrier1_tna_F", + "V_PlateCarrier2_tna_F", + "V_PlateCarrierSpec_tna_F", + "V_PlateCarrierGL_tna_F", + "V_HarnessO_ghex_F", + "V_HarnessOGL_ghex_F", + "V_BandollierB_ghex_F", + "V_TacVest_gen_F", + "V_PlateCarrier1_rgr_noflag_F", + #endif + "V_PlateCarrier2_rgr_noflag_F" + ]; + + //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 + #ifdef useAPEX + "arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F", + "arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F", + "arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F", + "arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F", + #endif + ["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"], + #ifdef useAPEX + "arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F", + "arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F", + "arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F", + "arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F", + #endif + ["arifle_Katiba_F","30Rnd_65x39_caseless_green"], + ["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"], + ["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_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],["Exile_Item_MetalWire",1,4] + ], + [//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_configsExileLoaded = true; diff --git a/@ExileServer/addons/custom_server/Configs/blck_configs_mil.sqf b/@ExileServer/addons/custom_server/Configs/blck_configs_mil.sqf new file mode 100644 index 0000000..b549cf4 --- /dev/null +++ b/@ExileServer/addons/custom_server/Configs/blck_configs_mil.sqf @@ -0,0 +1,406 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-17-17 + + -------------------------- + 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/ +*/ + + #include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + diag_log "[blckeagls] Loading blck_configs_mil.sqf for Militarized Servers"; + + /* + Configuration for Addons that support the overall Mission system. + These are a module to spawn map addons generated with the Eden Editor + And a moduel to spawn static loot crates at specific location + A time acceleration module. + */ + + blck_spawnMapAddons = true; // When true map addons will be spawned based on parameters define in custum_server\MapAddons\MapAddons_init.sqf + blck_spawnStaticLootCrates = true; // When true, static loot crates will be spawned and loaded with loot as specified in custom_server\SLS\SLS_init_Epoch.sqf (or its exile equivalent). + + // Note that you can define map-specific variants in custom_server\configs\blck_custom_config.sqf + blck_useTimeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below. + blck_timeAccelerationDay = 1; // Daytime time accelearation + blck_timeAccelerationDusk = 4; // Dawn/dusk time accelearation + blck_timeAccelerationNight = 8; // Nighttim time acceleration + + /************************************************************** + + BLACKLIST LOCATIONS + + **************************************************************/ + // if true then missions will not spawn within 1000 m of spawn points for Altis, Bornholm, Cherno, Esseker or stratis. + blck_blacklistTraderCities = true; // Set this = true if you would like the mission system to automatically search for the locations of the Epoch/Exile trader cities. Note that these are added to the list of blacklisted locations for Epoch for the most common maps. + + /*********************************************************** + + GENERAL MISSION SYSTEM CONFIGURATION + + ***********************************************************/ + //////// + // Headless Client Configurations + blck_useHC = false; // Not Yet Working + + /////////////////////////////// + // Kill message configurations + // These determine whether and when messages are sent to players regarding AI Kills or illegal kills that might damage a vehicle. + blck_useKillMessages = false; // when true a message will be broadcast to all players each time an AI is killed; may impact server performance. + blck_useKillScoreMessage = true; // when true a tile is displayed to the killer with the kill score information + blck_useIEDMessages = true; // Displayes a message when a player vehicle detonates and IED (such as would happen if a player killed AI with a forbidden weapon). + + /////////////////////////////// + // 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 = [false,"center"]; + blck_preciseMapMarkers = false; // Map markers are/are not centered at the loot crate + + + //Minimum distance between missions + blck_MinDistanceFromMission = 1500; + + /////////////////////////////// + // Mission Smoke and Signals + /////////////////////////////// + + // global loot crate options + // Options to spawn a smoking wreck near the crate. 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/chemlight will appear at the loot crate for 2 min after mission completion. + blck_loadCratesTiming = "atMissionSpawn"; // valid choices are "atMissionCompletion" and "atMissionSpawn"; + + /////////////////////////////// + // 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 = false; // 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 = []; // 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 = []; // Add any vehicles for which you wish to forbid vehicle kills, o + + + /////////////////////////////// + // MISC MISSION PARAMETERS + /////////////////////////////// + blck_useKilledAIName = true; // When false, the name of the killer (player), weapon and distance are displayed; otherwise the name of the player, distance and name of AI unit killed are shown. + blck_useMines = false; // when true mines are spawned around the mission area. these are cleaned up when a player reaches the crate. Turn this off if you have vehicle patrols. + blck_cleanupCompositionTimer = 1200; // Mission objects will be deleted after the mission is completed after a deley set by this timer. + blck_cleanUpLootChests = false; // when true, loot crates will be deleted together with other mission objects. + blck_MissionTimout = 60*60; // 60 min - missions will timeout and respawn in another location. This prevents missions in impossible locations from persisting. + + /////////////////////////////// + // Paratroop Settings + // AI paratrooper reinforcement paramters + // The behavior of these can be linked to some degree to the spawning of patrolling helis. + // For example, if you always want a helicopter to spawn paratroops set the value 1. + // If you never want helicopters to spawn them set the value to 0. + blck_chanceParaBlue = 0.1; // [0 - 1] set to 0 to deactivate and 1 to always have paratroops spawn over the center of the mission. + blck_noParaBlue = 3; // [1-N] + + blck_chanceParaRed = 0.3; + blck_noParaRed = 3; + + blck_chanceParaGreen = 0.4; + blck_noParaGreen = 0.4; + + blck_chanceParaOrange = 0.5; + blck_noParaOrange = 4; + + // Supplemental Loot Parameters. + + /////////////////////////////// + // Heli Patrol Heli Types + // Armed Helis + ////////////////////////////// + _blck_littleBirds = ["B_Heli_Light_01_armed_F"]; // AH-9 Pawnee (WEST) + _blck_armed_hellcats = ["I_Heli_light_03_F"]; + _blck_armed_orcas = ["O_Heli_Light_02_F","O_Heli_Light_02_v2_F"]; + _blck_armed_ghosthawks = ["B_Heli_Transport_01_F","B_Heli_Transport_01_camo_F"]; + _blck_armed_hurons = ["B_Heli_Transport_03_F","B_Heli_Transport_03_black_F"]; + _blck_armed_attackHelis = ["B_Heli_Attack_01_F"]; + _blck_armed_heavyAttackHelis = ["O_Heli_Attack_02_F","O_Heli_Attack_02_black_F"]; + _blck_fighters = [ + "O_Plane_CAS_02_F", // /ti-199 Neophron (CAS) + "I_Plane_Fighter_03_AA_F", // A-143 Buzzard (AA) + "I_Plane_Fighter_04_F", // A-149 Gryphon + "B_Plane_CAS_01_F", // A-164 Wipeout (CAS) + "B_Plane_Fighter_01_F" // F/A-181 Black Wasp II + ]; + blck_blacklisted_heli_ammo = []; + blck_blacklisted_heli_weapons = []; + + + /////////////////////////////// + // Heli Patrol Settings + /////////////////////////////// + + blck_chanceHeliPatrolBlue = 0.2; //[0 - 1] Set to 0 to deactivate and 1 to always have a heli spawn over the mission center and patrol the mission area. The chance of paratroops dropping from the heli is defined by blck_chancePara(Blue|Red|Green|Orange) above. + blck_patrolHelisBlue = _blck_littleBirds; + + blck_chanceHeliPatrolRed = 08; // 0.4; + blck_patrolHelisRed = _blck_armed_hellcats+_blck_armed_orcas + _blck_armed_ghosthawks; + + blck_chanceHeliPatrolGreen = 0.9999; + blck_patrolHelisGreen = _blck_armed_heavyAttackHelis+_blck_armed_ghosthawks; + + blck_chanceHeliPatrolOrange = 0.9999; + blck_patrolHelisOrange = _blck_armed_heavyAttackHelis + _blck_fighters; + + + //////////////////// + // Enable / Disable Missions + //////////////////// + + // Maximum number of missions shown on the map at any one time. + #ifdef DBDserver + blck_maxSpawnedMissions = 6; + #else + // Change this value to reduce the number of spawned missions at any one time. + blck_maxSpawnedMissions = 4; + #endif + + //Set to -1 to disable. Values of 2 or more force the mission spawner to spawn copies of that mission - this feature is not recommended because you may run out of available groups. + blck_enableOrangeMissions = 1; + blck_enableGreenMissions = 1; + blck_enableRedMissions = 1; + blck_enableBlueMissions = 1; + #ifdef DBDserver + blck_enableHunterMissions = 1; + blck_enableScoutsMissions = 1; + blck_maxcrashsites = 3; + #endif + + //////////////////// + // 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; + #ifdef DBDserver + blck_TMin_Hunter = 120; + blck_TMin_Scouts = 115; + blck_TMin_Crashes = 115; + //blck_TMin_UMS = 200; + #endif + + //Maximum Spawn time between missions in seconds + blck_TMax_Orange = 360; + blck_TMax_Green = 300; + blck_TMax_Blue = 200; + blck_TMax_Red = 250; + #ifdef DBDserver + blck_TMax_Hunter = 200; + blck_TMax_Scouts = 200; + blck_TMax_Crashes = 200; + //blck_TMax_UMS = 280; + #endif + + /////////////////////////////// + // AI VEHICLE PATROL PARAMETERS + /////////////////////////////// + + 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 outor been killed. + + //////////////////// + // Mission Vehicle Settings + //////////////////// + //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 = 2; // 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_killEmptyStaticWeapons = true; // When true, static weapons will have damage set to 1 when the AI manning them is killed. + blck_staticWeapons = ["B_HMG_01_high_F","B_GMG_01_high_F"]; // [0.50 cal, grenade launcher, AT Launcher] + + //////////////////// + // Mission Static Weapon Settings + //////////////////// + + // Defines how many static weapons to spawn. Set this to -1 to disable spawning + blck_SpawnEmplaced_Orange = 5; // Number of static weapons at Orange Missions + blck_SpawnEmplaced_Green = 4; // 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 + + + + /**************************************************************** + + GENERAL AI SETTINGS + + ****************************************************************/ + + blck_groupBehavior = "SAD"; // Suggested choices are "SAD", "SENTRY", "AWARE" https://community.bistudio.com/wiki/ArmA:_AI_Combat_Modes + 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_addAIMoney = true; + 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_removeNVG = false; // When true, NVG will be removed from AI when they are killed. + 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_launchersPerGroup = 5; // Defines the number of AI per group spawned with a launcher + blck_launcherCleanup = false;// 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_AliveAICleanUpTimer = 1200; // Time after mission completion at which any remaining live AI are deleted. + + // How precisely player locations will be revealed to AI after an AI kill + // values are ordered as follows [blue, red, green, orange]; + blck_AIAlertDistance = [150,225,250,300]; // Radius within which AI will be notified of enemy activity. Depricated as a group-sed system is used now. The group is informed of the enemy location when a group member is hit or killed. + //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.3, 0.5, 0.7, 0.9]; + + blck_baseSkill = 1.0; // The overal skill of the AI - range 0.1 to 1.0. + + /*************************************************************** + + 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 = 5; + blck_SkillsOrange = [ + ["aimingAccuracy",0.6],["aimingShake",0.9],["aimingSpeed",0.9],["endurance",1.00],["spotDistance",1.0],["spotTime",1.0],["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 = 4; + blck_SkillsGreen = [ + ["aimingAccuracy",0.5],["aimingShake",0.75],["aimingSpeed",0.85],["endurance",0.9],["spotDistance",0.9],["spotTime",0.9],["courage",0.9],["reloadSpeed",0.9],["commanding",0.9],["general",0.75] + ]; + + // Red Missions + blck_MinAI_Red = 12; + blck_MaxAI_Red = 15; + blck_AIGrps_Red = 3; + blck_SkillsRed = [ + ["aimingAccuracy",0.2],["aimingShake",0.6],["aimingSpeed",0.6],["endurance",0.80],["spotDistance",0.7],["spotTime",0.8],["courage",0.80],["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.5],["aimingSpeed",0.5],["endurance",0.50],["spotDistance",0.6],["spotTime",0.6],["courage",0.60],["reloadSpeed",0.60],["commanding",0.7],["general",0.60] + ]; + + // Add some money to AI; only works with Exile for now. + blck_maxMoneyOrange = 50; + blck_maxMoneyGreen = 40; + blck_maxMoneyRed = 30; + blck_maxMoneyBlue = 20; + + #ifdef DBDserver + blck_AIAlertDistance = [150,225,250,300]; // Radius within which AI will be notified of enemy activity. Depricated as a group-sed system is used now. The group is informed of the enemy location when a group member is hit or killed. + //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.3, 0.5, 0.7, 0.9]; + + blck_baseSkill = 0.7; // The overal skill of the AI - range 0.1 to 1.0. + + /*************************************************************** + + 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 = 30; + blck_MaxAI_Orange = 35; + blck_AIGrps_Orange = 5; + blck_SkillsOrange = [ + ["aimingAccuracy",0.4],["aimingShake",0.5],["aimingSpeed",0.7],["endurance",1.00],["spotDistance",1.0],["spotTime",0.7],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00] + ]; + + // Green Missions + blck_MinAI_Green = 26; + blck_MaxAI_Green = 31; + blck_AIGrps_Green = 4; + blck_SkillsGreen = [ + ["aimingAccuracy",0.3],["aimingShake",0.45],["aimingSpeed",0.65],["endurance",0.9],["spotDistance",0.9],["spotTime",0.65],["courage",0.9],["reloadSpeed",0.9],["commanding",0.9],["general",0.75] + ]; + + // Red Missions + blck_MinAI_Red = 12; + blck_MaxAI_Red = 15; + blck_AIGrps_Red = 3; + blck_SkillsRed = [ + ["aimingAccuracy",0.2],["aimingShake",0.4],["aimingSpeed",0.6],["endurance",0.80],["spotDistance",0.7],["spotTime",0.6],["courage",0.80],["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.12],["aimingShake",0.3],["aimingSpeed",0.5],["endurance",0.50],["spotDistance",0.6],["spotTime",0.6],["courage",0.60],["reloadSpeed",0.60],["commanding",0.7],["general",0.60] + ]; + + // Add some money to AI; only works with Exile for now. + blck_maxMoneyOrange = 25; + blck_maxMoneyGreen = 20; + blck_maxMoneyRed = 15; + blck_maxMoneyBlue = 10; + #endif + + private["_modType"]; + _modType = [] call blck_fnc_getModType; + if (_modType isEqualTo "Epoch") then + { + diag_log format["[blckeagls] Loading Mission System using Parameters for %1 for militarized servers",_modType]; + execVM "\q\addons\custom_server\Configs\blck_configs_epoch.sqf"; + waitUntil {(isNil "blck_configsEpochLoaded") isEqualTo false;}; + waitUntil{blck_configsEpochLoaded}; + blck_configsEpochLoaded = nil; + diag_log "[blckeagles] Running getTraderCitiesEpoch to get location of trader cities"; + execVM "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitesEpoch.sqf"; + }; + if (_modType isEqualTo "Exile") then + { + diag_log format["[blckeagls] Loading Mission System using Parameters for %1 for militarized servers",_modType]; + execVM "\q\addons\custom_server\Configs\blck_configs_exile.sqf"; + waitUntil {(isNil "blck_configsExileLoaded") isEqualTo false;}; + waitUntil{blck_configsExileLoaded}; + blck_configsExileLoaded = nil; + if (blck_blacklistTraderCities || blck_blacklistSpawns || blck_listConcreteMixerZones) then {execVM "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitesExile.sqf";}; + }; + blck_configsLoaded = true; diff --git a/@ExileServer/addons/custom_server/Configs/blck_custom_config.sqf b/@ExileServer/addons/custom_server/Configs/blck_custom_config.sqf new file mode 100644 index 0000000..1d58495 --- /dev/null +++ b/@ExileServer/addons/custom_server/Configs/blck_custom_config.sqf @@ -0,0 +1,163 @@ + +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-14-17 + + -------------------------- + 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/ +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +diag_log "[blckeagls] Loading Configuration Overides"; + +private["_startTime"]; +_startTime = diag_tickTime; +_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;}; +}; + +switch (toLower (worldName)) do +{ + case "altis": + { + blck_timeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below. + blck_timeAccelerationDay = 1.5; // Daytime time accelearation + blck_timeAccelerationDusk = 4; // Dawn/dusk time accelearation + blck_timeAccelerationNight = 8; // Nighttim time acceleration + }; + case"tanoa": + { + blck_maxCrashSites = 2; + blck_timeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below. + blck_timeAccelerationDay = 1.4; // Daytime time accelearation + blck_timeAccelerationDusk = 4; // Dawn/dusk time accelearation + blck_timeAccelerationNight = 8; // Nighttim time acceleration + }; + case"namalsk": + { + blck_enableOrangeMissions = 1; + blck_enableGreenMissions = -1; + blck_enableRedMissions = 1; + blck_enableBlueMissions = -1; + blck_enableHunterMissions = 1; + blck_enableScoutsMissions = -1; + blck_maxCrashSites = -1; // recommended settings: 3 for Altis, 2 for Tanoa, 1 for smaller maps. Set to -1 to disable + + blck_timeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below. + blck_timeAccelerationDay = 2; // Daytime time accelearation + blck_timeAccelerationDusk = 4; // Dawn/dusk time accelearation + blck_timeAccelerationNight = 8; // Nighttim time acceleration + }; + case "esseker": + { + blck_enableOrangeMissions = 1; + blck_enableGreenMissions = -1; + blck_enableRedMissions = 1; + blck_enableBlueMissions = -1; + blck_enableHunterMissions = 1; + blck_enableScoutsMissions = -1; + blck_maxCrashSites = 1; + + blck_timeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below. + blck_timeAccelerationDay = 1; // Daytime time accelearation + blck_timeAccelerationDusk = 3; // Dawn/dusk time accelearation + blck_timeAccelerationNight = 6; // Nighttim time acceleration + }; + case "panthera3": + { + blck_maxCrashSites = 2; + blck_timeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below. + blck_timeAccelerationDay = 1.4; // Daytime time accelearation + blck_timeAccelerationDusk = 4; // Dawn/dusk time accelearation + blck_timeAccelerationNight = 8; // Nighttim time acceleration + }; +}; + +if (blck_debugON || (blck_debugLevel isEqualTo 3)) then +{ + // Used primarily for debugging. + diag_log "[blckeagls] Debug seting is ON, Custom configurations used"; + + blck_useTimeAcceleration = false; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below. + blck_timeAccelerationDay = 12; // Daytime time accelearation + blck_timeAccelerationDusk = 18; // Dawn/dusk time accelearation + blck_timeAccelerationNight = 24; // Nighttim time acceleration + + blck_mainThreadUpdateInterval = 10; + blck_enableOrangeMissions = 1; + blck_enableGreenMissions = 1; + blck_enableRedMissions = 1; + blck_enableBlueMissions = 1; + blck_enableHunterMissions = -1; + blck_enableScoutsMissions = -1; + blck_maxCrashSites = 1; + + blck_enabeUnderwaterMissions = -1; + + blck_cleanupCompositionTimer = 10; // Time after mission completion at which items in the composition are deleted. + blck_AliveAICleanUpTimer = 10; // Time after mission completion at which any remaining live AI are deleted. + blck_bodyCleanUpTimer = 10; + + blck_chanceHeliPatrolBlue = 1; + 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_TMin_Blue = 7; + blck_TMin_Red = 10; + blck_TMin_Green = 13; + blck_TMin_Orange = 16; + blck_TMin_Hunter = 20; + blck_TMin_Scouts = 20; + blck_TMin_Crashes = 5; + + //Maximum Spawn time between missions in seconds + blck_TMax_Blue = 12; + blck_TMax_Red = 15; + blck_TMax_Green = 17; + blck_TMax_Orange = 21; + blck_TMax_Hunter = 22; + blck_TMax_Scouts = 22; + blck_TMax_Crashes = 15; + + //blck_MissionTimout = 360; // 40 min + blck_MinAI_Blue = 1; + blck_MaxAI_Blue = 2; + blck_AIGrps_Blue = 1; + + + 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] + ]; + +}; + + + diff --git a/@ExileServer/addons/custom_server/Configs/blck_defines.hpp b/@ExileServer/addons/custom_server/Configs/blck_defines.hpp new file mode 100644 index 0000000..5435060 --- /dev/null +++ b/@ExileServer/addons/custom_server/Configs/blck_defines.hpp @@ -0,0 +1,22 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 6/7/17 + + -------------------------- + 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/ +*/ + +#define modUsed +//#define DBDserver +#define wpModeMove +#define useAPEX +#define useDynamicSimulation +//#define blck_debugMode +//#define blck_debugMode3 +//#define blck_milServer \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/MapAddons/MapAddons_init.sqf b/@ExileServer/addons/custom_server/MapAddons/MapAddons_init.sqf new file mode 100644 index 0000000..6ae775e --- /dev/null +++ b/@ExileServer/addons/custom_server/MapAddons/MapAddons_init.sqf @@ -0,0 +1,69 @@ +/* + Run scripts exported from M3EDEN Editor plug in for Arma 3 or other map addons. + Add addons to the arrays for Epoch or Exile as appropriate. + Arrays should contain ["mapname", "name of folder within mapaddons","name of file to execute"] + by Ghostrider-DbD- + for DBD Clan + 11/12/16 + -------------------------- + 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/ +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +if (!isServer) exitWith{}; +_addonsPath = "\q\addons\custom_server\MapAddons\mapcontent\"; +_addonsEpoch = [ + //["mapName","subfolder","filename.sqf"] + // when "subfolder" equals "" then the spawner will look for the file in the mapcontent directory + // See the examples below and in custom_server\MapAddons\mapcontent\Altis for an idea as to how to set these arrays up. + /* + ["Altis","Altis","mobileRefuelSaltFlats.sqf"], + ["Altis","Altis","smallbaseSaltFlats.sqf"] + */ +]; + +_addonsExile = [ + /* + ["Altis","Altis","mobileRefuelSaltFlats-DBD_final.sqf"], + ["Altis","Altis","smallbaseSaltFlats.sqf"] + */ +]; + + +_fnc_runIt = +{ + params["_addons"]; + //if (blck_debugON) then {diag_log format["[blckeagls] MapAddons:: addons list is %1",_addons];}; + _worldName = toLower (worldName); + { + if (toLower format["%1",_x select 0] isEqualTo _worldName) then + { + _path = ""; + if ( (_x select 1) isEqualTo "") then + { + _path = _addonsPath; + } else { + _path = format["%1%2%3",_addonsPath,_x select 1,"\"]; + }; + if (blck_debugLevel > 2) then {diag_log format["[blckeagls] MapAddons::-->> Running the following script: %1%2",_path,_x select 2];}; + [] execVM format["%1%2",_path,_x select 2]; + }; + }forEach _addons; +}; + +if not (isNull( configFile >> "CfgPatches" >> "a3_epoch_server" )) then +{ + diag_log "[blckeagls] Running Map Addons for Epoch"; + [_addonsEpoch] call _fnc_runIt; +}; + +if not (isNull( configFile >> "CfgPatches" >> "exile_server" )) then +{ + diag_log "[blckeagls] Running Map Addons for Exile"; + [_addonsExile] call _fnc_runIt; +}; diff --git a/@ExileServer/addons/custom_server/MapAddons/mapcontent/Altis/mobileRefuelSaltFlats.sqf b/@ExileServer/addons/custom_server/MapAddons/mapcontent/Altis/mobileRefuelSaltFlats.sqf new file mode 100644 index 0000000..34b5a62 --- /dev/null +++ b/@ExileServer/addons/custom_server/MapAddons/mapcontent/Altis/mobileRefuelSaltFlats.sqf @@ -0,0 +1,33 @@ +// Small bandit base on the salt flats +// by Ghostrider-Dbd- +// 11/8/16 + +private _objects = [ + ["Land_BluntStone_02",[26582.2,24670.5,12.0115],[[0,0.995673,-0.0929294],[-0.130865,0.0921302,0.98711]],[false,false]], + ["Land_BluntStone_02",[25767.7,21581.5,24.3651],[[0,0.999645,0.0266571],[-0.0346456,-0.0266411,0.999045]],[false,false]], + ["Land_BluntStone_02",[24927.3,22961.3,11.2178],[[0,0.999996,0.00265199],[0.031983,-0.00265063,0.999485]],[false,false]], + ["Flag_AAF_F",[22954.8,17041.1,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_CargoBox_V1_F",[22952.6,17016,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_Cargo40_blue_F",[22947.5,17024.9,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_Cargo40_blue_F",[22935.9,17031.2,3.19],[[-0.866282,-0.499555,0],[0,0,1]],[false,false]], + ["Land_Cargo40_blue_F",[22934,17045.2,3.19],[[-0.979295,0.202436,0],[0,0,1]],[false,false]], + ["Land_Cargo40_blue_F",[22942.7,17055.7,3.19],[[0.425964,-0.90474,0],[0,0,1]],[false,false]], + ["Land_Cargo40_blue_F",[22956.6,17059.1,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_Cargo40_blue_F",[22968.8,17054.2,3.19],[[0.658744,0.752367,0],[0,0,1]],[false,false]], + ["Land_WaterTank_F",[22957.9,17020.7,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_WaterBarrel_F",[22973.4,17042.1,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_CncBarrier_F",[22955.9,17026.5,3.19],[[0.627124,-0.778919,0],[0,0,1]],[false,false]], + ["Land_CncBarrierMedium4_F",[22944.5,17023.4,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_CncBarrierMedium4_F",[22960.6,17031.1,3.19],[[0.682042,-0.731313,0],[0,0,1]],[false,false]], + ["Land_CncBarrierMedium4_F",[22966.7,17036.8,3.19],[[0.682042,-0.731313,0],[0,0,1]],[false,false]], + ["Land_CncBarrierMedium4_F",[22971.8,17043.3,3.19],[[-0.855661,0.517537,0],[0,0,1]],[false,false]], + ["Land_FuelStation_Build_F",[22949.7,17049.9,3.19],[[0.551057,-0.834468,0],[0,0,1]],[false,false]], + ["Land_fs_feed_F",[22952.9,17044.6,3.19],[[0.555135,-0.83176,0],[0,0,1]],[false,false]] +]; +{ + private _object = (_x select 0) createVehicle [0,0,0]; + _object setPosASL (_x select 1); + _object setVectorDirAndUp (_x select 2); + _object enableSimulationGlobal ((_x select 3) select 0); + _object allowDamage ((_x select 3) select 1); +} forEach _objects; \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/MapAddons/mapcontent/Altis/smallbaseSaltFlats.sqf b/@ExileServer/addons/custom_server/MapAddons/mapcontent/Altis/smallbaseSaltFlats.sqf new file mode 100644 index 0000000..eef7696 --- /dev/null +++ b/@ExileServer/addons/custom_server/MapAddons/mapcontent/Altis/smallbaseSaltFlats.sqf @@ -0,0 +1,41 @@ +// Small bandit base on the salt flats +// by Ghostrider-Dbd- +// 11/8/16 + +private _objects = [ + ["Land_HBarrier_1_F",[23531.2,18446,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23533.5,18446.1,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23536.8,18445.9,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23540.2,18445.9,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23543.6,18445.9,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23529.6,18431.4,3.19],[[-0.995806,0.0914938,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23530.1,18434.7,3.19],[[-0.995806,0.0914938,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23530.4,18437.9,3.19],[[-0.995806,0.0914938,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23530.7,18441.4,3.19],[[-0.995806,0.0914938,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23543.7,18431.2,3.19],[[-0.995806,0.0914938,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23544.1,18434.4,3.19],[[-0.995806,0.0914938,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23544.5,18437.7,3.19],[[-0.995806,0.0914938,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23544.7,18441.2,3.19],[[-0.995806,0.0914938,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23530.3,18427.3,3.19],[[0.0644281,0.997922,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23533.6,18426.9,3.19],[[0.0644281,0.997922,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23536.9,18426.6,3.19],[[0.0644281,0.997922,0],[0,0,1]],[false,false]], + ["Land_HBarrier_3_F",[23540.4,18426.5,3.19],[[0.0644281,0.997922,0],[0,0,1]],[false,false]], + ["Land_HBarrier_01_big_tower_green_F",[23556.9,18453,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_HBarrierTower_F",[23520,18423,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_Scrap_MRAP_01_F",[23536,18434.6,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_PressureWasher_01_F",[23534.2,18427.5,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_PressureWasher_01_F",[23534.2,18427.5,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_ScrapHeap_1_F",[23549.8,18426.8,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_ScrapHeap_2_F",[23524.8,18445.7,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["CamoNet_INDP_Curator_F",[23536.3,18434,3.19],[[-0.998396,0.0566218,0],[0,0,1]],[false,false]], + ["Land_Cargo_House_V3_F",[23556.7,18420.3,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Land_Cargo_House_V3_F",[23519.2,18449.4,3.19],[[0,1,0],[0,0,1]],[false,false]], + ["Flag_AAF_F",[23538.1,18443,3.19],[[0,1,0],[0,0,1]],[false,false]] +]; +{ + private _object = (_x select 0) createVehicle [0,0,0]; + _object setPosASL (_x select 1); + _object setVectorDirAndUp (_x select 2); + _object enableSimulationGlobal ((_x select 3) select 0); + _object allowDamage ((_x select 3) select 1); +} forEach _objects; \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/Missions/Blue/default.sqf b/@ExileServer/addons/custom_server/Missions/Blue/default.sqf new file mode 100644 index 0000000..1362971 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Blue/default.sqf @@ -0,0 +1,63 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +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","_markerColor","_markerType","_useMines"]; + +//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; +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +////_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; diff --git a/@ExileServer/addons/custom_server/Missions/Blue/default2.sqf b/@ExileServer/addons/custom_server/Missions/Blue/default2.sqf new file mode 100644 index 0000000..f8ab6ec --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Blue/default2.sqf @@ -0,0 +1,75 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ + +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//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 = [ + ["Flag_AAF_F",[0,0,0],0,[false,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; // list of objects to spawn as landscape +_missionLootBoxes = [ + ["Box_NATO_Wps_F",[3,-3,0],_crateLoot,[4,10,2,5,5,1]], // Standard loot crate with standard loadout + ["Land_PaperBox_C_EPOCH",[-4,-3,0],_crateLoot,[0,0,0,10,10,3]], // No Weapons, Magazines, or optics; 10 each construction supplies and food/drink items, 3 backpacks + ["Land_CargoBox_V1_F",[3,4,0],_crateLoot,[0,10,2,5,5,1]] + ]; // Parameters are "Box Item Code", array defining the loot to be spawned, and position. + // blck_lootCountsBlue= [4,12,3,6,6,1]; +_missionLootVehicles = [ + ["I_G_Offroad_01_armed_F",[-8,8,0],_crateLoot,[0,10,2,5,5,1]], + ["I_G_Offroad_01_armed_F",[8,17,0],_crateLoot,[0,10,2,5,5,1]] + ]; // Parameters are "vehiclel type", offset relative to mission center, loot array, items to load from each category of the loot array. + // ["B_HMG_01_high_F"/*,"B_GMG_01_high_F","O_static_AT_F"*/]; +_missionEmplacedWeapons = [["B_HMG_01_high_F",[-10,-15,0]],["B_GMG_01_high_F",[10,12,0]],["O_static_AT_F",[-10,10,0]]]; // can be used to define the type and precise placement of static weapons [["wep",[1,2,3]] /*loc 1*/, [2,3,4] /*loc 2*/]; if blank random locations will be used +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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 = "allUnitsKilled"; // Options are "allUnitsKilled", "playerNear", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; diff --git a/@ExileServer/addons/custom_server/Missions/Blue/medicalCamp.sqf b/@ExileServer/addons/custom_server/Missions/Blue/medicalCamp.sqf new file mode 100644 index 0000000..a324975 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Blue/medicalCamp.sqf @@ -0,0 +1,65 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//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 +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; + diff --git a/@ExileServer/addons/custom_server/Missions/Blue/redCamp.sqf b/@ExileServer/addons/custom_server/Missions/Blue/redCamp.sqf new file mode 100644 index 0000000..8e3699f --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Blue/redCamp.sqf @@ -0,0 +1,92 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//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 +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; + + diff --git a/@ExileServer/addons/custom_server/Missions/Blue/resupplyCamp.sqf b/@ExileServer/addons/custom_server/Missions/Blue/resupplyCamp.sqf new file mode 100644 index 0000000..e8b1094 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Blue/resupplyCamp.sqf @@ -0,0 +1,56 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//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 +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; diff --git a/@ExileServer/addons/custom_server/Missions/GMS_missionLists.sqf b/@ExileServer/addons/custom_server/Missions/GMS_missionLists.sqf new file mode 100644 index 0000000..6948db9 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/GMS_missionLists.sqf @@ -0,0 +1,36 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-14-17 + + -------------------------- + 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/ +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +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"]; + diff --git a/@ExileServer/addons/custom_server/Missions/Green/default.sqf b/@ExileServer/addons/custom_server/Missions/Green/default.sqf new file mode 100644 index 0000000..d39247c --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Green/default.sqf @@ -0,0 +1,46 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//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 +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; diff --git a/@ExileServer/addons/custom_server/Missions/Green/default2.sqf b/@ExileServer/addons/custom_server/Missions/Green/default2.sqf new file mode 100644 index 0000000..ec88b03 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Green/default2.sqf @@ -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"; diff --git a/@ExileServer/addons/custom_server/Missions/Green/medicalCamp.sqf b/@ExileServer/addons/custom_server/Missions/Green/medicalCamp.sqf new file mode 100644 index 0000000..3649196 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Green/medicalCamp.sqf @@ -0,0 +1,77 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//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 +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; + diff --git a/@ExileServer/addons/custom_server/Missions/Green/redCamp.sqf b/@ExileServer/addons/custom_server/Missions/Green/redCamp.sqf new file mode 100644 index 0000000..c10c784 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Green/redCamp.sqf @@ -0,0 +1,91 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//diag_log "[blckeagls] Spawning Green Mission with template = redCamp"; +_crateLoot = blck_BoxLoot_Green; +_lootCounts = blck_lootCountsGreen; +_startMsg = "A temporary enemy 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 +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; + + diff --git a/@ExileServer/addons/custom_server/Missions/Green/resupplyCamp.sqf b/@ExileServer/addons/custom_server/Missions/Green/resupplyCamp.sqf new file mode 100644 index 0000000..997d88e --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Green/resupplyCamp.sqf @@ -0,0 +1,55 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//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 +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; diff --git a/@ExileServer/addons/custom_server/Missions/Orange/default.sqf b/@ExileServer/addons/custom_server/Missions/Orange/default.sqf new file mode 100644 index 0000000..4e4f6e5 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Orange/default.sqf @@ -0,0 +1,46 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; +//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 +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; diff --git a/@ExileServer/addons/custom_server/Missions/Orange/default2.sqf b/@ExileServer/addons/custom_server/Missions/Orange/default2.sqf new file mode 100644 index 0000000..a78ac74 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Orange/default2.sqf @@ -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"; diff --git a/@ExileServer/addons/custom_server/Missions/Orange/medicalCamp.sqf b/@ExileServer/addons/custom_server/Missions/Orange/medicalCamp.sqf new file mode 100644 index 0000000..3091446 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Orange/medicalCamp.sqf @@ -0,0 +1,65 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +////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 +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines;_minNoAI = blck_MinAI_Orange; +_maxNoAI = blck_MaxAI_Orange; +_noAIGroups = blck_AIGrps_Orange; +_noVehiclePatrols = blck_SpawnVeh_Orange; +_noEmplacedWeapons = blck_SpawnEmplaced_Orange; +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +////_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; + diff --git a/@ExileServer/addons/custom_server/Missions/Orange/redCamp.sqf b/@ExileServer/addons/custom_server/Missions/Orange/redCamp.sqf new file mode 100644 index 0000000..608d734 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Orange/redCamp.sqf @@ -0,0 +1,91 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +////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 +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +////_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; + + diff --git a/@ExileServer/addons/custom_server/Missions/Orange/resupplyCamp.sqf b/@ExileServer/addons/custom_server/Missions/Orange/resupplyCamp.sqf new file mode 100644 index 0000000..9e880b2 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Orange/resupplyCamp.sqf @@ -0,0 +1,67 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//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 +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; diff --git a/@ExileServer/addons/custom_server/Missions/Red/default.sqf b/@ExileServer/addons/custom_server/Missions/Red/default.sqf new file mode 100644 index 0000000..51b74b4 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Red/default.sqf @@ -0,0 +1,46 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//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; +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; diff --git a/@ExileServer/addons/custom_server/Missions/Red/default2.sqf b/@ExileServer/addons/custom_server/Missions/Red/default2.sqf new file mode 100644 index 0000000..20ba2b8 --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Red/default2.sqf @@ -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"; + + diff --git a/@ExileServer/addons/custom_server/Missions/Red/medicalCamp.sqf b/@ExileServer/addons/custom_server/Missions/Red/medicalCamp.sqf new file mode 100644 index 0000000..fcc8dff --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Red/medicalCamp.sqf @@ -0,0 +1,64 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//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; +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; + diff --git a/@ExileServer/addons/custom_server/Missions/Red/redCamp.sqf b/@ExileServer/addons/custom_server/Missions/Red/redCamp.sqf new file mode 100644 index 0000000..1391b0e --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Red/redCamp.sqf @@ -0,0 +1,103 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//diag_log "[blckeagls] Spawning Red Mission with template = redCamp"; + +_crateLoot = blck_BoxLoot_Red; +_lootCounts = blck_lootCountsRed; +_startMsg = "A temporary enemy camp has been spotted. Check the Red marker on your map for its location"; +_endMsg = "The temporary enemy 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; +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; + + diff --git a/@ExileServer/addons/custom_server/Missions/Red/resupplyCamp.sqf b/@ExileServer/addons/custom_server/Missions/Red/resupplyCamp.sqf new file mode 100644 index 0000000..5c089ea --- /dev/null +++ b/@ExileServer/addons/custom_server/Missions/Red/resupplyCamp.sqf @@ -0,0 +1,55 @@ +/* + Mission Template by Ghostrider-DbD- + Mission Compositions by Bill prepared for DBD Clan + Copyright 2016 + Last modified 3/20/17 + + -------------------------- + 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/ +*/ +private ["_markerLabel","_endMsg","_startMsg","_lootCounts","_crateLoot","_markerMissionName","_missionLandscapeMode","_missionLandscape", + "_missionLootBoxes","_missionLootVehicles","_missionEmplacedWeapons","_minNoAI","_maxNoAI","_noAIGroups","_noVehiclePatrols","_noEmplacedWeapons", + "_uniforms","_headgear","_chanceReinforcements","_noPara","_helipatrol","_endCondition","_markerColor","_markerType","_useMines"]; + +//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; +// Change _useMines to true/false below to enable mission-specific settings. +_useMines = blck_useMines; +_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", "allKilledOrPlayerNear" +//_timeOut = -1; +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; diff --git a/@ExileServer/addons/custom_server/SLS/SLS_defines_epoch.sqf b/@ExileServer/addons/custom_server/SLS/SLS_defines_epoch.sqf new file mode 100644 index 0000000..e3d2ba8 --- /dev/null +++ b/@ExileServer/addons/custom_server/SLS/SLS_defines_epoch.sqf @@ -0,0 +1,207 @@ +/* + Define loot crate configurations for Epoch. + + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-14-17 + + -------------------------- + 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/ +*/ +diag_log "Loading Static Loot Container Spawning System for Epoch"; +_lootBoxes = +[ + /*[ + + "altis", // map name + "Camp1", // a name for this region for logging and debuging purpses and to help identify the definition down the road when changing things on the server + 2, // number of locations specified from the list below at which to spawn crates + [ // format here is [[position x, y, z], direction, exact / loose placement (true/false), smoke near crate (true/false] + [[23555.9,18422.7,0.730287],0,true, false], // loadout (0-4), false=random placement near position, true = show smoke at position + [[23542.1,18435.9,0.00143886],0,true, false], + [[23514,18452.5,0.00143886],0,true, false], + [[23534.2,18418.8,0.00143886],0,false, true] + ] + + ], + [ "altis", + "refuel", + 2, + [ // format here is [[position x, y, z], direction, exact / loose placement (true/false), smoke near crate (true/false] + [[22963.8,17041.3,0.00143886],0,false, false], + [[22942.8,17038,0.00143886],0,false, false], + [[22948.7,17054,0.00143886],0,false, false] + ] // No comma after this last one + ] // No comma after this last one + */ +]; + +private["_loot_uniforms","_loot_pistols","_loot_rifles","_loot_snipers","_loot_LMG","_loot_silencers"]; +// Edit these to your liking +//Uniforms +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_uniforms = ["U_O_CombatUniform_ocamo", "U_O_GhillieSuit", "U_O_PilotCoveralls", "U_O_Wetsuit", "U_OG_Guerilla1_1", "U_OG_Guerilla2_1", "U_OG_Guerilla2_3", "U_OG_Guerilla3_1", "U_OG_Guerilla3_2", "U_OG_leader", "U_C_Poloshirt_stripped", "U_C_Poloshirt_blue", + "U_C_Poloshirt_burgundy", "U_C_Poloshirt_tricolour", "U_C_Poloshirt_salmon", "U_C_Poloshirt_redwhite", "U_C_Poor_1", "U_C_WorkerCoveralls", "U_C_Journalist", "U_C_Scientist", "U_OrestesBody", "U_Wetsuit_uniform", "U_Wetsuit_White", "U_Wetsuit_Blue", + "U_Wetsuit_Purp", "U_Wetsuit_Camo", "U_CamoRed_uniform", "U_CamoBrn_uniform", "U_CamoBlue_uniform", "U_Camo_uniform", "U_ghillie1_uniform", "U_ghillie2_uniform", "U_ghillie3_uniform","U_B_FullGhillie_ard","U_I_FullGhillie_ard","U_O_FullGhillie_ard", + "Full Ghillie Suit Semi-Arid:","U_B_FullGhillie_sard","U_O_FullGhillie_sard","U_I_FullGhillie_sard","Full Ghillie Suit Lush","U_B_FullGhillie_lsh","U_O_FullGhillie_lsh","U_I_FullGhillie_lsh"]; + +//Weapons +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +_loot_pistols = blck_Pistols; + +_loot_rifles = blck_RifleAsault + blck_apexWeapons; +_loot_snipers = blck_RifleSniper + blck_DLC_Sniper; +_loot_LMG = blck_RifleLMG + blck_DLC_MMG; +_loot_magazines = [ // Ignored 5.56, SMG and pistol ammo as most players seem to have little interest in it when given the choice to use higher caliber amo. + "100Rnd_65x39_caseless_mag", + "100Rnd_65x39_caseless_mag_Tracer", + "10Rnd_127x54_Mag", + "10Rnd_338_Mag", + "10Rnd_762x54_Mag", + "10Rnd_93x64_DMR_05_Mag", + "130Rnd_338_Mag", // SPMG + "150Rnd_762x54_Box", + "150Rnd_762x54_Box_Tracer", + "150Rnd_93x64_Mag", // NAVID + "16Rnd_9x21_Mag", + "200Rnd_65x39_cased_Box", + "200Rnd_65x39_cased_Box_Tracer", + "20Rnd_762x51_Mag", + "30Rnd_65x39_caseless_green", + "30Rnd_65x39_caseless_green_mag_Tracer", + "30Rnd_65x39_caseless_mag", + "30Rnd_65x39_caseless_mag_Tracer", + // Apex + "30Rnd_580x42_Mag_F", + "30Rnd_580x42_Mag_Tracer_F", + "100Rnd_580x42_Mag_F", + "100Rnd_580x42_Mag_Tracer_F", + "20Rnd_650x39_Cased_Mag_F", + "10Rnd_50BW_Mag_F", + "150Rnd_556x45_Drum_Mag_F", + "150Rnd_556x45_Drum_Mag_Tracer_F", + "30Rnd_762x39_Mag_F", + "30Rnd_762x39_Mag_Green_F", + "30Rnd_762x39_Mag_Tracer_F", + "30Rnd_762x39_Mag_Tracer_Green_F", + "30Rnd_545x39_Mag_F", + "30Rnd_545x39_Mag_Green_F", + "30Rnd_545x39_Mag_Tracer_F", + "30Rnd_545x39_Mag_Tracer_Green_F", + "200Rnd_556x45_Box_F", + "200Rnd_556x45_Box_Red_F", + "200Rnd_556x45_Box_Tracer_F", + "200Rnd_556x45_Box_Tracer_Red_F", + "10Rnd_9x21_Mag" + ]; + +//Silencers +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_silencers = ["muzzle_sr25S_epoch","muzzle_snds_H","muzzle_snds_M","muzzle_snds_L","muzzle_snds_B","muzzle_snds_H_MG","muzzle_snds_acp","muzzle_snds_93mmg","muzzle_snds_93mmg_tan", + "muzzle_snds_338_black","muzzle_snds_338_greenmuzzle_snds_338_sand"]; + +private["_loot_optics","_loot_backpacks","_loot_vests","_loot_headgear","_loot_food","_loot_misc","_loot_build"]; +//Optics +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_optics = ["optic_NVS","optic_tws","optic_tws_mg","optic_SOS","optic_LRPS","optic_DMS","optic_Arco","optic_Hamr","Elcan_epoch","Elcan_reflex_epoch","optic_MRCO","optic_Holosight", + "optic_Holosight_smg","optic_Aco","optic_ACO_grn","optic_Aco_smg","optic_ACO_grn_smg","optic_Yorris","optic_MRD","optic_AMS","optic_AMS_khk","optic_AMS_snd", + "optic_KHS_blk","optic_KHS_hex","optic_KHS_old","optic_KHS_tan"]; + +//Backpacks +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_backpacks = blck_backpacks; + +//Vests +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_vests = blck_vests; + +//Head Gear +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_headgear = ["H_1_EPOCH","H_2_EPOCH","H_3_EPOCH","H_4_EPOCH","H_5_EPOCH","H_6_EPOCH","H_7_EPOCH","H_8_EPOCH","H_9_EPOCH","H_10_EPOCH","H_11_EPOCH","H_12_EPOCH","H_13_EPOCH","H_14_EPOCH","H_15_EPOCH","H_16_EPOCH","H_17_EPOCH","H_18_EPOCH","H_19_EPOCH","H_20_EPOCH","H_21_EPOCH","H_22_EPOCH","H_23_EPOCH","H_24_EPOCH","H_25_EPOCH","H_26_EPOCH","H_27_EPOCH","H_28_EPOCH","H_29_EPOCH","H_30_EPOCH","H_31_EPOCH","H_32_EPOCH","H_33_EPOCH","H_34_EPOCH","H_35_EPOCH","H_36_EPOCH","H_37_EPOCH","H_38_EPOCH","H_39_EPOCH","H_40_EPOCH","H_41_EPOCH","H_42_EPOCH","H_43_EPOCH","H_44_EPOCH","H_45_EPOCH","H_46_EPOCH","H_47_EPOCH","H_48_EPOCH","H_49_EPOCH","H_50_EPOCH","H_51_EPOCH","H_52_EPOCH","H_53_EPOCH","H_54_EPOCH","H_55_EPOCH","H_56_EPOCH","H_57_EPOCH","H_58_EPOCH","H_59_EPOCH","H_60_EPOCH","H_61_EPOCH","H_62_EPOCH","H_63_EPOCH","H_64_EPOCH","H_65_EPOCH","H_66_EPOCH","H_67_EPOCH","H_68_EPOCH","H_69_EPOCH","H_70_EPOCH","H_71_EPOCH","H_72_EPOCH","H_73_EPOCH","H_74_EPOCH","H_75_EPOCH","H_76_EPOCH","H_77_EPOCH","H_78_EPOCH","H_79_EPOCH","H_80_EPOCH","H_81_EPOCH","H_82_EPOCH","H_83_EPOCH","H_84_EPOCH","H_85_EPOCH","H_86_EPOCH","H_87_EPOCH","H_88_EPOCH","H_89_EPOCH","H_90_EPOCH","H_91_EPOCH","H_92_EPOCH","H_93_EPOCH","H_94_EPOCH","H_95_EPOCH","H_96_EPOCH","H_97_EPOCH","H_98_EPOCH","H_99_EPOCH","H_100_EPOCH","H_101_EPOCH","H_102_EPOCH","H_103_EPOCH","H_104_EPOCH"]; + +//Food +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_food = blck_ConsumableItems; + +// Tools +//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +_loot_tools = [["Hatchet",2],["MeleeSledge",2],["ChainSaw",1]]; + +//Misc +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_Misc = ["PaintCanClear","PaintCanBlk","PaintCanBlu","PaintCanBrn","PaintCanGrn","PaintCanOra","PaintCanPur","PaintCanRed","PaintCanTeal","PaintCanYel","ItemDocument","ItemMixOil","emptyjar_epoch","FoodBioMeat","ItemSodaOrangeSherbet","ItemSodaPurple","ItemSodaMocha","ItemSodaBurst","ItemSodaRbull","sardines_epoch","meatballs_epoch","scam_epoch","sweetcorn_epoch","Towelette","HeatPack","ColdPack","VehicleRepair","VehicleRepairLg","CircuitParts","ItemCoolerE","ItemScraps","ItemScraps","lighter_epoch","EnergyPack","EnergyPackLg"]; + +//Construction +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_build = blck_epochBuildingSupplies; + +// Explosives +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_explosives = [["HandGrenade",3],["MiniGrenade",3],["SatchelCharge_Remote_Mag",3],["DemoCharge_Remote_Mag",3],["ClaymoreDirectionalMine_Remote_Mag",3]]; +_loot_launchers = ["launch_NLAW_F","launch_RPG32_F","launch_B_Titan_F","launch_Titan_short_F"]; + +// Loot Configuration 1: Heavy Weapons and explosives +_box1_Pistols = 3; +_box1_Rifles = 5; +_box1_LMG = 4; +_box1_Snipers = 3; +_box1_Mags = [2,6]; +_box1_Optics = 6; +_box1_Silencers = 5; +_box1_Explosives = 6; +_box1_FoodDrink = 6; +_box1_Misc = 3; +_box1_Backpacks = 3; +_box1_BuildingSupplies = 3; +_box1_Tools = 0; +_box1_launchers = 0; +// Note that the bonus items are listed in a nexted array within the _box1_cbonus array. It was more difficult to ocde otherwise and would have needed indexing to make it work. +_box1_bonus_items = [["SatchelCharge_Remote_Mag",3],["DemoCharge_Remote_Mag",3],["ClaymoreDirectionalMine_Remote_Mag",3]]; +_box1_bonus = 1; + +// Loot Configuration 2: Sniper Weapons and sniper scopes +_box2_Pistols = 3; +_box2_Rifles = 5; +_box2_LMG = 4; +_box2_Snipers = 3; +_box2_Mags = [2,6]; // [number of times to select a mag, min # of that mag to add, max # of that mag to add] +_box2_Optics = 6; +_box2_Silencers = 5; +_box2_Explosives = 6; +_box2_FoodDrink = 6; +_box2_Misc = 3; +_box2_Backpacks = 3; +_box2_BuildingSupplies = 3; +_box2_Tools = 0; +_box2_Misc = 0; +_box2_launchers = 0; +_box2_bonus_items = [["NVG_EPOCH",2],["ItemGPS",1],["Rangefinder",1],["Hatchet",2],["MeleeSledge",2],["ChainSaw",1],["water_epoch",10]]; +_box2_bonus = 1; + +// Loot Configuration 3: building materials and tools +_box3_Pistols = 2; +_box3_Rifles = 2; +_box3_LMG = 1; +_box3_Snipers = 1; +_box3_Mags = [4,2,6]; +_box3_Optics = 1; +_box3_Silencers = 1; +_box3_Explosives = 2; +_box3_FoodDrink = 3; +_box3_Misc = 3; +_box3_Backpacks = 1; +_box3_BuildingSupplies = [8,15]; // [Number of items, min for item, max for item] +_box3_Tools = 4; +_box3_Misc = 6; +_box3_launchers = 0; +_box3_bonus_items = [["MultiGun",3],["EnergyPack",5],["EnergyPackLg",3],["ItemLockBox",2],["jerrycan_epoch",2],["ItemGoldBar10oz",2],["ItemSilverBar",4],["ItemKiloHemp",4],["Hatchet",2],["MeleeSledge",2],["ChainSaw",1],["water_epoch",10]]; +_box3_bonus = 1; + +//////////////////////////// +// End of configurations diff --git a/@ExileServer/addons/custom_server/SLS/SLS_defines_exile.sqf b/@ExileServer/addons/custom_server/SLS/SLS_defines_exile.sqf new file mode 100644 index 0000000..65d365d --- /dev/null +++ b/@ExileServer/addons/custom_server/SLS/SLS_defines_exile.sqf @@ -0,0 +1,312 @@ +/* + Define constants for SLS for Exile + + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-14-17 + + -------------------------- + 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/ +*/ + +diag_log "[blckeagls] SLS : Loading Static Loot Container Spawning System for Exile"; + +_lootBoxes = +[ + /*[ + + "altis", // map name + "Camp1", // a name for this region for logging and debuging purpses and to help identify the definition down the road when changing things on the server + 2, // number of locations specified from the list below at which to spawn crates + [ // format here is [[position x, y, z], direction, exact / loose placement (true/false), smoke near crate (true/false] + [[23555.9,18422.7,0.730287],0,true, false], // loadout (0-4), false=random placement near position, true = show smoke at position + [[23542.1,18435.9,0.00143886],0,true, false], + [[23514,18452.5,0.00143886],0,true, false], + [[23534.2,18418.8,0.00143886],0,false, true] + ] + + ], + [ "altis", + "refuel", + 2, + [ // format here is [[position x, y, z], direction, exact / loose placement (true/false), smoke near crate (true/false] + [[22963.8,17041.3,0.00143886],0,false, false], + [[22942.8,17038,0.00143886],0,false, false], + [[22948.7,17054,0.00143886],0,false, false] + ] // No comma after this last one + ] // No comma after this last one + */ +]; + +private["_loot_uniforms","_loot_pistols","_loot_rifles","_loot_snipers","_loot_LMG","_loot_silencers"]; +// Edit these to your liking +//Uniforms +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_uniforms = ["U_O_CombatUniform_ocamo", "U_O_GhillieSuit", "U_O_PilotCoveralls", "U_O_Wetsuit", "U_OG_Guerilla1_1", "U_OG_Guerilla2_1", "U_OG_Guerilla2_3", "U_OG_Guerilla3_1", "U_OG_Guerilla3_2", "U_OG_leader", "U_C_Poloshirt_stripped", "U_C_Poloshirt_blue", + "U_C_Poloshirt_burgundy", "U_C_Poloshirt_tricolour", "U_C_Poloshirt_salmon", "U_C_Poloshirt_redwhite", "U_C_Poor_1", "U_C_WorkerCoveralls", "U_C_Journalist", "U_C_Scientist", "U_OrestesBody", "U_Wetsuit_uniform", "U_Wetsuit_White", "U_Wetsuit_Blue", + "U_Wetsuit_Purp", "U_Wetsuit_Camo", "U_CamoRed_uniform", "U_CamoBrn_uniform", "U_CamoBlue_uniform", "U_Camo_uniform", "U_ghillie1_uniform", "U_ghillie2_uniform", "U_ghillie3_uniform","U_B_FullGhillie_ard","U_I_FullGhillie_ard","U_O_FullGhillie_ard", + "Full Ghillie Suit Semi-Arid:","U_B_FullGhillie_sard","U_O_FullGhillie_sard","U_I_FullGhillie_sard","Full Ghillie Suit Lush","U_B_FullGhillie_lsh","U_O_FullGhillie_lsh","U_I_FullGhillie_lsh"]; + +//Weapons +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +_loot_pistols = blck_Pistols; +_loot_rifles = blck_RifleAsault + blck_apexWeapons; +_loot_snipers = blck_RifleSniper + blck_DLC_Sniper; +_loot_LMG = blck_RifleLMG + blck_DLC_MMG; +_loot_magazines = [ // Ignored 5.56, SMG and pistol ammo as most players seem to have little interest in it when given the choice to use higher caliber amo. + "100Rnd_65x39_caseless_mag", + "100Rnd_65x39_caseless_mag_Tracer", + "10Rnd_127x54_Mag", + "10Rnd_338_Mag", + "10Rnd_762x54_Mag", + "10Rnd_93x64_DMR_05_Mag", + "130Rnd_338_Mag", // SPMG + "150Rnd_762x54_Box", + "150Rnd_762x54_Box_Tracer", + "150Rnd_93x64_Mag", // NAVID + "16Rnd_9x21_Mag", + "200Rnd_65x39_cased_Box", + "200Rnd_65x39_cased_Box_Tracer", + "20Rnd_762x51_Mag", + "30Rnd_65x39_caseless_green", + "30Rnd_65x39_caseless_green_mag_Tracer", + "30Rnd_65x39_caseless_mag", + "30Rnd_65x39_caseless_mag_Tracer", + // Apex + "30Rnd_580x42_Mag_F", + "30Rnd_580x42_Mag_Tracer_F", + "100Rnd_580x42_Mag_F", + "100Rnd_580x42_Mag_Tracer_F", + "20Rnd_650x39_Cased_Mag_F", + "10Rnd_50BW_Mag_F", + "150Rnd_556x45_Drum_Mag_F", + "150Rnd_556x45_Drum_Mag_Tracer_F", + "30Rnd_762x39_Mag_F", + "30Rnd_762x39_Mag_Green_F", + "30Rnd_762x39_Mag_Tracer_F", + "30Rnd_762x39_Mag_Tracer_Green_F", + "30Rnd_545x39_Mag_F", + "30Rnd_545x39_Mag_Green_F", + "30Rnd_545x39_Mag_Tracer_F", + "30Rnd_545x39_Mag_Tracer_Green_F", + "200Rnd_556x45_Box_F", + "200Rnd_556x45_Box_Red_F", + "200Rnd_556x45_Box_Tracer_F", + "200Rnd_556x45_Box_Tracer_Red_F", + "10Rnd_9x21_Mag" + ]; + +//Silencers +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_silencers = ["muzzle_sr25S_epoch","muzzle_snds_H","muzzle_snds_M","muzzle_snds_L","muzzle_snds_B","muzzle_snds_H_MG","muzzle_snds_acp","muzzle_snds_93mmg","muzzle_snds_93mmg_tan", + "muzzle_snds_338_black","muzzle_snds_338_greenmuzzle_snds_338_sand"]; + +private["_loot_optics","_loot_backpacks","_loot_vests","_loot_headgear","_loot_food","_loot_misc","_loot_build"]; +//Optics +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_optics = ["optic_NVS","optic_tws","optic_tws_mg","optic_SOS","optic_LRPS","optic_DMS","optic_Arco","optic_Hamr","Elcan_epoch","Elcan_reflex_epoch","optic_MRCO","optic_Holosight", + "optic_Holosight_smg","optic_Aco","optic_ACO_grn","optic_Aco_smg","optic_ACO_grn_smg","optic_Yorris","optic_MRD","optic_AMS","optic_AMS_khk","optic_AMS_snd", + "optic_KHS_blk","optic_KHS_hex","optic_KHS_old","optic_KHS_tan"]; + +//Backpacks +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_backpacks = blck_backpacks; + +//Vests +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_vests = blck_vests; + +//Head Gear +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_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", + "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" + ]; + +//Food +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_food = blck_ConsumableItems; + +//Misc +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_Misc = ["Exile_Item_InstaDoc","Exile_Item_Matches","Exile_Item_CookingPot","Exile_Item_CanOpener"]; + +//Construction +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_build = ["Exile_Item_Rope","Exile_Item_DuctTape","Exile_Item_ExtensionCord","Exile_Item_FuelCanisterEmpty", + "Exile_Item_JunkMetal","Exile_Item_LightBulb","Exile_Item_CamoTentKit","Exile_Item_WorkBenchKit", + "Exile_Item_MetalBoard","Exile_Item_MetalPole"]; +_loot_tools = ["Exile_Item_Handsaw","Exile_Item_Pliers","Exile_Item_Grinder","Exile_Item_Foolbox"]; + +// Explosives +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +_loot_explosives = [["HandGrenade",3],["MiniGrenade",3],["SatchelCharge_Remote_Mag",3],["DemoCharge_Remote_Mag",3],["ClaymoreDirectionalMine_Remote_Mag",3]]; +_loot_launchers = ["launch_NLAW_F","launch_RPG32_F","launch_B_Titan_F","launch_Titan_short_F"]; + +// Loot Configuration 1: Heavy Weapons and explosives +_box1_Pistols = 3; +_box1_Rifles = 5; +_box1_LMG = 4; +_box1_Snipers = 3; +_box1_Mags = [2,6]; +_box1_Optics = 6; +_box1_Silencers = 5; +_box1_Explosives = 6; +_box1_FoodDrink = 6; +_box1_Misc = 3; +_box1_Backpacks = 3; +_box1_BuildingSupplies = 3; +_box1_Tools = 0; +_box1_launchers = 0; +// Note that the bonus items are listed in a nexted array within the _box1_cbonus array. It was more difficult to ocde otherwise and would have needed indexing to make it work. +_box1_bonus_items = [["ItemGPS",1],["Rangefinder",1],["SatchelCharge_Remote_Mag",3],["DemoCharge_Remote_Mag",3],["ClaymoreDirectionalMine_Remote_Mag",3]]; +_box1_bonus = 1; + +// Loot Configuration 2: Sniper Weapons and sniper scopes +_box2_Pistols = 3; +_box2_Rifles = 5; +_box2_LMG = 4; +_box2_Snipers = 3; +_box2_Mags = [2,6]; // [number of times to select a mag, min # of that mag to add, max # of that mag to add] +_box2_Optics = 6; +_box2_Silencers = 5; +_box2_Explosives = 6; +_box2_FoodDrink = 6; +_box2_Misc = 3; +_box2_Backpacks = 3; +_box2_BuildingSupplies = 3; +_box2_Tools = 0; +_box2_Misc = 0; +_box2_launchers = 0; +_box2_bonus_items = [["ItemGPS",2],["Rangefinder",2],["SatchelCharge_Remote_Mag",1],["DemoCharge_Remote_Mag",10]]; +_box2_bonus = 1; + +// Loot Configuration 3: building materials and tools +_box3_Pistols = 2; +_box3_Rifles = 2; +_box3_LMG = 1; +_box3_Snipers = 1; +_box3_Mags = [4,2,6]; +_box3_Optics = 1; +_box3_Silencers = 1; +_box3_Explosives = 2; +_box3_FoodDrink = 3; +_box3_Misc = 3; +_box3_Backpacks = 1; +_box3_BuildingSupplies = [8,15]; // [Number of items, min for item, max for item] +_box3_Tools = 4; +_box3_Misc = 6; +_box3_launchers = 0; +_box3_bonus_items = [["Exile_Item_Matches",2],[ "Exile_Item_CookingPot",2],["Exile_Item_CanOpener",3],["Exile_Item_Handsaw",2],["Exile_Item_Pliers",2],["Exile_Item_Grinder",1],["Exile_Item_Foolbox",1]]; +_box3_bonus = 1; + + +//////////////////////////// +// End of configurations diff --git a/@ExileServer/addons/custom_server/SLS/SLS_functions.sqf b/@ExileServer/addons/custom_server/SLS/SLS_functions.sqf new file mode 100644 index 0000000..a2a0b98 --- /dev/null +++ b/@ExileServer/addons/custom_server/SLS/SLS_functions.sqf @@ -0,0 +1,133 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-14-17 + + -------------------------- + 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/ +*/ + +//Based on the Random Loot Crates addon by Darth_Rogue & Chisel (tdwhite) +// Re-written by Ghostrider-DBD- to add features and clean up code + +// Do not touch anything below this line. +/// ******************************************************************************************************************************************************************************************************************************** +_box1_loadout = [[_loot_pistols,_box1_Pistols],[_loot_rifles,_box1_Rifles],[_loot_LMG,_box1_LMG],[_loot_snipers,_box1_Snipers],[_loot_magazines,_box1_Mags],[_loot_optics,_box1_Optics],[_loot_silencers,_box1_Silencers], + [_loot_explosives,_box1_Explosives],[_loot_food,_box1_FoodDrink],[_loot_Misc,_box1_Misc],[_loot_backpacks,_box1_Backpacks],[_loot_build,_box1_BuildingSupplies],[_loot_tools,_box1_Tools],[_loot_Misc,_box1_Misc], + [_loot_launchers,_box1_launchers],[_box1_bonus_items,_box1_bonus]]; +_box2_loadout = [[_loot_pistols,_box2_Pistols],[_loot_rifles,_box2_Rifles],[_loot_LMG,_box2_LMG],[_loot_snipers,_box2_Snipers],[_loot_magazines,_box2_Mags],[_loot_optics,_box2_Optics],[_loot_silencers,_box2_Silencers], + [_loot_explosives,_box2_Explosives],[_loot_food,_box2_FoodDrink],[_loot_Misc,_box2_Misc],[_loot_backpacks,_box2_Backpacks],[_loot_build,_box2_BuildingSupplies],[_loot_tools,_box2_Tools],[_loot_Misc,_box2_Misc], + [_loot_launchers,_box2_launchers],[_box2_bonus_items,_box2_bonus]]; +_box3_loadout = [[_loot_pistols,_box3_Pistols],[_loot_rifles,_box3_Rifles],[_loot_LMG,_box3_LMG],[_loot_snipers,_box3_Snipers],[_loot_magazines,_box3_Mags],[_loot_optics,_box3_Optics],[_loot_silencers,_box3_Silencers], + [_loot_explosives,_box3_Explosives],[_loot_food,_box3_FoodDrink],[_loot_Misc,_box3_Misc],[_loot_backpacks,_box3_Backpacks],[_loot_build,_box3_BuildingSupplies],[_loot_tools,_box3_Tools],[_loot_Misc,_box3_Misc], + [_loot_launchers,_box3_launchers],[_box3_bonus_items,_box3_bonus]]; + +// allows a visible cue to be spawned near the crate +_fn_smokeAtCrate = { // adapted from Ritchies heli crash addon + params["_pos"]; + private["_wreckChoices"]; + _wreckChoices = ["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]]; + [_pos,"random",8,_wreckChoices,false] call blck_fnc_smokeAtCrates; +}; + +// fill the crate with something +_fn_spawnCrate = { + private["_crate","_minDistfromCenter","_maxDistfromCenter","_clossestObj","_spawnOnWater","_spawnAtShore","_pos","_px","_py","_pz"]; + + params["_cratePos",["_randomLocation",true]]; + + // Spawn an Empty a Crate + // find a safe location for the crate + _minDistfromCenter = 0; + _maxDistfromCenter = 25; + _clossestObj = 10; + _spawnOnWater = 0; // water mode 0: cannot be in water , 1: can either be in water or not , 2: must be in water + _spawnAtShore = 0; // 0: does not have to be at a shore , 1: must be at a shore + + if (_randomLocation) then{ + _pos = [_cratePos,_minDistfromCenter,_maxDistfromCenter,_clossestObj,_spawnOnWater,20,_spawnAtShore] call BIS_fnc_findSafePos; // find a random loc + if (count _pos < 3) then {_pos pushback 0;}; + } + else + { + _pos = _cratePos; + //diag_log format["crate spawner using exact position %1",_pos]; + }; + if (blck_debugON) then + { + diag_log format["[blckeagls[ SLS :: _fn_spawnCrate %1 _randomLocation %2 crate position %3",_cratePos,_randomLocation,_pos]; + }; + private["_crateTypes","_selectedCrateType"]; + //_crateTypes = ["I_CargoNet_01_ammo_F","O_CargoNet_01_ammo_F","B_CargoNet_01_ammo_F","I_supplyCrate_F","Box_East_AmmoVeh_F","Box_NATO_AmmoVeh_F"]; + _selectedCrateType = selectRandom blck_crateTypes; + _crate = [[0,0,0],_selectedCrateType] call blck_fnc_spawnCrate; + _crate setPosATL _pos; + _crate setDir round(random(360)); + _crate +}; + +_fn_setupCrates = { + params["_location","_lootType","_randomPos","_useSmoke"]; + private["_crate"]; + + _crate = [_location,_randomPos] call _fn_SpawnCrate; + if (_lootType isEqualTo 0) then {_lootType = round(random(3));}; + switch(_lootType) do + { + // format here is [_arrayOfLoot, crateToLoad, magazinesToAddForEachWeaponLoaded] + case 1:{[_box1_loadout,_crate,3] call blck_fnc_loadLootItemsFromArray;}; + case 2:{[_box2_loadout, _crate,3] call blck_fnc_loadLootItemsFromArray;}; + case 3:{[_box3_loadout, _crate,3] call blck_fnc_loadLootItemsFromArray;}; + }; + if (_useSmoke) then {[getPos _crate] call _fn_smokeAtCrate;}; + if (blck_debugON) then + { + _blck_localMissionMarker = [format["SLS%1%2",_location select 0, _location select 1],(getPos _crate),"","","ColorGreen",["mil_box",[]]]; + diag_log format["[blckeagls] SLS:: spawning diagnostic marker at %1",getPos _crate]; + // params["_missionType","_markerPos","_markerLabel","_markerLabelType","_markerColor","_markerType"]; + [_blck_localMissionMarker] execVM "debug\spawnMarker.sqf"; + }; + _crate +}; + +private["_cratePosnList","_no","_ar","_x","_cratePos","_lootType","_randomPos","_useSmoke"]; + +{ + _map = _x select 0; + _name = _x select 1; + _no = _x select 2; + _ar = _x select 3; + private["_index"]; + _index = 1; + if (blck_debugON) then + { + //diag_log format["[blckeagls] SLS :: main function: Location name = %3 |count _ar = %1 | _index = %2", count _ar, _index, _name]; + //diag_log format["[blckeagls] SLS :: main function: count _ar = %1", _ar]; + }; + if (_map isEqualto (toLower(worldName))) then + { + _usedLocations = []; + for "_i" from 1 to _no do + { + // Pick a random element and be sure it has not already been selected_crateParams + _crateParams = selectRandom _ar; + while {_crateParams in _usedLocations} do {_crateParams = selectRandom _ar;}; // selectRandom is about 5X faster than BIS_fnc_selectRandom in my testing. + if (blck_debugON) then + { + diag_log format["[blckeagls] SLS:: spawning crate spawning crate at location name %1 with parameters of %2 --->>> %1",_name,_crateParams]; + }; + _usedLocations pushback _crateParams; + _crateParams params["_cratePos","_lootType","_randomPos","_useSmoke"]; // params is about 5x faster in my testing over _this select 0 where many local variables are defined by parsing _this. + [_cratePos,_lootType,_randomPos,_useSmoke] call _fn_setupCrates; + }; + }; +} forEach _lootBoxes; + +blck_SLSComplete = true; +diag_log "[blckeagls] SLS System: Static crates loaded successfully for Epoch!"; diff --git a/@ExileServer/addons/custom_server/SLS/SLS_init.sqf b/@ExileServer/addons/custom_server/SLS/SLS_init.sqf new file mode 100644 index 0000000..7b0c963 --- /dev/null +++ b/@ExileServer/addons/custom_server/SLS/SLS_init.sqf @@ -0,0 +1,24 @@ +/* + Static loot crate spawner + by Ghostrider-DbD- + For Arma 3 Exile and Epoch + Last Updated 11/12/16 + -------------------------- + 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/ +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +if not (isNull( configFile >> "CfgPatches" >> "a3_epoch_server" )) then +{ + [] execVM "\q\addons\custom_server\SLS\SLS_init_epoch.sqf"; +}; + +if not (isNull ( configFile >> "CfgPatches" >> "exile_server" ) ) then +{ + [] execVM "\q\addons\custom_server\SLS\SLS_init_exile.sqf"; +}; diff --git a/@ExileServer/addons/custom_server/SLS/SLS_init_epoch.sqf b/@ExileServer/addons/custom_server/SLS/SLS_init_epoch.sqf new file mode 100644 index 0000000..195c683 --- /dev/null +++ b/@ExileServer/addons/custom_server/SLS/SLS_init_epoch.sqf @@ -0,0 +1,19 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-14-17 + + -------------------------- + 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/ +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +// Assemble the final executable with Epoch crate configurations and SLS code + +#include "\q\addons\custom_server\SLS\SLS_defines_epoch.sqf"; +#include "\q\addons\custom_server\SLS\SLS_functions.sqf"; diff --git a/@ExileServer/addons/custom_server/SLS/SLS_init_exile.sqf b/@ExileServer/addons/custom_server/SLS/SLS_init_exile.sqf new file mode 100644 index 0000000..62bb8a9 --- /dev/null +++ b/@ExileServer/addons/custom_server/SLS/SLS_init_exile.sqf @@ -0,0 +1,19 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-14-17 + + -------------------------- + 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/ +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +// Assemble the final executable with Epoch crate configurations and SLS code + +#include "\q\addons\custom_server\SLS\SLS_defines_exile.sqf"; +#include "\q\addons\custom_server\SLS\SLS_functions.sqf"; diff --git a/@ExileServer/addons/custom_server/config.cpp b/@ExileServer/addons/custom_server/config.cpp new file mode 100644 index 0000000..8da0452 --- /dev/null +++ b/@ExileServer/addons/custom_server/config.cpp @@ -0,0 +1,33 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-14-17 + + -------------------------- + 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/ +*/ + +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; + }; + }; + }; +}; diff --git a/@ExileServer/addons/custom_server/init/blck_init.sqf b/@ExileServer/addons/custom_server/init/blck_init.sqf new file mode 100644 index 0000000..fa9ae97 --- /dev/null +++ b/@ExileServer/addons/custom_server/init/blck_init.sqf @@ -0,0 +1,154 @@ +/* + AI Mission for Epoch and Exile Mods to Arma 3 + Credist to blckeagls who wrote the initial mission script for A3 Epoch + To Narines for debugging that original version + To cynwncler for many helpful comments along the way + And mostly importantly, + To Vampire, KiloSwiss, blckeagls, theFUCHS, lazylink, Mark311 and Buttface (Face) who wrote the pionering mission and roaming AI systems upon which this one is based and who's code is used with modification in some parts of this addon. + + By Ghostrider-DbD + Last Modified 3-18-17 + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +if !(isNil "blck_Initialized") exitWith{}; +private["_blck_loadingStartTime"]; +_blck_loadingStartTime = diag_tickTime; +#include "\q\addons\custom_server\init\build.sqf"; +diag_log format["[blckeagls] Loading version %1 Build %2",_blck_versionDate,_blck_version]; + +#ifdef DBDserver +diag_log "[blckegls] Running DBD Clan Version"; +#endif + +call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\blck_variables.sqf"; +waitUntil {(isNil "blck_variablesLoaded") isEqualTo false;}; +waitUntil{blck_variablesLoaded}; +blck_variablesLoaded = nil; +//if !(blck_debugON) then {uiSleep 60;}; + +// 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; +diag_log format["[blckeagls] debug mode settings:blck_debugON = %1 blck_debugLevel = %2",blck_debugON,blck_debugLevel]; + +execVM "\q\addons\custom_server\Configs\blck_configs.sqf"; +waitUntil {(isNil "blck_configsLoaded") isEqualTo false;}; +waitUntil{blck_configsLoaded}; +blck_configsLoaded = nil; + +// spawn map addons to give the server time to position them before spawning in crates etc. +if (blck_spawnMapAddons) then +{ + call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\MapAddons\MapAddons_init.sqf"; +}else{ + diag_log "[blckegls] Map Addons disabled"; +}; +blck_spawnMapAddons = 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"; + +#ifdef DBDserver +//start the dynamic loot crate system +[] execVM "\q\addons\custom_server\DLS\DLS_init.sqf"; +waitUntil {(isNil "blck_DLSComplete") isEqualTo false;}; +waitUntil{blck_DLSComplete}; +blck_DLSComplete = nil; +#endif + +// Load any user-defined specifications or overrides +call compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Configs\blck_custom_config.sqf"; + +diag_log format["[blckeagls] version %1 Build %2 Loaded in %3 seconds",_blck_versionDate,_blck_version,diag_tickTime - _blck_loadingStartTime]; //,blck_modType]; +diag_log format["blckeagls] waiting for players to join ---- >>>>"]; + +if !(blck_debugON || (blck_debugLevel isEqualTo 0)) then +{ + waitUntil{{isPlayer _x}count playableUnits > 0}; + diag_log "[blckeagls] Player Connected, spawning missions"; +} else { + diag_log "[blckeagls] spawning Missions"; +}; + +if (blck_spawnStaticLootCrates) then +{ + // Start the static loot crate spawner + diag_log "[blckeagls] SLS:: -- >> Static Loot Spawner Started"; + [] execVM "\q\addons\custom_server\SLS\SLS_init.sqf"; + waitUntil {(isNil "blck_SLSComplete") isEqualTo false;}; + waitUntil{blck_SLSComplete}; + blck_SLSComplete = nil; + diag_log "[blckeagls] SLS:: -- >> Static Loot Spawner Done"; +}else{ + diag_log "[blckeagls] SLS:: -- >> Static Loot Spawner disabled"; +}; + +#ifdef DBDserver +diag_log "[blckegls] Running DBD Clan Version"; +#endif +#ifdef useDynamicSimulation +diag_log "[blckegls] dynamic simulation manager enabled"; +#else +diag_log "[blckegls] blckegls simulation manager enabled"; +#endif + +//Start the mission timers +if (blck_enableOrangeMissions > 0) then +{ + //[_missionListOrange,_pathOrange,"OrangeMarker","orange",blck_TMin_Orange,blck_TMax_Orange] spawn blck_fnc_missionTimer;//Starts major mission system (Orange Map Markers) + [_missionListOrange,_pathOrange,"OrangeMarker","orange",blck_TMin_Orange,blck_TMax_Orange,blck_enableOrangeMissions] call blck_fnc_addMissionToQue; +}; +if (blck_enableGreenMissions > 0) then +{ + //[_missionListGreen,_pathGreen,"GreenMarker","green",blck_TMin_Green,blck_TMax_Green] spawn blck_fnc_missionTimer;//Starts major mission system 2 (Green Map Markers) + [_missionListGreen,_pathGreen,"GreenMarker","green",blck_TMin_Green,blck_TMax_Green,blck_enableGreenMissions] call blck_fnc_addMissionToQue; +}; +if (blck_enableRedMissions > 0) 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) + [_missionListRed,_pathRed,"RedMarker","red",blck_TMin_Red,blck_TMax_Red,blck_enableRedMissions] call blck_fnc_addMissionToQue; +}; +if (blck_enableBlueMissions > 0) then +{ + //[_missionListBlue,_pathBlue,"BlueMarker","blue",blck_TMin_Blue,blck_TMax_Blue] spawn blck_fnc_missionTimer;//Starts minor mission system (Blue Map Markers) + [_missionListBlue,_pathBlue,"BlueMarker","blue",blck_TMin_Blue,blck_TMax_Blue,blck_enableBlueMissions] call blck_fnc_addMissionToQue; +}; +#ifdef DBDserver +if (blck_enableScoutsMissions > 0) then +{ + //[_missionListScouts,_pathScouts,"ScoutsMarker","red",blck_TMin_Scouts,blck_TMax_Scouts] spawn blck_fnc_missionTimer; + [_missionListScouts,_pathScouts,"ScoutsMarker","red",blck_TMin_Scouts,blck_TMax_Scouts,blck_enableScoutsMissions, false] call blck_fnc_addMissionToQue; +}; +if (blck_enableHunterMissions > 0) then +{ + //[_missionListHunters,_pathHunters,"HunterMarker","green",blck_TMin_Hunter,blck_TMax_Hunter] spawn blck_fnc_missionTimer; + // params["_missionList","_path","_marker","_difficulty","_tMin","_tMax","_noMissions"]; + [_missionListHunters,_pathHunters,"HunterMarker","green",blck_TMin_Hunter,blck_TMax_Hunter,blck_enableHunterMissions, false] call blck_fnc_addMissionToQue; +}; + +// Running new version of Crash sites. +if (blck_maxCrashSites > 0) then +{ + [] execVM "\q\addons\custom_server\Missions\HeliCrashs\Crashes2.sqf"; +}; +#endif + +// start the main thread for the mission system which monitors missions running and stuff to be cleaned up +[] spawn blck_fnc_mainThread; +diag_log "[blckeagls] Mission spawner started"; \ No newline at end of file diff --git a/@ExileServer/addons/custom_server/init/broadcastServerFPS.sqf b/@ExileServer/addons/custom_server/init/broadcastServerFPS.sqf new file mode 100644 index 0000000..97c60ec --- /dev/null +++ b/@ExileServer/addons/custom_server/init/broadcastServerFPS.sqf @@ -0,0 +1,14 @@ + + +private["_startTime"]; +_startTime = diag_tickTime; +[] spawn { + while {true} do + { + blck_serverFPS = diag_FPS; + publicVariable "blck_serverFPS"; + uiSleep 3; + }; +}; + + diff --git a/@ExileServer/addons/custom_server/init/build.sqf b/@ExileServer/addons/custom_server/init/build.sqf new file mode 100644 index 0000000..60c4cf1 --- /dev/null +++ b/@ExileServer/addons/custom_server/init/build.sqf @@ -0,0 +1,5 @@ +private ["_version","_versionDate"]; + +_blck_version = "6.59 Build 64"; +_blck_versionDate = "6-12-17 9:00 AM"; + diff --git a/@ExileServer/addons/custom_server/init/fn_init.sqf b/@ExileServer/addons/custom_server/init/fn_init.sqf new file mode 100644 index 0000000..c367bf9 --- /dev/null +++ b/@ExileServer/addons/custom_server/init/fn_init.sqf @@ -0,0 +1,23 @@ +/* + by Ghostrider-DbD- + Last Modified 3/14/17 + -------------------------- + 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/ +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +/////////////////////////////////////////////// +// 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"; diff --git a/@epochhive/addons/custom_server/Compiles/Functions/GMS_fnc_getTraderCitesExile.sqf b/@epochhive/addons/custom_server/Compiles/Functions/GMS_fnc_getTraderCitesExile.sqf index c72b766..c9c9529 100644 --- a/@epochhive/addons/custom_server/Compiles/Functions/GMS_fnc_getTraderCitesExile.sqf +++ b/@epochhive/addons/custom_server/Compiles/Functions/GMS_fnc_getTraderCitesExile.sqf @@ -13,6 +13,7 @@ private _traderCites = allMapMarkers; _tc = []; { + if (blck_debugON) then {diag_log format["[blckeagls] _fnc_getExileLocations :: -- >> Evaluating Markertype of %1", (getMarkerType _x)];}; if (getMarkerType _x isEqualTo "ExileTraderZone" && blck_blacklistTraderCities) then { blck_locationBlackList pushback [(getMarkerPos _x),1000]; if (blck_debugON) then {diag_log format["[blckeagls] _fnc_getExileLocations :: -- >> Added Exile Trader location at %1", (getMarkerPos _x)];}; diff --git a/@epochhive/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf b/@epochhive/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf index c86198a..316ef3e 100644 --- a/@epochhive/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf +++ b/@epochhive/addons/custom_server/Compiles/Missions/GMS_fnc_spawnEmplacedWeaponArray.sqf @@ -85,6 +85,7 @@ if (blck_debugLevel > 1) then // params["_vehType","_pos",["_clearInventory",true]]; _wep = [(_x select 0),[0,0,0],false] call blck_fnc_spawnVehicle; _empGroup setVariable["groupVehicle",_wep]; + _wep setVariable["vehicleGroup",_empGroup]; #ifdef blck_debugMode if (blck_debugLevel > 1) then { diff --git a/@epochhive/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionHeli.sqf b/@epochhive/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionHeli.sqf index 6b532e8..f3528ef 100644 --- a/@epochhive/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionHeli.sqf +++ b/@epochhive/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionHeli.sqf @@ -12,7 +12,7 @@ params["_coords","_grpPilot","_chanceLoot"]; _chopperType = selectRandom blck_AIHelis; - +_grpPilot setVariable["groupVehicle",_chopperType]; #ifdef blck_debugMode diag_log format["_fnc_missionSpawner:: _chopperType seleted = %1",_chopperType]; #endif @@ -38,14 +38,9 @@ private["_supplyHeli"]; //create helicopter and spawn it _supplyHeli = createVehicle [_chopperType, _spawnPos, [], 90, "FLY"]; blck_monitoredVehicles pushback _supplyHeli; - [_supplyHeli] call blck_fnc_protectVehicle; -/* -if ([] call blck_fnc_getModType isEqualTo "Epoch") then -{ - _supplyHeli call EPOCH_server_setVToken; -}; -*/ +_supplyHeli setVariable["vehicleGroup",_grpPilot]; + _supplyHeli setDir (_spawnVector -180); _supplyHeli setFuel 1; _supplyHeli engineOn true; diff --git a/@epochhive/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf b/@epochhive/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf index f82b21c..a9a031e 100644 --- a/@epochhive/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf +++ b/@epochhive/addons/custom_server/Compiles/Missions/GMS_fnc_spawnMissionVehiclePatrols.sqf @@ -64,7 +64,7 @@ _vehiclePatrolSpawns = [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPosit //params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",30],["_maxDis",45],["_group",grpNull]]; _patrolVehicle = [_coords,_spawnPos,_randomVehicle,35,45,_vehGroup] call blck_fnc_spawnVehiclePatrol; - + _vehGroup setVariable["groupVehicle",_randomVehicle]; #ifdef blck_debugMode if (blck_debugLevel > 1) then { @@ -74,6 +74,7 @@ _vehiclePatrolSpawns = [_coords,_noVehiclePatrols,45,60] call blck_fnc_findPosit if !(isNull _patrolVehicle) then { + _patrolVehicle setVariable["vehicleGroup",_vehGroup]; _vehicles pushback _patrolVehicle; _missionAI append (units _vehGroup); }; diff --git a/@epochhive/addons/custom_server/Compiles/Units/GMS_EH_AIHit.sqf b/@epochhive/addons/custom_server/Compiles/Units/GMS_EH_AIHit.sqf index 4f6f927..e83f11a 100644 --- a/@epochhive/addons/custom_server/Compiles/Units/GMS_EH_AIHit.sqf +++ b/@epochhive/addons/custom_server/Compiles/Units/GMS_EH_AIHit.sqf @@ -1,6 +1,6 @@ /* By Ghostrider-DbD- - Last Modified 3-12-17 + Last Modified 7-27-17 Handles the case where a unit is hit. @@ -27,7 +27,8 @@ if (blck_debugLevel > 1) then if (!(alive _unit)) exitWith {}; if (!(isPlayer _instigator)) exitWith {}; -[_unit,_instigator] call blck_fnc_alertNearbyLeader; +[_unit,_instigator] call blck_fnc_alertGroupUnits; +[_instigator] call blck_fnc_alertNearbyVehicles; _group = group _unit; //_group setBehavior "COMBAT"; _wp = [_group, currentWaypoint _group]; diff --git a/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_alertGroupUnits.sqf b/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_alertGroupUnits.sqf new file mode 100644 index 0000000..9b94a23 --- /dev/null +++ b/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_alertGroupUnits.sqf @@ -0,0 +1,24 @@ +/* + by Ghostrider + 7-27-17 + Alerts the leader of a group of the location of an enemy. + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +private["_knowsAbout","_intelligence","_group"]; +params["_unit","_target"]; +_intelligence = _unit getVariable ["intelligence",1]; +_group = group _unit; +{ + _knowsAbout = _x knowsAbout _target; + _x reveal [_target,_knowsAbout + _intelligence]; +}forEach units _group; + + diff --git a/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyVehicles.sqf b/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyVehicles.sqf new file mode 100644 index 0000000..cd12b74 --- /dev/null +++ b/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_alertNearbyVehicles.sqf @@ -0,0 +1,38 @@ +/* + by Ghostrider + 4-5-17 + Alerts the units of nearby vehicles of the location of an enemy. + + -------------------------- + 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/ +*/ +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +params["_target"]; + +_fn_alertGroupUnits = { + params["_group","_target"]; + private["_intelligence","_knowsAbout"]; + _intelligence = (leader _group) getVariable ["intelligence",1]; + { + _knowsAbout = _x knowsAbout _target; + _x reveal [_target,_knowsAbout + _intelligence]; + }forEach (units _group); +}; + +_fn_allertNearbyVehicleGroups = { + params["_vehicles","_target"]; + private["_vehGroup"]; + { + _vehGroup = _x getVariable["vehicleGroup",grpNull]; + if (_target distance2D (leader _vehGroup) < 1000) then {[_vehGroup,_target] call _fn_alertGroupUnits;}; + }forEach _vehicles; +}; + +[blck_monitoredVehicles,_target] call _fn_allertNearbyVehicleGroups; + + diff --git a/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf b/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf index 914561d..046d8ba 100644 --- a/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf +++ b/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_processAIKill.sqf @@ -1,6 +1,6 @@ /* Handle AI Deaths - Last Modified 5/31/17 + Last Modified 7/27/17 By Ghostrider-DBD- Copyright 2016 -------------------------- @@ -29,8 +29,8 @@ if (count(units _group) < 1) then { if (blck_launcherCleanup) then {[_unit] spawn blck_fnc_removeLaunchers;}; if (blck_removeNVG) then {[_unit] spawn blck_fnc_removeNVG;}; if !(isPlayer _killer) exitWith {}; -//[_unit,_killer] call blck_fnc_alertNearbyUnits; -[_unit,_killer] call blck_fnc_alertNearbyLeader; +[_unit,_killer] call blck_fnc_alertGroupUnits; +[_killer] call blck_fnc_alertNearbyVehicles; _group = group _unit; _wp = [_group, currentWaypoint _group]; _wp setWaypointBehaviour "COMBAT"; diff --git a/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_processIlleagalAIKills.sqf b/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_processIlleagalAIKills.sqf index 6a2ab40..33d8566 100644 --- a/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_processIlleagalAIKills.sqf +++ b/@epochhive/addons/custom_server/Compiles/Units/GMS_fnc_processIlleagalAIKills.sqf @@ -12,7 +12,7 @@ private["_missionType","_wasRunover","_launcher","_legal"]; params["_unit","_killer"]; -diag_log format["##-processIlleagalAIKills.sqf-## processing illeagal kills for unit %1",_unit]; +//diag_log format["##-processIlleagalAIKills.sqf-## processing illeagal kills for unit %1",_unit]; _launcher = _unit getVariable ["Launcher",""]; _legal = true; diff --git a/@epochhive/addons/custom_server/Compiles/blck_functions.sqf b/@epochhive/addons/custom_server/Compiles/blck_functions.sqf index 1a58c92..2169262 100644 --- a/@epochhive/addons/custom_server/Compiles/blck_functions.sqf +++ b/@epochhive/addons/custom_server/Compiles/blck_functions.sqf @@ -67,18 +67,6 @@ blck_fnc_signalEnd = compileFinal preprocessFileLineNumbers "\q\addons\custom_se blck_fnc_endMission = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_endMission.sqf"; blck_fnc_missionAIareDead = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionAIareDead.sqf"; -// #define Reinforcements 1 -#ifdef Reinforcements -// Reinforcement-related functions -//blck_fnc_callInReinforcements = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_callInReinforcements.sqf"; -//blck_fnc_spawnParaUnits = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_spawnParaUnits.sqf"; -//blck_fnc_spawnParaCrate = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_spawnParaCrate.sqf"; -//blck_fnc_spawnReinforcHeli = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_spawnReinforcHeli.sqf"; -//blck_fnc_sendHeliHome = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_sendHeliHome.sqf"; -//blck_fnc_spawnHeliPatrol = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_spawnParaUnits.sqf"; -//blck_fnc_spawnHeliPatrol = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_spawnParaUnits.sqf"; -#endif - // 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_setupWaypoints.sqf"; // Set default waypoints for a group @@ -112,7 +100,8 @@ blck_fnc_processAIKill = compileFinal preprocessFileLineNumbers "\q\addons\cust 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_alertNearbyLeader = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_alertNearbyLeader.sqf"; +blck_fnc_alertGroupUnits = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_alertGroupUnits.sqf"; +blck_fnc_alertNearbyVehicles = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_alertNearbyVehicles.sqf"; blck_fnc_processIlleagalAIKills = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_processIlleagalAIKills.sqf"; blck_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"; diff --git a/@epochhive/addons/custom_server/Configs/blck_configs_exile_mil.sqf b/@epochhive/addons/custom_server/Configs/blck_configs_exile_mil.sqf new file mode 100644 index 0000000..9d6073b --- /dev/null +++ b/@epochhive/addons/custom_server/Configs/blck_configs_exile_mil.sqf @@ -0,0 +1,865 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-14-17 + + -------------------------- + 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/ +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; + +//////////// +// Exile-specific settings +//////////// + +// list of locations that are protected against mission spawns + +switch (toLower(worldName)) do +{ + case "altis": { + blck_locationBlackList append [ + //Add location as [[xpos,ypos,0],minimumDistance], + // Note that there should not be a comma after the last item in this table + [[10800,10641,0],1000] // isthmus - missions that spawn here often are glitched. + ]; + }; + case "tanoa": { + blck_locationBlackList append [ ]; + }; +}; + +/********************************************************************************* + +AI WEAPONS, UNIFORMS, VESTS AND GEAR + +**********************************************************************************/ + + blck_blacklistSpawns = false; + blck_listConcreteMixerZones = false; + blck_AI_Side = EAST; + blck_AIPatrolVehicles = + [ + //"Exile_Car_Offroad_Armed_Guerilla01", + //"Exile_Car_Offroad_Armed_Guerilla02", + //"Exile_Car_BTR40_MG_Green", + //"Exile_Car_BTR40_MG_Camo", + //"Exile_Car_HMMWV_M134_Green", + //"Exile_Car_HMMWV_M134_Desert", + //"Exile_Car_HMMWV_M134_Desert", + //"Exile_Car_HMMWV_M2_Desert", + //"B_LSV_01_armed_F", + //"_MRAP_02_gmg_ghex_F", + "O_MRAP_02_hmg_ghex_F", + "O_MRAP_03_gmg_ghex_F", + "O_MRAP_03_hmg_ghex_F", + "B_MBT_01_cannon_F", + "B_MBT_01_mlrs_base_F", + "B_MBT_01_mlrs_F", + "B_MBT_01_TUSK_F", + "B_APC_Tracked_01_AA_F", + "B_APC_Tracked_01_CRV_F", + "B_APC_Tracked_01_rcws_F" + ]; // Type of vehicle spawned to defend AI bases + + // Blacklisted itesm + blck_blacklistedOptics = ["optic_Nightstalker","optic_tws","optic_tws_mg"]; + + // AI Weapons and Attachments + blck_bipods = ["bipod_01_F_blk","bipod_01_F_mtp","bipod_01_F_snd","bipod_02_F_blk","bipod_02_F_hex","bipod_02_F_tan","bipod_03_F_blk","bipod_03_F_oli"]; + + blck_Optics_Holo = ["optic_Hamr","optic_MRD","optic_Holosight","optic_Holosight_smg","optic_Aco","optic_ACO_grn","optic_ACO_grn_smg","optic_Aco_smg","optic_Yorris"]; + blck_Optics_Reticule = ["optic_Arco","optic_MRCO"]; + blck_Optics_Scopes = [ + "optic_AMS","optic_AMS_khk","optic_AMS_snd", + "optic_DMS", + "optic_KHS_blk","optic_KHS_hex","optic_KHS_old","optic_KHS_tan", + "optic_LRPS", + "optic_Nightstalker", + "optic_NVS", + "optic_SOS", + "optic_tws", + "optic_tws_mg" + ]; + + #ifdef useAPEX + blck_Optics_Apex = [ + //Apex + "optic_Arco_blk_F", "optic_Arco_ghex_F", + "optic_DMS_ghex_F", + "optic_Hamr_khk_F", + "optic_ERCO_blk_F","optic_ERCO_khk_F","optic_ERCO_snd_F", + "optic_SOS_khk_F", + "optic_LRPS_tna_F","optic_LRPS_ghex_F", + "optic_Holosight_blk_F","optic_Holosight_khk_F","optic_Holosight_smg_blk_F" + ]; + blck_Optics = blck_Optics_Holo + blck_Optics_Reticule + blck_Optics_Scopes; + blck_Optics = blck_Optics + blck_Optics_Apex; + #endif + + blck_bipods = [ + "bipod_01_F_blk","bipod_01_F_mtp","bipod_01_F_snd","bipod_02_F_blk","bipod_02_F_hex","bipod_02_F_tan","bipod_03_F_blk","bipod_03_F_oli", + //Apex + "bipod_01_F_khk" + ]; + + blck_silencers = [ + "muzzle_snds_338_black","muzzle_snds_338_green","muzzle_snds_338_sand","muzzle_snds_93mmg","muzzle_snds_93mmg_tan","muzzle_snds_acp","muzzle_snds_B", + "muzzle_snds_H","muzzle_snds_H_MG","muzzle_snds_H_SW","muzzle_snds_L","muzzle_snds_M", + //Apex + "muzzle_snds_H_khk_F","muzzle_snds_H_snd_F","muzzle_snds_58_blk_F","muzzle_snds_m_khk_F","muzzle_snds_m_snd_F","muzzle_snds_B_khk_F","muzzle_snds_B_snd_F", + "muzzle_snds_58_wdm_F","muzzle_snds_65_TI_blk_F","muzzle_snds_65_TI_hex_F","muzzle_snds_65_TI_ghex_F","muzzle_snds_H_MG_blk_F","muzzle_snds_H_MG_khk_F" + ]; + + blck_RifleSniper = [ + "srifle_EBR_F","srifle_GM6_F","srifle_LRR_F","srifle_DMR_01_F" + ]; + + blck_RifleAsault_556 = [ + "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","arifle_SDAR_F" + ]; + + blck_RifleAsault_650 = [ + "arifle_Katiba_F","arifle_Katiba_C_F","arifle_Katiba_GL_F","arifle_MXC_F","arifle_MX_F","arifle_MX_GL_F","arifle_MXM_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_650 + blck_RifleLMG + blck_DLC_Sniper + blck_DLC_MMG; + blck_WeaponList_Green = blck_RifleSniper + blck_RifleAsault_650 +blck_RifleLMG + blck_DLC_MMG; + blck_WeaponList_Blue = blck_RifleOther + blck_RifleAsault_556 + blck_RifleAsault_650; + blck_WeaponList_Red = blck_RifleAsault_556 + blck_RifleSniper + blck_RifleAsault_650 + blck_RifleLMG; + + #ifdef useAPEX + blck_apexWeapons = ["arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F", + "arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F", + "arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F", + "arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F"]; + + blck_WeaponList_Orange = blck_WeaponList_Orange + blck_apexWeapons; + blck_WeaponList_Green = blck_WeaponList_Green + blck_apexWeapons; + #endif + + blck_baseBackpacks = ["B_Carryall_ocamo","B_Carryall_oucamo","B_Carryall_mcamo","B_Carryall_oli","B_Carryall_khk","B_Carryall_cbr" ]; + + #ifdef useAPEX + blck_ApexBackpacks = [ + "B_Bergen_mcamo_F","B_Bergen_dgtl_F","B_Bergen_hex_F","B_Bergen_tna_F","B_AssaultPack_tna_F","B_Carryall_ghex_F", + "B_FieldPack_ghex_F","B_ViperHarness_blk_F","B_ViperHarness_ghex_F","B_ViperHarness_hex_F","B_ViperHarness_khk_F", + "B_ViperHarness_oli_F","B_ViperLightHarness_blk_F","B_ViperLightHarness_ghex_F","B_ViperLightHarness_hex_F","B_ViperLightHarness_khk_F","B_ViperLightHarness_oli_F" + ]; + blck_backpacks = blck_baseBackpacks + blck_ApexBackpacks; + #endif + + 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", + "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", + //Apex + + "H_MilCap_tna_F", + "H_MilCap_ghex_F", + "H_Booniehat_tna_F", + "H_Beret_gen_F", + "H_MilCap_gen_F", + "H_Cap_oli_Syndikat_F", + "H_Cap_tan_Syndikat_F", + "H_Cap_blk_Syndikat_F", + "H_Cap_grn_Syndikat_F" + ]; + 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", + "H_Helmet_Skate", + "H_HelmetB_TI_tna_F", + // Apex + //"H_HelmetO_ViperSP_hex_F", + //"H_HelmetO_ViperSP_ghex_F", + "H_HelmetB_tna_F", + "H_HelmetB_Enh_tna_F", + "H_HelmetB_Light_tna_F", + "H_HelmetSpecO_ghex_F", + "H_HelmetLeaderO_ghex_F", + "H_HelmetO_ghex_F", + "H_HelmetCrew_O_ghex_F" + ]; + 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 + // I have commented out some high visibility uniforms that can be reserved for players or special missions. + // for example, you could have a uniform list specified in a mission template. + "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", + //Apex + "U_B_T_Soldier_F", + "U_B_T_Soldier_AR_F", + "U_B_T_Soldier_SL_F", + //"U_B_T_Sniper_F", + //"U_B_T_FullGhillie_tna_F", + "U_B_CTRG_Soldier_F", + "U_B_CTRG_Soldier_2_F", + "U_B_CTRG_Soldier_3_F", + "U_B_GEN_Soldier_F", + "U_B_GEN_Commander_F", + "U_O_T_Soldier_F", + "U_O_T_Officer_F", + //"U_O_T_Sniper_F", + //"U_O_T_FullGhillie_tna_F", + "U_O_V_Soldier_Viper_F", + "U_O_V_Soldier_Viper_hex_F", + "U_I_C_Soldier_Para_1_F", + "U_I_C_Soldier_Para_2_F", + "U_I_C_Soldier_Para_3_F", + "U_I_C_Soldier_Para_4_F", + "U_I_C_Soldier_Para_5_F", + "U_I_C_Soldier_Bandit_1_F", + "U_I_C_Soldier_Bandit_2_F", + "U_I_C_Soldier_Bandit_3_F", + "U_I_C_Soldier_Bandit_4_F", + "U_I_C_Soldier_Bandit_5_F", + "U_I_C_Soldier_Camo_F", + "U_C_man_sport_1_F", + "U_C_man_sport_2_F", + "U_C_man_sport_3_F", + "U_C_Man_casual_1_F", + "U_C_Man_casual_2_F", + "U_C_Man_casual_3_F", + "U_C_Man_casual_4_F", + "U_C_Man_casual_5_F", + "U_C_Man_casual_6_F", + "U_B_CTRG_Soldier_urb_1_F", + "U_B_CTRG_Soldier_urb_2_F", + "U_B_CTRG_Soldier_urb_3_F" + ]; + + 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", + #ifdef useAPEX + //Apex + "V_TacChestrig_grn_F", + "V_TacChestrig_oli_F", + "V_TacChestrig_cbr_F", + "V_PlateCarrier1_tna_F", + "V_PlateCarrier2_tna_F", + "V_PlateCarrierSpec_tna_F", + "V_PlateCarrierGL_tna_F", + "V_HarnessO_ghex_F", + "V_HarnessOGL_ghex_F", + "V_BandollierB_ghex_F", + "V_TacVest_gen_F", + "V_PlateCarrier1_rgr_noflag_F", + #endif + "V_PlateCarrier2_rgr_noflag_F" + ]; + + //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 + #ifdef useAPEX + "arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F", + "arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F", + "arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F", + "arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F", + #endif + ["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"], + #ifdef useAPEX + "arifle_AK12_F","arifle_AK12_GL_F","arifle_AKM_F","arifle_AKM_FL_F","arifle_AKS_F","arifle_ARX_blk_F","arifle_ARX_ghex_F","arifle_ARX_hex_F","arifle_CTAR_blk_F","arifle_CTAR_hex_F", + "arifle_CTAR_ghex_F","arifle_CTAR_GL_blk_F","arifle_CTARS_blk_F","arifle_CTARS_hex_F","arifle_CTARS_ghex_F","arifle_SPAR_01_blk_F","arifle_SPAR_01_khk_F","arifle_SPAR_01_snd_F", + "arifle_SPAR_01_GL_blk_F","arifle_SPAR_01_GL_khk_F","arifle_SPAR_01_GL_snd_F","arifle_SPAR_02_blk_F","arifle_SPAR_02_khk_F","arifle_SPAR_02_snd_F","arifle_SPAR_03_blk_F", + "arifle_SPAR_03_khk_F","arifle_SPAR_03_snd_F","arifle_MX_khk_F","arifle_MX_GL_khk_F","arifle_MXC_khk_F","arifle_MXM_khk_F", + #endif + ["arifle_Katiba_F","30Rnd_65x39_caseless_green"], + ["arifle_Katiba_GL_F","30Rnd_65x39_caseless_green"], + ["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_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],["Exile_Item_MetalWire",1,4] + ], + [//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_configsExileLoaded = true; diff --git a/@epochhive/addons/custom_server/Configs/blck_configs_mil.sqf b/@epochhive/addons/custom_server/Configs/blck_configs_mil.sqf new file mode 100644 index 0000000..b549cf4 --- /dev/null +++ b/@epochhive/addons/custom_server/Configs/blck_configs_mil.sqf @@ -0,0 +1,406 @@ +/* + for DBD Clan + By Ghostrider-DBD- + Copyright 2016 + Last Modified 3-17-17 + + -------------------------- + 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/ +*/ + + #include "\q\addons\custom_server\Configs\blck_defines.hpp"; + + diag_log "[blckeagls] Loading blck_configs_mil.sqf for Militarized Servers"; + + /* + Configuration for Addons that support the overall Mission system. + These are a module to spawn map addons generated with the Eden Editor + And a moduel to spawn static loot crates at specific location + A time acceleration module. + */ + + blck_spawnMapAddons = true; // When true map addons will be spawned based on parameters define in custum_server\MapAddons\MapAddons_init.sqf + blck_spawnStaticLootCrates = true; // When true, static loot crates will be spawned and loaded with loot as specified in custom_server\SLS\SLS_init_Epoch.sqf (or its exile equivalent). + + // Note that you can define map-specific variants in custom_server\configs\blck_custom_config.sqf + blck_useTimeAcceleration = true; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below. + blck_timeAccelerationDay = 1; // Daytime time accelearation + blck_timeAccelerationDusk = 4; // Dawn/dusk time accelearation + blck_timeAccelerationNight = 8; // Nighttim time acceleration + + /************************************************************** + + BLACKLIST LOCATIONS + + **************************************************************/ + // if true then missions will not spawn within 1000 m of spawn points for Altis, Bornholm, Cherno, Esseker or stratis. + blck_blacklistTraderCities = true; // Set this = true if you would like the mission system to automatically search for the locations of the Epoch/Exile trader cities. Note that these are added to the list of blacklisted locations for Epoch for the most common maps. + + /*********************************************************** + + GENERAL MISSION SYSTEM CONFIGURATION + + ***********************************************************/ + //////// + // Headless Client Configurations + blck_useHC = false; // Not Yet Working + + /////////////////////////////// + // Kill message configurations + // These determine whether and when messages are sent to players regarding AI Kills or illegal kills that might damage a vehicle. + blck_useKillMessages = false; // when true a message will be broadcast to all players each time an AI is killed; may impact server performance. + blck_useKillScoreMessage = true; // when true a tile is displayed to the killer with the kill score information + blck_useIEDMessages = true; // Displayes a message when a player vehicle detonates and IED (such as would happen if a player killed AI with a forbidden weapon). + + /////////////////////////////// + // 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 = [false,"center"]; + blck_preciseMapMarkers = false; // Map markers are/are not centered at the loot crate + + + //Minimum distance between missions + blck_MinDistanceFromMission = 1500; + + /////////////////////////////// + // Mission Smoke and Signals + /////////////////////////////// + + // global loot crate options + // Options to spawn a smoking wreck near the crate. 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/chemlight will appear at the loot crate for 2 min after mission completion. + blck_loadCratesTiming = "atMissionSpawn"; // valid choices are "atMissionCompletion" and "atMissionSpawn"; + + /////////////////////////////// + // 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 = false; // 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 = []; // 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 = []; // Add any vehicles for which you wish to forbid vehicle kills, o + + + /////////////////////////////// + // MISC MISSION PARAMETERS + /////////////////////////////// + blck_useKilledAIName = true; // When false, the name of the killer (player), weapon and distance are displayed; otherwise the name of the player, distance and name of AI unit killed are shown. + blck_useMines = false; // when true mines are spawned around the mission area. these are cleaned up when a player reaches the crate. Turn this off if you have vehicle patrols. + blck_cleanupCompositionTimer = 1200; // Mission objects will be deleted after the mission is completed after a deley set by this timer. + blck_cleanUpLootChests = false; // when true, loot crates will be deleted together with other mission objects. + blck_MissionTimout = 60*60; // 60 min - missions will timeout and respawn in another location. This prevents missions in impossible locations from persisting. + + /////////////////////////////// + // Paratroop Settings + // AI paratrooper reinforcement paramters + // The behavior of these can be linked to some degree to the spawning of patrolling helis. + // For example, if you always want a helicopter to spawn paratroops set the value 1. + // If you never want helicopters to spawn them set the value to 0. + blck_chanceParaBlue = 0.1; // [0 - 1] set to 0 to deactivate and 1 to always have paratroops spawn over the center of the mission. + blck_noParaBlue = 3; // [1-N] + + blck_chanceParaRed = 0.3; + blck_noParaRed = 3; + + blck_chanceParaGreen = 0.4; + blck_noParaGreen = 0.4; + + blck_chanceParaOrange = 0.5; + blck_noParaOrange = 4; + + // Supplemental Loot Parameters. + + /////////////////////////////// + // Heli Patrol Heli Types + // Armed Helis + ////////////////////////////// + _blck_littleBirds = ["B_Heli_Light_01_armed_F"]; // AH-9 Pawnee (WEST) + _blck_armed_hellcats = ["I_Heli_light_03_F"]; + _blck_armed_orcas = ["O_Heli_Light_02_F","O_Heli_Light_02_v2_F"]; + _blck_armed_ghosthawks = ["B_Heli_Transport_01_F","B_Heli_Transport_01_camo_F"]; + _blck_armed_hurons = ["B_Heli_Transport_03_F","B_Heli_Transport_03_black_F"]; + _blck_armed_attackHelis = ["B_Heli_Attack_01_F"]; + _blck_armed_heavyAttackHelis = ["O_Heli_Attack_02_F","O_Heli_Attack_02_black_F"]; + _blck_fighters = [ + "O_Plane_CAS_02_F", // /ti-199 Neophron (CAS) + "I_Plane_Fighter_03_AA_F", // A-143 Buzzard (AA) + "I_Plane_Fighter_04_F", // A-149 Gryphon + "B_Plane_CAS_01_F", // A-164 Wipeout (CAS) + "B_Plane_Fighter_01_F" // F/A-181 Black Wasp II + ]; + blck_blacklisted_heli_ammo = []; + blck_blacklisted_heli_weapons = []; + + + /////////////////////////////// + // Heli Patrol Settings + /////////////////////////////// + + blck_chanceHeliPatrolBlue = 0.2; //[0 - 1] Set to 0 to deactivate and 1 to always have a heli spawn over the mission center and patrol the mission area. The chance of paratroops dropping from the heli is defined by blck_chancePara(Blue|Red|Green|Orange) above. + blck_patrolHelisBlue = _blck_littleBirds; + + blck_chanceHeliPatrolRed = 08; // 0.4; + blck_patrolHelisRed = _blck_armed_hellcats+_blck_armed_orcas + _blck_armed_ghosthawks; + + blck_chanceHeliPatrolGreen = 0.9999; + blck_patrolHelisGreen = _blck_armed_heavyAttackHelis+_blck_armed_ghosthawks; + + blck_chanceHeliPatrolOrange = 0.9999; + blck_patrolHelisOrange = _blck_armed_heavyAttackHelis + _blck_fighters; + + + //////////////////// + // Enable / Disable Missions + //////////////////// + + // Maximum number of missions shown on the map at any one time. + #ifdef DBDserver + blck_maxSpawnedMissions = 6; + #else + // Change this value to reduce the number of spawned missions at any one time. + blck_maxSpawnedMissions = 4; + #endif + + //Set to -1 to disable. Values of 2 or more force the mission spawner to spawn copies of that mission - this feature is not recommended because you may run out of available groups. + blck_enableOrangeMissions = 1; + blck_enableGreenMissions = 1; + blck_enableRedMissions = 1; + blck_enableBlueMissions = 1; + #ifdef DBDserver + blck_enableHunterMissions = 1; + blck_enableScoutsMissions = 1; + blck_maxcrashsites = 3; + #endif + + //////////////////// + // 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; + #ifdef DBDserver + blck_TMin_Hunter = 120; + blck_TMin_Scouts = 115; + blck_TMin_Crashes = 115; + //blck_TMin_UMS = 200; + #endif + + //Maximum Spawn time between missions in seconds + blck_TMax_Orange = 360; + blck_TMax_Green = 300; + blck_TMax_Blue = 200; + blck_TMax_Red = 250; + #ifdef DBDserver + blck_TMax_Hunter = 200; + blck_TMax_Scouts = 200; + blck_TMax_Crashes = 200; + //blck_TMax_UMS = 280; + #endif + + /////////////////////////////// + // AI VEHICLE PATROL PARAMETERS + /////////////////////////////// + + 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 outor been killed. + + //////////////////// + // Mission Vehicle Settings + //////////////////// + //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 = 2; // 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_killEmptyStaticWeapons = true; // When true, static weapons will have damage set to 1 when the AI manning them is killed. + blck_staticWeapons = ["B_HMG_01_high_F","B_GMG_01_high_F"]; // [0.50 cal, grenade launcher, AT Launcher] + + //////////////////// + // Mission Static Weapon Settings + //////////////////// + + // Defines how many static weapons to spawn. Set this to -1 to disable spawning + blck_SpawnEmplaced_Orange = 5; // Number of static weapons at Orange Missions + blck_SpawnEmplaced_Green = 4; // 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 + + + + /**************************************************************** + + GENERAL AI SETTINGS + + ****************************************************************/ + + blck_groupBehavior = "SAD"; // Suggested choices are "SAD", "SENTRY", "AWARE" https://community.bistudio.com/wiki/ArmA:_AI_Combat_Modes + 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_addAIMoney = true; + 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_removeNVG = false; // When true, NVG will be removed from AI when they are killed. + 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_launchersPerGroup = 5; // Defines the number of AI per group spawned with a launcher + blck_launcherCleanup = false;// 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_AliveAICleanUpTimer = 1200; // Time after mission completion at which any remaining live AI are deleted. + + // How precisely player locations will be revealed to AI after an AI kill + // values are ordered as follows [blue, red, green, orange]; + blck_AIAlertDistance = [150,225,250,300]; // Radius within which AI will be notified of enemy activity. Depricated as a group-sed system is used now. The group is informed of the enemy location when a group member is hit or killed. + //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.3, 0.5, 0.7, 0.9]; + + blck_baseSkill = 1.0; // The overal skill of the AI - range 0.1 to 1.0. + + /*************************************************************** + + 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 = 5; + blck_SkillsOrange = [ + ["aimingAccuracy",0.6],["aimingShake",0.9],["aimingSpeed",0.9],["endurance",1.00],["spotDistance",1.0],["spotTime",1.0],["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 = 4; + blck_SkillsGreen = [ + ["aimingAccuracy",0.5],["aimingShake",0.75],["aimingSpeed",0.85],["endurance",0.9],["spotDistance",0.9],["spotTime",0.9],["courage",0.9],["reloadSpeed",0.9],["commanding",0.9],["general",0.75] + ]; + + // Red Missions + blck_MinAI_Red = 12; + blck_MaxAI_Red = 15; + blck_AIGrps_Red = 3; + blck_SkillsRed = [ + ["aimingAccuracy",0.2],["aimingShake",0.6],["aimingSpeed",0.6],["endurance",0.80],["spotDistance",0.7],["spotTime",0.8],["courage",0.80],["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.5],["aimingSpeed",0.5],["endurance",0.50],["spotDistance",0.6],["spotTime",0.6],["courage",0.60],["reloadSpeed",0.60],["commanding",0.7],["general",0.60] + ]; + + // Add some money to AI; only works with Exile for now. + blck_maxMoneyOrange = 50; + blck_maxMoneyGreen = 40; + blck_maxMoneyRed = 30; + blck_maxMoneyBlue = 20; + + #ifdef DBDserver + blck_AIAlertDistance = [150,225,250,300]; // Radius within which AI will be notified of enemy activity. Depricated as a group-sed system is used now. The group is informed of the enemy location when a group member is hit or killed. + //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.3, 0.5, 0.7, 0.9]; + + blck_baseSkill = 0.7; // The overal skill of the AI - range 0.1 to 1.0. + + /*************************************************************** + + 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 = 30; + blck_MaxAI_Orange = 35; + blck_AIGrps_Orange = 5; + blck_SkillsOrange = [ + ["aimingAccuracy",0.4],["aimingShake",0.5],["aimingSpeed",0.7],["endurance",1.00],["spotDistance",1.0],["spotTime",0.7],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00] + ]; + + // Green Missions + blck_MinAI_Green = 26; + blck_MaxAI_Green = 31; + blck_AIGrps_Green = 4; + blck_SkillsGreen = [ + ["aimingAccuracy",0.3],["aimingShake",0.45],["aimingSpeed",0.65],["endurance",0.9],["spotDistance",0.9],["spotTime",0.65],["courage",0.9],["reloadSpeed",0.9],["commanding",0.9],["general",0.75] + ]; + + // Red Missions + blck_MinAI_Red = 12; + blck_MaxAI_Red = 15; + blck_AIGrps_Red = 3; + blck_SkillsRed = [ + ["aimingAccuracy",0.2],["aimingShake",0.4],["aimingSpeed",0.6],["endurance",0.80],["spotDistance",0.7],["spotTime",0.6],["courage",0.80],["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.12],["aimingShake",0.3],["aimingSpeed",0.5],["endurance",0.50],["spotDistance",0.6],["spotTime",0.6],["courage",0.60],["reloadSpeed",0.60],["commanding",0.7],["general",0.60] + ]; + + // Add some money to AI; only works with Exile for now. + blck_maxMoneyOrange = 25; + blck_maxMoneyGreen = 20; + blck_maxMoneyRed = 15; + blck_maxMoneyBlue = 10; + #endif + + private["_modType"]; + _modType = [] call blck_fnc_getModType; + if (_modType isEqualTo "Epoch") then + { + diag_log format["[blckeagls] Loading Mission System using Parameters for %1 for militarized servers",_modType]; + execVM "\q\addons\custom_server\Configs\blck_configs_epoch.sqf"; + waitUntil {(isNil "blck_configsEpochLoaded") isEqualTo false;}; + waitUntil{blck_configsEpochLoaded}; + blck_configsEpochLoaded = nil; + diag_log "[blckeagles] Running getTraderCitiesEpoch to get location of trader cities"; + execVM "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitesEpoch.sqf"; + }; + if (_modType isEqualTo "Exile") then + { + diag_log format["[blckeagls] Loading Mission System using Parameters for %1 for militarized servers",_modType]; + execVM "\q\addons\custom_server\Configs\blck_configs_exile.sqf"; + waitUntil {(isNil "blck_configsExileLoaded") isEqualTo false;}; + waitUntil{blck_configsExileLoaded}; + blck_configsExileLoaded = nil; + if (blck_blacklistTraderCities || blck_blacklistSpawns || blck_listConcreteMixerZones) then {execVM "\q\addons\custom_server\Compiles\Functions\GMS_fnc_getTraderCitesExile.sqf";}; + }; + blck_configsLoaded = true; diff --git a/@epochhive/addons/custom_server/FAQ.txt b/@epochhive/addons/custom_server/FAQ.txt deleted file mode 100644 index e8f54d5..0000000 --- a/@epochhive/addons/custom_server/FAQ.txt +++ /dev/null @@ -1,99 +0,0 @@ -Core Mission System. - -The core mission system is configured to run 4 different classes of mission (Blue, Red, Green and Orange) simultaneously. -Reducing value for ...\custom_serer\configs\blck_configs.sqf\blck_maxSpawnedMissions will reduce the number of missions running on the server. - -General settings include the ability set whether and how messages to players regarding missions spawned or completed are displayed, - whether and how messages to players regarding killed AI are displayed - - Number of AI groups; - Number of AI per group; - AI skills; - Number and type of static weapons; - Number and type of armed vehicle patrols. - Presence of AI helicopter patrols. - Whether such patrols drop AI reinforcements. - - Loot can also be configured for each mission class. You can modify the number of weapons, magazines, items, construction materials, etc. - You can also adjust the choices for each of these types of items. - The equipment selected for each class of mission can also be specified. - Whether kills by guns mounted on vehicles are to be penalized (gunes that are prohobited are listed in blck_config.sys). - Whether to spawn a smoking wreck near the mission to be used as a visual landmark. - Whether to spawn mines (recommended only when no vehcle patrols are spawned). - -Where possible, I have tried group weapons based on desirability from low rank (5.56 ammo) to high rank (7.6 caliber or larger, large bore sniper, heavy LMG) then combine these groups to define parameters as needed. - -The missions themselves are spawned from templates which can be used to define: - the messages sent to players; - text used to label the mark - type of marker used to label the map - number of AI groups and number of AI - (optional) loot chest positions and loot to be loaded - type and location of any objects, buildings, or other entities that give the mission character - number and (optional) locations of static weapons - number of vehicle patrols - - To create and run new missions simply: - layout an AI base in the Arma 3 editor, - export the base as an .sqf - Define the above parameters (nu. AI groups, No AI, etc) - add this information to the mission template and modify any messages accordingly - Add the name of the file (e.g., "newAImission" to the list of missions to be spawned of that class in ...\custom)server\missions\GMS_missionLists.sqf - Repack your custom_server.pbo - -Performance considerations. -At present, missions do not actually spawn objects or players untill a player is within the trigger distance (1000 M). -Hence, performance penalties should be modest to none until players engage a mission. -There is some performance penalty to having a lot of dead AI on the server, or a lot of spawned objects used for scenery at AI missions. Hence, these are deleted after a certain time. - -Static Mission System (WIP). - -Additional Modules Available: - -1. Time Acceleration - -This provides an optional ability to accelerate time by user-specified factors. -The time acceleration can be specified for night, daytime and dusk. -Variables controlling the time acceleration module are located in ...\custom_server\configs\blck_configs.sqf and are: - - blck_useTimeAcceleration = false; // When true, time acceleration will be periodically updated based on amount of daylight at that time according to the values below. - blck_timeAccelerationDay = 1; // Daytime time accelearation - blck_timeAccelerationDusk = 4; // Dawn/dusk time accelearation - blck_timeAccelerationNight = 8; // Nighttim time acceleration - -Note that map/mod specific settings can be specified in blck_custom_config.sqf if that is helpful. - -2. Map Addons - -This module allows you to load map-addons (custom bases, enhancements to villages or towns, ATMs at traders etc) but to do so in a way that is map and mod-specific. -I use it to manage the map addons we run on multiple different Arma servers. -It is designed to permit you to place files in subdirectories of the MapAddons folder to simplyfy organization of the various files. -You can enable/disable the use of map-addons with the following variable found in ...\custom_server\configs\blck_configs: - -blck_spawnMapAddons = false; - -You can define which addons you wish to load in ...\custom_server\MapAddons\MapAddons_init.sqf. - -3. Static Loot System - -This module spawns loot crates at pre-specified locations on the ground, inside buildings or on roofs. -It is designed to function in conjunction with the Map Addons module if you wish it to. -It was derived from the loot crate spawner originally released by DarthRogue but has been extensively revised. -One enhancement is that I have written the code so that you do not need to sort items by there arma type (weapon, magazine, item). -In any event, it is a great tool for placing loot chests at AI strongholds or static missions. - -Some basic features are: -Crates can be spawned at precise locations with / without a nearby smoking wreck to mark their location (which crates an apololyptic feel). -Crates can be loaded with one of 3 different loadouts (add more if you like) which can be specified or randomly determined. -If the number of possible spawn locations is greater than the number of crates to spawned, spawn locations will be randomly chosen giving some variation to your mission. - -The static loot crate spawner is enabled/disable by changing the following variable in ...\custom_server\configs\blck_configs.sqf - - blck_spawnStaticLootCrates = false; - -I wrote the crate spawner in a way that helps me manage static loot crates across multiple maps and mods. -The configuration files for Epoch or Exile give examples of how to implement the system. - -Known issues - -1. diff --git a/@epochhive/addons/custom_server/KnownIssues.txt b/@epochhive/addons/custom_server/KnownIssues.txt deleted file mode 100644 index 4f3483c..0000000 --- a/@epochhive/addons/custom_server/KnownIssues.txt +++ /dev/null @@ -1,9 +0,0 @@ - - -Known issues - -1. Missions sometimes are not triggered by players. -2. Missions are sometimes not completed even when completion criteria are met. -3. Infinite ammo is not working for at least some weapons. Probable cause is the arma engine as server logs show multiple errors related to weapons not being found. - This impacts both vehicle-mounted weapons and AI weapons. -4. Emplaced weapons are not spawning correctly. \ No newline at end of file diff --git a/@epochhive/addons/custom_server/changeLog.sqf b/@epochhive/addons/custom_server/changeLog.sqf deleted file mode 100644 index d0c32a3..0000000 --- a/@epochhive/addons/custom_server/changeLog.sqf +++ /dev/null @@ -1,305 +0,0 @@ -/* -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, infinite ammo fix. -Ideas or code from that by Vampire and KiloSwiss have been used for certain functions. - -6/1/17 Version 6.59 Build 59 -[changed] Players are no longer given crypto for each AI kill. Crypto added to AI Bodies was increased. -[fixed] error in GMS_fnc_setupWaypoints wherein _arc was not defined early enough in the script. -[fixed] Exile Respect Loss bug (temporary fix only). - -5/21/17 Version 6.58 build 58 -[Fixed] typos for blck_epochValuables. -[Fixed] All loot was removed from AI vehicles at the time a mission was completed. -[Fixed] When mission completion criteria included killing all AI, missions could be completed with alive AI in vehicles. - -4/6/17 Version 6.58 Build 54 -[Added] A FAQ presenting an overview of the mission system and addons. -[Changed] Helicopter crew waypoint system reverted to that from Build 46. -[Fixed] Mission timouts would prevent new missions from spawning after a while. -[Fixed] blck_timeAcceleration now determines if time acceleration is activated. -[Fixed] Missions did not complete correctly under certain circumstances. -[Fixed] Mission vehicles were not properly deleted, unlocked or otherwise handled at misison end or when AI crew were killed. -[Fixed] Throws errors when evaluating errors related to certain disallowed types of kills. -Known errors: throws errors with certain loot crate setups (Exile) - -3/23/17 Verision 6.58 build 48 -Turned debugging off -Added some preprocessor commands to minimize the use of if()then for debugging purposes when running without any debugging settings on. -Teaks to heli patrol waypoint system. -bugfixes. - -3/21/17 Version 6.58 Build 44 -[Added] Each mission now has a setting for mines which is set to false. To use the global setting in blck_config for yoru mission just change this to read: - _useMines = blck_useMines; -[Fixed] Logging by the time acceleration module was disabled. -[Fixed] Emplaced weapons now spawn in the correct locations. -[Fixed] Missions end correctly when all AI are dead and _endCondition = "allKilledOrPlayerNear"; -[changed] Reverted to the waypoint system from build 42. - -3/18/17 Version 6.58 Build 44 -[Fixed] Time acceleration was not working. -[Fixed] blck_timeAcceleration now determines if time acceleration is activated. -[Fixed] The mission described by default2 in the blue missions folder now spawns correctly. - You can use this as a guide for how to place loot crates or static weapons at specific locations like inside or on top of structures. - Loot vehicles are now spawned correctly. - Loot crates positioned at specific locations are now spawned correctely. - static weapons to be spawned at specified positions are now spawned correctly. - That mission is disabled by default. -[Added] option to disable time acceleration (blck_timeAcceleration = true; line 30 of blck_config.sqf) -[Added] options to have armed heli's patrolling the missions and for them to drop AI. -[Added] options to have paratroops drop over missions as an alternative to the above. -[Added] Code optimization for GMS_fnc_spawnMissionAI.sqf and several other AI spawning scripts. -Added] Formalizing exception handling for the case in which a createGroup request returns grpNull. - If this happens during mission spawning the mission will be aborted and all mission objects and AI will be deleted. - This should prevent the mission system from crashing causing no further missions to spawn. -[Added] a new configuration that sets a cap on the maximum number of spawned missions. - blck_maxSpawnedMissions = 4; // Line 181 of blck_configs.sqf -[Added] a function blck_fnc_allPlayers which returns an array of allPlayers (as a temporizing fix till BIS patches the allPlayers function. - -[Changed] Coding improvements for waypoint generation. - Tried a new approach to generating waypoints to make AI more aggressive without the overhead of the last method. - -[Changed] Redid the mission spawner to spawn one random mission every 1 min for mission for which timers say they can be spoawned. - This will continue until the cap is reached then randomly select a mission from those that are ready to be respawned to be spawned next. - If you want the various missions to have an equal chance of being spawned at all times, give the the timers for blue, red, green and red timers the same values for Min and Max. -[Chaged] logic for detecting whether a player is near the mission center or loot crates to test if a player is near any of an array of location or objects. -[Added] a function blck_fnc_allPlayers which returns an array of allPlayers (as a temporizing fix till BIS patches the allPlayers function. - -To Do - consider moving back to storing AI in a group-based manner (doable easily, needs testing). - Build a template for static missions (planned for Ver 6.60). - Write a static mission spawning routine (planned for Ver 6.60). - -3/17/17 Version 6.58 Build 43 -Reverted back to v6.56 build 39 then: -[Added] a Hit event handler to make AI more responsive. All AI in the group to which the hit AI belongs are informed of the shooter's location. -[Changed] the Killed event handler as below. -[Added] New logic for informing AI of the location of players to give AI a more gradual ramp up from little knowledge about player location to full knowledge. -[Added] scripts and functions for reinforcements: a) heli patrols; b) paratroops. -[Added] ...\custom_server\Configs\blck_defines.hpp inside which you can disable APEX gear and other attributes. - -[Changed] Re-organized variables in the configs. -[Changed] Divided configs into tow basic parts: - - General configs for the mission system. - - Mod-specific configs. -[Changed] spawnMarker.sqf in the debug folder (mission.pbo) to reduce unneeded logging. - -3/13/17 Version 6.57 Build 41 -Changed the method of tracking live AI from an array of units to an array of groups which will aid in monitoring groups for a 'stuck' state. -Added Search and Destroy waypoints for each location in the waypoint cycle. -Change waypoint compbat mode to "COMBAT" -Added Group Waypoint Monitor that deals with the case wherein a group gets 'stuck' in a search and destroy waypoint without any nearby targets. -Updated spawnMarker.sqf in the debug folder (mission.pbo) to reduce unneeded logging. - -3/12/17 Version 6.57 Build 40 Reworked AI Event handlers -Added an event handler to make AI more responsive. -Revised logic for informing AI of the location of players to give AI a more gradual ramp up from little knowledge about player location to full knowledge. - -2/24/17 Version 6.56 Build 39. Reworked Mission End Criteria and timing of loading of loot chests -Added a check so that mission completion by players near loot crates was tripped only when players were on foot. -Added a setting that determines whether loot crates are loaded when the mission spawns or once the mission is complete. - see blck_loadCratesTiming = "atMissionCompletion"; (line 78) for this configuration setting. - -1/28/17 Version 6.55 Build 38 Bug Fixes -bug fixes -Commented out logging that is no longer needed -Removed a weapon from loot tables that could be used for dupping. - -1/24/17 Version 6.55 Build 35 Improved handling of static weapons with dead AI; added option to delete loot chests at some time after mission completion. -Added a new configuration blck_killEmptyStaticWeapons which determines if static weapons shoudl be disabled after the AI is killed. -Added a configuration blck_cleanUpLootChests that determines if loot crates are deleted when other mission objects are deleted. -Fixed an issue that prevented proper deletion of mission objects and live AI. - -1/23/17 Version 6.54 Build 33 Bug Fixes -Fixed typos in GMS_fnc_vehicleMonitor.sqf -Removed a few files that are not used or needed. -Removed some code that had been commented out from blck_functions.sqf. - -1/22/17 Version 6.54 build 32 Primarily performance-oriented improvements to switch from using timers and .sqf to a 'thread' that scans various arrays related to missions and mission objects using pre-compiled functions. -Changed code to test for conditions that trigger to spawn mission objects and AI completely -Rewrote the code for spawning emplaced weapons from scratch. -Fixed an error in how the waitTime till a mission was respawned after being updated to inactive status. -Added additional reporting as to the mission type for which AI, statics and vehicle patrols are being spawned. -Continued switching from blck_debugOn to blck_debugLevel. -Continued work to move much of the code from GMS_fnc_missionSpawner to precompiled functions. - - tested and working for all but the emplaced weapons module. -Removed old code that had been commented out from GMS_missionSpawner. -deactivated the 'fired' event handler -added an 'reloaded' event handler to units that adds a magazin of the type used to reload the weapon to prevent units running out of ammo. this also provides a break in firing and is more realistic. -Added a check to GMS_fnc_vehicleMonitor that addes ammo to vehicle cargo when stores are low. Removed the infinite ammo script for static and vehicle weapons, again for greater realism. -Increased number of rounds of ammo added to AI units for primary and secondary weapons. -Tweaked code in GMS_fnc_spawnUnit to increase efficiency. -Attempted a fix for occaisional issues with missions not triggering or ending by changing from distance to distance2D. -Tweaked code for deleting dead AI to also delete any weapons containers nearby. -Checked throughout for potential scope issues; ensured all private variables were declared as such. -Changed the method by which mission patrol vehicles and static weapons are deleted at the end of a mission. - -1/21/17 Build 29. Reverted to an older system for mission timers. -Went back to the timerless system for spawning missions. -Improved code for updating the array of pending/active missions - GMS_fnc_updateMissionQue.sqf re-written to take greater advantage of existing array commands: set and find. -Ensured that the array used to store the location(s) of active or recent missions is properly updated. - -1/13/17 Version 6.54 Build 27 -Rerverted back to the code that spawned a single instance of each mission until I can debug certain issues. - -1/7/17 Version 6.53 Build 24 AI difficulty updates; some performance improvements. -Added a setting blck_baseSkill = 0.7; // This defines the base skil of AI. Increase it to make AI more challenging. -Tweaked AI difficulty settings to make missions more difficult. -changed - GMS_EH_unitKilled - the event handler now uses precompiled rather than compiled on the fly code. -changed - several other minor performance tweaks were made server side. -changed - small changes were made the the loop in blck_client.sqf -Tweaked debugging information to reduced unnecessary logging when not in debug-mode. -Disabled the loop sending server fps client-side -fixed - GMS_fnc_updateMissionQue was not correctly updating mission information after mission completion. -fixed - GMS_fnc_mainThread was not deleted old AI and Vehicles from the arrays used to capture them after mission completion. -changed - calls to GMS_fnc_vehicleMonitor were moved inside the main loop. - -1/3/17 Version 6.51 Build 23 Added several new kinds of messaging to the UI. -Moved configuration for the client from debug\blckclient.sqf to debug\blckconfig.sqf. -Added a setting blck_useKillMessages = true/false; (line 60 of the config. when true, kill messages will be send to all players when a player kills an AI. The style of the message is controlled client-side (debug\blck_config.sqf) -Added a setting blck_useKillScoreMessage = true/false; // (line 61 of the config) when true a tile is displayed to the killer with the kill score information -Added a setting blck_useIEDMessages = true/false; // when true players will receive a message that their vehicle was damaged when AI are killed in a forbidden way (Run over Or Killed with vehicle-mounted weapons) -Fixed: Messages that a nearby IED was detonated are now properly displayed when players illegally kill AI. -Added a way to easily include / exclude APEX items. To exclude them comment out the line - #define useAPEX 1 - at approximately line 219 in the config. - -12/21/16 Version 6.50 Build 21 Added checks that delete empty groups. -Added a check for mod type to the routine that deletes empty groups as this is only needed for Epoch. -Added back the code that (a) eliminates the mission timers and (b) allows multiple instances of a mission to be spawned. - -12/20/16 Version 6.46 Buid 20 Tweaks to time acceleration module. -Moved Variables for time acceleration to the config files. -Reworked code for time acceleration to use timeDay and BIS_fnc_sunriseSunsetTime. - -11/20/16 Build 6.45 Build 19 UI-related additions and bug fixes. -Added Option to display mission information in Toasts (Exile Only). -Fixed an issue related to bugs in Arma 1.66 - -11/16/16 Version 6.44 Build 15 Added options for automated generation of location blacklists; added APEX gear; tweaks to the code that loads items into crates. -Added parameters - blck_blacklistTraderCities=true; // the locations of the Epoch/Exile trader cities will be pulled from the config and added to the location blacklist for the mission system. - blcklistConcreteMixerZones = true; // Locations of the concrete mixers will be pulled from the configs; no missions will be spawned within 1000 m of these locations. - blck_blacklistSpawns = true; // Locations of Exile spawns will be pulled from the config. No missions will spawn within 1000 m of these locations. -Added: the main thread now runs a function that checks for empty groups. -Fixed: The mission system would hang on epoch after a while because createGroup returned nullGroup. this appeared to occur because the maximum number of active groups had been reached. Deleting empty groups periodically solved the issue on a test machine. -Teaked: code to check whether a possible mission spawn location is near a flag or plot pole. Still needs work. -Added: Completed adding EDEN weapons, optics, bipods, optics to AI configurations and mission loot crates. -Added APEX headgear and uniforms. (Note, you would need to add any of these you wished for players to sell to Epoch\\epoch_config\CfgPricing.hpp on Epoch) -Changed: Definitions of blacklist locations such as spawns moved from GMS_findWorld.sqf to the blck_configs_(epoch|exile). -Changed: Divided rifles and optics into subcategories to better enable assigning weapons to AI difficulties in a sort of class-based way, e.g., 556, 6.5, or LMG are separate classes. -Changed: DLS crate loader (not publically available yet) now uses blck_fnc_loadLootItemsFromArray rather than the prior approach for which specific crate loading functions were called depending on the loadout type (weapons, building supplies, foord etc). -Fixed: You can now loot AI bodies in Epoch. - -11/12/16 Version 6.43 Build 12 Added MAP ADDONS and Loot Crate Spawners. -Added: MapAddons - use this to spawn AI strongholds or other compositions you generate with Eden editor at server startup. -Added: Loot Crate Spawner - Spawn loot crates at prespecified points. This is designed so that you can spawn crates inside buildings or other structures spawned through the map-addons. -Added: APEX weapons, sights and optics to AI and loot crates. - -11/12/16 Version 6.42 Build 11 Added code to fit weapons attachments. -Enhancements to code to equip weapons; pointrs, silencers and bipods are now attached. - -11/11/16 Version 6.42 build 10 Added code to fit weapons attachments. Improved code to spawn mission objects. -Redid the code that spawns the objects at missions to work properly with the new formats generated by M3Arma EDEN Editor whilc being backwards compatible with older formats used in the existing missions. -Added code to add scopes and other attachments to AI weapons. -Added new variable blck_blacklistedOptics which you can use to block spawning optics like TMS. -Added new parameter blck_removeNVG which when true will cause NVG to be deleted from AI bodies. -Fixed: launchers and rounds should now be deleted when blck_removeLaunchers = true; -Fixed: All AI should spawn with a uniform. -More bug fixes and correction of typos. - -11/2/16 Version 6.41 Build 9 Kill message improvements; added money to AI. -Added a parameter blck_useKilledAIName that, when true, changes the kill messages to show player name and AI unit name -Added message to players for killstreaks and a crypto/Tabs bonus for killstreaks. -Exile: AI spawn with a few tabs. -//Epoch: AI spawn with a few Crypto -Corrected an error that would spawn Epoch NVG on AI in Exile. - -10/25/16 Version 6.4 Build 8 Code improvements. -Reworked the code to spawn vehicle patrols and static weapons and clean them up. -Reworked the code that messages players to be sure that calling titleText does not hang the messaging function and delay hints or system chat notifications. - -10/22/16 v 6.3 Build 8-14-16 Code performance improvements. -Moved routines that delete dead AI, Alive AI and mission objects from individual loops to a single loop spawned by blck_init.sqf. -Added functions to cache these data with time stamps for later time-based deletion. - -10/21/16 Version 6.2 Build 7 Coding improvements -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 Added a time acceleration function -1) Added back the time acceleration module - -9-25-16 Version 6.1.4 Build 6 bug fixes; added metadata. -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 Code optimization -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 Bug fixes. -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 Bug fixes. -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 Improved vehicle patrols. -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 diff --git a/MPMissions/Exile.Altis/debug/blckClient.sqf b/MPMissions/Exile.Altis/debug/blckClient.sqf index 9ef231a..46b3b6e 100644 --- a/MPMissions/Exile.Altis/debug/blckClient.sqf +++ b/MPMissions/Exile.Altis/debug/blckClient.sqf @@ -1,6 +1,6 @@ //////////////////////////////////////////// // Start Server-side functions and Create, Display Mission Messages for blckeagls mission system for Arma 3 Epoch -// Last Updated 1/11/17 +// Last Updated 8/3/17 // by Ghostrider-DbD- ////////////////////////////////////////// blck_fnc_spawnMarker = compileFinal preprocessfilelinenumbers "debug\spawnMarker.sqf"; @@ -172,7 +172,7 @@ if !(isServer) then }; - diag_log "blck client loaded ver 1/11/17 2.0 8 PM"; + diag_log "blck client loaded ver 8/3/17"; diag_log "[blckeagls] starting client loop"; while {true} do diff --git a/MPMissions/Exile.Altis/debug/deleteMarker.sqf b/MPMissions/Exile.Altis/debug/deleteMarker.sqf index 99458cb..e15ab53 100644 --- a/MPMissions/Exile.Altis/debug/deleteMarker.sqf +++ b/MPMissions/Exile.Altis/debug/deleteMarker.sqf @@ -1,14 +1,12 @@ //////////////////////////////////////////// // Delete and change Mission Markers -// 7/10/15 +// 8/3/17 // by Ghostrider-DbD- ////////////////////////////////////////// // delete a marker -//diag_log format["blck_fnc_deleteMarker:: _this = %1",_this]; private["_markerName"]; _markerName = _this select 0; -//deleteMarker _markerName; _markerName = "label" + _markerName; deleteMarker _markerName; -//diag_log format["deleteMarker complete script for _this = %1",_this]; + diff --git a/MPMissions/Exile.Altis/debug/missionCompleteMarker.sqf b/MPMissions/Exile.Altis/debug/missionCompleteMarker.sqf index ea8eee7..61e5b3c 100644 --- a/MPMissions/Exile.Altis/debug/missionCompleteMarker.sqf +++ b/MPMissions/Exile.Altis/debug/missionCompleteMarker.sqf @@ -1,13 +1,11 @@ //////////////////////////////////////////// // Create, delete and change Mission Markers -// 7/10/15 +// 8/3/17 // by Ghostrider-DbD- ////////////////////////////////////////// // spawn a temporary marker to indicate the position of a 'completed' mission -// this will not show to JIP players private["_location","_MainMarker","_name"]; -//diag_log format["blck_fnc_missionCompleteMarker:: _this = %1",_this]; _location = _this select 0; _name = str(random(1000000)) + "MarkerCleared"; _MainMarker = createMarker [_name, _location]; @@ -16,4 +14,4 @@ _MainMarker setMarkerType "n_hq"; _MainMarker setMarkerText "Mission Cleared"; uiSleep 300; deleteMarker _MainMarker; -//diag_log format["missionCompleteMarker complete script for _this = %1",_this]; + diff --git a/MPMissions/Exile.Altis/debug/spawnMarker.sqf b/MPMissions/Exile.Altis/debug/spawnMarker.sqf index 32ad44a..87e67cf 100644 --- a/MPMissions/Exile.Altis/debug/spawnMarker.sqf +++ b/MPMissions/Exile.Altis/debug/spawnMarker.sqf @@ -1,6 +1,6 @@ //////////////////////////////////////////// // Create Mission Markers that are visible to JIP players -// 10/14/16 +// 8/3/17 // by Ghostrider-DbD- ////////////////////////////////////////// // spawn a round marker of a size and color specified in passed parameters @@ -10,19 +10,8 @@ private["_blck_fn_configureRoundMarker"]; private["_blck_fn_configureRoundMarker"]; _blck_fn_configureRoundMarker = { private["_name","_pos","_color","_size","_MainMarker","_labelType"]; - //diag_log format["_blck_fn_configureRoundMarker: -: _this = %1", _this]; params["_name","_pos","_color","_text","_size","_labelType"]; - /* - _name = _this select 0; - _pos = _this select 1; - _color = _this select 2; - _text = _this select 3; - _size = _this select 4; - _labelType = _this select 5; - //_shape = _this select 6; - //_brush = _this select 7; - */ - //diag_log format["_blck_fn_configureRoundMarker: _pos = %1, _color = %2, _size = %3, _name = %4, label %5",_pos, _color, _size, _name, _text]; + // Do not show the marker if it is in the left upper corner if ((_pos distance [0,0,0]) < 10) exitWith {}; @@ -31,13 +20,11 @@ _blck_fn_configureRoundMarker = { _MainMarker setMarkerShape "ELLIPSE"; _MainMarker setMarkerBrush "Grid"; _MainMarker setMarkerSize _size; // - //diag_log format["_blck_fn_configureRoundMarker: -: _labelType = %1", _labelType]; if (count toArray(_text) > 0) then { switch (_labelType) do { case "arrow": { - //diag_log "++++++++++++++--- marker label arrow detected"; _name = "label" + _name; _textPos = [(_pos select 0) + (count toArray (_text) * 12), (_pos select 1) - (_size select 0), 0]; _MainMarker = createMarker [_name, _textPos]; @@ -45,11 +32,9 @@ _blck_fn_configureRoundMarker = { _MainMarker setMarkerType "HD_Arrow"; _MainMarker setMarkerColor "ColorBlack"; _MainMarker setMarkerText _text; - //_MainMarker setMarkerDir 37; }; case "center": { - //diag_log "++++++++++++++--- marker label dot detected"; _name = "label" + _name; _MainMarker = createMarker [_name, _pos]; _MainMarker setMarkerShape "Icon"; @@ -64,7 +49,6 @@ _blck_fn_configureRoundMarker = { _blck_fn_configureIconMarker = { private["_MainMarker"]; params["_name","_pos",["_color","ColorBlack"],["_text",""],["_icon","mil_triangle"]]; - //diag_log format["_blck_fn_configureIconMarker: _name=%1; _pos=%2; _color=%3; _text=%4",_name,_pos,_color,_text]; _name = "label" + _name; _MainMarker = createMarker [_name, _pos]; @@ -74,14 +58,10 @@ _blck_fn_configureIconMarker = { _MainMarker setMarkerText _text; }; -//diag_log format["spawnMarker:: -- >> _this = %1",_this]; -// _this = [[""BlueMarker"",[12524.1,18204.7,0],""Bandit Patrol"",""center"",""ColorBlue"",[""ELIPSE"",[175,175]]],""ColorBlue"",""BlueMarker""]" params["_mArray"]; _mArray params["_missionType","_markerPos","_markerLabel","_markerLabelType","_markerColor","_markerType"]; _markerType params["_mShape","_mSize","_mBrush"]; -//diag_log format["spawnMarker.sqf:: -- >> _missionType %1 | _markerPos %2 | _markerLabel %3 | _markerLabelType %4 | _markerColor %5 | _markerType %6",_missionType,_markerPos,_markerLabel,_markerLabelType,_markerColor,_markerType]; - if ((_markerType select 0) in ["ELIPSE","RECTANGLE"]) then // not an Icon .... { switch (_missionType) do { @@ -92,8 +72,5 @@ if ((_markerType select 0) in ["ELIPSE","RECTANGLE"]) then // not an Icon .... }; if !((_markerType select 0) in ["ELIPSE","RECTANGLE"]) then { // Deal with case of an icon - // params["_name","_pos",["_color","ColorBlack"],["_text",""],["_icon","mil_triangle"]]; [_missionType,_markerPos, _markerColor,_markerLabel,_markerType select 0] call _blck_fn_configureIconMarker; -}; -//diag_log format["spawnMarker complete script for _this = %1",_this]; - +}; \ No newline at end of file diff --git a/MPMissions/epoch.Altis/debug/blckClient.sqf b/MPMissions/epoch.Altis/debug/blckClient.sqf index 9ef231a..46b3b6e 100644 --- a/MPMissions/epoch.Altis/debug/blckClient.sqf +++ b/MPMissions/epoch.Altis/debug/blckClient.sqf @@ -1,6 +1,6 @@ //////////////////////////////////////////// // Start Server-side functions and Create, Display Mission Messages for blckeagls mission system for Arma 3 Epoch -// Last Updated 1/11/17 +// Last Updated 8/3/17 // by Ghostrider-DbD- ////////////////////////////////////////// blck_fnc_spawnMarker = compileFinal preprocessfilelinenumbers "debug\spawnMarker.sqf"; @@ -172,7 +172,7 @@ if !(isServer) then }; - diag_log "blck client loaded ver 1/11/17 2.0 8 PM"; + diag_log "blck client loaded ver 8/3/17"; diag_log "[blckeagls] starting client loop"; while {true} do diff --git a/MPMissions/epoch.Altis/debug/deleteMarker.sqf b/MPMissions/epoch.Altis/debug/deleteMarker.sqf index 99458cb..e15ab53 100644 --- a/MPMissions/epoch.Altis/debug/deleteMarker.sqf +++ b/MPMissions/epoch.Altis/debug/deleteMarker.sqf @@ -1,14 +1,12 @@ //////////////////////////////////////////// // Delete and change Mission Markers -// 7/10/15 +// 8/3/17 // by Ghostrider-DbD- ////////////////////////////////////////// // delete a marker -//diag_log format["blck_fnc_deleteMarker:: _this = %1",_this]; private["_markerName"]; _markerName = _this select 0; -//deleteMarker _markerName; _markerName = "label" + _markerName; deleteMarker _markerName; -//diag_log format["deleteMarker complete script for _this = %1",_this]; + diff --git a/MPMissions/epoch.Altis/debug/missionCompleteMarker.sqf b/MPMissions/epoch.Altis/debug/missionCompleteMarker.sqf index ea8eee7..61e5b3c 100644 --- a/MPMissions/epoch.Altis/debug/missionCompleteMarker.sqf +++ b/MPMissions/epoch.Altis/debug/missionCompleteMarker.sqf @@ -1,13 +1,11 @@ //////////////////////////////////////////// // Create, delete and change Mission Markers -// 7/10/15 +// 8/3/17 // by Ghostrider-DbD- ////////////////////////////////////////// // spawn a temporary marker to indicate the position of a 'completed' mission -// this will not show to JIP players private["_location","_MainMarker","_name"]; -//diag_log format["blck_fnc_missionCompleteMarker:: _this = %1",_this]; _location = _this select 0; _name = str(random(1000000)) + "MarkerCleared"; _MainMarker = createMarker [_name, _location]; @@ -16,4 +14,4 @@ _MainMarker setMarkerType "n_hq"; _MainMarker setMarkerText "Mission Cleared"; uiSleep 300; deleteMarker _MainMarker; -//diag_log format["missionCompleteMarker complete script for _this = %1",_this]; + diff --git a/MPMissions/epoch.Altis/debug/spawnMarker.sqf b/MPMissions/epoch.Altis/debug/spawnMarker.sqf index 32ad44a..87e67cf 100644 --- a/MPMissions/epoch.Altis/debug/spawnMarker.sqf +++ b/MPMissions/epoch.Altis/debug/spawnMarker.sqf @@ -1,6 +1,6 @@ //////////////////////////////////////////// // Create Mission Markers that are visible to JIP players -// 10/14/16 +// 8/3/17 // by Ghostrider-DbD- ////////////////////////////////////////// // spawn a round marker of a size and color specified in passed parameters @@ -10,19 +10,8 @@ private["_blck_fn_configureRoundMarker"]; private["_blck_fn_configureRoundMarker"]; _blck_fn_configureRoundMarker = { private["_name","_pos","_color","_size","_MainMarker","_labelType"]; - //diag_log format["_blck_fn_configureRoundMarker: -: _this = %1", _this]; params["_name","_pos","_color","_text","_size","_labelType"]; - /* - _name = _this select 0; - _pos = _this select 1; - _color = _this select 2; - _text = _this select 3; - _size = _this select 4; - _labelType = _this select 5; - //_shape = _this select 6; - //_brush = _this select 7; - */ - //diag_log format["_blck_fn_configureRoundMarker: _pos = %1, _color = %2, _size = %3, _name = %4, label %5",_pos, _color, _size, _name, _text]; + // Do not show the marker if it is in the left upper corner if ((_pos distance [0,0,0]) < 10) exitWith {}; @@ -31,13 +20,11 @@ _blck_fn_configureRoundMarker = { _MainMarker setMarkerShape "ELLIPSE"; _MainMarker setMarkerBrush "Grid"; _MainMarker setMarkerSize _size; // - //diag_log format["_blck_fn_configureRoundMarker: -: _labelType = %1", _labelType]; if (count toArray(_text) > 0) then { switch (_labelType) do { case "arrow": { - //diag_log "++++++++++++++--- marker label arrow detected"; _name = "label" + _name; _textPos = [(_pos select 0) + (count toArray (_text) * 12), (_pos select 1) - (_size select 0), 0]; _MainMarker = createMarker [_name, _textPos]; @@ -45,11 +32,9 @@ _blck_fn_configureRoundMarker = { _MainMarker setMarkerType "HD_Arrow"; _MainMarker setMarkerColor "ColorBlack"; _MainMarker setMarkerText _text; - //_MainMarker setMarkerDir 37; }; case "center": { - //diag_log "++++++++++++++--- marker label dot detected"; _name = "label" + _name; _MainMarker = createMarker [_name, _pos]; _MainMarker setMarkerShape "Icon"; @@ -64,7 +49,6 @@ _blck_fn_configureRoundMarker = { _blck_fn_configureIconMarker = { private["_MainMarker"]; params["_name","_pos",["_color","ColorBlack"],["_text",""],["_icon","mil_triangle"]]; - //diag_log format["_blck_fn_configureIconMarker: _name=%1; _pos=%2; _color=%3; _text=%4",_name,_pos,_color,_text]; _name = "label" + _name; _MainMarker = createMarker [_name, _pos]; @@ -74,14 +58,10 @@ _blck_fn_configureIconMarker = { _MainMarker setMarkerText _text; }; -//diag_log format["spawnMarker:: -- >> _this = %1",_this]; -// _this = [[""BlueMarker"",[12524.1,18204.7,0],""Bandit Patrol"",""center"",""ColorBlue"",[""ELIPSE"",[175,175]]],""ColorBlue"",""BlueMarker""]" params["_mArray"]; _mArray params["_missionType","_markerPos","_markerLabel","_markerLabelType","_markerColor","_markerType"]; _markerType params["_mShape","_mSize","_mBrush"]; -//diag_log format["spawnMarker.sqf:: -- >> _missionType %1 | _markerPos %2 | _markerLabel %3 | _markerLabelType %4 | _markerColor %5 | _markerType %6",_missionType,_markerPos,_markerLabel,_markerLabelType,_markerColor,_markerType]; - if ((_markerType select 0) in ["ELIPSE","RECTANGLE"]) then // not an Icon .... { switch (_missionType) do { @@ -92,8 +72,5 @@ if ((_markerType select 0) in ["ELIPSE","RECTANGLE"]) then // not an Icon .... }; if !((_markerType select 0) in ["ELIPSE","RECTANGLE"]) then { // Deal with case of an icon - // params["_name","_pos",["_color","ColorBlack"],["_text",""],["_icon","mil_triangle"]]; [_missionType,_markerPos, _markerColor,_markerLabel,_markerType select 0] call _blck_fn_configureIconMarker; -}; -//diag_log format["spawnMarker complete script for _this = %1",_this]; - +}; \ No newline at end of file diff --git a/README.md b/README.md index 5dd6b3e..5635f22 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,4 @@ -Blckegls mission system Ver 6.59 - -<<<<<<< HEAD -Build 63 -======= -Build 60 ->>>>>>> origin/Version-6.59-Build-63 +Blckegls mission system Version-6.60-Build-69 Included is an updated version of blckeagls mission system. This began as an effort to fix bugs in and upgrade version 2.0.2 as updated by Narines and has now evolved to a complete reworking of almost all code. diff --git a/changeLog.sqf b/changeLog.sqf index b6806af..0961961 100644 --- a/changeLog.sqf +++ b/changeLog.sqf @@ -4,11 +4,11 @@ Loosely based on the AI mission system by blckeagls ver 2.0.2 Contributions by Narines: bug fixes, testing, infinite ammo fix. Ideas or code from that by Vampire and KiloSwiss have been used for certain functions. +8/3/17 Version 6.60 Build 66 +[added] AI units in mission vehicles and emplaced weapons are notified of the location of the shooter when an AI unit is hit or killed. Location of the unit is revealed gradually between 0.1 and 4 where 4 is precise. Increments increase with increasing mission difficulty. +[Changed] Removed some unused code from files in the debug folder of the mission.pbo. 6/1/17 Version 6.59 Build 59 - -6/1/17 Version 6.59 Build 60 - [changed] Players are no longer given crypto for each AI kill. Crypto added to AI Bodies was increased. [fixed] error in GMS_fnc_setupWaypoints wherein _arc was not defined early enough in the script. [fixed] Exile Respect Loss bug (temporary fix only).