diff --git a/CreatePBOs.bat b/CreatePBOs.bat new file mode 100644 index 0000000..5c35958 --- /dev/null +++ b/CreatePBOs.bat @@ -0,0 +1,40 @@ +@Echo off +REM C:\Program Files\PBO Manager v.1.4 beta\PBOConsole.exe -pack + +SET PBO="C:\Program Files\PBO Manager v.1.4 beta\PBOConsole.exe" +f: +cd F:\GitRepo\Arma3_Repo\Server + + +REM Create @A3EAI PBO +%PBO% -pack .\@A3EAI\addons\a3eai_config .\@A3EAI\addons\a3eai_config.pbo +%PBO% -pack .\@A3EAI\addons\a3eai .\@A3EAI\addons\a3eai.pbo + +REM Create a3_vemf_reloaded +%PBO% -pack .\@epochhive\addons\a3_vemf_reloaded .\@epochhive\addons\a3_vemf_reloaded.pbo +%PBO% -pack .\@epochhive\addons\a3_vemf_reloaded_config .\@epochhive\addons\a3_vemf_reloaded_config.pbo + +REM Create DZMS +%PBO% -pack .\@epochhive\addons\DZMS .\@epochhive\addons\DZMS.pbo + +REM Epoch Server Files +%PBO% -pack .\@epochhive\addons\epoch_server .\@epochhive\addons\epoch_server.pbo +%PBO% -pack .\@epochhive\addons\epoch_server_core .\@epochhive\addons\epoch_server_core.pbo +%PBO% -pack .\@epochhive\addons\epoch_server_debris_event .\@epochhive\addons\epoch_server_debris_event.pbo +%PBO% -pack .\@epochhive\epoch_server\addons\events .\@epochhive\epoch_server\addons\events.pbo +%PBO% -pack .\@epochhive\addons\epoch_server_settings .\@epochhive\addons\epoch_server_settings.pbo +%PBO% -pack .\@epochhive\addons\epoch_server_vip_event .\@epochhive\addons\epoch_server_vip_event.pbo + +REM SEM +%PBO% -pack .\@epochhive\addons\sem .\@epochhive\addons\sem.pbo + +REM UD +%PBO% -pack .\@epochhive\addons\ud .\@epochhive\addons\ud.pbo + +REM GMS +%PBO% -pack .\@GMS\addons\custom_server .\@GMS\addons\custom_server.pbo + +REM Mission File +%PBO% -pack .\mpmissions\epoch.Bornholm .\mpmissions\epoch.Bornholm.pbo + +pause \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server/$PREFIX$ b/Server/@epochhive/addons/epoch_server/$PREFIX$ new file mode 100644 index 0000000..585fd90 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/$PREFIX$ @@ -0,0 +1 @@ +epoch_server \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server/BIS_AddonInfo.hpp b/Server/@epochhive/addons/epoch_server/BIS_AddonInfo.hpp new file mode 100644 index 0000000..7f5f255 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/BIS_AddonInfo.hpp @@ -0,0 +1,5 @@ +class BIS_AddonInfo +{ + author=""; + timepacked="1521065975"; +}; diff --git a/Server/@epochhive/addons/epoch_server/build.hpp b/Server/@epochhive/addons/epoch_server/build.hpp new file mode 100644 index 0000000..ebdd628 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/build.hpp @@ -0,0 +1 @@ +build=826; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_sapperObjs.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_sapperObjs.sqf new file mode 100644 index 0000000..37bc42a --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_sapperObjs.sqf @@ -0,0 +1,31 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Handle set damage on sapper bombs sderver side + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_sapperObjs.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_safeBombs","_safeUnits"]; +//[[[end]]] +params [["_bomb",objNull], "_player", ["_token","",[""]], "_unit", ["_killUnit",false]]; +if !([_player,_token]call EPOCH_server_getPToken)exitWith{}; +_safeUnits = ["Epoch_Sapper_F","Epoch_SapperB_F","Epoch_SapperG_F"]; +_safeBombs = ["Sapper_Charge_Ammo","SapperB_Charge_Ammo","SmokeShellToxicSapper"]; +if!(isNull _bomb)then{ + if(typeOf _bomb in _safeBombs) then { + _bomb setDamage 1; + }; +}; +if(_killUnit && {!isNull _unit})then{ + if(typeOf _unit in _safeUnits) then { + _unit setDamage 1; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf new file mode 100644 index 0000000..3225c8a --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf @@ -0,0 +1,34 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + 3d Sound System + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_nearBy","_range","_say3dsoundsConfig","_selectedSound","_target","_targets"]; +//[[[end]]] +params [["_player",objNull,[objNull]],["_target",objNull],["_sound","",[""]], ["_token","",[""]] ]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (isNull _target) then {_target = _player}; + +_say3dsoundsConfig = 'CfgSay3Dhandler' call EPOCH_returnConfig; +_selectedSound = (_say3dsoundsConfig >> _sound); +if (isClass _selectedSound) then { + // get nearby players based on range + _range = getNumber(_selectedSound >> "distance"); + _nearBy = (_target nearEntities [["Epoch_Male_F","Epoch_Female_F","LandVehicle","Ship","Air","Tank"], _range]) select {isPlayer _x}; + // send sound to everyone except caller. + _targets = _nearBy - [_player]; + if !(_targets isEqualTo []) then { + [_target, _sound] remoteExec ['say3D',_targets]; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf new file mode 100644 index 0000000..4ae1912 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf @@ -0,0 +1,40 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Player Animations + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf + + Usage: + [_player,"moveName","token",_target] call EPOCH_server_handle_switchMove; + or + [_player,"moveName","token"] call EPOCH_server_handle_switchMove; +*/ +//[[[cog import generate_private_arrays ]]] +private ["_nearBy","_range","_selectedMove","_switchMovehandlerConfig","_target","_targets"]; +//[[[end]]] +params [["_player",objNull,[objNull]],["_move","",[""]],["_token","",[""]],["_target",objNull]]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (_move isEqualTo "") exitWith {}; +if (isNull _target) then {_target = _player}; + +_switchMovehandlerConfig = 'CfgSwitchMovehandler' call EPOCH_returnConfig; +_selectedMove = (_switchMovehandlerConfig >> _move); +if (isClass _selectedMove) then { + // get nearby players based on range + _range = getNumber(_selectedMove >> "distance"); + _nearBy = (_target nearEntities [["Epoch_Male_F","Epoch_Female_F","LandVehicle","Ship","Air","Tank"], _range]) select {isPlayer _x}; + // send move to everyone except caller. + _targets = _nearBy - [_player]; + if !(_targets isEqualTo []) then { + [_target, _move] remoteExec ['switchMove',_targets]; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerAntagonist.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerAntagonist.sqf new file mode 100644 index 0000000..4ccfe37 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerAntagonist.sqf @@ -0,0 +1,24 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark + + Description: + Trigger an antagonist on a client. Option to add antagonist object to target as a variable. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerAntagonist.sqf +*/ +params ["_target","_antagonistClass","_doVariable","_player","_token"]; +diag_log format["Epoch: ADMIN: Attempting antagonist (%3) trigger from %1 for %2.", getPlayerUID _player, _target, _antagonistClass]; +if !([_player,_token]call EPOCH_server_getPToken)exitWith{}; + +if(!isNull _target)then{ +diag_log format["Epoch: ADMIN: Calling antagonist (%3) trigger from %1 for %2.", getPlayerUID _player, _target, _antagonistClass]; + +[_antagonistClass, _target, _doVariable] remoteExec ["EPOCH_unitSpawn",_target]; +//if(!isNull _player)then{hideObjectGlobal _player;};//Do elsewhere, allow revival +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf new file mode 100644 index 0000000..92f60ed --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf @@ -0,0 +1,47 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Trigger antagonists + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf +*/ +params [["_target",objNull,[objNull]], ["_type","",[""]]]; +if (!isNull _target) then { + switch (_type) do { + case "UAV": { + "I_UAV_01_F" remoteExec ['EPOCH_unitSpawnIncrease',_target]; + }; + case "Cloak": { + if (sunOrMoon < 1) then { + "Epoch_Cloak_F" remoteExec ['EPOCH_unitSpawnIncrease',_target]; + } else { + "Epoch_Sapper_F" remoteExec ['EPOCH_unitSpawnIncrease',_target]; + }; + }; + case "Sapper": { + "Epoch_Sapper_F" remoteExec ['EPOCH_unitSpawnIncrease',_target]; + }; + case "GreatWhite": { + "GreatWhite_F" remoteExec ['EPOCH_unitSpawnIncrease',_target]; + }; + case "SapperB": { + "Epoch_SapperB_F" remoteExec ['EPOCH_unitSpawnIncrease',_target]; + }; + case "SapperG": { + "Epoch_SapperG_F" remoteExec ['EPOCH_unitSpawnIncrease',_target]; + }; + case "PHANTOM": { + "PHANTOM" remoteExec ['EPOCH_unitSpawnIncrease',_target]; + }; + case "Zombie": { + ["EPOCH_RyanZombie_1",12] remoteExec ['EPOCH_unitSpawnIncrease',_target]; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_saveBuilding.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_saveBuilding.sqf new file mode 100644 index 0000000..a79b10d --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_saveBuilding.sqf @@ -0,0 +1,42 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Building Save function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_saveBuilding.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_VAL","_animPhases","_cfgBaseBuilding","_class","_objHiveKey","_objSlot","_return","_worldspace"]; +//[[[end]]] +_return = false; +if !(isNull _this) then { + _objSlot = _this getVariable["BUILD_SLOT", -1]; + if (_objSlot != -1) then{ + _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + _this setDamage 0; + _class = typeOf _this; + _worldspace = [getposworld _this call EPOCH_precisionPos, vectordir _this, vectorup _this, true]; + _objHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _objSlot]; + _animPhases = []; + { + _animPhases pushBack (_this animationPhase _x) + } foreach (getArray(_cfgBaseBuilding >> _class >> "persistAnimations")); + + _Textures = []; + if (missionnamespace getvariable ["UseCustomTextures",false]) then { + _Textures = getObjectTextures _this; + }; + + _VAL = [_class, _worldspace, _this getVariable["EPOCH_secureStorage", "-1"], _this getVariable["BUILD_OWNER", "-1"], _this getVariable["TEXTURE_SLOT", 0], _animPhases, _Textures]; + ["Building", _objHiveKey, EPOCH_expiresBuilding, _VAL] call EPOCH_fnc_server_hiveSETEX; + _return = true; + }; +}; +_return diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_changeOwner.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_changeOwner.sqf new file mode 100644 index 0000000..0927954 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_changeOwner.sqf @@ -0,0 +1,29 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Change owner of NPC + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_changeOwner.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_newOwner","_result"]; +//[[[end]]] +params ["_object","_newOwnerObj"]; +_newOwner = owner _newOwnerObj; +_result = false; +if (!isNull _object) then { + if (local _object) then { + if ((owner _object) != _newOwner) then { + _result = _object setOwner _newOwner; + diag_log format["DEBUG CHANGEOWNER: %1 OWNER: %2 PLAYER: %3 RESULT: %4", _object,owner(_object),_newOwner,_result]; + }; + }; +}; +_result diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf new file mode 100644 index 0000000..5bbb56e --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf @@ -0,0 +1,231 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Skaronator + + Description: + Load Buildings from Epoch Hive + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_Simulated","_DamageAllowed","_ExceptedBaseObjects","_IndestructibleBaseObjects","_UseIndestructible","_VAL","_ammoClass","_ammoObj","_anims","_animsData","_arr","_arrCount","_baseObj","_cfgBaseBuilding","_class","_color","_damage","_location","_marker","_maxTTL","_owner","_response","_serverSettingsConfig","_storageSlot","_textureSlot","_ttl","_vehHiveKey","_worldspace"]; +//[[[end]]] +EPOCH_BaseCams = []; +EPOCH_Plotpoles = []; +_maxTTL = parseNumber EPOCH_expiresBuilding; +_serverSettingsConfig = configFile >> "CfgEpochServer"; +_baseDynamicSimulationSystem = [_serverSettingsConfig, "baseDynamicSimulationSystem", true] call EPOCH_fnc_returnConfigEntry; +_UseIndestructible = [_serverSettingsConfig, "UseIndestructible", false] call EPOCH_fnc_returnConfigEntry; +_IndestructibleBaseObjects = [_serverSettingsConfig, "IndestructibleBaseObjects", []] call EPOCH_fnc_returnConfigEntry; +_ExceptedBaseObjects = [_serverSettingsConfig, "ExceptedBaseObjects", []] call EPOCH_fnc_returnConfigEntry; +_UseDeSimulateObjects = [_serverSettingsConfig, "UseDeSimulateObjects", true] call EPOCH_fnc_returnConfigEntry; +_DeSimulateObjects = [_serverSettingsConfig, "DeSimulateObjects", []] call EPOCH_fnc_returnConfigEntry; +_ExceptedDeSymObjects = [_serverSettingsConfig, "ExceptedDeSymObjects", []] call EPOCH_fnc_returnConfigEntry; +_DisableDoorsOnObj = [_serverSettingsConfig, "DisableDoorsOnObj", []] call EPOCH_fnc_returnConfigEntry; +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + +_VAL = ["", [], "", "", 0, []]; + +for "_i" from 0 to _this do { + _vehHiveKey = format ["%1:%2", (call EPOCH_fn_InstanceID),_i]; + _response = ["Building", _vehHiveKey] call EPOCH_fnc_server_hiveGETTTL; + _Simulated = true; + _DamageAllowed = true; + + if ((_response select 0) == 1 && (_response select 1) isEqualType [] && !((_response select 1) isEqualTo [])) then { + _arr = _response select 1; + _ttl = _response select 2; + + // DEBUG to see if this command works + if !(_arr isEqualTypeParams _VAL) then { + diag_log format["DEBUG: Data does not match schema: %1 vs %2",_arr,_VAL]; + }; + + _arrCount = count _arr; + + _class = _arr select 0; + _worldspace = _arr select 1; + + _storageSlot = "-1"; + if (_arrCount >= 3) then { + if ((_arr select 2) isEqualType 0) then { + _storageSlot = str(_arr select 2); + } else { + _storageSlot = _arr select 2; + }; + // diag_log format ["DEBUG _class: %1 _worldspace: %2 _storageSlot: %3", _class, _worldspace, _storageSlot]; + }; + + _owner = "-1"; + if (_arrCount >= 4) then { + _owner = _arr select 3; + }; + + // load texture index + _textureSlot = 0; + if (_arrCount >= 5) then { + _textureSlot = _arr select 4; + }; + + // experiment with damage factor based on time only for now. + _damage = ((1 - (_ttl / _maxTTL)) min 1) max 0; + + _worldspace params ["_pos","_vectordir","_vectorup",["_useworld",false]]; + _vectordirup = [_vectordir,_vectorup]; + + // increased position precision + if (count _pos == 2) then{ + _pos = (_pos select 0) vectorAdd (_pos select 1); + }; + + // remove old safes on && !(_class isKindOf 'Constructions_lockedstatic_F') + if (isClass (configFile >> "CfgVehicles" >> _class) && (_damage < 1) && !(_class isKindOf 'Constructions_lockedstatic_F')) then { + + _baseObj = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"]; + { + _x params ["_ClassX",["_VarsX",[]]]; + if ((tolower _class) isequalto (tolower _ClassX)) exitwith { + { + _x params ["_VarNameX","_ValueX"]; + _baseObj setvariable [_VarNameX,_ValueX,true]; + } foreach _VarsX; + }; + } foreach _DisableDoorsOnObj; + if (_UseIndestructible) then { + if ({_class iskindof _x} count _ExceptedBaseObjects == 0) then { + { + if (_class iskindof _x) exitwith { + _baseObj allowdamage false; + _DamageAllowed = false; + }; + } foreach _IndestructibleBaseObjects; + }; + }; + if (_UseDeSimulateObjects) then { + if ({_class iskindof _x} count _ExceptedDeSymObjects == 0) then { + { + if (_class iskindof _x) exitwith { + _baseObj enablesimulationglobal false; + _Simulated = false; + }; + } foreach _DeSimulateObjects; + }; + }; + if (_useworld) then { + _baseObj setposworld _pos; + } + else { + _baseObj setposATL _pos; + }; + _baseObj setVectorDirAndUp _vectordirup; + + if (_Simulated && _baseDynamicSimulationSystem) then { // Only needed, if simulation is not disabled + // new Dynamicsimulation + _baseObj enableSimulationGlobal false; // turn off sim on server start, let dynSim activate it to true + _baseObj enableDynamicSimulation true; + _baseObj triggerDynamicSimulation false; // this object doesnt need to turn anything on in the server + }; + + // spawn additional object for trap + _ammoClass = (_cfgBaseBuilding >> _class >> "ammoClass"); + if(isText _ammoClass) then { + _ammoClass = getText _ammoClass; + _ammoObj = createVehicle [_ammoClass, [0,0,0], [], 0, "CAN_COLLIDE"]; + if (_useworld) then { + _ammoObj setposworld _pos; + } + else { + _ammoObj setposATL _pos; + }; + _ammoObj setVectorDirAndUp _vectordirup; + _baseObj setVariable ["EPOCH_TRAP_OBJ",_ammoObj]; + _baseObj addEventHandler ["Explosion", {(_this select 0) setDamage 1}]; + }; + + // set persistent Animations + if (_arrCount >= 6) then { + _anims = []; + _animsData = _arr select 5; + // check that we have an array to prevent any errors + if (_animsData isEqualType _anims) then { + _anims = _animsData; + }; + + { + _baseObj animate [_x, _anims param [_forEachIndex,0], true] + } foreach(getArray(_cfgBaseBuilding >> _class >> "persistAnimations")); + }; + + // Handle Jammers and create marker if EPOCH_SHOW_JAMMERS set true. + if (_class in ((call EPOCH_JammerClasses) + ["BaseCam_EPOCH"])) then { + if (_owner != "-1") then { + _baseObj setVariable ["BUILD_OWNER", _owner, true]; + }; + + // add BaseCam to public array + if (_class isequalto "BaseCam_EPOCH") then { + EPOCH_BaseCams pushBackUnique _baseObj; + // Set PubVar later after all Cams are loaded in + }; + + if (_class in (call EPOCH_JammerClasses)) then { + EPOCH_Plotpoles pushbackunique _baseObj; + if (EPOCH_SHOW_JAMMERS) then { + _marker = createMarker [str(_pos), _pos]; + _marker setMarkerShape "ICON"; + // TODO allow players to change this per base + _marker setMarkerType "mil_dot"; + // _marker setMarkerText _class; + _marker setMarkerColor "ColorBlue"; + }; + }; + }; + + _baseObj setDamage _damage; + if (_DamageAllowed) then { // Only needed, if damage is allowed + _baseObj call EPOCH_server_buildingInit; + }; + _baseObj setVariable ["BUILD_SLOT", _i, true]; + + if (_arrCount >= 7 && (missionnamespace getvariable ["UseCustomTextures",false])) then { + _Textures = _arr select 6; + { + _baseObj setobjecttextureglobal [_foreachindex,_x]; + } foreach _Textures; + } + else { + if (_textureSlot != 0) then { + // get texture path from index + _color = getArray (_cfgBaseBuilding >> _class >> "availableTextures"); + if !(_color isEqualTo []) then { + _baseObj setObjectTextureGlobal [0, (_color select _textureSlot)]; + _baseObj setVariable ["TEXTURE_SLOT", _textureSlot, true]; + }; + }; + }; + + EPOCH_BuildingSlots set [_i,1]; + if (EPOCH_DEBUG_VEH) then { + _marker = createMarker [str(_pos) , _pos]; + _marker setMarkerShape "ICON"; + _marker setMarkerType "mil_dot"; + _marker setMarkerText _class; + _marker setMarkerColor "ColorRed"; + }; + } else { //Need Hivecall to delete the object out of the DB! + EPOCH_BuildingSlots set [_i,0]; + }; + } + else { + EPOCH_BuildingSlots set [_i,0]; + }; +}; +publicvariable "EPOCH_BaseCams"; +publicvariable "EPOCH_Plotpoles"; +missionNamespace setVariable ["EPOCH_BuildingSlotCount", {_x == 0} count EPOCH_BuildingSlots, true]; +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_maintBUILD.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_maintBUILD.sqf new file mode 100644 index 0000000..6f2f27e --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_maintBUILD.sqf @@ -0,0 +1,91 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Skaronator + + Description: + Building Maintain + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_maintBUILD.sqf + + Example: + // Client RE + [_this, player, _maintainCount, Epoch_personalToken] remoteExec ["EPOCH_server_maintBUILD",2]; + + Parameter(s): + _this select 0: OBJECT - Jammer object + _this select 1: STRING - Player Object + _this select 2: STRING - Maintain count + _this select 3: STRING - Epoch Personal Token + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cIndex","_counter","_current_crypto","_objSlot","_playerCryptoLimit","_playerUID","_storSlot","_vars"]; +//[[[end]]] +params [["_object",objNull],"_player","_maintCount",["_token","",[""]] ]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (isNull _object) exitWith{}; +if (_player distance _object > 20) exitWith{}; + +_playerUID = getPlayerUID _player; +_counter = 0; + +if (typeOf _object in (call EPOCH_JammerClasses)) then { + + _objSlot = _object getVariable["BUILD_SLOT", -1]; + if (_objSlot != -1) then { + + // get vars array and current Crypto value + _cIndex = EPOCH_customVars find "Crypto"; + _vars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar]; + _current_crypto = _vars select _cIndex; + + if (_current_crypto >= _maintCount) then { + + // maintain jammer + _counter = _counter + 1; + EPOCH_saveBuildQueue pushBackUnique _object; + + if (_maintCount > 0) then { + + // maintain all objects within range + { + _storSlot = _x getVariable["STORAGE_SLOT", "ABORT"]; + if (_storSlot != "ABORT") then { + if ((damage _x) > 0) then { + _counter = _counter + 1; + EPOCH_saveStorQueue pushBackUnique _x; + }; + }; + _objSlot = _x getVariable["BUILD_SLOT", -1]; + if (_objSlot != -1) then{ + if ((damage _x) > 0) then { + _counter = _counter + 1; + EPOCH_saveBuildQueue pushBackUnique _x; + }; + }; + if (_counter > _maintCount) exitWith{}; + } forEach nearestObjects[_object, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Constructions_lockedstatic_F"], call EPOCH_MaxJammerRange]; + + // effect crypto + _playerCryptoLimit = EPOCH_customVarLimits select _cIndex; + _playerCryptoLimit params ["_playerCryptoLimitMax","_playerCryptoLimitMin"]; + _current_crypto = ((_current_crypto - _counter) min _playerCryptoLimitMax) max _playerCryptoLimitMin; + + _current_crypto remoteExec ['EPOCH_effectCrypto',_player]; + + _vars set[_cIndex, _current_crypto]; + _player setVariable["VARS", _vars]; + + }; + diag_log format["Epoch: ADMIN: %1 maintained %2 base objects at %3", _playerUID, _counter, getPosATL _object]; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_paintBUILD.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_paintBUILD.sqf new file mode 100644 index 0000000..71ad31d --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_paintBUILD.sqf @@ -0,0 +1,41 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Building Paint handler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_paintBUILD.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgBaseBuilding","_class","_color","_currentTextureSlot","_objSlot","_playerUID"]; +//[[[end]]] +params [["_object",objNull],"_textureSlot","_player",["_token","",[""]] ]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (isNull _object) exitWith{}; +if (_player distance _object > 20) exitWith{}; + +_playerUID = getPlayerUID _player; + +_objSlot = _object getVariable["BUILD_SLOT", -1]; +if (_objSlot != -1) then { + + _currentTextureSlot = _object getVariable["TEXTURE_SLOT", 0]; + if (_textureSlot != _currentTextureSlot) then { + + _class = typeOf _object; + _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + _color = getArray(_cfgBaseBuilding >> _class >> "availableTextures"); + if !(_color isEqualTo[]) then { + _object setObjectTextureGlobal[0, (_color select _textureSlot)]; + _object setVariable["TEXTURE_SLOT", _textureSlot, true]; + _object call EPOCH_saveBuilding; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_removeBUILD.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_removeBUILD.sqf new file mode 100644 index 0000000..8b12c72 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_removeBUILD.sqf @@ -0,0 +1,185 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Remove Building + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_removeBUILD.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_ammoObj","_arrCount","_attachments","_cfgBaseBuilding","_gwh","_inventory","_isTemporary","_magazineName","_magazineSize","_magsAmmoCargo","_nearbyWH","_objQty","_objType","_objTypes","_posWH","_qty","_removeParts","_storageSlot","_vehSlot","_wMags","_wMagsArray","_wepsItemsCargo"]; +//[[[end]]] +params ["_building","_player",["_token","",[""]] ]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (isNull _building) exitWith{}; +if (_player distance _building > 20) exitWith{}; +if (_building getvariable ['Build_LockedForRemoving',false]) exitwith {}; +_building setvariable ['Build_LockedForRemoving',true]; + +// TODO add group check here since this should only be removed by group or owner of pole +_objType = typeOf _building; +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +_isTemporary = getNumber(_cfgBaseBuilding >> _objType >> "isTemporary"); + +// check that object has building or storage slot +_vehSlot = _building getVariable["BUILD_SLOT", -1]; +_storageSlot = _building getVariable["STORAGE_SLOT", "ABORT"]; + +if (_vehSlot != -1 || _storageSlot != "ABORT" || _isTemporary == 1) then{ + + _removeParts = getArray(_cfgBaseBuilding >> _objType >> "removeParts"); + if !(_removeParts isEqualTo []) then { + + _posWH = getPosATL _player; + _gwh = objNull; + // give player a refund of parts + _nearbyWH = nearestObjects[_posWH, ["groundWeaponHolder"], 2]; + if !(_nearbyWH isEqualTo[]) then{ + _gwh = _nearbyWH select 0; + // _posWH = getPosATL _gwh; + } else { + _gwh = createVehicle["groundWeaponHolder", [0,0,0], [], 0, "CAN_COLLIDE"]; + _gwh setPosATL _posWH; + }; + + if !(isNull _gwh) then{ + + // if normal storage device dump items on ground. + if (_building isKindOf "Buildable_Storage") then { + + // may not be needed but should prevent in DB. + _wepsItemsCargo = weaponsItemsCargo _building; + if (isNil "_wepsItemsCargo") then{ + _wepsItemsCargo = []; + }; + _magsAmmoCargo = magazinesAmmoCargo _building; + if (isNil "_magsAmmoCargo") then{ + _magsAmmoCargo = []; + }; + + // dump items on ground + _inventory = [ + _wepsItemsCargo, + _magsAmmoCargo, + getBackpackCargo _building, + getItemCargo _building + ]; + + [_building, _player] call EPOCH_server_save_killedStorage; + deleteVehicle _building; + + { + _objType = _forEachIndex; + + _objTypes = _x; + _objQty = []; + + if (_objType in[2, 3]) then{ + _objTypes = _x select 0; + _objQty = _x select 1; + }; + + { + switch _objType do { + case 0: { + if (_x isEqualType []) then{ + _arrCount = count _x; + if (_arrCount >= 4) then{ + + _gwh addWeaponCargoGlobal[_x deleteAt 0, 1]; + + _attachments = []; + _wMags = false; + _wMagsArray = []; + // suppressor, laser, optics, magazines(array), bipods + { + // magazines + if (_x isEqualType []) then{ + _wMags = true; + _wMagsArray = _x; + } + else { + // attachments + if (_x != "") then{ + _attachments pushBack _x; + }; + }; + } forEach _x; + + // add all attachments to vehicle + // TODO replace with adding attachments directly to gun (Arma feature dependant) + { + _gwh addItemCargoGlobal[_x, 1]; + } forEach _attachments; + + if (_wMags) then{ + if (_wMagsArray isEqualType [] && (count _wMagsArray) >= 2) then{ + _gwh addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1]; + }; + }; + + }; + }; + }; + case 1: { + if (_x isEqualType []) then{ + if ((count _x) == 2) then{ + _magazineName = _x select 0; + _magazineSize = _x select 1; + + if ((_magazineName isEqualType "STRING") && (_magazineSize isEqualType 0)) then{ + _gwh addMagazineAmmoCargo[_magazineName, 1, _magazineSize]; + }; + }; + }; + }; + case 2: { + if (_x isEqualType "STRING") then{ + _qty = _objQty select _forEachIndex; + _gwh addBackpackCargoGlobal[_x, _qty]; + }; + }; + case 3: { + if (_x isEqualType "STRING") then{ + _qty = _objQty select _forEachIndex; + _gwh addItemCargoGlobal[_x, _qty]; + }; + }; + }; + }forEach _objTypes; + }forEach _inventory; + + } else { + + // Remove trap object + _ammoObj = _building getVariable ["EPOCH_TRAP_OBJ",objNull]; + if !(isNull _ammoObj) then { + deleteVehicle _ammoObj; + }; + + [_building, _player] call EPOCH_server_save_killedBuilding; + deleteVehicle _building; + }; + // Normal config based payout + _nearbyWH = nearestObjects[_posWH, ["groundWeaponHolder"], 2]; + if !(_nearbyWH isEqualTo[]) then{ + _gwh = _nearbyWH select 0; + // _posWH = getPosATL _gwh; + } else { + _gwh = createVehicle["groundWeaponHolder", [0,0,0], [], 0, "CAN_COLLIDE"]; + _gwh setPosATL _posWH; + }; + + { + _gwh addMagazineCargoGlobal[_x select 0, _x select 1]; + } forEach _removeParts; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_saveBuilding.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_saveBuilding.sqf new file mode 100644 index 0000000..7cc27a9 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_saveBuilding.sqf @@ -0,0 +1,126 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Building Save + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_saveBuilding.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgBaseBuilding","_findnextslot","_newVehicle","_objSlot","_oemType","_playerUID","_serverSettingsConfig","_slot","_staticClass","_staticClassConfig","_storageObj","_vehiclePos"]; +//[[[end]]] +params ["_vehicle", "_player", ["_token","",[""]] ]; + +if (isNull _vehicle) exitWith{}; +if !([_player,_token] call EPOCH_server_getPToken) exitWith {}; + +_playerUID = getPlayerUID _player; + +if (!isNull ropeAttachedTo _vehicle) exitWith{}; + +_oemType = typeOf _vehicle; +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +_staticClassConfig = (_cfgBaseBuilding >> _oemType >> "staticClass"); +if (isText _staticClassConfig) then { + + _staticClass = getText(_staticClassConfig); + if (_staticClass isKindOf "Buildable_Storage" || _staticClass isKindOf "Constructions_lockedstatic_F") then{ + + if !(EPOCH_StorageSlots isEqualTo[]) then { + + _slot = EPOCH_StorageSlots deleteAt 0; + missionNamespace setVariable ["EPOCH_StorageSlotsCount",count EPOCH_StorageSlots, true]; + + // Secure and insecure storage + _vehiclePos = getposATL _vehicle; + + _storageObj = [_staticClass,_vehicle] call EPOCH_swapBuilding; + + // add new gardens to manager + if (_staticClass isEqualTo "Garden_EPOCH") then { + EPOCH_activeGardens pushBackUnique _storageObj; + }; + + if (_staticClass in ["SolarCharger_EPOCH","SolarChargerXL_EPOCH"]) then { + EPOCH_activeSolars pushBackUnique _storageObj; + }; + + if (getNumber(_cfgBaseBuilding >> _staticClass >> "isSecureStorage") == 1) then{ + _storageObj setVariable["EPOCH_Locked", false, true]; + if (_storageObj isKindOf "GunSafe_EPOCH") then { + { + _storageObj animate [_x,1]; + } foreach ["door1","door2","handle1","handle2"]; + }; + }; + + _storageObj setVariable["STORAGE_OWNERS", [_playerUID]]; + + _storageObj setVariable["STORAGE_SLOT", _slot, true]; + + _storageObj call EPOCH_server_save_storage; + if (isDamageAllowed _storageObj) then { // Only needed, if damage is allowed + _storageObj call EPOCH_server_storageInit; + }; + [_player,"BuildingsSet",1,true] call EPOCH_server_updatePlayerStats; + diag_log format["Epoch: STORAGE: %1 created storage %2 at %3 with slot %4", _playerUID, _staticClass, _vehiclePos, _slot]; + [[_storageObj,[vectordir _storageObj, vectorup _storageObj]]] remoteexec ['Epoch_fnc_SetFinalDir',_player]; + }; + + } else { + + // TODO: optimize by using config var + if (_vehicle isKindOf "ThingX" || _vehicle isKindOf "Const_Ghost_EPOCH" || ({_vehicle isKindOf _x} count (call EPOCH_JammerClasses) > 0)) then { + + _objSlot = _vehicle getVariable["BUILD_SLOT", -1]; + if (_objSlot == -1) then{ + _findnextslot = EPOCH_BuildingSlots find 0; + if (_findnextslot != -1) then{ + _objSlot = _findnextslot; + EPOCH_BuildingSlots set[_findnextslot, 1]; + _vehicle setVariable["BUILD_SLOT", _findnextslot, true]; + }; + }; + + missionNamespace setVariable ['EPOCH_BuildingSlotCount', { _x == 0 } count EPOCH_BuildingSlots, true]; + + if (_objSlot != -1) then { + _newVehicle = [_vehicle, false] call EPOCH_server_simulSwap; + + // add BaseCam to public array + if (_newVehicle iskindof "BaseCam_EPOCH") then { + _playerGroup = _player getVariable["GROUP", ""]; + _Owner = _playerUID; + if (_playerGroup != "") then { + _Owner = _playerGroup; + }; + _newVehicle setVariable["BUILD_OWNER", _Owner, true]; + EPOCH_BaseCams pushBackUnique _newVehicle; + publicvariable "EPOCH_BaseCams"; + } + else { + _newVehicle setVariable["BUILD_OWNER", _playerUID, true]; + }; + if ({_newVehicle isKindOf _x} count (call EPOCH_JammerClasses) > 0) then { + EPOCH_Plotpoles = EPOCH_Plotpoles - [ObjNull]; + EPOCH_Plotpoles pushBackUnique _newVehicle; + publicvariable "EPOCH_Plotpoles"; + }; + _newVehicle call EPOCH_saveBuilding; + [_player,"BuildingsSet",1,true] call EPOCH_server_updatePlayerStats; + [[_newVehicle,[vectordir _newVehicle, vectorup _newVehicle]]] remoteexec ['Epoch_fnc_SetFinalDir',_player]; + }; + + } else { + diag_log format["DEBUG BUILD SAVE ABORT TYPE ERROR: %1", _this] + }; + + }; +}; +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_simToStatic.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_simToStatic.sqf new file mode 100644 index 0000000..c2df644 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_simToStatic.sqf @@ -0,0 +1,37 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Building - Converts to static all simulated objects that have not moved since last check + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simToStatic.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgBaseBuilding","_class","_currentPosition","_entities","_lastPosition","_newObj","_objSlot","_staticClassConfig"]; +//[[[end]]] +_entities = allMissionObjects "Constructions_modular_F"; +{ + _lastPosition = _x getVariable["LAST_POS", []]; + _currentPosition = getposATL _x; + if (_lastPosition isEqualTo _currentPosition) then { + _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + _staticClassConfig = (_cfgBaseBuilding >> (typeOf _x) >> "staticClass"); + if (isText(_staticClassConfig)) then { + _class = getText(_staticClassConfig); + _objSlot = _x getVariable["BUILD_SLOT", -1]; + if (_objSlot != -1) then { + _newObj = [_class,_x] call EPOCH_swapBuilding; + _newObj setVariable ["BUILD_SLOT",_objSlot,true]; + _newObj call EPOCH_server_buildingInit; + }; + }; + }; + _x setVariable ["LAST_POS",_currentPosition]; + uiSleep 1; +} forEach _entities; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_simulSwap.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_simulSwap.sqf new file mode 100644 index 0000000..89c6b2c --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_simulSwap.sqf @@ -0,0 +1,69 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Building - Sim to Static + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simulSwap.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_ammoClass","_ammoObj","_cfgBaseBuilding","_cfgClass","_class","_classConfig","_color","_damage","_newObj","_objSlot","_oemType","_return","_textureSlot","_worldspace"]; +//[[[end]]] +params [["_object",objNull,[objNull]],["_static",false,[false]] ]; +_return = _object; +_objSlot = _object getVariable ["BUILD_SLOT", -1]; +if (_objSlot != -1) then { + + _cfgClass = "staticClass"; + if (_static) then { + _cfgClass = "simulClass"; + }; + _oemType = typeOf _object; + _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + _classConfig = (_cfgBaseBuilding >> _oemType >> _cfgClass); + if (isText _classConfig) then { + _class = getText(_classConfig); + + if (_oemType != _class) then { + + _textureSlot = _object getVariable["TEXTURE_SLOT", 0]; + _damage = damage _object; + + _newObj = [_class,_object] call EPOCH_swapBuilding; + + _newObj setVariable ["BUILD_SLOT",_objSlot,true]; + if (isDamageAllowed _newObj) then { // Only needed, if damage is allowed + _newObj call EPOCH_server_buildingInit; + }; + + if (_textureSlot != 0) then { + // get texture path from index + _color = getArray(_cfgBaseBuilding >> _class >> "availableTextures"); + if !(_color isEqualTo[]) then { + _newObj setObjectTextureGlobal[0, (_color select _textureSlot)]; + _newObj setVariable["TEXTURE_SLOT", _textureSlot, true]; + }; + }; + + // spawn additional object for trap + _ammoClass = (_cfgBaseBuilding >> _class >> "ammoClass"); + if (isText _ammoClass) then { + _ammoClass = getText _ammoClass; + _ammoObj = createVehicle [_ammoClass, [0,0,0], [], 0, "CAN_COLLIDE"]; + _ammoObj attachTo [_newObj,[0,0,0]]; + _newObj setVariable ["EPOCH_TRAP_OBJ",_ammoObj]; + _newObj addEventHandler ["Explosion", {(_this select 0) setDamage 1}]; + }; + + _newObj setDamage _damage; + _return = _newObj; + }; + }; +}; +_return diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_unsuppported.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_unsuppported.sqf new file mode 100644 index 0000000..8d89d00 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_unsuppported.sqf @@ -0,0 +1,61 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Building - Unsupported building check (unused ATM) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_unsuppported.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgBaseBuilding","_class","_isSupported","_newObj","_objSlot","_objectPos","_playerUID","_simulClassConfig","_simulatedCount","_slot","_stableCount","_start"]; +//[[[end]]] + +if !(isNil "EPOCH_unsupportedCheckRunning") exitWith{ diag_log "UnsupportedCheck: Already running aborted"}; +EPOCH_unsupportedCheckRunning = true; + +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + +// Check unsupported +_start = diag_tickTime; +_simulatedCount = 0; +_stableCount = 0; +{ + if (!isNull _x) then { + _simulClassConfig = (_cfgBaseBuilding >> (typeOf _x) >> "simulClass"); + if (isText(_simulClassConfig)) then { + _objectPos = getPosASL _x; + _isSupported = isTouchingGround _x; + if (!_isSupported) then { + _isSupported = if (terrainIntersectASL[_objectPos, [_objectPos select 0, _objectPos select 1, (_objectPos select 2) - 1]]) then { true } else { + lineIntersects[_objectPos, [_objectPos select 0, _objectPos select 1, (_objectPos select 2) - 5], _x, objNull] + }; + }; + if (!_isSupported) then { + _class = getText(_simulClassConfig); + _objSlot = _x getVariable["BUILD_SLOT", -1]; + if (_objSlot != -1) then { + _playerUID = _x getVariable["BUILD_OWNER", "-1"]; + _slot = _x getVariable["EPOCH_secureStorage", "-1"]; + // _newObj = createVehicle[_class, [0,0,0], [], 0, "CAN_COLLIDE"]; + _newObj = [_class,_x] call EPOCH_swapBuilding; + _newObj setVariable["BUILD_SLOT", _objSlot, true]; + _newObj setVariable["BUILD_OWNER", _playerUID, true]; + _newObj setVariable["EPOCH_secureStorage", _slot]; + _newObj setVelocity[0, 0, -1]; + _simulatedCount = _simulatedCount + 1; + uiSleep 1; + }; + } else { + _stableCount = _stableCount + 1; + }; + }; + }; +} forEach(allMissionObjects "Constructions_static_F"); +diag_log format["Epoch: Speed %1 Count %2 Stable %3", (diag_tickTime - _start), _simulatedCount, _stableCount]; +EPOCH_unsupportedCheckRunning = nil; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_upgradeBUILD.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_upgradeBUILD.sqf new file mode 100644 index 0000000..a692b57 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_server_upgradeBUILD.sqf @@ -0,0 +1,64 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Building Upgrades + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_upgradeBUILD.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgBaseBuilding","_class","_newObj","_objSlot","_objType","_upgrade","_upgrades","_Skip"]; +//[[[end]]] +params ["_object","_player",["_index",0],["_token","",[""]],["_CryptoCosts",0]]; + +if (isNull _object) exitWith{}; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; + +_Skip = false; +if (_CryptoCosts > 0) then { + _cIndex = EPOCH_customVars find "Crypto"; + _vars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar]; + _current_crypto = _vars select _cIndex; + if (_current_crypto < _CryptoCosts) Exitwith { + _Skip = true; + }; + _playerCryptoLimit = EPOCH_customVarLimits select _cIndex; + _playerCryptoLimit params ["_playerCryptoLimitMax","_playerCryptoLimitMin"]; + _current_crypto = ((_current_crypto - _CryptoCosts) min _playerCryptoLimitMax) max _playerCryptoLimitMin; + _current_crypto remoteExec ['EPOCH_effectCrypto',_player]; + _vars set[_cIndex, _current_crypto]; + _player setVariable["VARS", _vars]; +}; +if (_Skip) exitwith {}; + +_objSlot = _object getVariable["BUILD_SLOT", -1]; +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +if (_objSlot != -1) then { + _upgrades = getArray(_cfgBaseBuilding >> (typeOf _object) >> "upgradeBuilding"); + if !(_upgrades isEqualTo []) then { + _upgrade = _upgrades param [_index,[]]; + _class = _upgrade select 0; + _newObj = [_class,_object] call EPOCH_swapBuilding; + _newObj setVariable ["BUILD_SLOT",_objSlot,true]; + if (isDamageAllowed _newObj) then { // Only needed, if damage is allowed + _newObj call EPOCH_server_buildingInit; + }; + _newObj call EPOCH_saveBuilding; + }; +} else { + _objType = typeOf _object; + if (getNumber(_cfgBaseBuilding >> _objType >> "isTemporary") == 1) then{ + _upgrades = getArray(_cfgBaseBuilding >> (typeOf _object) >> "upgradeBuilding"); + if !(_upgrades isEqualTo []) then { + _upgrade = _upgrades param [_index,[]]; + _class = _upgrade select 0; + _newObj = [_class,_object] call EPOCH_swapBuilding; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_swapBuilding.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_swapBuilding.sqf new file mode 100644 index 0000000..4ea8a62 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_bases/EPOCH_swapBuilding.sqf @@ -0,0 +1,78 @@ +// _newObj = [_class,_object] call EPOCH_swapBuilding; +//[[[cog import generate_private_arrays ]]] +private ["_newObj","_objectPos","_owner","_UpdatePlots"]; +//[[[end]]] +params [["_class",""],["_object",objNull],["_method",0]]; +_newObj = objNull; +if (!isNull _object && !(_class isEqualTo "")) then { + _objectPos = getPosWorld _object; + _newObj = createVehicle [_class, ASLtoAGL _objectPos, [], 0, "CAN_COLLIDE"]; + if (!isNull _newObj) then { + _owner = _object getvariable ["Build_Owner",""]; + if !(_owner isEqualTo "") then { + _newObj setVariable ["BUILD_OWNER", _owner, true]; + }; + _UpdatePlots = false; + if (_object in EPOCH_Plotpoles) then { + EPOCH_Plotpoles = EPOCH_Plotpoles - [_object]; + _UpdatePlots = true; + }; + if (_class in (call EPOCH_JammerClasses)) then { + EPOCH_Plotpoles pushback _newObj; + _UpdatePlots = true; + }; + if (_UpdatePlots) then { + publicvariable 'EPOCH_Plotpoles'; + }; + _object hideObjectGlobal true; + switch (_method) do { + case 0: { + _newObj setposATL (getPosATL _object); + _newObj setDir (getDir _object); + _newObj setVectorDirAndUp [vectorDir _object, vectorUP _object]; + }; + case 1: { + _newObj attachTo [_object,[0,0,0]]; + detach _newObj; + }; + case 2: { + _newObj setDir (getDir _object); + _newObj setPosWorld (getPosWorld _object); + _newObj setVectorUp (vectorup _object); + _newObj setVectorDir (vectorDir _object); + }; + }; + deleteVehicle _object; + + _serverSettingsConfig = configFile >> "CfgEpochServer"; + _UseIndestructible = [_serverSettingsConfig, "UseIndestructible", false] call EPOCH_fnc_returnConfigEntry; + _IndestructibleBaseObjects = [_serverSettingsConfig, "IndestructibleBaseObjects", []] call EPOCH_fnc_returnConfigEntry; + _ExceptedBaseObjects = [_serverSettingsConfig, "ExceptedBaseObjects", []] call EPOCH_fnc_returnConfigEntry; + _DisableDoorsOnObj = [_serverSettingsConfig, "DisableDoorsOnObj", []] call EPOCH_fnc_returnConfigEntry; + { + _x params ["_ClassX",["_VarsX",[]]]; + if ((tolower _class) isequalto (tolower _ClassX)) exitwith { + { + _x params ["_VarNameX","_ValueX"]; + _newObj setvariable [_VarNameX,_ValueX,true]; + } foreach _VarsX; + }; + } foreach _DisableDoorsOnObj; + if (_UseIndestructible) then { + if ({_class iskindof _x} count _ExceptedBaseObjects == 0) then { + { + if (_class iskindof _x) exitwith { + _newObj allowdamage false; + }; + } foreach _IndestructibleBaseObjects; + }; + }; + // new Dynamicsimulation + if([configFile >> "CfgEpochServer", "baseDynamicSimulationSystem", true] call EPOCH_fnc_returnConfigEntry)then + { + _newObj enableDynamicSimulation true; + _newObj triggerDynamicSimulation false; // this object doesnt need to turn anything on in the server + }; + }; +}; +_newObj diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_createGroup.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_createGroup.sqf new file mode 100644 index 0000000..eb19d39 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_createGroup.sqf @@ -0,0 +1,73 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Add HiveFunction: Create Group / Set Data + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_group/EPOCH_server_createGroup.sqf + + Return: + + true = group has been created and / or successfully saved! + false = group exist already and hasn't been saved! +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cIndex","_contentArray","_current_crypto","_groupID","_groupName","_leaderName","_playerCryptoLimit","_return","_textArr","_upgradePrice","_vars"]; +//[[[end]]] +params ["_leader", "_groupName", ["_token","",[""]] ]; +if !([_leader, _token] call EPOCH_server_getPToken) exitWith{}; + +_return = false; +_textArr = toArray(_groupName); + +if (count _textArr > 24) exitWith{}; +// remove any disallowed chars in group name "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 -_" +{ + if !(_x in [97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,49,50,51,52,53,54,55,56,57,48,32,45,95]) then { + _textArr = _textArr - [_x]; + }; +} forEach _textArr; +_groupName = toString _textArr; + +// get vars array and current Crypto value +_cIndex = EPOCH_customVars find "Crypto"; +_vars = _leader getVariable["VARS", call EPOCH_defaultVars_SEPXVar]; +_current_crypto = _vars select _cIndex; + +_upgradePrice = parseNumber (EPOCH_group_upgrade_lvl_SEPXVar select 1); + +if (_current_crypto >= _upgradePrice) then { + if (_groupName != "") then { + + _playerCryptoLimit = EPOCH_customVarLimits select _cIndex; + _playerCryptoLimit params ["_playerCryptoLimitMax","_playerCryptoLimitMin"]; + _current_crypto = ((_current_crypto - _upgradePrice) min _playerCryptoLimitMax) max _playerCryptoLimitMin; + + _vars set[_cIndex, _current_crypto]; + _leader setVariable["VARS", _vars]; + + _current_crypto remoteExec ['EPOCH_effectCrypto',_leader]; + + _groupID = getPlayerUID _leader; + + _leaderName = if (alive _leader) then {name _leader} else {"Dead Player"}; + + _contentArray = [_groupName, _leaderName, EPOCH_group_upgrade_lvl_SEPXVar select 0, [], []]; + + [["groupUpdate", _contentArray], _leader] call EPOCH_sendRemoteExecClient; + [["groupUidUpdate", _groupID], _leader] call EPOCH_sendRemoteExecClient; + + _leader setVariable ["GROUP", _groupID]; + + // Save Group Data + ["Group", _groupID, _contentArray] call EPOCH_fnc_server_hiveSET; + _return = true; + }; +}; +_return diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_deleteGroup.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_deleteGroup.sqf new file mode 100644 index 0000000..ba1406c --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_deleteGroup.sqf @@ -0,0 +1,35 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Delete Group + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_group/EPOCH_server_deleteGroup.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_groupID","_return"]; +//[[[end]]] +params ["_player",["_token","",[""]] ]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; + +_return = false; +_groupID = getPlayerUID _player; +if (_groupID != "") then { + + { + _x setVariable ["GROUP", nil]; + [["resetGroup", true], _x] call EPOCH_sendRemoteExecClient; + [_x] joinSilent (createGroup [west, true]); + } forEach (allPlayers select {(_x getVariable["GROUP", ""]) == _groupID}); + + _return = ["Group", _groupID] call EPOCH_fnc_server_hiveDEL; + [["groupUpdate", []], _player] call EPOCH_sendRemoteExecClient; +}; +_return diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf new file mode 100644 index 0000000..6720031 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf @@ -0,0 +1,20 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Invite Player + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf +*/ +params ["_playerUID","_var1","_var2","_player",["_token","",[""]]]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +private _targets = allPlayers select {getPlayerUID _x == _playerUID}; +if !(_targets isEqualTo []) then { + [_var1, _var2] remoteExec ['EPOCH_Group_invitePlayer',_targets]; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_updatePlayerGroup.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_updatePlayerGroup.sqf new file mode 100644 index 0000000..a8c6a91 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_updatePlayerGroup.sqf @@ -0,0 +1,122 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Add or remove members from a group + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_group/EPOCH_server_updatePlayerGroup.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_allPlayers","_contentArray","_found","_group","_memberrange","_modOrMember","_modOrMemberArray","_modOrMemberRevert","_removePlayerArray","_response","_selectedPlayerName"]; +//[[[end]]] +params [["_groupID",""],["_selectedPlayerUID",""],["_addOrRemove",false],["_modOrMemberVar",true],["_player",objnull],["_token",""]]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith {}; + +if (_groupID == "") exitWith{ diag_log format["Epoch: GROUP: No Group Selected %1", _this]; }; + +diag_log format["Epoch: GROUP: Update %1", _this]; + +_modOrMember = if (_modOrMemberVar) then [{3},{4}]; +_modOrMemberRevert = if (_modOrMemberVar) then [{4},{3}]; + +_response = ["Group", _groupID] call EPOCH_fnc_server_hiveGETRANGE; +if ((_response select 0) == 1 && (_response select 1) isEqualType []) then { + _contentArray = _response select 1; + _contentArray params ["_groupName","_leaderName","_groupSize","_modArray","_memberArray"]; + _allPlayers = allPlayers select {alive _x}; + + if (_addOrRemove) then { //Add + _selectedPlayerName = "Dead Player"; + + { + _selectedPlayerName = if (alive _x) then {name _x}; + if ((_x getVariable ["GROUP",""]) != _groupID) then { + _group = grpNull; + { + if ((_x getVariable["GROUP",""]) == _groupID) exitWith { + _group = group _x; + }; + } forEach _allPlayers; + + if (isNull _group) then { + _group = createGroup [west, true]; + }; + _x setVariable ["GROUP", _groupID]; + [["groupUidUpdate", _groupID], _x] call EPOCH_sendRemoteExecClient; + [_x] joinSilent _group; + }; + } forEach (_allPlayers select {getPlayerUID _x == _selectedPlayerUID}); + + // find player name from DB + if (_selectedPlayerName == "Dead Player") then { + _memberrange = ["PlayerData", _selectedPlayerUID] call EPOCH_fnc_server_hiveGETRANGE; + if (count (_memberrange select 1) > 0) then { + if ((_memberrange select 1 select 0) isEqualType "STRING") then { + _selectedPlayerName = _memberrange select 1 select 0; + }; + }; + }; + + _removePlayerArray = _contentArray select _modOrMemberRevert; + + { + if (_x select 0 == _selectedPlayerUID) exitWith { + _removePlayerArray deleteAt _forEachIndex; + _contentArray set [_modOrMemberRevert, _removePlayerArray]; + }; + } forEach _removePlayerArray; + + _modOrMemberArray = _contentArray select _modOrMember; + _modOrMemberArray pushBack [_selectedPlayerUID, _selectedPlayerName]; + + _contentArray set [_modOrMember, _modOrMemberArray]; + + } else { + + //Remove + _found = false; + + { + _x setVariable ["GROUP", nil]; + [_x] joinSilent (createGroup [west, true]); + [["resetGroup", true], _x] call EPOCH_sendRemoteExecClient; + [["groupUpdate", []], _x] call EPOCH_sendRemoteExecClient; + } forEach (_allPlayers select {getPlayerUID _x == _selectedPlayerUID}); + { + if (_x select 0 == _selectedPlayerUID) exitWith { + _memberArray deleteAt _forEachIndex; + _found = true; + }; + } forEach _memberArray; + + if (_found) then { + _contentArray set [4, _memberArray]; + } else { + { + if (_x select 0 == _selectedPlayerUID) exitWith { + _modArray deleteAt _forEachIndex; + _found = true; + }; + } forEach _modArray; + _contentArray set [3, _modArray]; + }; + + if (!_found) then { + diag_log format ["Epoch: %1 cannot remove Player! (%1)", __FILE__, _this] + }; + }; + + { + [["groupUpdate", _contentArray], _x] call EPOCH_sendRemoteExecClient; + } forEach (_allPlayers select {(_x getVariable["GROUP", ""]) == _groupID}); + + // Save Group Data + ["Group", _groupID, _contentArray] call EPOCH_fnc_server_hiveSET; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_upgradeGroup.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_upgradeGroup.sqf new file mode 100644 index 0000000..d6a206c --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_group/EPOCH_server_upgradeGroup.sqf @@ -0,0 +1,67 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Upgrade group size + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_group/EPOCH_server_upgradeGroup.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cIndex","_contentArray","_current_crypto","_found","_groupMemberPUID","_newGroupSize","_playerCryptoLimit","_response","_return","_upgradePrice","_vars"]; +//[[[end]]] +params ["_groupID","_player",["_token","",[""]] ]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; + +_return = false; + +// get vars array and current Crypto value +_cIndex = EPOCH_customVars find "Crypto"; +_vars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar]; +_current_crypto = _vars select _cIndex; + +// [_groupName, _leaderName, _groupSize, _modArray, _memberArray] +_response = ["Group", _groupID] call EPOCH_fnc_server_hiveGETRANGE; +if ((_response select 0) == 1 && (_response select 1) isEqualType []) then { + _contentArray = (_response select 1); + _found = EPOCH_group_upgrade_lvl_SEPXVar find (_contentArray select 2); + + if ((_found != -1) && count EPOCH_group_upgrade_lvl_SEPXVar >= (_found + 3)) then { + _newGroupSize = EPOCH_group_upgrade_lvl_SEPXVar select (_found + 2); + + _upgradePrice = parseNumber (EPOCH_group_upgrade_lvl_SEPXVar select (_found+3)); + + if (_current_crypto >= _upgradePrice) then { + + _playerCryptoLimit = EPOCH_customVarLimits select _cIndex; + _playerCryptoLimit params ["_playerCryptoLimitMax","_playerCryptoLimitMin"]; + _current_crypto = ((_current_crypto - _upgradePrice) min _playerCryptoLimitMax) max _playerCryptoLimitMin; + // send to player + _current_crypto remoteExec ['EPOCH_effectCrypto',_player]; + _vars set[_cIndex, _current_crypto]; + _player setVariable["VARS", _vars]; + + _contentArray set [2, _newGroupSize]; + + _groupMemberPUID = [_groupID]; + { + { + _groupMemberPUID pushback(_x select 0); + } forEach _x; + } forEach [_contentArray select 3, _contentArray select 4]; + + { + [["groupUpdate", _contentArray], _x] call EPOCH_sendRemoteExecClient; + } forEach (allPlayers select {getPlayerUID _x in _groupMemberPUID}); + + // Save Group Data + _return = ["Group", _groupID, _contentArray] call EPOCH_fnc_server_hiveSET; + }; + }; +}; +_return diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_createTempGroup.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_createTempGroup.sqf new file mode 100644 index 0000000..5384a84 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_createTempGroup.sqf @@ -0,0 +1,54 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Add HiveFunction: Create Group / Set Data + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_grouptemp/EPOCH_server_createTempGroup.sqf + + Return: + + true = group has been created and / or successfully saved! + false = group exist already and hasn't been saved! +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cIndex","_contentArray","_current_crypto","_groupID","_groupName","_leaderName","_playerCryptoLimit","_return","_textArr","_upgradePrice","_vars"]; +//[[[end]]] +params ["_leader", "_groupName", ["_token","",[""]] ]; +if !([_leader, _token] call EPOCH_server_getPToken) exitWith{}; + +_return = false; +_textArr = toArray(_groupName); + +if (count _textArr > 24) exitWith{}; +// remove any disallowed chars in group name "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 -_" +{ + if !(_x in [97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,49,50,51,52,53,54,55,56,57,48,32,45,95]) then { + _textArr = _textArr - [_x]; + }; +} forEach _textArr; +_groupName = toString _textArr; + +if (_groupName != "") then { + + _groupID = getPlayerUID _leader; + + _leaderName = if (alive _leader) then {name _leader} else {"Dead Player"}; + + _contentArray = [_groupName, _leaderName, EPOCH_group_upgrade_lvl_SEPXVar select 0, [], []]; + + [["tempGroupUpdate", _contentArray], _leader] call EPOCH_sendRemoteExecClient; + [["tempGroupUidUpdate", _groupID], _leader] call EPOCH_sendRemoteExecClient; + + _leader setVariable ["TEMPGROUP", _groupID]; + _leader setVariable ["TEMPGROUPARRAY",_contentArray]; + + _return = true; +}; +_return diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_deleteTempGroup.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_deleteTempGroup.sqf new file mode 100644 index 0000000..39a7a6a --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_deleteTempGroup.sqf @@ -0,0 +1,49 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Delete Group + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_grouptemp/EPOCH_server_deleteTempGroup.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_groupID","_return"]; +//[[[end]]] +params ["_player",["_token","",[""]] ]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; + +_return = false; +_groupID = getPlayerUID _player; +if (_groupID != "") then { + _allPlayers = allPlayers select {alive _x}; + { + _group = grpNull; + _permGroup = _x getVariable["GROUP",""]; + if !(_permGroup isEqualTo "")then + { + { + if ((_x getVariable["GROUP",""]) == _groupID) exitWith { + _group = group _x; + }; + } forEach _allPlayers; + }; + + _x setVariable ["TEMPGROUP", nil]; + [["resetTempGroup", true], _x] call EPOCH_sendRemoteExecClient; + if (isNull _group) then { + _group = createGroup [west, true]; + }; + [_x] joinSilent _group; + } forEach (allPlayers select {(_x getVariable["TEMPGROUP", ""]) == _groupID}); + + [["tempGroupUpdate", []], _player] call EPOCH_sendRemoteExecClient; + _return = true; +}; +_return diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_invitePlayerTempGroup.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_invitePlayerTempGroup.sqf new file mode 100644 index 0000000..f36fb59 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_invitePlayerTempGroup.sqf @@ -0,0 +1,20 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Invite Player + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_grouptemp/EPOCH_server_invitePlayerTempGroup.sqf +*/ +params ["_playerUID","_var1","_var2","_player",["_token","",[""]]]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +private _targets = allPlayers select {getPlayerUID _x == _playerUID}; +if !(_targets isEqualTo []) then { + [_var1, _var2] remoteExec ['EPOCH_tempGroup_invitePlayer',_targets]; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_updatePlayerTempGroup.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_updatePlayerTempGroup.sqf new file mode 100644 index 0000000..1bb46a3 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_updatePlayerTempGroup.sqf @@ -0,0 +1,134 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Add or remove members from a group + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_grouptemp/EPOCH_server_updatePlayerTempGroup.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_allPlayers","_contentArray","_found","_group","_memberrange","_modOrMember","_modOrMemberArray","_modOrMemberRevert","_removePlayerArray","_response","_selectedPlayerName","_playerObj"]; +//[[[end]]] +params [["_groupID",""],["_selectedPlayerUID",""],["_addOrRemove",false],["_modOrMemberVar",true],["_player",objnull],["_token",""]]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith {}; + +if (_groupID == "") exitWith{ diag_log format["Epoch: GROUP: No Temp Group Selected %1", _this]; }; + +diag_log format["Epoch: Temp GROUP: Update %1", _this]; + +_modOrMember = if (_modOrMemberVar) then [{3},{4}]; +_modOrMemberRevert = if (_modOrMemberVar) then [{4},{3}]; +_contentArray = []; +{ + _contentArray = _x getVariable ["TEMPGROUPARRAY",[]]; +} forEach (allPlayers select {getPlayerUID _x == _groupID}); + +if !(_contentArray isEqualTo []) then { + + _contentArray params ["_groupName","_leaderName","_groupSize","_modArray","_memberArray"]; + _allPlayers = allPlayers select {alive _x}; + + if (_addOrRemove) then { //Add + _selectedPlayerName = "Dead Player"; + + { + _selectedPlayerName = if (alive _x) then {name _x}; + if ((_x getVariable ["TEMPGROUP",""]) != _groupID) then { + _group = grpNull; + { + _group = group _x; + } forEach (_allPlayers select {(_x getVariable["TEMPGROUP", ""]) == _groupID}); + + if (isNull _group) then { + _group = createGroup [west, true]; + }; + _x setVariable ["TEMPGROUP", _groupID]; + [["tempGroupUidUpdate", _groupID], _x] call EPOCH_sendRemoteExecClient; + [_x] joinSilent _group; + }; + } forEach (_allPlayers select {getPlayerUID _x == _selectedPlayerUID}); + + + // find player name from DB + if (_selectedPlayerName == "Dead Player") then { + _memberrange = ["PlayerData", _selectedPlayerUID] call EPOCH_fnc_server_hiveGETRANGE; + if (count (_memberrange select 1) > 0) then { + if ((_memberrange select 1 select 0) isEqualType "STRING") then { + _selectedPlayerName = _memberrange select 1 select 0; + }; + }; + }; + + _removePlayerArray = _contentArray select _modOrMemberRevert; + + { + if (_x select 0 == _selectedPlayerUID) exitWith { + _removePlayerArray deleteAt _forEachIndex; + _contentArray set [_modOrMemberRevert, _removePlayerArray]; + }; + } forEach _removePlayerArray; + + _modOrMemberArray = _contentArray select _modOrMember; + _modOrMemberArray pushBack [_selectedPlayerUID, _selectedPlayerName]; + + _contentArray set [_modOrMember, _modOrMemberArray]; + + } else { + + //Remove + _found = false; + _group = grpNull; + _permGroup = ""; + { + _permGroup = _x getVariable["GROUP",""]; + _playerObj = _x; + } forEach (_allPlayers select {getPlayerUID _x == _selectedPlayerUID}); + if !(_permGroup isEqualTo "")then + { + { + _group = group _x; + } forEach (_allPlayers select {(_x getVariable["GROUP", ""]) == _permGroup}); + }; + _playerObj setVariable ["TEMPGROUP", nil]; + if (isNull _group) then { + _group = createGroup [west, true]; + }; + [_playerObj] joinSilent _group; + [["resetTempGroup", true], _playerObj] call EPOCH_sendRemoteExecClient; + [["tempGroupUpdate", []], _playerObj] call EPOCH_sendRemoteExecClient; + { + if (_x select 0 == _selectedPlayerUID) exitWith { + _memberArray deleteAt _forEachIndex; + _found = true; + }; + } forEach _memberArray; + + if (_found) then { + _contentArray set [4, _memberArray]; + } else { + { + if (_x select 0 == _selectedPlayerUID) exitWith { + _modArray deleteAt _forEachIndex; + _found = true; + }; + } forEach _modArray; + _contentArray set [3, _modArray]; + }; + + if (!_found) then { + diag_log format ["Epoch: %1 cannot remove Player! (%1)", __FILE__, _this] + }; + }; + + { + [["tempGroupUpdate", _contentArray], _x] call EPOCH_sendRemoteExecClient; + } forEach (_allPlayers select {(_x getVariable["TEMPGROUP", ""]) == _groupID}); + +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_upgradeTempGroup.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_upgradeTempGroup.sqf new file mode 100644 index 0000000..34f5783 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_grouptemp/EPOCH_server_upgradeTempGroup.sqf @@ -0,0 +1,49 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Upgrade group size + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_grouptemp/EPOCH_server_upgradeTempGroup.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cIndex","_contentArray","_current_crypto","_found","_groupMemberPUID","_newGroupSize","_playerCryptoLimit","_response","_return","_upgradePrice","_vars"]; +//[[[end]]] +params ["_groupID","_player",["_token","",[""]] ]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; + +_return = false; + +// [_groupName, _leaderName, _groupSize, _modArray, _memberArray] +if ((_response select 0) == 1 && (_response select 1) isEqualType []) then { + _contentArray = (_response select 1); + _found = EPOCH_group_upgrade_lvl_SEPXVar find (_contentArray select 2); + + if ((_found != -1) && count EPOCH_group_upgrade_lvl_SEPXVar >= (_found + 3)) then { + _newGroupSize = EPOCH_group_upgrade_lvl_SEPXVar select (_found + 2); + + _upgradePrice = parseNumber (EPOCH_group_upgrade_lvl_SEPXVar select (_found+3)); + + _contentArray set [2, _newGroupSize]; + + _groupMemberPUID = [_groupID]; + { + { + _groupMemberPUID pushback(_x select 0); + } forEach _x; + } forEach [_contentArray select 3, _contentArray select 4]; + + { + [["tempGroupUpdate", _contentArray], _x] call EPOCH_sendRemoteExecClient; + } forEach (allPlayers select {getPlayerUID _x in _groupMemberPUID}); + + _return = true; + }; +}; +_return diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_destroyTrash.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_destroyTrash.sqf new file mode 100644 index 0000000..58471bd --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_destroyTrash.sqf @@ -0,0 +1,51 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Server side damage and trash looting + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_destroyTrash.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_antagTable","_antagTableArray","_config","_errorMsg","_item","_nearPlayers","_payout","_posWH","_target","_triggerType","_weightedArray"]; +//[[[end]]] +params [["_object",objNull,[objNull]],["_type",0,[0]],["_player",objNull,[objNull]],["_token","",[""]] ]; + +if (isNull _object) exitWith{}; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; + +if (alive _object) then { + + _config = 'CfgEpochClient' call EPOCH_returnConfig; + _payout = getArray(_config >> worldname >> "TrashClasses") param [_type, "Trash"]; + + _posWH = getPosATL _player; + + if (isSimpleObject _object) then { + // just remove for now, object will respawn on restart. + deleteVehicle _object; + } else { + _object setdamage 1; + }; + + _item = createVehicle["groundWeaponHolder", _posWH, [], 0.0, "CAN_COLLIDE"]; + _item setPosATL _posWH; + + _config = (configFile >> "CfgMainTable" >> _payout); + if (isClass _config) then { + [_player,"LootedObjs",1,true] call EPOCH_server_updatePlayerStats; + if (random 1 < getNumber(_config >> "chance")) then { + [_item, _payout] call EPOCH_serverLootObject; + // force player to open gear on this object. + [_item, {player action["Gear", _this]}] remoteExec ["call", _player]; + }; + }; + +}; +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_knockDownTree.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_knockDownTree.sqf new file mode 100644 index 0000000..15f5638 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_knockDownTree.sqf @@ -0,0 +1,59 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Server side damage and tree/bush looting + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_knockDownTree.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_doPayout","_item","_lootType","_nearbyWH","_posWH"]; +//[[[end]]] +params ["_object","_type","_player",["_token","",[""]] ]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; + +if (isNull _object) exitWith{}; +if (_player distance2D (getposATL _object) > 6) exitWith{}; +_doPayout = false; +if (alive _object) then { + _posWH = getPosATL _object; + _posWH set[2, 0]; + + if (isSimpleObject _object) then { + // just remove for now, object will respawn on restart. + deleteVehicle _object; + _doPayout = true; + } else { + if (damage _object > 0.7) then { + _object setdamage 1; + _doPayout = true; + + } else { + _object setdamage((damage _object) + 0.25) min 1; + }; + }; + + if (_doPayout) then { + _lootType = "Tree"; + if (_type == 1) then { + _lootType = "Bush"; + }; + + _nearbyWH = nearestObjects[_posWH, ["groundWeaponHolder"], 2]; + if !(_nearbyWH isEqualTo[]) then { + [(_nearbyWH select 0), _lootType] call EPOCH_serverLootObject; + } else { + _item = createVehicle["groundWeaponHolder", _posWH, [], 0, "CAN_COLLIDE"]; + _item setPosATL _posWH; + [_item, _lootType] call EPOCH_serverLootObject; + }; + }; +}; + +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_lootAnimal.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_lootAnimal.sqf new file mode 100644 index 0000000..c17348a --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_lootAnimal.sqf @@ -0,0 +1,44 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Server side animal looting + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootAnimal.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_class","_classOverride","_config","_errorMsg","_item","_objectClass","_pos"]; +//[[[end]]] +params ["_object","_player",["_token","",[""]] ]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; + +if !(isNull _object) then { + _pos = getPosATL _object; + _objectClass = typeOf _object; + _classOverride = getText (configFile >> "CfgVehicles" >> _objectClass >> "epochLootClass"); + if (_classOverride != "") then { + _objectClass = _classOverride; + }; + deleteVehicle _object; + _item = createVehicle["groundWeaponHolder", [0,0,0], [], 0.0, "CAN_COLLIDE"]; + if (_objectClass isequalto "GreatWhite_F") then { + _item setvariable ["EPOCH_Loot",true,true]; + }; + _item setPosATL _pos; + _class = "SeaFood"; + _config = configFile >> "CfgMainTable" >> _objectClass; + if (isClass(_config)) then { + _class = _objectClass; + }; + [_item, _class, true] call EPOCH_serverLootObject; + + // force player to open gear on this object. + [_item, {player action["Gear", _this]}] remoteExec ["call", _player]; +}; +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_lootContainer.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_lootContainer.sqf new file mode 100644 index 0000000..7121b8b --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_lootContainer.sqf @@ -0,0 +1,70 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Server side container looting + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootContainer.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_animated","_antagTable","_antagTableArray","_class","_config","_dir","_errorMsg","_lootClasses","_object","_pos","_triggerType","_type","_weightedArray","_whConfig"]; +//[[[end]]] +params ["_object","_player",["_token","",[""]] ]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; + +if (isNull _object) exitWith{}; +if !(alive _object) exitWith{}; +if (_player distance _object > 20) exitWith{}; + +if !(_object in EPOCH_cleanupQueue) then { + + [_player,"LootedObjs",1,true] call EPOCH_server_updatePlayerStats; + + _parent = _object getvariable ["Epoch_ParentBuilding",ObjNull]; + if (isnull _parent) then { + EPOCH_cleanupQueue pushBack _object; + }; + + _type = typeOf _object; + + _animated = configFile >> "CfgVehicles" >> _type >> "Destruction" >> "animations"; + if (isArray _animated) then { + _object setDamage 1; + }; + _config = (configFile >> "CfgMainTable" >> _type); + _lootClasses = getArray(_config >> "tables"); + + if !(_lootClasses isEqualTo []) then { + _whConfig = configFile >> "CfgVehicles" >> _type >> "weaponHolderProxy"; + if (isText _whConfig) then { + _class = getText (_whConfig); + _pos = getPosATL _object; + _dir = getDir _object; + _object = createVehicle [_class, _pos, [], 0.0, "CAN_COLLIDE"]; + _object setDir _dir; + _object setPosATL _pos; + if !(isNull _parent) then { + _ParentLoots = _parent getvariable ["Epoch_BuildingLoot",[]]; + _ParentLoots pushback _object; + _parent setvariable ["Epoch_BuildingLoot",_ParentLoots]; + }; + }; + + [_object, _type] call EPOCH_serverLootObject; + // force player to open gear on this object. + if !(_type isequalto "Cargo_Container") then { + [_object, {player action["Gear", _this]}] remoteExec ["call", _player]; + }; + } else { + [_object, "Default"] call EPOCH_serverLootObject; + // force player to open gear on this object. + [_object, {player action["Gear", _this]}] remoteExec ["call", _player]; + }; + +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_mineRocks.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_mineRocks.sqf new file mode 100644 index 0000000..103abcb --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_mineRocks.sqf @@ -0,0 +1,59 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Server side rock mining + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_mineRocks.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_config","_posWH","_selectedConfig"]; +//[[[end]]] +params ["_object","_index","_player",["_token","",[""]] ]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; + +// make sure object still exists and is proper object type and alive. +if (_object isEqualType objNull && {!(isNull _object)} && {alive _object}) then { + + _posWH = getPosATL _player; + _posWH set[2, 0]; + + // define loot table class + _selectedConfig = typeOf _object; + if (_selectedConfig isEqualTo "") then { + // handle simple/terrain objects + (getModelInfo _object) params [["_modelName",""]]; + if (!isnil "_modelName") then { + // replace spaces and periods with underscores + _selectedConfig = (_modelName splitString " .") joinString "_"; + }; + }; + + _config = configFile >> "CfgMainTable" >> _selectedConfig; + if !(isClass(_config)) then { + // allow override with generic loot classes if object class is not in CfgMainTable + switch (_index) do { + case 0: { _selectedConfig = "Rock" }; + case 1: { _selectedConfig = "Cinder" }; + case 2: { _selectedConfig = "Wreck" }; + case 3: { _selectedConfig = "Ore" }; + }; + }; + + if (isSimpleObject _object) then { + // just remove for now, object will respawn on restart. + deleteVehicle _object; + } else { + _object setdamage 1; + }; + + // output loot + [objNull, _selectedConfig, false, _posWH] call EPOCH_serverLootObject; +}; +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_spawnBoatLoot.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_spawnBoatLoot.sqf new file mode 100644 index 0000000..daefbfe --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_spawnBoatLoot.sqf @@ -0,0 +1,98 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Server side spawing of shipwreck loots + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_spawnBoatLoot.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgEpoch", "_debug", "_worldSize", "_shipwrecks", "_customLocs", "_customWrecks", "_totalCustomLocs", "_customWreck", "_total", "_count", "_distFromOthers", "_spawnedLoot","_tooClose", "_wreck", "_position", "_item", "_debugMkr", "_markers", "_originalColors", "_showMarkers", "_decayMarkerColor", "_compromisedColor", "_rEvents", "_thisEvent"]; +//[[[end]]] +_cfgEpoch = configFile >> "CfgEpoch" >> worldname; +_debug = if(getNumber(_cfgEpoch >> "debugShipwreckLoot") isEqualTo 1)then{true}else{false}; +// Check for shipwreck loot allowed +if (getNumber(_cfgEpoch >> "shipwreckLootEnabled") isEqualTo 1) then { + // Check for total shipwrecks allowed + _total = getNumber(_cfgEpoch >> "maxSpawnedShipwrecks"); + if(_total isEqualTo 0)exitWith{if(_debug)then{diag_log "EPOCHDebug: no shipwrecks allowed"}}; + // Load shipwrecks and custom locations + _worldSize = worldSize/2; + _shipwrecks = (nearestTerrainObjects [ [_worldSize, _worldSize], ["SHIPWRECK"], _worldSize]) select {surfaceiswater (getpos _x)} ; + _customLocs = getArray(_cfgEpoch >> "shipwreckCustomLocs"); + _customWrecks = getArray(_cfgEpoch >> "shipwreckCustomWrecks"); + _totalCustomLocs = count(_customLocs); + if(_totalCustomLocs > 0)then{ + for "_c" from 0 to _totalCustomLocs-1 do { + _customWreck = (selectRandom _customWrecks) createVehicle (_customLocs select _c); + _shipwrecks pushBack _customWreck; + }; + }; + if(_shipwrecks isEqualTo [])exitWith{if(_debug)then{diag_log "EPOCHDebug: no shipwrecks found"}}; + // Check combined array count + _count = count(_shipwrecks); + if(_count < _total)then{if(_debug)then{diag_log "EPOCHDebug: not enough shipwrecks to fill your needs on this map, trying all available locations!"}}; + // Start spawning loot + _distFromOthers = getNumber(_cfgEpoch >> "distFromOtherShipwrecks"); + _spawnedLoot = []; + for "_i" from 1 to _total do { + if(_shipwrecks isEqualTo [])exitWith{if(_debug)then{diag_log "EPOCHDebug: no more shipwrecks found"}}; + + _tooClose = false; + _wreck = selectRandom _shipwrecks; + if(isNil "_wreck")exitWith{}; + { + if(!(_spawnedLoot isEqualTo []) && ((_wreck distance _x) < _distFromOthers))exitWith{ + if(_debug)then{diag_log "EPOCHDebug: Shipwreck too close to another shipwreck"}; + _tooClose = true; + _i = (_i - 1); + }; + }forEach _spawnedLoot; + + _shipwrecks = _shipwrecks - [_wreck]; + if!(_tooClose)then{ + _position = [_wreck,1,20,3,1,20,0] call BIS_fnc_findSafePos; + _item = createVehicle["container_epoch",_position, [], 0, "NONE"]; + _spawnedLoot pushback _wreck; + if(_debug)then{ + _debugMkr = createMarker [str(_position),_position]; + _debugMkr setMarkerShape "ICON"; + _debugMkr setMarkerType "mil_dot"; + _debugMkr setMarkerColor "ColorRed"; + }; + _item setMass 220; + _item setVariable["EPOCH_Loot",false,true]; + + // SET UP THE MARKER. + _markers = []; + _originalColors = []; + _showMarkers = if(getNumber(_cfgEpoch >> "showBoatLootMarkers") isEqualTo 1)then{true}else{false}; + _decayMarkerColor = getText(_cfgEpoch >> "shipwreckDecayMarkerColor"); + _compromisedColor = getText(_cfgEpoch >> "shipwreckCompromisedColor"); + if (_showMarkers) then{ + _markers = ["Shipwreck",_position] call EPOCH_server_createGlobalMarkerSet; + { + _originalColors pushBack (getMarkerColor _x); + }forEach _markers; + + // Check for HeightenedPlayerVsPlayer false and remove comprimised coloring + if!(getNumber(_cfgEpoch >> "HeightenedPlayerVsPlayer") isEqualTo 1)then{ + _compromisedColor = getMarkerColor (_markers select 0); + }; + }; + + _rEvents = missionNameSpace getVariable["EPOCH_RunningEvents",[]]; + _thisEvent = [_position, [_item], [], "shipwreckCounter", diag_tickTime, 99999, _showMarkers, _markers, _originalColors, _decayMarkerColor, _compromisedColor]; + missionNameSpace setVariable["EPOCH_RunningEvents",_rEvents + [_thisEvent]]; + }; + }; + if(_debug)then{ + diag_log format["EPOCHDebug: Safely spawned %1 loot container(s) at these shipwreck locations:%2",count _spawnedLoot , _spawnedLoot]; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_spawnLoot.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_spawnLoot.sqf new file mode 100644 index 0000000..4b98032 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_looting/EPOCH_server_spawnLoot.sqf @@ -0,0 +1,83 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Server side Loot Spawner + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_spawnLoot.sqf +*/ + +private [ "_masterConfig","_building","_buildingLoot","_selectedConfig","_config","_EpochLootChance","_cfgBaseBuilding","_loots","_lootLimit","_possibleLoots","_posName","_positions","_possibleCount","_randomIndex","_selectedLoot", + "_pos","_dir","_item","_color","_GroundSpawnChance","_MinGroundContainers","_MaxGroundContainers","_lootType","_privateDir","_GroundClass" +]; + +params [["_player",objNull,[objNull]],["_token","",[""]],["_LootsArray",[]]]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +_GroundClass = if (Epoch_UseLootHelper) then {"Epoch_LootHolder_Sphere"} else {"Epoch_LootHolder"}; +_privateDir = []; +_masterConfig = getmissionconfig "CfgBuildingLootPos"; +{ + _x params [["_Building",objnull],["_LootType",""],["_buildingLootArray",[]]]; + if (!isnull _Building) then { + if !(_building in Epoch_LootedBuildings) then { + _buildingLoot = []; + _building setvariable ["Epoch_LootCleanup",diag_ticktime + Epoch_LootCleanupTime]; + Epoch_LootedBuildings pushBackUnique _building; + switch _LootType do { + case "EpochLoot": { + { + _x params ["_class","_pos","_dir","_color"]; + if (_class in (call Epoch_LootContainers)) then { + _item = createVehicle [_class, _pos, [], 0, "CAN_COLLIDE"]; + _item setvariable ["Epoch_ParentBuilding",_building]; + _buildingLoot pushback _item; + _item setDir _dir; + _privateDir pushback [_item,_dir]; + if (surfaceIsWater _pos) then { + _item setPosASL _pos; + } + else { + _item setPosATL _pos; + }; + if !(_color isEqualTo "") then { + _item setObjectTextureGlobal [0, _color]; + }; + }; + } foreach _buildingLootArray; + }; + case "GroundLoot": { + { + _x params ["_lootType","_pos"]; + _item = createVehicle [_GroundClass, _pos, [], 0, "CAN_COLLIDE"]; + _buildingLoot pushback _item; + if (surfaceIsWater _pos) then { + _item setPosASL _pos; + } + else { + _item setPosATL _pos; + }; + [_item, format ["loots_%1",_lootType]] call EPOCH_serverLootObject; + + + } foreach _buildingLootArray; + }; + }; + if !(_buildingLoot isEqualTo []) then { + _building setvariable ["Epoch_BuildingLoot",_buildingLoot]; + }; + }; + }; +} foreach _LootsArray; +if !(_privateDir isEqualTo []) then { + { + (_x select 0) setowner (owner _player); // switch owner for better simulations on looting + } foreach _privateDir; + _privateDir remoteexec ['Epoch_fnc_SetFinalDir',_player]; +}; \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_airDropCrate.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_airDropCrate.sqf new file mode 100644 index 0000000..427b7e9 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_airDropCrate.sqf @@ -0,0 +1,38 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark + + Description: + Creates air drop crate + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_airDropCrate.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_axeChute","_axeCrate","_axeLight","_crateSmoke","_pos"]; +//[[[end]]] +params ["_object","_player",["_token","",[""]] ]; + +if !([_player,_token] call EPOCH_server_getPToken)exitWith{}; + +_pos = getPos _object; +_pos set [2,(_pos select 2) - 2]; +_axeCrate = createVehicle ["B_supplyCrate_F", _pos, [], 10, "NONE"]; +_axeChute = createVehicle ["NonSteerable_Parachute_F", _pos, [], 10, "FLY"]; +_axeCrate attachTo [_axeChute, [0, 0, 0] ]; +_crateSmoke = "SmokeShell" createVehicle _pos; +_crateSmoke attachTo [_axeChute,[0,0,-0.4]]; +clearWeaponCargoGlobal _axeCrate; +clearItemCargoGlobal _axeCrate; +clearMagazineCargoGlobal _axeCrate; +clearBackpackCargoGlobal _axeCrate; +_axeLight = "Land_Camping_Light_F" createvehicle _pos; +_axeLight attachTo [_axeCrate, [0.71, 0.18, -0.22] ]; +_axeCrate setPos _pos; + +// universal payout system +[_axeCrate, "AirDrop_Payout1"] call EPOCH_serverLootObject; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_createAirDrop.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_createAirDrop.sqf new file mode 100644 index 0000000..9322fca --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_createAirDrop.sqf @@ -0,0 +1,84 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark + + Description: + Creates helicopter air drop + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createAirDrop.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_driver","_drvOwner","_grp","_obj","_objType","_playerOwner","_unit","_unitPos"]; +//[[[end]]] +params ["_player",["_token","",[""]],"_pos"]; + +if (!isNil "axenotSent" && {axenotSent}) exitWith { + diag_log format ["DEBUG: airdrop script already running %1",_this]; +}; + +if !([_player,_token]call EPOCH_server_getPToken)exitWith{}; + +_pos set[2, 2400]; + +if !((nearestObjects[_pos, ["B_Heli_Transport_01_F"], 1000]) isEqualTo[]) exitWith{ diag_log "DEBUG: prevented air drop, too many in area." }; + +_playerOwner = owner _player; + +_objType = "B_Heli_Transport_01_F"; +diag_log format["Epoch: Creating %1 for %3 (Owner ID: %4) at %2",_objType, _pos, name _player, owner _player]; +_obj = createVehicle [_objType, _pos, [], 0, "FLY"]; +_obj call EPOCH_server_setVToken; +addToRemainsCollector[_obj]; +_obj disableTIEquipment true; + +clearWeaponCargoGlobal _obj; +clearItemCargoGlobal _obj; +clearMagazineCargoGlobal _obj; +clearBackpackCargoGlobal _obj; + +_obj allowdamage false; +_obj setPosATL _pos; +_obj setFuel 1; +_obj flyInHeight 120; +_grp = createGroup [RESISTANCE, true]; + +_unitPos = _pos; +_driver = _grp createUnit["I_helipilot_F", _unitPos, [], 0, "CAN_COLLIDE"]; +_driver assignAsDriver _obj; +_driver moveInDriver _obj; + +_unitPos = _pos findEmptyPosition [1,75,"I_helipilot_F"]; + +_unit = _grp createUnit["I_helicrew_F", _unitPos, [], 0, "CAN_COLLIDE"]; +_unit assignAsGunner _obj; +_unit moveInGunner _obj; + +_grp setCombatMode "BLUE"; + +(driver _obj) action ["engineOn", _obj]; +_obj setVehicleLock "LOCKEDPLAYER"; + +[_obj,_driver,_player] spawn { + axenotSent = true; + params ["_obj","_driver","_player"]; + while {axenotSent} do { + if (isNull _obj || isNull _driver ||isNull _player) exitWith {axenotSent = false}; + _drvOwner = owner _driver; + _playerOwner = owner _player; + if(_drvOwner == _playerOwner) exitWith { + // send airdrop to player + _obj remoteExec ['EPOCH_mission_returnObj',_player]; + // since we found an owner, add cleanup if ownership reverts to server. This can also be used to change ownership instead later. + _obj call EPOCH_localCleanup; + diag_log format["DEBUG: Transferred ownership of %1 to %2, new owner ID is %3",_driver, name _player, owner _driver]; + axenotSent = false; + }; + (group _driver) setGroupOwner _playerOwner; + uiSleep 1; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_createObject.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_createObject.sqf new file mode 100644 index 0000000..7c0dc43 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_createObject.sqf @@ -0,0 +1,207 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark + + Description: + Server side spawing of mission objects + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createObject.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_allowedVehicleListName","_allowedVehiclesList","_backpacks","_cfgPricing","_commander","_crew","_driver","_grp","_gunner","_items","_lootTableIndex","_magazines","_obj","_objArr","_pos","_veh","_vehAllowed","_vehicles","_weapons","_wepHolder"]; +//[[[end]]] +params ["_player",["_token","",[""]],["_objArr",[]],["_pos",[]],["_wepHolder",objNull],["_clearCargo",true],["_objSpc","CAN_COLLIDE"],["_driverType",""],["_gunnerType",""],["_commanderType",""],["_crewType",""],["_doDamage",false]]; + +if !([_player,_token]call EPOCH_server_getPToken) exitWith {}; +if !(_objArr isEqualType [])then{_objArr = [_objArr];}; +if (count _objArr < 1) exitWith {}; + +diag_log format["Epoch: Attempt Create Object: %1 for %2",_objArr, name _player]; + +_cfgPricing = 'CfgPricing' call EPOCH_returnConfig; +_lootTableIndex = if (EPOCH_modCUPVehiclesEnabled) then {if (EPOCH_mod_madArma_Enabled) then {3} else {1}} else {if (EPOCH_mod_madArma_Enabled) then {2} else {0}}; +_allowedVehicleListName = ["allowedVehiclesList","allowedVehiclesList_CUP","allowedVehiclesList_MAD","allowedVehiclesList_MADCUP"] select _lootTableIndex; +if !(EPOCH_forcedVehicleSpawnTable isEqualTo "") then { + _allowedVehicleListName = EPOCH_forcedVehicleSpawnTable; +}; +_allowedVehiclesList = getArray(configFile >> "CfgEpoch" >> worldName >> _allowedVehicleListName); +//diag_log format ["DEBUG: Allowed Vehs: %1",_allowedVehiclesList]; +_vehicles = []; +_backpacks = []; +_weapons = []; +_items = []; +_magazines = []; + +if (_pos isEqualTo []) then { + _pos = (getPosATL _player); +}; + +if(count _pos < 3)then{ +_pos set [2,0]; +}; + + +//Sort Object Array +{ + + //Weapons / Items + if(isClass (configFile >> "CfgWeapons" >> _x))then{ + + diag_log format["Epoch: Server_CreateObject: %1 Weapon / Item Found",_x]; + + if("ItemCore" in ([configFile >> "CfgWeapons" >> _x, true] call BIS_fnc_returnParents))then{ + _items pushBack _x; + }else{ + _weapons pushBack _x; + }; + + }; + + //Magazines + if(isClass (configFile >> "CfgMagazines" >> _x))then{ + + diag_log format["Epoch: Server_CreateObject: %1 Magazine Found",_x]; + + if("ItemCore" in ([configFile >> "CfgMagazines" >> _x, true] call BIS_fnc_returnParents))then{ + _items pushBack _x; + }else{ + _magazines pushBack _x; + }; + + }; + + //BackPacks / Vehicles + if(isClass (configFile >> "CfgVehicles" >> _x))then{ + if("Bag_Base" in ([configFile >> "CfgVehicles" >> _x, true] call BIS_fnc_returnParents))then{ + _backpacks pushBack _x; + }else{ + + _vehAllowed = true; + + //If not destroying vehcile then check if allowed + if!(_doDamage)then{ + _veh = _x; + _vehAllowed = false; + { + if (_veh in _x)then{_vehAllowed = true;}; + } forEach _allowedVehiclesList; + }; + + + if(_vehAllowed)then{ + //If not destroying (mission object) then find safe position + if!(_doDamage)then{ + if(_x isKindOf "CAR" || _x isKindOf "AIR")then{ + _pos = [position _player, 0, 250, 6, 0, 1000, 0] call BIS_fnc_findSafePos; + _pos = _pos findEmptyPosition [1,75,_x]; + }; + + if(_x isKindOf "SHIP")then{ + _pos = [position _player, 0, EPOCH_dynamicVehicleArea, 10, 1, 1000, 0] call BIS_fnc_findSafePos; + _pos = _pos findEmptyPosition [1,75,_x]; + }; + }; + + _vehicles pushBack [_x,_pos]; + }; + }; + }; + +}forEach _objArr; + +//Weapons, ammo, items, backpacks +if(count _weapons > 0 || count _items > 0 || count _magazines > 0 || count _backpacks > 0)then{ + +if(isNull _wepHolder)then{ +_wepHolder = createVehicle["groundWeaponHolder", _pos, [], 0.0, "CAN_COLLIDE"]; +}; + + + //Weapons + if(count _weapons > 0)then{ + { + diag_log format["Epoch: Server_CreateObject: %1 Weapon Spawn",_x]; + _wepHolder addWeaponCargoGlobal [_x,1]; + } forEach _weapons; + }; + + //Items + if(count _items > 0)then{ + { + diag_log format["Epoch: Server_CreateObject: %1 Item Spawn",_x]; + _wepHolder addItemCargoGlobal [_x,1]; + } forEach _items; + }; + + //Magazines + if(count _magazines > 0)then{ + { + diag_log format["Epoch: Server_CreateObject: %1 Magazine Spawn",_x]; + _wepHolder addMagazineCargoGlobal [_x,1]; + } forEach _magazines; + }; + + //Backpacks + if(count _backpacks > 0)then{ + { + diag_log format["Epoch: Server_CreateObject: %1 Backpack Spawn",_x]; + _wepHolder addBackPackCargoGlobal [_x,1]; + }forEach _backpacks; + }; + +}; + +if(count _vehicles > 0)then{ + { + diag_log format["Epoch: Server_CreateObject: %1 Vehicle Spawn",_x]; + //Need to create slot to createVehicle a persistent Epoch vehicle. + //_obj = [_x select 0, _x select 1, random 360, true, (EPOCH_storedVehicleCount + 1), _player, "CAN_COLLIDE", !_clearCargo, false] call EPOCH_spawn_vehicle; + + _obj = createVehicle[(_x select 0), (_x select 1), [], 15, "CAN_COLLIDE"]; + + _obj allowdamage false; + + if (_driverType != "" || _gunnerType != "" || _commanderType != "") then { + _grp = createGroup [RESISTANCE, true]; + }; + + if (_driverType != "") then { + _driver = _grp createUnit[_driverType, position _obj, [], 1, "CAN_COLLIDE"]; + _driver assignAsDriver _obj; + _driver moveInDriver _obj; + //if (_doOwner) then {_driver setOwner (owner _player)}; + }; + + if (_gunnerType != "") then { + _gunner = _grp createUnit[_gunnerType, position _obj, [], 1, "CAN_COLLIDE"]; + _gunner assignAsGunner _obj; + _gunner moveInGunner _obj; + //if (_doOwner) then {_gunner setOwner (owner _player)}; + }; + + if (_commanderType != "") then { + _commander = _grp createUnit[_commanderType, position _obj, [], 1, "CAN_COLLIDE"]; + _commander assignAsCommander _obj; + _commander moveInCommander _obj; + //if (_doOwner) then {_commander setOwner (owner _player)}; + }; + + if (_crewType != "") then { + _crew = _grp createUnit[_crewType, position _obj, [], 1, "CAN_COLLIDE"]; + _crew assignAsCargo _obj; + _crew moveInCargo _obj; + //if (_doOwner) then {_crew setOwner (owner _player)}; + }; + _obj allowdamage true; + + if(_doDamage)then{_obj setDamage 1;}; + + }forEach _vehicles; + + +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_fillContainer.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_fillContainer.sqf new file mode 100644 index 0000000..05a9e3a --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_fillContainer.sqf @@ -0,0 +1,38 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Server side spawing of mission loots + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_fillContainer.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_container","_pos"]; +//[[[end]]] +params ["_player",["_token","",[""]],["_container",objNull,[objNull]],["_clearFirst",false],["_chance",25]]; +_pos = getPosATL _player; + +if !([_player,_token]call EPOCH_server_getPToken)exitWith{}; + +if (isNull _container) then { + _container = createVehicle ["GroundWeaponHolder", _pos, [], 12, "CAN_COLLIDE"]; + _container setPosATL _pos; +}; + +if (_clearFirst) then { + clearWeaponCargoGlobal _container; + clearItemCargoGlobal _container; + clearMagazineCargoGlobal _container; + clearBackpackCargoGlobal _container; +}; + +if (_chance > 0) then { + // TODO add separate loot tables for each payout type + [_container, "Mission_Payout1"] call EPOCH_serverLootObject; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_missionComms.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_missionComms.sqf new file mode 100644 index 0000000..8adbee9 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_missions/EPOCH_Server_missionComms.sqf @@ -0,0 +1,30 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Init and pass vars to mission / task control fsm. fsm will dispose if not being used, this function will restart it as required. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_missionComms.sqf +*/ +params["_plyr","_token",["_cmd",-1],["_tmpVar", nil],["_missionIndex",-1],["_item",objNull],["_pos",[]]]; + +if !([_plyr, _token] call EPOCH_server_getPToken) exitWith{}; + +if(isNil "missionControlHandle")then{ + missionControlHandle = [] execFSM "x\addons\a3_epoch_server\system\mission_control.fsm"; + diag_log format ["MISSION CONTROL INIT: %1",missionControlHandle]; + + //Catch first instant if fsm slow to start - may not be necessary. + ["_clientCmd",[_plyr, _cmd, _missionIndex,_item,_pos]] spawn{ + waitUntil {!(isNil "missionControlHandle")}; + missionControlHandle setFSMVariable [_this select 0, _this select 1]; + }; +}else{ + missionControlHandle setFSMVariable ["_clientCmd",[_plyr, _cmd, _missionIndex,_item,_pos]]; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_fnc_addItemToX.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_fnc_addItemToX.sqf new file mode 100644 index 0000000..d5a2bec --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_fnc_addItemToX.sqf @@ -0,0 +1,40 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: He-Man + + Description: + Add items/weapons to player containers + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_fnc_addItemToX.sqf + + Example: + [_player, _itemsInContainers] call EPOCH_fnc_addItemToX; + + Parameter(s): + _this select 0: OBJECT - player + _this select 1: ARRAY - + [ + [["itemClass",1],["anotherClass",5]], // addItemToUniform + [["thatClass",2],["thisClass",2]], // addItemToVest + [["yourClass",4],["myClass",3]] // addItemToBackpack + ] +*/ +params ["_player","_slots"]; +{ + private _itemSlot = _forEachIndex; + _x params ["_items","_itemqtys"]; + { + for "_i" from 1 to (_itemqtys select _forEachIndex) do { + switch _itemSlot do { + case 0: { _player addItemToUniform _x }; + case 1: { _player addItemToVest _x }; + case 2: { _player addItemToBackpack _x }; + }; + }; + } forEach(_items); +} forEach (_slots); diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_fnc_savePlayer.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_fnc_savePlayer.sqf new file mode 100644 index 0000000..5574004 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_fnc_savePlayer.sqf @@ -0,0 +1,25 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Save player with token check for use with RemoteExec + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_fnc_savePlayer.sqf +*/ +params ["_player","",["_token","",[""]],["_stats",[]],["_UpdateTopStats",false]]; +if([_player,_token] call EPOCH_server_getPToken)then{ + { + _x params ["_statType","_adjust","_isTotal"]; + [_player, _statType, _adjust, false,_isTotal] call Epoch_server_updatePlayerStats; + } foreach _stats; + if (_UpdateTopStats) then { + [_player, _player getVariable["COMMUNITY_STATS", []] ] call EPOCH_server_UpdateTopStats; + }; + _this call EPOCH_server_savePlayer; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_fnc_updatePlayerStats.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_fnc_updatePlayerStats.sqf new file mode 100644 index 0000000..edc683d --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_fnc_updatePlayerStats.sqf @@ -0,0 +1,29 @@ +/* + Author: DirtySanchez - EpochMod.com + + Contributors: + + Description: + Save player with token check for use with RemoteExec + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_fnc_updatePlayerStats.sqf +*/ +params ["_player",["_killer",ObjNull],["_statType",""],["_adjust",0],["_toClient",false],["_token","",[""]],["_isTotal",false]]; + +if(isNull _player)exitWith{ + diag_log "EPOCHDebug: fnc_updatePlayerStats -1a- player is Null"; +}; +if(!isplayer _player)exitWith{ + diag_log "EPOCHDebug: fnc_updatePlayerStats -1b- is not a player"; +}; + +if([_player,_token] call EPOCH_server_getPToken)then{ + if (!isnull _killer) then { + _player = _killer; + }; + [_player, _statType, _adjust, _toClient, _isTotal] call EPOCH_server_updatePlayerStats; +}; \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_PayCrypto.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_PayCrypto.sqf new file mode 100644 index 0000000..cf47b6c --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_PayCrypto.sqf @@ -0,0 +1,7 @@ +params [["_player",objNull,[objNull]],["_crypto",0,[0]],["_token","",[""]] ]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (_crypto > 0) exitwith { // This is only for pay Crypto, not for give Crypto ;) + diag_log format ['Player %1 (%2) killed for Code hack',name _player, getplayeruid _player]; + _player setdamage 1 +}; +_this call EPOCH_server_effectCrypto; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_SetFinalPlayerPos.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_SetFinalPlayerPos.sqf new file mode 100644 index 0000000..ff14e0f --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_SetFinalPlayerPos.sqf @@ -0,0 +1,43 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Set final Player position on login + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_SetFinalPlayerPos.sqf +*/ + +params ["_player","_newPlyr"]; +private ["_finalpos","_fallbackpos"]; +if (isnull _player || isnull _newPlyr) exitwith { + diag_log "DEBUG: SetFinalPlayerPos failed - Player or PlayerObj is Null"; +}; +if !(typeof _player isequalto "VirtualMan_EPOCH") exitwith { + diag_log "DEBUG: SetFinalPlayerPos failed - PlayerObj != VirtualMan_EPOCH"; +}; +_finalpos = _newPlyr getvariable ["FinalDest",[]]; +if (_finalpos isequalto []) exitwith { + diag_log "DEBUG: SetFinalPlayerPos failed - No FinalPos Variable set"; +}; +if !(_finalpos isequaltype []) exitwith { + diag_log "DEBUG: SetFinalPlayerPos failed - FinalPos is not an Array"; +}; +if (count _finalpos < 2) exitwith { + diag_log "DEBUG: SetFinalPlayerPos failed - count FinalPos < 2"; +}; +_fallbackpos = getmarkerpos "respawn_west"; +_fallbackpos set [2,0]; +_finalpos params [["_location",_fallbackpos],["_dir",0]]; +_newPlyr setDir _dir; +_newPlyr setPosATL _location; +_newPlyr setVariable["SETUP", true, true]; +_player setPosATL _location; +_newPlyr allowdamage true; +_newPlyr hideobjectglobal false; + diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_SetUnitLoadout.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_SetUnitLoadout.sqf new file mode 100644 index 0000000..412be75 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_SetUnitLoadout.sqf @@ -0,0 +1,81 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Player Login + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_SetUnitLoadout.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_type","_loadabs"]; +//[[[end]]] + +params ["_newPlyr","_loadout"]; + +// _loadout params ["_primaryarr","_secondaryarr","_handgunarr","_uniformarr","_vestarr","_bpackarr","_HeadGear","_Glasses","_Rangefinderarr","_LinedItemsarr"]; +_loadout params ["","","","_uniformarr","_vestarr","_bpackarr","","","",""]; +_loadout set [3,[]]; +_loadout set [4,[]]; +_loadout set [5,[]]; +_newPlyr setunitloadout _loadout; +_uniformarr params [["_uniform",""],["_uniformitems",[]]]; +_vestarr params [["_vest",""],["_vestitems",[]]]; +_bpackarr params [["_bpack",""],["_bpackitems",[]]]; +if !(_uniform isequalto "") then { + _newPlyr forceadduniform _uniform; +}; +if !(_vest isequalto "") then { + _newPlyr addVest _vest; +}; +if !(_bpack isequalto "") then { + _newPlyr addBackpack _bpack; +}; +{ + _x params ["_container","_items"]; + if !(isnull _container) then { + clearitemcargoglobal _container; + clearbackpackcargoglobal _container; + clearmagazinecargoglobal _container; + clearweaponcargoglobal _container; + { + if (count _x > 2) then { + _container addMagazineAmmoCargo _x; + } + else { + if ((_x select 0) isequaltype []) then { + _container addWeaponWithAttachmentsCargoGlobal _x; + } + else { + _x params [["_type",""],["_cnt",1]]; + if !(_cnt isequaltype 1) then { + _cnt = 1; + }; + if (_type iskindof "Bag_Base") then { + _container addBackpackCargoGlobal [_type,_cnt]; + } + else { + _container addItemCargoGlobal [_type,_cnt]; + }; + }; + }; + } foreach _items; + }; +} foreach [ + [Uniformcontainer _newPlyr, _uniformitems], + [Vestcontainer _newPlyr, _vestitems], + [BackpackContainer _newPlyr, _bpackitems] +]; + +_loadabs = loadabs _newPlyr; +if !(uniform _newPlyr isequalto _uniform && vest _newPlyr isequalto _vest && backpack _newPlyr isequalto _bpack) then { + diag_log format ["EPOCH Debug: Setunitloadout failed - Unifmorm should: %1 is: %2 - Vest should: %3 is: %4 - Backpack should: %5 is: %6",_uniform,uniform _newPlyr,_vest,vest _newPlyr,_bpack,backpack _newPlyr]; + _loadabs = -1; +}; + +_loadabs diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_checkPlayer.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_checkPlayer.sqf new file mode 100644 index 0000000..028c09a --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_checkPlayer.sqf @@ -0,0 +1,62 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Player Check + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_checkPlayer.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_apperance","_arr","_class","_dead","_deadPlayer","_defaultData","_instanceID","_isMale","_medical","_playerUID","_response","_return","_vars"]; +//[[[end]]] +params [["_playerObj",objNull],["_fsmHandle",0]]; +if (_playerObj isEqualType objNull) then { + if (!isNull _playerObj) then { + _playerUID = getPlayerUID _playerObj; + if (_playerUID != "") then { + + _response = ["Player", _playerUID] call EPOCH_fnc_server_hiveGETRANGE; + + _dead = false; + _isMale = true; + _instanceID = call EPOCH_fn_InstanceID; + + _arr = []; + if ((_response select 0) == 1 && (_response select 1) isEqualType []) then { + _arr = (_response select 1); + }; + + // empty default data format, if "Player" data format is changed update this array! + _defaultData = [[], [], [], [], [], [], [], [], [], [], "", true]; + + // If data does not validate against default or is too short, assume player is new or already dead. + if !(_arr isEqualTypeParams _defaultData) then { + _dead = true; + } else { + _arr params ["","_medical","_apperance","","_vars"]; + _class = _apperance param [5, "Epoch_Female_F"]; + _isMale = (_class == "Epoch_Male_F"); + _medical params ["","","","_damage",["_hitpoints",[0,0,0,0,0,0,0,0,0,0,0]] ]; + _deadPlayer = ["PlayerStats", _playerUID, 0] call EPOCH_fnc_server_hiveGETBIT; + // check if player is already dead or was critically hit HitHead = 2 or HitBody = 7 and if blood pressure too high. + if (_deadPlayer || (_damage == 1) || (_hitpoints select 2 == 1) || (_hitpoints select 7 == 1) || (_vars select 12 >= 180)) then { + _dead = true; + }; + }; + + /* true => New Char + false => load old Char */ + [_fsmHandle,['_checkPlayer_PVC', _dead]] remoteExecCall ['setFSMVariable', _playerObj]; + + if (!_dead) then { //Load old Char + [_playerObj, _isMale, _fsmHandle, _arr] call EPOCH_server_loadPlayer; + }; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_deadPlayer.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_deadPlayer.sqf new file mode 100644 index 0000000..4aebfb2 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_deadPlayer.sqf @@ -0,0 +1,143 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Player Death for use with RemoteExec + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_deadPlayer.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_bankBalance","_bankData","_cIndex","_current_crypto","_defaultVars","_playerName","_playerUID","_pos","_response","_triggerType","_vars","_killerUID","_deathType","_killerCommunityStats","_mIndex","_current_murders","_communityStats","_sIndex","_current_suicides","_dIndex","_current_deaths","_playerKarmaAdj","_killerKarmaAdj","_kIndex","_playerCStats","_playerKarma","_playerIsNeutral","_playerIsBandit","_playerIsHero","_killerCStats","_killerKarma","_karmaLimitsArray","_lowKarmaLevel1","_highKarmaLevel1"]; +//[[[end]]] +params ["_playerObj","_killer","_playerName",["_token","",[""]] ]; + +// handle token check and isnull for _player +if !([_playerObj, _token] call EPOCH_server_getPToken) exitWith{}; + +_playerUID = getPlayerUID _playerObj; +_killerUID = getPlayerUID _killer; +_pos = getposATL _playerObj; + +// find player's Karma status +_kIndex = EPOCH_communityStats find "Karma"; +_playerCStats = _playerObj getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars]; +_playerKarma = _playerCStats select _kIndex; + +// set config karma levels +_karmaLimitsArray = EPOCH_communityStatsLimits select _kIndex; +_lowKarmaLevel1 = ((_karmaLimitsArray select 2) select 0); +_highKarmaLevel1 = ((_karmaLimitsArray select 3) select 0); + +_playerIsNeutral = (_playerKarma < _highKarmaLevel1 && _playerKarma > _lowKarmaLevel1); +_playerIsBandit = (_playerKarma <= _lowKarmaLevel1); +_playerIsHero = (_playerKarma >= _highKarmaLevel1); + +// default deathType is suicide +_deathType = 666; +_playerKarmaAdj = -2; + +if (_playerObj != _killer) then { + _playerKarmaAdj = -5; + if (random 1 <= EPOCH_antagonistChancePDeath) then { + _triggerType = 2; + if (surfaceIsWater _pos) then { + _triggerType = 3; + }; + [_killer, "Sapper"] call EPOCH_server_triggerEvent; + }; + + // backwards compat for now - + if (_playerName isEqualType []) then{ + _playerName = toString (_playerName); + }; + + ['deathlog', format['%1 (%2) Killed By %3 (%4) with weapon %5 from %6m at %7', _playerName, _playerUID, name _killer, _killerUID, currentWeapon _killer, _playerObj distance _killer, _pos]] call EPOCH_fnc_server_hiveLog; + + // player karma changes + if(_playerIsNeutral)then{_playerKarmaAdj = abs((-_playerKarma) * 0.03)}; + if(_playerIsBandit)then{_playerKarmaAdj = abs((-_playerKarma) * 0.055)}; + if(_playerIsHero)then{_playerKarmaAdj = abs((-_playerKarma) * 0.025)}; + _deathType = 0; + if!(_killerUID isEqualTo "")then{ + if !((group _playerObj) isEqualTo (group _killer)) then { + [_killer, "Murders", 1, true] call EPOCH_server_updatePlayerStats; + }; + + // find killer's Karma status + _killerCStats = _killer getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars]; + _killerKarma = _killerCStats select _kIndex; + + // killer karma changes + _killerKarmaAdj = -5; + if(_killerKarma < _highKarmaLevel1 && _killerKarma > _lowKarmaLevel1)then{ + if(_playerIsNeutral)then{_killerKarmaAdj = abs((-_killerKarma) * 0.03) + _playerKarmaAdj}; + if(_playerIsBandit)then{_killerKarmaAdj = abs((_killerKarma) * 0.05) + _playerKarmaAdj}; + if(_playerIsHero)then{_killerKarmaAdj = abs((-_killerKarma) * 0.025) + _playerKarmaAdj}; + }; + if(_killerKarma <= _lowKarmaLevel1)then{ + if(_playerIsNeutral)then{_killerKarmaAdj = abs((_killerKarma) * 0.05) + _playerKarmaAdj}; + if(_playerIsBandit)then{_killerKarmaAdj = abs((-_killerKarma) * 0.15) + _playerKarmaAdj}; + if(_playerIsHero)then{_killerKarmaAdj = abs((_killerKarma) * 0.15) + _playerKarmaAdj}; + }; + if(_killerKarma >= _highKarmaLevel1)then{ + if(_playerIsNeutral)then{_killerKarmaAdj = abs((-_killerKarma) * 0.10) + _playerKarmaAdj}; + if(_playerIsBandit)then{_killerKarmaAdj = abs((_killerKarma) * 0.15) + _playerKarmaAdj}; + if(_playerIsHero)then{_killerKarmaAdj = abs((-_killerKarma) * 0.25) + _playerKarmaAdj}; + }; + [_killer, "Karma", _killerKarmaAdj, true] call EPOCH_server_updatePlayerStats; + _deathType = 1; + }; +}; + +switch(_deathType)do{ + case 666: { + [_playerObj, "Suicides", 1, true] call EPOCH_server_updatePlayerStats; + [_playerObj, "Karma", _playerKarmaAdj, true] call EPOCH_server_updatePlayerStats; + }; + case 1: { + [_playerObj, "Deaths", 1, true] call EPOCH_server_updatePlayerStats; + [_playerObj, "Karma", _playerKarmaAdj, true] call EPOCH_server_updatePlayerStats; + }; + case 0: { + [_playerObj, "AIDeaths", 1, true] call EPOCH_server_updatePlayerStats; + }; +}; +_defaultVars = call EPOCH_defaultVars_SEPXVar; +// get vars array and current Crypto value +_cIndex = EPOCH_customVars find "Crypto"; +_vars = _playerObj getVariable["VARS", _defaultVars]; +_current_crypto = _vars select _cIndex; + +if (_current_crypto > 0) then{ + _playerObj setVariable["Crypto", _current_crypto, true]; + diag_log format["Epoch: ADMIN: Crypto added to dead body for %1 with %2 at %3", getPlayerUID _playerObj, _current_crypto, _pos]; +}; + +// save community stats (skipped in EPOCH_server_savePlayer for dead Players) +_stats = _playerObj getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars]; +["CommunityStats", _playerUID, EPOCH_expiresCommunityStats, [_stats]] call EPOCH_fnc_server_hiveSETEX; +[_playerObj,_stats] call EPOCH_server_UpdateTopStats; + +[_playerObj, _defaultVars] call EPOCH_server_savePlayer; + +// death cost +if (EPOCH_cloneCost > 0) then { + _response = ["Bank", _playerUID] call EPOCH_fnc_server_hiveGETRANGE; + if ((_response select 0) == 1 && (_response select 1) isEqualType []) then { + _bankData = _response select 1; + _bankBalance = 0; + + if !(_bankData isEqualTo[]) then { + _bankBalance = _bankData select 0; + }; + + _bankBalance = _bankBalance - EPOCH_cloneCost; + ["Bank", _playerUID, EPOCH_expiresBank, [_bankBalance]] call EPOCH_fnc_server_hiveSETEX; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_deadPlayerDetonate.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_deadPlayerDetonate.sqf new file mode 100644 index 0000000..a6a3957 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_deadPlayerDetonate.sqf @@ -0,0 +1,25 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark + + Description: + Detonate a boss sapper bomb at player position. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_playerDeathOptions.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_bomb","_pos"]; +//[[[end]]] +params ["_player", "_token"]; +diag_log format["Epoch: ADMIN: Attempting player detonate on %1.", getPlayerUID _player]; +if !([_player,_token]call EPOCH_server_getPToken)exitWith{}; + +_pos = getPosATL _player; +_bomb = createVehicle["Sapper_Charge_Ammo", _pos, [], 0, "CAN_COLLIDE"]; +_bomb setDamage 1; +hideObjectGlobal _player; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_equippedItem.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_equippedItem.sqf new file mode 100644 index 0000000..f9101fa --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_equippedItem.sqf @@ -0,0 +1,32 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Radio Channel handler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_equippedItem.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_channelID","_config","_selectedChannel"]; +//[[[end]]] +params ["_class","_status","_player"]; + +_selectedChannel = EPOCH_customChannels select 0; +_config = (configfile >> "CfgWeapons" >> _class); +if (isClass(_config)) then { + _channelID = getNumber(_config >> "channelID"); + _selectedChannel = EPOCH_customChannels select _channelID; +}; + +if (_status) then { + {_x radioChannelRemove[_player];} ForEach EPOCH_customChannels; + _selectedChannel radioChannelAdd[_player]; +} else { + {_x radioChannelRemove[_player];} ForEach EPOCH_customChannels; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf new file mode 100644 index 0000000..6397159 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf @@ -0,0 +1,313 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: He-Man + + Description: + Player Login + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_Primary","_CheckLocation","_allGroupMembers","_alreadyDead","_assignedItems","_attachments","_backpack","_backpackItems","_canBeRevived","_class","_communityStats","_communityStatsArray","_currentWeapon","_deadPlayer","_defaultData","_dir","_equipped","_found","_goggles","_group","_handgunWeapon","_headgear","_instanceID","_jammer","_jammers","_linkedItems","_loadout","_location","_newLocation","_newPlyr","_playerData","_playerGroup","_playerGroupArray","_playerNetID","_playerUID","_primaryWeapon","_reject","_secondaryWeapon","_serverSettingsConfig","_type","_uniform","_uniformItems","_vars","_vest","_vestItems","_wMags","_wMagsArray","_weapon"]; +//[[[end]]] +_reject = true; + +params [["_player",objNull,[objNull]],["_isMale",true],["_fsmHandle",0],["_playerData",[]]]; + +if (!isNull _player) then { + + // load server settings + _serverSettingsConfig = configFile >> "CfgEpochServer"; + _instanceID = call EPOCH_fn_InstanceID; + + _playerNetID = owner _player; + _playerUID = getPlayerUID _player; + + if (_playerUID != "") then { + + if (_playerdata isequalto []) then { + // Make Hive call + (["Player", _playerUID] call EPOCH_fnc_server_hiveGETRANGE) params [ + ["_status", 0 ], + ["_playerDataTmp", [] ] + ]; + if (_status == 1 && _playerDataTmp isEqualType []) then { + _playerData = _playerDataTmp; + }; + }; + + // Apperance defaults + _uniform = [_serverSettingsConfig, "defaultUniformFemale", "U_Test_uniform"] call EPOCH_fnc_returnConfigEntry; + _class = "Epoch_Female_F"; + _vest = [_serverSettingsConfig, "defaultVestFemale", "V_F41_EPOCH"] call EPOCH_fnc_returnConfigEntry; + if (_isMale) then { + _uniform = [_serverSettingsConfig, "defaultUniformMale", "U_Test1_uniform"] call EPOCH_fnc_returnConfigEntry; + _class = "Epoch_Male_F"; + _vest = [_serverSettingsConfig, "defaultVestMale", "V_41_EPOCH"] call EPOCH_fnc_returnConfigEntry; + }; + _goggles = [_serverSettingsConfig, "defaultGoggles", ""] call EPOCH_fnc_returnConfigEntry; + _headgear = [_serverSettingsConfig, "defaultHeadgear", ""] call EPOCH_fnc_returnConfigEntry; + _backpack = [_serverSettingsConfig, "defaultBackpack", ""] call EPOCH_fnc_returnConfigEntry; + + // Inventory defaults + _primaryWeapon = [_serverSettingsConfig, "defaultprimaryWeapon", []] call EPOCH_fnc_returnConfigEntry; // ["arifle_MX_pointer_F","","acc_pointer_IR","",["30Rnd_65x39_caseless_mag",29],[],""]; + _secondaryWeapon = [_serverSettingsConfig, "defaultsecondaryWeapon", []] call EPOCH_fnc_returnConfigEntry; // ["launch_NLAW_F","","","",["NLAW_F",1],[],""]; + _handgunWeapon = [_serverSettingsConfig, "defaulthandgunWeapon", []] call EPOCH_fnc_returnConfigEntry; // ["hgun_P07_F","","","",["16Rnd_9x21_Mag",16],[],""]; + _uniformItems = [_serverSettingsConfig, "defaultuniformItems", []] call EPOCH_fnc_returnConfigEntry; // [["FAK",1],["30Rnd_65x39_caseless_mag",2,30],["Chemlight_green",1,1]]; + _vestItems = [_serverSettingsConfig, "defaultvestItems", []] call EPOCH_fnc_returnConfigEntry; // [["30Rnd_65x39_caseless_mag",3,30],["16Rnd_9x21_Mag",2,16],["SmokeShell",1,1],["SmokeShellGreen",1,1],["SmokeShellBlue",1,1],["SmokeShellOrange",1,1],["Chemlight_green",1,1]]; + _backpackItems = [_serverSettingsConfig, "defaultbackpackItems", []] call EPOCH_fnc_returnConfigEntry; // [["Medikit",1],["FAK",10],[["hgun_P07_F","","","",["16Rnd_9x21_Mag",16],[],""],1]]; + _assignedItems = [_serverSettingsConfig, "defaultassignedItems", ["","","","",[],[],""]] call EPOCH_fnc_returnConfigEntry; // ["Rangefinder","","","",[],[],""] + _linkedItems = [_serverSettingsConfig, "defaultlinkedItems", ["ItemMap","","EpochRadio0","","",""]] call EPOCH_fnc_returnConfigEntry; // ["ItemMap","ItemGPS","ItemRadio","ItemCompass","ItemWatch","NVGoggles"] + _currentWeapon = [_serverSettingsConfig, "defaultSelectedWeapon", ""] call EPOCH_fnc_returnConfigEntry; // class of selected weapon + + _loadout = [ + _primaryWeapon, + _secondaryWeapon, + _handgunWeapon, + [_uniform,_uniformItems], + [_vest,_vestItems], + [_backpack,_backpackItems], + _headgear, + _goggles, + _assignedItems, + _linkedItems + ]; + + // default data, if "Player" data format is changed update this array! + _defaultData = [[0, [], _instanceID, 1.0], [0, 0, 1, 0, [0,0,0,0,0,0,0,0,0,0,0]], ["", "", "", "", _currentWeapon, _class], [], call EPOCH_defaultVars_SEPXVar, _loadout, [], [], [], [], "", true]; + + // If data does not validate against default or is too short, override with default data. + if !(_playerData isEqualTypeParams _defaultData) then { + diag_log format["DEBUG: Invaild player data %1, defaults used instead.", _playerData]; + _playerData = _defaultData; + }; + + _playerData params ["_worldspace","_medical","","_server_vars","_vars","","","","","","_playerGroup","_canBeRevived"]; + + // Load world space and previous instance id + _worldspace params ["_dir","_location","_prevInstance",["_schemaVersion",0.5]]; + + if (count _location == 2) then{ + _location = (_location select 0) vectorAdd (_location select 1); + }; + + // Get player group + _playerGroupArray = []; + // check players group + if (_playerGroup != "") then { + _found = false; + (["Group", _playerGroup] call EPOCH_fnc_server_hiveGETRANGE) params [ + ["_status", 0 ], + ["_playerGroupArrayTmp", [] ] + ]; + if (_status == 1 && !(_playerGroupArrayTmp isEqualTo[])) then { + _playerGroupArrayTmp params ["","","","_modArray","_memberArray"]; + _found = _playerGroup == _playerUID; + if (!_found) then { + _allGroupMembers = (_modArray + _memberArray) apply {_x select 0}; + _found = _playerUID in _allGroupMembers; + }; + if (_found) then { + _playerGroupArray = _playerGroupArrayTmp; + }; + }; + if (!_found) then { + _playerGroup = ""; + }; + // diag_log format["DEBUG (Load Player) Set Group: %1", _playerGroup]; + }; + + _medical params ["_bleedingRemaining","_fatigue","_oxygenRemaining","_damage",["_hitpoints",[0,0,0,0,0,0,0,0,0,0,0]] ]; + + _deadPlayer = ["PlayerStats", _playerUID, 0] call EPOCH_fnc_server_hiveGETBIT; + + // check if player is already dead or was critically hit HitHead = 2 or HitBody = 7 and if blood pressure too high. + _alreadyDead = (_deadPlayer || (_damage == 1) || (_hitpoints select 2 == 1) || (_hitpoints select 7 == 1) || (_vars select 12 >= 180)); + + if (_alreadyDead || _prevInstance != _instanceID || (count _location) < 3 || !(_location isEqualType [])) then { + // reset hitpoints + _hitpoints = [0,0,0,0,0,0,0,0,0,0,0]; + _dir = random 360; + // try to find respawn point by position + _newLocation = _server_vars param [0,[]]; // 0 = RESPAWN POS + // normal respawn location + _location = getMarkerPos "respawn_west"; + _location set[2, 0]; + if (_location isEqualTo [0,0,0]) then { + _location set [2, 10]; + if (surfaceiswater _location) then { + _location = asltoatl _location; + }; + }; + if (_newLocation isEqualType [] && {(count _newLocation) == 3}) then { + _CheckLocation = _newLocation; + if (surfaceiswater _newLocation) then { + _CheckLocation = ATLToASL _newLocation; + }; + _jammers = nearestObjects[_CheckLocation, call EPOCH_JammerClasses, 6]; + if !(_jammers isEqualTo[]) then { + // get nearby object + _jammer = _jammers param [0,objNull]; + // check if object is not null and is alive. + if (!isNull _jammer && {alive _jammer}) then { + // check if player is still a member of object group. + if ((_jammer getVariable["BUILD_OWNER", "-1"]) in [_playerUID, _playerGroup]) then { + // Override location with that of object + _location = _newLocation; + }; + }; + }; + }; + if (_alreadyDead) then { + _vars = call EPOCH_defaultVars_SEPXVar; + _canBeRevived = true; + }; + }; + + _group = grpNull; + + // find existing group + if (_playerGroup != "") then { + { + if ((_x getVariable["GROUP", ""]) == _playerGroup) exitWith{ + _group = group _x; + }; + } forEach (allPlayers select {alive _x}); + }; + + if (isNull _group) then { + _group = createGroup [west, true]; + }; + _spawnpos = getMarkerPos "respawn_west"; + _spawnpos set[2, 0]; + if (_spawnpos isEqualTo [0,0,0]) then { + _spawnpos set [2, 10]; + if (surfaceiswater _spawnpos) then { + _spawnpos = asltoatl _spawnpos; + }; + }; + _newPlyr = _group createUnit[_class, _spawnpos, [], 0, "CAN_COLLIDE"]; + _newPlyr setposatl _spawnpos; + _newPlyr hideobjectglobal true; + if !(isNull _newPlyr) then { + + // disable AI on temp unit + _newPlyr disableAI "ALL"; + + if (!_alreadyDead) then { + // Medical + _newPlyr setBleedingRemaining _bleedingRemaining; + // _newPlyr setFatigue _fatigue; + _newPlyr setOxygenRemaining _oxygenRemaining; + _newPlyr setDamage _damage; + } else { + // player dead use default Data for appearance and loadout data + _playerData = _defaultData; + }; + + // disable further damage server side + _newPlyr allowDamage false; + + // set player loadout + _playerData params ["","","_appearance","","","_loadout"]; + // get current weapon to send to param for selectWeapon + _currentWeapon = _appearance param [4,""]; +// _newPlyr setUnitLoadout [_loadout, false]; + + // Workaround for Client / Server synchronizing issue in SetUnitLoadout + _loadabs = [_newPlyr,_loadout] call Epoch_server_SetUnitLoadout; + if (_loadabs isequalto -1) then { + deleteVehicle _newPlyr; + }; + + // Final Push + if (isNull _player) then { + deleteVehicle _newPlyr; + diag_log "Epoch: DEBUG: _player object was null reject connection"; + } else { + + // add to cleanup + addToRemainsCollector[_newPlyr]; + + _reject = false; + + if (_playerGroup != "") then { + _newPlyr setVariable["GROUP", _playerGroup]; + }; + + _newPlyr setVariable["PUID", _playerUID]; + + if !(_vars isEqualTo[]) then { + _newPlyr setVariable["VARS", _vars]; + }; + + if !(_server_vars isEqualTo[]) then{ + _newPlyr setVariable["SERVER_VARS", _server_vars]; + }; + + if (!_canBeRevived) then { + _newPlyr setVariable["REVIVE", _canBeRevived]; + }; + + // load community stats + _communityStatsArray = ["CommunityStats", _playerUID] call EPOCH_fnc_server_hiveGETRANGE; + _communityStats = (_communityStatsArray param [1,[]]) param [0,[]]; + if (_communityStats isEqualTo []) then { + _communityStats = EPOCH_defaultStatVars; + }; + if (count _communityStats < EPOCH_communityStatsCount) then { + { + private _check = _communityStats select _foreachindex; + if (isnil '_check') then { + _communityStats pushback _x; + }; + } foreach EPOCH_defaultStatVars; + }; + _Index = EPOCH_communityStats find "ConnectCount"; + if (_Index > -1) then { + _currentStat = _communityStats select _Index; + _communityStats set[_Index, _currentStat + 1]; + }; + _Index = EPOCH_communityStats find "PlayTime"; + if (_Index > -1) then { + _currentStat = _communityStats select _Index; + _newPlyr setVariable["EPOCH_playerPlayTime", _currentStat, true]; + }; + + _newPlyr setVariable["COMMUNITY_STATS", _communityStats]; + + // Flag new body as ready for use. + _newPlyr setVariable["FinalDest", [_location,_dir], true]; + + // Send message to player so they can take over the new body. + [_playerNetID, _playerUID, [_newPlyr, _vars, _currentWeapon, _loadabs, _playerGroup, _canBeRevived, _newPlyr call EPOCH_server_setPToken,_playerGroupArray, _communityStats, _hitpoints], _fsmHandle, _player] call EPOCH_server_pushPlayer; + + // revive test + _newPlyr setVariable ['#rev_enabled', true, true]; + // [] remoteExec ["bis_fnc_reviveInit",_player]; + + // new Dynamicsimulation + if([configFile >> "CfgEpochServer", "playerDynamicSimulationSystem", true] call EPOCH_fnc_returnConfigEntry)then + { + _newPlyr enableDynamicSimulation true; + _newPlyr triggerDynamicSimulation true; + }; + }; + } else { + diag_log format["LOGIN FAILED UNIT NULL: %1 [%2|%3]", _player, _group, count allgroups]; + }; + }; +}; + + +if (_reject) then { + diag_log format ["DEBUG PLAYER NOT SETUP OR INVAILD: %1", _player]; + true remoteExec ['EPOCH_client_rejectPlayer',_player]; +}; + +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_makeSP.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_makeSP.sqf new file mode 100644 index 0000000..a6abc73 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_makeSP.sqf @@ -0,0 +1,55 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Select spawn point + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_selectSpawnpoint.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_currentPos","_server_vars"]; +//[[[end]]] +params [["_jammer",objNull],["_player",objNull],["_token",""]]; +// check token +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +// require object +if (isNull _jammer) exitWith {}; +// reject if player is too far away +if (_player distance _jammer > 20) exitWith{}; +// check if in group with owner +if (alive _jammer) then { + if ((_jammer getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID _player, _player getVariable["GROUP", ""]]) then { + _server_vars = _player getVariable["SERVER_VARS", []]; + _currentPos = _server_vars param [0,[]]; + // invalidate previous position + if (!(_currentPos isequaltype [])) then { + _currentPos = []; + }; + if (!(_currentPos isEqualTo []) && {_jammer distance _currentPos > 20}) then { _currentPos = [] }; + if (_currentPos isEqualTo []) then { + // set position of spawnpoint to players SERVER_VARS + _server_vars set [0, getposATL _player]; // 0 = RESPAWN POS + _player setVariable ["SERVER_VARS", _server_vars]; + [_player, _player getVariable["VARS", []]] call EPOCH_server_savePlayer; + ["Spawnpoint set", 5] remoteExec ['Epoch_message',_player]; + } + else + { + // remove position of spawnpoint from players SERVER_VARS + _server_vars set [0, []]; // 0 = RESPAWN POS + _player setVariable ["SERVER_VARS", _server_vars]; + [_player, _player getVariable["VARS", []]] call EPOCH_server_savePlayer; + ["Spawnpoint removed", 5] remoteExec ['Epoch_message',_player]; + }; + } + else + { + ["This is not one of your Group's Jammers", 5] remoteExec ['Epoch_message',_player]; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_onPlayerDisconnect.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_onPlayerDisconnect.sqf new file mode 100644 index 0000000..b84303f --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_onPlayerDisconnect.sqf @@ -0,0 +1,37 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Player Disconnect + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_onPlayerDisconnect.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_return"]; +//[[[end]]] +params ["_player","_id","_uid","_name"]; +_return = false; +if (!isNull _player) then { + if (_player getVariable["SETUP", false]) then { + [_player, _player getVariable["VARS", []] ] call EPOCH_server_savePlayer; + if (alive _player) then { + _player setVariable ["VARS", nil]; + deleteVehicle _player; + }; + } else { + deleteVehicle _player; + }; +}; +// Delete any left over units with same PUID +{ + deleteVehicle _x; +} forEach (allUnits select {_x getVariable["PUID", "0"] == _uid}); +_uid call EPOCH_server_disconnect; +['Disconnected', [_uid, _name]] call EPOCH_fnc_server_hiveLog; +_return diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_playerSetVariable.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_playerSetVariable.sqf new file mode 100644 index 0000000..1dea461 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_playerSetVariable.sqf @@ -0,0 +1,18 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Call setVariable on specific client. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_playerSetVariable.sqf +*/ +params ["_player","_token","_obj", "_var", "_value", "_local"]; +if !([_player,_token]call EPOCH_server_getPToken)exitWith{}; +diag_log format["Epoch: ADMIN: Attempting Set variable [%2,%3,%4] on %1.", _obj, _var, _value,_local]; +[_obj, _var,_value,_local] remoteExec ['EPOCH_fnc_playerSetVariable', _obj]; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_respawnPlayer.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_respawnPlayer.sqf new file mode 100644 index 0000000..bc06d89 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_respawnPlayer.sqf @@ -0,0 +1,45 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Player Respawn (unused) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_respawnPlayer.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_class","_defaultUniform","_dir","_location","_vest"]; +//[[[end]]] +params ["_player",["_token","",[""]],"_isMale"]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; + +_defaultUniform = "U_Test_uniform"; +_class = "Epoch_Female_F"; +_vest = "V_F41_EPOCH"; +if (_isMale) then { + _defaultUniform = "U_Test1_uniform"; + _class = "Epoch_Male_F"; + _vest = "V_41_EPOCH"; +}; + +_dir = random 360; +_location = getMarkerPos "respawn_west"; +_location set[2, 0]; + +_player = (group _player) createUnit [_class, _location, [], 0, "CAN_COLLIDE"]; +_player disableAI "ALL"; + +_player setDir _dir; +_player setPosATL _location; + +// send player object to player +["_switchPlayer_PVC",_player] remoteExec ['EPOCH_playerGenderInit',_player]; + +_player setVariable ["REVIVE", true]; +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_revivePlayer.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_revivePlayer.sqf new file mode 100644 index 0000000..6bdc712 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_revivePlayer.sqf @@ -0,0 +1,179 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: He-Man + + Description: + Player Revive + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_revivePlayer.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_caller","_loadabs","_loadout","_CorpseCrypto","_PlayerCrypto","_attachments","_cIndex","_class","_currwh","_deleteprimary","_deletesecondary","_dir","_droppedPrimary","_droppedSecondary","_droppedWeapons","_equipped","_group","_garbage","_location","_newPlyr","_playerGroup","_playerUID","_token","_type","_vars","_wMags","_wMagsArray","_weapon","_wh","_kIndex","_reviver","_reviverCStats","_reviverKarma","_reviverKarmaAdj"]; +//[[[end]]] +params ["_player","_reviver",["_token","",[""]] ]; +_caller = if (remoteExecutedOwner == (owner _reviver)) then {_reviver} else {_player}; +if !([_caller, _token] call EPOCH_server_getPToken) exitWith{}; +if (isNull _player) exitWith{}; +if !(isplayer _reviver) exitWith{}; +if (_player distance _reviver > 20) exitWith{}; + +if (!local _player) then { + _playerUID = getPlayerUID _player; + if (!isNil "_playerUID" && !alive _player) then { + + if (_player == _reviver) exitWith { + 'epochserver' callExtension format['820|%1|EpochMod.com Autoban #R1',getPlayerUID _reviver]; + ['ahb', format['%1 (%2): Tried to Revive yourself (%3)', name _reviver, getPlayerUID _reviver, _this]] call EPOCH_fnc_server_hiveLog; + }; + + _class = typeOf _player; + + if (_class in ["Epoch_Male_F", "Epoch_Female_F"]) then { + + if (_player getVariable["REVIVE", true]) then { + if (_player getvariable ['Reviving', false]) exitwith { + diag_log format['DEBUG Reviving skipped - Player already reviving : %1', _this]; + }; + _player setvariable ['Reviving',true]; + + diag_log format["DEBUG server_revivePlayer : %1", _this]; + + _location = getPosATL _player; + _dir = getDir _player; + _playerGroup = _player getVariable["GROUP", ""]; + + // Load Inventory + _loadout = getUnitLoadout _player; + + _wh = nearestObjects[_player, ["WeaponHolderSimulated"], 12]; + _droppedPrimary = []; + _droppedSecondary = []; + _deleteprimary = []; + _deletesecondary = []; + reverse _wh; + { + _currwh = _x; + { + _type = getNumber(configfile >> "cfgweapons" >> (_x select 0) >> "type"); + switch _type do { + case 1: {_droppedPrimary = _x; _deleteprimary = [_currwh]}; + case 4: {_droppedSecondary = _x; _deletesecondary = [_currwh]}; + }; + } forEach (weaponsItemsCargo _x); + } foreach _wh; + { + if (!isnull _x) then {deletevehicle _x}; + } foreach (_deleteprimary+_deletesecondary); + if (count _droppedPrimary == 6) then { + _droppedPrimary set [6,_droppedPrimary select 5]; + _droppedPrimary set [5,[]]; + + }; + if (count _droppedSecondary == 6) then { + _droppedSecondary set [6,_droppedSecondary select 5]; + _droppedSecondary set [5,[]]; + }; + + hideObjectGlobal _player; + + // create new player unit change this class later + _group = grpNull; + if (_playerGroup != "") then { + { + if ((_x getVariable["GROUP",""]) == _playerGroup) exitWith { + _group = group _x; + }; + }forEach (allPlayers select {alive _x}); + + if (isNull _group) then { + _group = createGroup [west, true]; + }; + + diag_log format["DEBUG Group Found: %1", _group]; + } else { + _group = createGroup [west, true]; + diag_log format["DEBUG Group Created: %1", _group]; + }; + + _newPlyr = _group createUnit[_class, _location, [], 0, "CAN_COLLIDE"]; + + // new Dynamicsimulation + if([configFile >> "CfgEpochServer", "playerDynamicSimulationSystem", true] call EPOCH_fnc_returnConfigEntry)then + { + _newPlyr enableDynamicSimulation true; + _newPlyr triggerDynamicSimulation true; + }; + + addToRemainsCollector[_newPlyr]; + + _newPlyr disableAI "ALL"; + + _newPlyr setVariable ["SETUP", true]; + _newPlyr setVariable ["PUID", _playerUID]; + _newPlyr setVariable ["GROUP", _playerGroup]; + _newPlyr setVariable ["REVIVE", false]; + _newPlyr setVariable ["SERVER_VARS",_player getVariable ["SERVER_VARS",[]]]; + _newPlyr setVariable ["EPOCH_playerPlayTime",_player getvariable ["EPOCH_playerPlayTime",0],true]; + + // _player playActionNow "Die"; + + _newPlyr setDir _dir; + _newPlyr setPosATL _location; + + // Medical + _newPlyr setFatigue 1; + _newPlyr setDamage 0.25; + + // Add inventory + _loadout set [0,_droppedPrimary]; + _loadout set [1,_droppedSecondary]; +// _newPlyr setUnitLoadout [_loadout, false]; + + // Workaround for Client / Server synchronizing issue in SetUnitLoadout + _loadabs = [_newPlyr,_loadout] call Epoch_server_SetUnitLoadout; + if (_loadabs isequalto -1) exitwith { + removeFromRemainsCollector [_newPlyr]; + deletevehicle _newPlyr; + _player setvariable ['Reviving',false]; + _player hideObjectGlobal false; + }; + + _garbage = createVehicle [selectrandom ["MedicalGarbage_01_1x1_v1_F","MedicalGarbage_01_1x1_v3_F","MedicalGarbage_01_1x1_v2_F"], _location, [], 0, "CAN_COLLIDE"]; + EPOCH_cleanupQueue pushBack _garbage; + + // Final Push + _token = _newPlyr call EPOCH_server_setPToken; + + _CorpseCrypto = _player getVariable['Crypto', 0]; + if (_CorpseCrypto > 0) then { + _cIndex = EPOCH_customVars find 'Crypto'; + _vars = _player getVariable['VARS', call EPOCH_defaultVars_SEPXVar]; + _PlayerCrypto = _CorpseCrypto; + _PlayerCrypto remoteExec ['EPOCH_effectCrypto',_player]; + _vars set[_cIndex, _PlayerCrypto]; + _newPlyr setVariable['VARS', _vars]; + }; + _newPlyr setvariable ["COMMUNITY_STATS",_player getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars]]; + + // send to player + [_newPlyr, _token, _loadabs] remoteExec ['EPOCH_clientRevive',_player]; + + // send stat to reviver + [_reviver, "Revives", 1, true] call EPOCH_server_updatePlayerStats; + + // send karma stat to reviver + _kIndex = EPOCH_communityStats find "Karma"; + _reviverCStats = _reviver getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars]; + _reviverKarma = _reviverCStats select _kIndex; + _reviverKarmaAdj = 5; + if(_reviverKarma < 0)then{_reviverKarmaAdj = -5}; + [_reviver, "Karma", _reviverKarmaAdj, true] call EPOCH_server_updatePlayerStats; + }; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_savePlayer.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_savePlayer.sqf new file mode 100644 index 0000000..1e207ac --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_savePlayer.sqf @@ -0,0 +1,117 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Player Save + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_savePlayer.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_Svars","_allowSave","_appearance","_bloodPIndex","_bloodPressure","_group","_hitpoints","_loadout","_medical","_playerUID","_pos","_return","_return2","_revive","_schemaVersion","_server_vars","_stats","_vehiclePlyr"]; +//[[[end]]] +params [["_player",objNull], ["_vars",[]] ]; + +if (isNull _player) exitWith { + diag_log "DEBUG SAVE ABORT null player object"; +}; + +if !(_player getVariable ["SETUP", false]) exitWith { + diag_log format ["DEBUG SAVE ABORT not setup: %1", _player] +}; + +_playerUID = _player getVariable ["PUID", ""]; // getPlayerUID _player +if (_playerUID == "") exitWith { + diag_log format ["DEBUG SAVE ABORT %1", _playerUID] +}; + +if !(alive _player) exitWith{ + // Dead Stat bit index 0 + _return = ["PlayerStats", _playerUID, 0, 1] call EPOCH_fnc_server_hiveSETBIT; +}; + +// add vehicle to update queue +_vehiclePlyr = vehicle _player; +if (_vehiclePlyr != _player) then { + EPOCH_saveVehQueue pushBackUnique _vehiclePlyr; +}; + +_allowSave = _vars isEqualTypeParams EPOCH_defaultVars; +if (_allowSave) then{ + + if !(_vars isEqualTo (call EPOCH_defaultVars_SEPXVar)) then{ + private _serverOnly = ["Crypto"]; + _Svars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar]; + { + private _cIndex = EPOCH_customVars find _x; + if (_cIndex != -1) then{ + _vars set[_cIndex, (_Svars select _cIndex)]; + }; + } forEach _serverOnly; + }; + _player setVariable ["VARS", _vars]; + + /* SERVER_VARS INUSE INDEX: + 0 = RESPAWN POS + */ + _server_vars = _player getVariable["SERVER_VARS", []]; + + _group = _player getVariable ["GROUP", ""]; + _revive = _player getVariable ["REVIVE", true]; + + _pos = (getposATL _player call EPOCH_precisionPos); + + if (vehicle _player != _player) then { + + private _staticTraderLocationsDistances = []; + { + _staticTraderLocationsDistances pushBack [_x distance _player, _x] + } forEach EPOCH_staticTraderLocations; + + if !(_staticTraderLocationsDistances isEqualTo []) then{ + _staticTraderLocationsDistances sort true; + _pos = _staticTraderLocationsDistances select 0 select 1; + _pos set[2, 0]; + }; + }; + + // get players hitpoint damage + _hitpoints = (getAllHitPointsDamage _player) param [2,[]]; + + // build medical array + _medical = [getBleedingRemaining _player, 0, getOxygenRemaining _player, damage _player, _hitpoints]; + + // appearance now handled with getUnitLoadout, typeof is still needed to determine players class. + _appearance = ["", "", "", "", currentWeapon _player, typeOf _player]; + + // new save format + _loadout = getUnitLoadout _player; + + // change this if needed + _schemaVersion = 1.0; + + // Finally check, if Loadout is a valid Array (will never return an empty Array on units!) + if !(_loadout isequalto []) then { + // save player + _return = ["Player", _playerUID, EPOCH_expiresPlayer, [[getDir _player, _pos, (call EPOCH_fn_InstanceID), _schemaVersion], _medical, _appearance, _server_vars, _vars, _loadout, [], [], [], [], _group, _revive]] call EPOCH_fnc_server_hiveSETEX; + }; + // save community stats + _stats = _player getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars]; + _return2 = ["CommunityStats", _playerUID, EPOCH_expiresCommunityStats, [_stats]] call EPOCH_fnc_server_hiveSETEX; + + // blood pressure must stay within 11-179 range + _bloodPIndex = EPOCH_customVars find "BloodP"; + _bloodPressure = _vars param [_bloodPIndex,100]; + if (_bloodPressure >= 180 || _bloodPressure <= 10) then { + _player setDamage 1; + ["PlayerStats", _playerUID, 0, 1] call EPOCH_fnc_server_hiveSETBIT; + } else { + // set player alive bit + ["PlayerStats", _playerUID, 0, 0] call EPOCH_fnc_server_hiveSETBIT; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_storeCrypto.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_storeCrypto.sqf new file mode 100644 index 0000000..d13eaaf --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_storeCrypto.sqf @@ -0,0 +1,118 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Player Bank + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_storeCrypto.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_bankBalance","_bankBalanceBefore","_bankData","_cIndex","_current_crypto","_playerCryptoLimit","_playerUID","_response","_return","_transferAmountIn","_transferAmountOut","_transferBalance","_transferBankBalance","_transferBankBalanceBefore","_transferBankData","_transferResponse","_transferTarget","_transferTargetUID","_vars"]; +//[[[end]]] +params ["_player","_tradeArray",["_token","",[""]] ]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; + +_playerUID = getPlayerUID _player; + +// load players account +_response = ["Bank", _playerUID] call EPOCH_fnc_server_hiveGETRANGE; + +if ((_response select 0) == 1 && (_response select 1) isEqualType []) then { + + _bankData = _response select 1; + _bankBalance = 0; + _bankBalanceBefore = 0; + if !(_bankData isEqualTo[]) then { + _bankBalance = _bankData select 0; + _bankBalanceBefore = _bankBalance; + }; + + // return balance to player + if (_tradeArray isEqualTo[]) then { + [["bankBalance", _bankBalance], _player] call EPOCH_sendRemoteExecClient; + } else { + + // Transaction Data - TODO add check for validity of transaction + _transferAmountIn = _tradeArray select 0; + _transferAmountOut = _tradeArray select 1; + + // Send to another player + _transferBalance = _tradeArray select 2 select 0; + _transferTarget = objectFromNetId (_tradeArray select 2 select 1); + + // get vars array and current Crypto value + _cIndex = EPOCH_customVars find "Crypto"; + _vars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar]; + _current_crypto = _vars select _cIndex; + + // Make Transaction + _playerCryptoLimit = EPOCH_customVarLimits select _cIndex; + _playerCryptoLimit params ["_playerCryptoLimitMax","_playerCryptoLimitMin"]; + + if (_transferAmountIn > 0) then { + if (_current_crypto >= _transferAmountIn) then { + _bankBalance = _bankBalance + _transferAmountIn; + _current_crypto = ((_current_crypto - _transferAmountIn) min _playerCryptoLimitMax) max _playerCryptoLimitMin; + _current_crypto remoteExec ['EPOCH_effectCrypto',_player]; + _vars set[_cIndex, _current_crypto]; + _player setVariable["VARS", _vars]; + }; + }; + + if (_transferAmountOut > 0) then { + if (_bankBalance >= _transferAmountOut) then { + _bankBalance = _bankBalance - _transferAmountOut; + _current_crypto = ((_current_crypto + _transferAmountOut) min _playerCryptoLimitMax) max _playerCryptoLimitMin; + // send to player + _current_crypto remoteExec ['EPOCH_effectCrypto',_player]; + _vars set[_cIndex, _current_crypto]; + _player setVariable["VARS", _vars]; + }; + }; + + // send money to another players account + if (!(isNull _transferTarget) && _bankBalance >= _transferBalance) then { + + if (_transferBalance > 0) then { + + _transferTargetUID = getPlayerUID _transferTarget; + _transferResponse = ["Bank", _transferTargetUID] call EPOCH_fnc_server_hiveGETRANGE; + + if ((_transferResponse select 0) == 1 && (_transferResponse select 1) isEqualType []) then { + + _transferBankData = _transferResponse select 1; + _transferBankBalance = 0; + _transferBankBalanceBefore = 0; + + if !(_transferBankData isEqualTo[]) then { + _transferBankBalance = _transferBankData select 0; + _transferBankBalanceBefore = _transferBankBalance; + }; + + // take from player + _bankBalance = _bankBalance - _transferBalance; + + // give to player + _transferBankBalance = _transferBankBalance + _transferBalance; + + if (_transferBankBalanceBefore != _transferBankBalance) then { + _return = ["Bank", _transferTargetUID, EPOCH_expiresPlayer, [_transferBankBalance]] call EPOCH_fnc_server_hiveSETEX; + [["bankBalance", _transferBankBalance], _transferTarget] call EPOCH_sendRemoteExecClient; + }; + }; + }; + }; + + if (_bankBalanceBefore != _bankBalance) then { + _return = ["Bank", _playerUID, EPOCH_expiresBank, [_bankBalance]] call EPOCH_fnc_server_hiveSETEX; + }; + }; +}; +diag_log format["Epoch: BANK - %1 (%2) TRADE: %3", _player, _playerUID, _tradeArray]; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_unpackBackpack.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_unpackBackpack.sqf new file mode 100644 index 0000000..4d6322e --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_unpackBackpack.sqf @@ -0,0 +1,34 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Unpack backpack + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_unpackBackpack.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_nearByHolder","_wH","_wHPos"]; +//[[[end]]] +params ["_item","_player",["_token","",[""]] ]; + +if !([_player,_token] call EPOCH_server_getPToken) exitWith {}; +if (_item isKindOf "Bag_Base") then { + _wH = objNull; + _nearByHolder = nearestObjects [_player,["groundWeaponHolder"],3]; + if (_nearByHolder isEqualTo []) then { + _wHPos = _player modelToWorld [0,1,0]; + if (surfaceIsWater _wHPos) then { + _wHPos = ASLToATL _wHPos; + }; + _wH = createVehicle ["groundWeaponHolder",_wHPos, [], 0, "CAN_COLLIDE"]; + } else { + _wH = _nearByHolder select 0; + }; + _wH addBackpackCargoGlobal [_item,1]; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_updatePlayerStats.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_updatePlayerStats.sqf new file mode 100644 index 0000000..c07d30b --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_player/EPOCH_server_updatePlayerStats.sqf @@ -0,0 +1,78 @@ +/* + + Author: DirtySanchez - EpochMod.com + + Contributors: + + Description: + Save player community stats - default server only update, _this select 3 = true will send stat update to client + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_updatePlayerStats.sqf + + usage: + + example 1: + [_playerObj, "AIKills", 1] call Epoch_server_updatePlayerStats; + + usage example + [_playerObj, _statType, _adjust, true] call Epoch_server_updatePlayerStats; + + _playerObj - OBJECT: the player object to receive the stat adjust and send to database/player + + _statType - STRING: the name of the variable as set in the EpochClientConfig defineCommunityStats[] = {}; + + _adjust - NUMBER: set the positive or negative adjustment, a value of 0 will exit the script + + _toClient - BOOLEAN: (OPTIONAL) by default this script is server side variables/hive changes only. + by setting this true the client will receive the stat update. + Use true when the stat change originates from the server and not the client. +*/ +params [ ["_playerObj",objNull], ["_statType",""], ["_adjust",0], ["_toClient",false], ["_isTotal",false]]; + +if(isNull _playerObj)exitWith{ + diag_log "EPOCHDebug: playerUpdateStats -1- player is null object"; +}; +if(_statType isEqualTo "")exitWith{ + diag_log "EPOCHDebug: playerUpdateStats -2- stat type not defined"; +}; +if(_adjust isEqualTo 0 && !_isTotal)exitWith{ + diag_log "EPOCHDebug: playerUpdateStats -3- stat adjustment is 0"; +}; +_playerUID = getplayerUID _playerObj; +if(_playerUID isEqualTo "")exitWith{ + diag_log "EPOCHDebug: playerUpdateStats -4- player UID is empty"; +}; +if(!isplayer _playerObj)exitWith{ + diag_log "EPOCHDebug: playerUpdateStats -5- is not a player"; +}; + +//get this playerObj stats +_playerStats = _playerObj getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars]; +//get this stats index # +_sIndex = EPOCH_communityStats find _statType; +if (_sIndex > -1) then { + //get this stat value + _currentStat = _playerStats select _sIndex; + //set the new stat value + if (_isTotal) then { + _playerStats set[_sIndex, _adjust]; + } + else { + _playerStats set[_sIndex, _currentStat + _adjust]; + }; + //set the new stats array back onto this playerObj + _playerObj setVariable["COMMUNITY_STATS", _playerStats]; + + //send to hive +// ["CommunityStats", _playerUID, EPOCH_expiresCommunityStats, [_playerStats]] call EPOCH_fnc_server_hiveSETEX; + // Prevent saving to DB too much often, as it is already saved on Player Save Loop / Disconnect / Kill + + //send to player + if(_toClient)then{ + [_statType,_adjust,false,_isTotal] remoteExecCall ["EPOCH_client_updatePlayerStat",(owner _playerObj)]; + }; +}; \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_localCleanup.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_localCleanup.sqf new file mode 100644 index 0000000..c3c32ab --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_localCleanup.sqf @@ -0,0 +1,46 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Cleanup server side temp spawned objects by players + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_localCleanup.sqf + + Example: + _object(s) call EPOCH_localCleanup; + + Parameter(s): + _this: OBJECT or ARRAY of Objects + + Returns: + NOTHING +*/ +if !(_this isEqualType []) then { + _this = [_this]; +}; +{ + if (!isNull _x) then { + _x addEventHandler["local", { + params ["_unit","_isLocal"]; + if (_isLocal) then { + if (!isNull _unit) then{ + { + _unit removeAllMPEventHandlers _x; + }forEach["mpkilled", "mphit", "mprespawn"]; + { + _unit removeAllEventHandlers _x; + }forEach["FiredNear", "HandleDamage", "Killed", "Fired", "GetOut", "GetIn", "Local"]; + deleteVehicle _unit; + deleteGroup(group _unit); + }; + }; + }]; + }; +}forEach _this; +addToRemainsCollector _this; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_precisionPos.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_precisionPos.sqf new file mode 100644 index 0000000..dce2e32 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_precisionPos.sqf @@ -0,0 +1,17 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Splits a position into two arrays: Whole number array and decimal array. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_precisionPos.sqf +*/ +private["_low"]; +_low = _this apply {_x - (_x % 1)}; +[_low, _this vectorDiff _low] diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_returnConfig.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_returnConfig.sqf new file mode 100644 index 0000000..7a3bb1f --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_returnConfig.sqf @@ -0,0 +1,21 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Simple misson config override function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_returnConfig.sqf +*/ +private["_return", "_config"]; +_return = (configfile >> _this); +_config = (getMissionConfig _this); +if (isClass _config) then{ + _return = _config; +}; +_return diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_serverCommand.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_serverCommand.sqf new file mode 100644 index 0000000..4a4d5db --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_serverCommand.sqf @@ -0,0 +1,42 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Uses Epoch server extension to perform various functions like: kick, ban, shutdown, message, unlock/lock + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_serverCommand.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_playerUID"]; +//[[[end]]] +params ["_command","_param1","_param2","_param3"]; +switch (_command) do { + case 'shutdown': { 'epochserver' callExtension '991' }; + case 'message': { 'epochserver' callExtension format['901|%1', _param1] }; + case 'lock': { 'epochserver' callExtension '931' }; + case 'unlock': { 'epochserver' callExtension '930' }; + case 'kick': { + _playerUID = _param1; + if (_playerUID isEqualType objNull) then{ + _playerUID = getPlayerUID _playerUID; + }; + if !(_playerUID isEqualTo '') then{ + 'epochserver' callExtension format['911|%1|%2', _playerUID, _param2]; + }; + }; + case 'ban': { + _playerUID = _param1; + if (_playerUID isEqualType objNull) then{ + _playerUID = getPlayerUID _playerUID; + }; + if !(_playerUID isEqualTo '') then{ + 'epochserver' callExtension format['921|%1|%2|%3', _playerUID, _param2, _param3]; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_serverLootObject.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_serverLootObject.sqf new file mode 100644 index 0000000..dcde0e3 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_serverLootObject.sqf @@ -0,0 +1,134 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Uses Epoch server extension to perform various functions like: kick, ban, shutdown, message, unlock/lock + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_serverLootObject.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_config","_debug","_exit","_loop","_lootItemArray","_lootItemWeightedArray","_lootTable","_lootTableClass","_lootTableIndex","_loots","_magazineSize","_mags","_maxLoot","_maxPayout","_minLoot","_pricingConfig","_quan","_randomItem","_randomItemArray","_randomizeMagazineAmmoCount","_weightedItemArray","_LootWHs"]; +//[[[end]]] +params ["_object","_type",["_forceSpawn",false],["_pos",[]],["_scatter",[]]]; +_debug = true; +_LootWHs = []; +_pricingConfig = 'CfgPricing' call EPOCH_returnConfig; + +_lootTableIndex = if (EPOCH_modCUPVehiclesEnabled) then {if (EPOCH_mod_madArma_Enabled) then {3} else {1}} else {if (EPOCH_mod_madArma_Enabled) then {2} else {0}}; +_lootTableClass = ["CfgLootTable","CfgLootTable_CUP","CfgLootTable_MAD","CfgLootTable_MADCUP"] select _lootTableIndex; +if !(EPOCH_forcedLootSpawnTable isEqualTo "") then { + _lootTableClass = EPOCH_forcedLootSpawnTable; +}; +_randomizeMagazineAmmoCount = ["CfgEpochClient", "randomizeMagazineAmmoCount", true] call EPOCH_fnc_returnConfigEntryV2; +if (isnull _object && !(_pos isequalto []) && (_scatter isequalto [])) then { + _object = createVehicle ["groundWeaponHolder",_pos,[],0,"CAN_COLLIDE"]; + _object setPosATL _pos; +}; +if (!isNull _object || !(_scatter isequalto [])) then{ + _scatter params [["_doScatter",false],["_ScatterRadiusArr",[6,12]]]; + _lootTable = ["CfgMainTable", _type, "tables"] call EPOCH_fnc_weightedArray; + if !(_lootTable isEqualTo []) then { + _loots = []; + _config = configFile >> "CfgMainTable" >> _type; + _minLoot = getNumber(_config >> "lootMin"); + _maxLoot = getNumber(_config >> "lootMax"); + _maxPayout = (round (random(_maxLoot * EPOCH_lootMultiplier))) max _minLoot; + for "_k" from 1 to _maxPayout do { + _loots pushBack (selectRandomWeighted _lootTable); + }; + { + if (_doScatter) then { + _randomPos = [_pos,_ScatterRadiusArr call BIS_fnc_randomInt,[0,359] call BIS_fnc_randomInt] call BIS_fnc_relPos; + _object = createVehicle ["Epoch_LootHolder",_randomPos,[],0,"CAN_COLLIDE"]; + _object setPosATL [_randomPos select 0, _randomPos select 1, 0.1]; + _LootWHs pushback _object; + }; + _lootItemWeightedArray = [_lootTableClass, _x, "items"] call EPOCH_fnc_weightedArray; + if !(_lootItemWeightedArray isEqualTo[]) then { + _randomItemArray = selectRandomWeighted _lootItemWeightedArray; + _randomItem = _randomItemArray select 0; + _type = _randomItemArray select 1; + _quan = 1; + _loop = true; + _exit = false; + while {_loop} do { + switch _type do { + case "item": { + if (isClass (_pricingConfig >> _randomItem) || _forceSpawn) then { + _object additemCargoGlobal [_randomItem, _quan]; + } else { + if (_debug) then {diag_log format["DEBUG: suppress spawn of %1 does not have price.",_randomItem]}; + }; + _loop = false; + }; + case "magazine": { + if (isClass (_pricingConfig >> _randomItem) || _forceSpawn) then { + if (_randomizeMagazineAmmoCount) then { + // spawn a single Magazine with a random ammo count + _magazineSize = getNumber (configFile >> "CfgMagazines" >> _randomItem >> "count"); + _object addMagazineAmmoCargo[_randomItem, _quan, ceil(random(_magazineSize))]; + } else { + // spawn a single full Magazine + _object addMagazineCargoGlobal [_randomItem, _quan]; + }; + } else { + if (_debug) then {diag_log format["DEBUG: suppress spawn of %1 does not have price.",_randomItem]}; + }; + _loop = false; + }; + case "backpack": { + if (isClass (_pricingConfig >> _randomItem) || _forceSpawn) then { + _object addBackpackCargoGlobal [_randomItem, _quan]; + } else { + if (_debug) then {diag_log format["DEBUG: suppress spawn of %1 does not have price.",_randomItem]}; + }; + _loop = false; + }; + case "weapon": { + if (isClass (_pricingConfig >> _randomItem) || _forceSpawn) then { + _object addWeaponCargoGlobal [_randomItem, _quan]; + // only spawn mags that have prices + _mags = getArray (configFile >> "CfgWeapons" >> _randomItem >> "magazines") select {isClass (_pricingConfig >> _x)}; + if !(_mags isEqualTo []) then { + if (_randomizeMagazineAmmoCount) then { + // spawn a single Magazine with a random ammo count + _magazineSize = getNumber (configFile >> "CfgMagazines" >> (_mags select 0) >> "count"); + _object addMagazineAmmoCargo[_mags select 0, 1, ceil(random(_magazineSize))]; + } else { + // spawn a single full Magazine with weapon + _object addMagazineCargoGlobal [_mags select 0, 1]; + }; + }; + } else { + if (_debug) then {diag_log format["DEBUG: suppress spawn of %1 does not have price.",_randomItem]}; + }; + _loop = false; + }; + case "CfgLootTable": { + // go down the rabit hole + _lootItemWeightedArray = [_lootTableClass, _randomItem, "items"] call EPOCH_fnc_weightedArray; + if !(_lootItemWeightedArray isEqualTo[]) then { + _randomItemArray = selectRandomWeighted _lootItemWeightedArray; + _randomItem = _randomItemArray select 0; + _type = _randomItemArray select 1; + } else { + _exit = true; + }; + }; + default { + _exit = true; + }; + }; + if (_exit) exitWith{if (_debug) then {diag_log "DEBUG: exit from spawn with default state."}}; + }; + }; + } forEach _loots; + }; +}; +_LootWHs diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_DefuseBomb.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_DefuseBomb.sqf new file mode 100644 index 0000000..decc0d3 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_DefuseBomb.sqf @@ -0,0 +1,42 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Defuse server side bombs (triggerd by Clients) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_Defusebomb.sqf + + Example: + [_bomb,true,player,Epoch_personalToken] remoteexec ["EPOCH_server_DefuseBomb",2]; + + Returns: + NOTHING +*/ + +params [ + ["_object",objNull,[objNull]], + ["_value",true,[true]], + ["_player",objNull,[objNull]], + ["_token","",[""]] +]; +if (isNull _object) exitWith{}; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (_player distance _object > 50) exitWith{}; +if (_value) then { + 'HelicopterExploSmall' createVehicle (position _object); + deletevehicle _object; +} +else { + deletevehicle _object; + _reward = gettext (configfile >> "cfgammo" >> (typeof _object) >> "defaultMagazine"); + if !(_reward isequalto "") then { + _reward remoteexec ["EPOCH_fnc_addItemOverflow",_player]; + [format ['Sucessfully defused %1 - You have it now in your Inventory',_reward call Epoch_fnc_Itemdisplayname],5] remoteexec ["Epoch_Message",_player]; + }; +}; \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_PutCrypto.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_PutCrypto.sqf new file mode 100644 index 0000000..855b050 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_PutCrypto.sqf @@ -0,0 +1,46 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: Puts Crypto Items on the Ground + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server\compile\epoch_server\EPOCH_server_PutCrypto.sqf + + Usage: + [player,_value,Epoch_personalToken] remoteexec ['EPOCH_server_PutCrypto',2] + + RETURNS: NOTHING +*/ + +private ["_cIndex","_vars","_current_crypto","_pos","_dist","_direction","_randomPos","_itemclass","_var","_item"]; +params ["_player","_Putcrypto",["_token","",[""]]]; +diag_log format ["PutCrypto Server Side - %1",_this]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +_cIndex = EPOCH_customVars find 'Crypto'; +_vars = _player getVariable['VARS', call EPOCH_defaultVars_SEPXVar]; +_current_crypto = _vars select _cIndex; +if (_current_crypto < _Putcrypto) exitwith { + ["Not enough money",5] remoteexec ["Epoch_Message",_player]; +}; +_current_crypto = _current_crypto - _Putcrypto; +_vars set[_cIndex, _current_crypto]; +_player setVariable['VARS', _vars]; +_current_crypto remoteExec ['EPOCH_effectCrypto',_player]; +[format ["You put %1 Crypto on the Ground",_Putcrypto],5] remoteexec ["Epoch_Message",_player]; +[_player,_vars,_token] call EPOCH_fnc_savePlayer; +_pos = getposatl _player; +while {_Putcrypto > 0} do { + _itemclass = if (_Putcrypto >= 1000) then {"Land_Suitcase_F"} else {"Land_Money_F"}; + _var = if (_Putcrypto >= 1000) then {1000} else {_Putcrypto min 100}; + _Putcrypto = _Putcrypto - _var; + _item = createVehicle [_itemclass,_pos,[],1,"CAN_COLLIDE"]; + _item setvariable ["RemoveOnTake",true]; + _item allowdamage false; + _item enablesimulationglobal false; + _item setvariable ["Crypto",_var,true]; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_UpdateTopStats.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_UpdateTopStats.sqf new file mode 100644 index 0000000..31511bb --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_UpdateTopStats.sqf @@ -0,0 +1,57 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Update Server TopStats + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_UpdateTopStats.sqf +*/ + + +private ["_playername","_playeruid","_makepublic","_publicindex","_tempStats","_ThisStatArr","_playerisin","_idx","_playerValue"]; +params [['_player',ObjNull],['_vars',[]]]; +_playername = name _player; +_playeruid = getplayeruid _player; +if !((_playerUID isequalto '') || (_vars isequalto [])) then { + _makepublic = 1; + _publicindex = EPOCH_communityStats find 'PublicStats'; + if !(_publicindex isequalto -1) then { + _makepublic = _vars select _publicindex; + }; + _tempStats = EPOCH_TopStats; + { + _ThisStatArr = _x; + _playerisin = false; + _idx = EPOCH_communityStats find (EPOCH_TopStatsVars select _foreachindex); + if (_idx > -1) then { + _playerValue = _vars select _idx; + { + _x params ["_value","_UID","_name"]; + if (_UID isequalto _playerUID) exitwith { + _playerisin = true; + if (_makepublic isEqualTo 0) exitwith { + _ThisStatArr deleteat _foreachindex; + }; + _x set [0,_playerValue]; + _x set [2,_playername]; + }; + } foreach _x; + if (!_playerisin && (_makepublic > 0)) then { + _x pushback [(_vars select _idx),_playerUID,_playername]; + }; + _x sort false; + if (count _x > 10) then { + _x resize 10; + }; + }; + } foreach _tempStats; + EPOCH_TopStats = _tempStats; + ["CommunityStats", "0_TopStats", EPOCH_expiresCommunityStats, EPOCH_TopStats] call EPOCH_fnc_server_hiveSETEX; + publicvariable "EPOCH_TopStats"; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_buildingInit.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_buildingInit.sqf new file mode 100644 index 0000000..8f2af88 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_buildingInit.sqf @@ -0,0 +1,15 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Adds killed handler to base building. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_buildingInit.sqf +*/ +_this addMPEventHandler["MPKilled", { _this call EPOCH_server_save_killedBuilding; }]; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_createGlobalMarkerSet.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_createGlobalMarkerSet.sqf new file mode 100644 index 0000000..f0e79d3 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_createGlobalMarkerSet.sqf @@ -0,0 +1,97 @@ +/* + + Author: DirtySanchez + + Contributors: + + Description: + Utilize new Epoch Active Markers, Backgrounds and Icons courtesy of DrokZ. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_createGlobalMarkerSet.sqf + + usage: + [_markerClass, _position] call EPOCH_server_createGlobalMarkerSet; + + _markerClass(_mClass) - use one of the class markers in the epoch_configs/Configs/CfgMarkerSets.hpp or create new + + _position(_mPos) - position you would like to place the marker set on the map + + Example: + 1. ['DeathMarker',_pos] call EPOCH_server_createGlobalMarkerSet; + + 2. ['PlayerMarker',_pos] call EPOCH_server_createGlobalMarkerSet; + +*/ +private["_config", "_markerArray", "_ccText"]; + +params [ ["_mClass",""], ["_mPos",[0,0,0]], ["_OverrideTxt",""] ]; +if(_mClass isEqualTo "") exitWith { + diag_log "EPOCHDebug: createGlobalMarkerSet -1- empty markerClass, nothing to create"; +}; + +// get config for custom marker sets +_config = 'CfgMarkerSets' call EPOCH_returnConfig; +if !(isclass (_config >> _mClass)) exitwith { + diag_log "EPOCHDebug: createGlobalMarkerSet -2- not a class markerClass, nothing to create"; +}; + +// get array for custom marker set +_markerArray = getArray(_config >> _mClass >> "markerArray"); +if(_markerArray isEqualTo []) exitWith { + diag_log "EPOCHDebug: createGlobalMarkerSet -3- empty markerArray, nothing to create"; +}; + +// check for defined Marker counter +if(isNil {Epoch_markerCounterGlobal})then{Epoch_markerCounterGlobal = 0}; + +_return = []; +// run forEach loop on array +{ + // double check all, use these defaults if not defined + _x params [ + ["_mName",format["EPOCH_globalMarker_%1", Epoch_markerCounterGlobal]], + ["_mShape","ICON"], + ["_mType","hd_dot"], + ["_mColor","ColorBlack"], + ["_mAlpha",1], + ["_mSize",[0.8,0.8]], + ["_mDir",0], + ["_mText",""] + ]; + _mName = format["EPOCH_globalMarker_%1", Epoch_markerCounterGlobal]; + _marker = createMarker [_mName, _mPos]; + _return pushBack _mName; + _mName setMarkerShape _mShape; + if!(_mShape isEqualTo "ICON")then{ + if!(_mType in (getArray(_config >> "brushes")))exitWith{ + diag_log "EPOCHDebug: createGlobalMarkerSet -5- Shape is Ellipse or Rectangle and needs a Brush Type"; + }; + }; + _mName setMarkerType _mType; + _mName setMarkerAlpha _mAlpha; + _mName setMarkerSize _mSize; + _mName setMarkerDir _mDir; + + if (!(_OverrideTxt isequalto "") && _OverrideTxt isequaltype "") then { + _mName setMarkerText _OverrideTxt; + } + else { + if!(_mText isEqualTo "")then{ + _ccText = call compile _mText; + _mName setMarkerText _ccText; + }; + }; + + if!(_mColor isEqualTo "")then{ + _mName setMarkerColor _mColor + }; + + missionNameSpace setVariable[_mName, _mSize, true]; + Epoch_markerCounterGlobal = Epoch_markerCounterGlobal + 1; +}forEach _markerArray; + +_return diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_createTeleport.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_createTeleport.sqf new file mode 100644 index 0000000..460d833 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_createTeleport.sqf @@ -0,0 +1,195 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Creates inital teleport zones and sets up trader city props. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_createTeleport.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_array","_center","_class","_cloneClasses","_config","_configWorld","_deSimulate","_debug","_debug1","_debugBox","_debugLocation","_dir","_dir1","_dir2","_enterClass","_ep","_exitClass","_light","_lightLocation","_loadBaseTemplateConfig","_markerName","_part","_partPos","_pos","_pos1","_pro1","_pro2","_protection","_useWorldPos","_veh1","_veh2"]; +//[[[end]]] +_loadBaseTemplateConfig = { + private ["_partPos","_part","_array","_center","_deSimulate"]; + params ["_templateClass","_selectedTemplate","_pos","_class"]; + _array = getArray(configfile >> "CfgPropTemplate" >> _selectedTemplate); + _pos set [2,0]; + _center = createVehicle [_templateClass, _pos, [], 0, "CAN_COLLIDE"]; + { + _partPos = _center modelToWorld (_x select 1); + _partPos set [2,0]; + if ((_x select 0) isKindOf "Man") then { + EPOCH_staticNPCTraderPos pushBack [(_x select 0), _partPos, (_x select 2)]; + } else { + _part = createVehicle [_x select 0, _partPos, [], 0, "CAN_COLLIDE"]; + _part setDir (_x select 2); + _part setPos _partPos; + + _deSimulate = _class isKindOf "ThingX"; + // disable simulation if true + if (count _x >= 4) then { + _deSimulate = (_x select 3) isEqualTo "true"; + }; + + if (_deSimulate) then{ + _part enableSimulationGlobal false; + }; + }; + } forEach _array; +}; + +// load map config +_config = configFile >> "CfgEpoch"; +_configWorld = _config >> worldname; +if !(isclass _configWorld) then { + _configWorld = _config >> "Default"; +}; + +_debugBox = getText(_configWorld >> "debugBoxClass"); // debugBoxClass = "" to disable +if !(_debugBox isEqualTo "") then { + _debugLocation = getMarkerPos "respawn_west"; + _debugLocation set[2, 0]; + if (_debugLocation isEqualTo [0,0,0]) then { + _debugLocation set [2, 10]; + }; + _debug = createVehicle[_debugBox, _debugLocation, [], 0, "CAN_COLLIDE"]; + _debug setposATL _debugLocation; + _protection = createVehicle["ProtectionZone_Invisible_F", _debugLocation, [], 0, "CAN_COLLIDE"]; + _protection setposATL _debugLocation; + if (_debugLocation distance2d [0,0,0] < 10) then { + _debug setvectorup [0,0,1]; + if (surfaceiswater _debugLocation) then { + _debug setposASL _debugLocation; + _protection setposASL _debugLocation; + }; + }; + _cloneClasses = getArray(_configWorld >> "cloneClasses"); + if !(_cloneClasses isEqualTo []) then { + for "_i" from 1 to 4 do { + _class = selectRandom _cloneClasses; + _debug1 = createVehicle[_class, (_debug modelToWorld(_debug selectionPosition(str _i))), [], 0, "CAN_COLLIDE"]; + _debug1 setDir-90; + + }; + for "_i" from 5 to 8 do { + _class = selectRandom _cloneClasses; + _debug1 = createVehicle[_class, (_debug modelToWorld(_debug selectionPosition(str _i))), [], 0, "CAN_COLLIDE"]; + _debug1 setDir 90; + }; + }; + // spawn lights + { + _lightLocation = _debug modelToWorld _x; + _light = createVehicle["Land_PortableLight_double_F", _lightLocation, [], 0, "CAN_COLLIDE"]; + _light setDir (_debugLocation getDir _lightLocation); + _light setpos _lightLocation; + } forEach (getArray(_configWorld >> "lightPos")); +}; + +// spawn area props +{ + _x params [ + ["_class",""], + ["_pos",[0,0,0]], + ["_dir",0], + ["_disableSim","false"], + ["_dynSim","false"], + ["_allowDmg","false"], + ["_dmg",0] + ]; + + _ep = createVehicle[_class, _pos, [], 0, "CAN_COLLIDE"]; + _ep setposATL _pos; + if (_dir isEqualType []) then{ + _ep setVectorDirAndUp _dir; + } else { + _ep setDir _dir; + }; + _deSimulate = _class isKindOf "ThingX"; + if((_deSimulate) || (_disableSim isEqualTo "true"))then{ + _ep enableSimulationGlobal false; + }; + if([configFile >> "CfgEpochServer", "enableDynamicSimulationSystem", true] call EPOCH_fnc_returnConfigEntry) then { + _ep enableDynamicSimulation (_dynSim isEqualTo "true"); + }; + _ep allowDamage (_allowDmg isEqualTo "true"); + _ep setDamage (_dmg min 0.75); +} forEach(getArray(_configWorld >> "propsPos")); + +{ + _x params ["_enterClass","_pos1","_exitClass","_pos",["_useWorldPos",false]]; + + // allow forth position element to set direction if set + _dir1 = 0; + _dir2 = 0; + if (count _pos1 >= 4) then { + _dir1 = _pos1 deleteAt 3; + }; + + if !(_useWorldPos) then { + _pos1 = asltoatl (_debug modeltoworldworld _pos1); + }; + + // allow forth position element to set direction if set + if (_pos isEqualType [] && {count _pos >= 4}) then { + _dir2 = _pos deleteAt 3; + }; + + // load template props for marker location + if (_pos isEqualType "") then { + _markerName = _pos; + _pos = getMarkerPos _markerName; + if (_pos isEqualTo [0,0,0]) then { + for "_i" from 0 to 10 do { + _pos = switch _markerName do { + case "north": {[epoch_centerMarkerPosition vectorAdd [0,worldsize/3,0], 0, worldsize/8, 5, 0, 0.1] call BIS_fnc_findSafePos}; + case "south": {[epoch_centerMarkerPosition vectorAdd [0,-worldsize/3,0], 0, worldsize/8, 5, 0, 0.1] call BIS_fnc_findSafePos}; + case "east": {[epoch_centerMarkerPosition vectorAdd [worldsize/3,0,0], 0, worldsize/8, 5, 0, 0.1] call BIS_fnc_findSafePos}; + case "west": {[epoch_centerMarkerPosition vectorAdd [-worldsize/3,0,0], 0, worldsize/8, 5, 0, 0.1] call BIS_fnc_findSafePos}; + default {[epoch_centerMarkerPosition, 0, worldsize/8, 5, 0, 0.1] call BIS_fnc_findSafePos}; + }; + if (count _pos == 2) exitwith { + _pos pushback 0; + }; + }; + }; + ["ProtectionZone_Invisible_F",_markerName,_pos,_class] call _loadBaseTemplateConfig; + } else { + _pro2 = createVehicle ["ProtectionZone_Invisible_F", _pos, [], 0, "CAN_COLLIDE"]; + }; + + + + _pro1 = createVehicle ["ProtectionZone_Invisible_F", _pos1, [], 0, "CAN_COLLIDE"]; + _veh1 = createVehicle[_enterClass, _pos1, [], 0, "CAN_COLLIDE"]; + // force addaction on any other objects that are not setup properly + if !(_veh1 isKindOf "Transport_EPOCH") then { + [_veh1, [(localize "STR_EPOCH_Teleport"), {(_this select 0) call EPOCH_EnterBuilding}, [], 1, true, true, "Action", "alive _target", 3, false, ""]] remoteExec ["addAction", -2, _veh1, true]; + }; + _veh1 enableSimulationGlobal false; + _veh1 allowDamage false; + _veh1 setVariable["ParentBuilding", _pos]; + _veh1 setDir _dir1; + _veh1 setposATL _pos1; + + if (_exitClass != "") then { + _veh2 = createVehicle[_exitClass, _pos, [], 0, "CAN_COLLIDE"]; + // force addaction on any other objects that are not setup properly + if !(_veh2 isKindOf "Transport_EPOCH") then { + [_veh2, [(localize "STR_EPOCH_Teleport"), {(_this select 0) call EPOCH_EnterBuilding}, [], 1, true, true, "Action", "alive _target", 3, false, ""]] remoteExec ["addAction", -2, _veh1, true]; + }; + _veh2 enableSimulationGlobal false; + _veh2 allowDamage false; + _veh2 setVariable["ParentBuilding", _pos1]; + _veh2 setDir _dir2; + _veh2 setposATL _pos; + }; + + EPOCH_staticTraderLocations pushBack _pos; +} foreach (getArray(_configWorld >> "telePos")); diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_deleteGlobalMarkerSet.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_deleteGlobalMarkerSet.sqf new file mode 100644 index 0000000..01d6b74 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_deleteGlobalMarkerSet.sqf @@ -0,0 +1,31 @@ +/* + Author: DirtySanchez - EpochMod.com + + Contributors: + + Description: + Delete Marker Set + + License: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_deleteGlobalMarkerSet.sqf + + usage: + [_markerArray] call EPOCH_server_deleteGlobalMarkerSet; + + _markerArray - 1 or more in game marker names +*/ +private["_mName"]; + +params [ ["_markerArray",[]], ["_data",[]] ]; + +if(_markerArray isEqualTo []) exitWith { + diag_log "EPOCHDebug: deleteGlobalMarkerSet -1- empty markerArray, nothing to delete"; +}; + +{ + _mName = _x; + deleteMarker _mName; +}forEach _markerArray; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_getRealTime.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_getRealTime.sqf new file mode 100644 index 0000000..5edee14 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_getRealTime.sqf @@ -0,0 +1,21 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Returns Real Time in HH:MM string format + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_getRealTime.sqf +*/ +// make call to get real time +(parseSimpleArray ('epochserver' callExtension '510')) params ["","","",["_hour",0],["_min",0]]; +// fix 0 prefix if lower than 10 +if (_min < 10) then {_min = '0'+str _min}; +if (_hour < 10) then {_hour = '0'+str _hour}; +// output HH:MM format +format ['%1:%2',_hour,_min] diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_isNearChecks.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_isNearChecks.sqf new file mode 100644 index 0000000..7cb42cb --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_isNearChecks.sqf @@ -0,0 +1,55 @@ +/* + EPOCH_server_isNearChecks + + Author: DirtySanchez + + Description: + Checks the position provided against distances configured for Traders, Jammers and Players. + + _position - position on map + _traderCheck - BOOL - check _position distance near ProtectionZone_Invisible_F + _jammerCheck - BOOL - check _position distance near PlotPoles + _playerCheck - BOOL - check _position distance near other Players + _others - ARRAY - positions to check with _distFromOthers + _distFromOthers - NUMBER - How far away from _others array in meters +*/ + +params [ ["_position",[]], ["_traderCheck",true], ["_jammerCheck",true], ["_playerCheck",true], ["_others",[[0,0,0]]], ["_distFromOthers",2000] ]; +_distFromTraders = getNumber(_cfgEpoch >> "spawnDistanceFromTraders"); +_distFromJammers = getNumber(_cfgEpoch >> "spawnDistanceFromJammers"); +_distFromPlayers = getNumber(_cfgEpoch >> "spawnDistanceFromPlayers"); +_return = true; + +//CHECK FOR PROTECTED AREA WITIN CONFIG RANGE +if(_traderCheck)then{ + _restricted = nearestObjects [_position, ["ProtectionZone_Invisible_F"], _distFromTraders]; + if(count _restricted > 0) then { + _return = false; + }; +}; + +//CHECK FOR JAMMERS IN THE AREA WITHIN CONFIG RANGE +if(_jammerCheck)then{ + _jammers = nearestObjects[_position, call EPOCH_JammerClasses, _distFromJammers]; + if(count _jammers > 0) then { + _return = false; + }; +}; + +//CHECK TO SEE IF PLAYERS WITHIN CONFIG RANGE +if(_playerCheck)then{ + _playersNearby = _position nearEntities[["Epoch_Male_F", "Epoch_Female_F"], _distFromPlayers]; + if(count _playersNearby > 0) then { + _return = false; + }; +}; + +//CHECK FOR OTHERS +if!(_others isEqualTo [[0,0,0]])then{ + { + if!(_x distance _position > _distFromOthers)then{ + _return = false; + }; + }forEach _others; +}; +_return \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_makeMarker.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_makeMarker.sqf new file mode 100644 index 0000000..66731f1 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_makeMarker.sqf @@ -0,0 +1,68 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Create map marker for everyone, group or individual. + + Parameter(s): + _this select 0: ARRAY - [Target Type 0-Player 1-Group Members 2-All players 3-Multiple custom players, Object(s) - Player, Group, Array of Players or markerName for option 3] + _this select 1-9: STRING(S) - Marker parameters. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_server_makeMarker.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_mrkr","_mrkrName","_trgtObj","_trgtType"]; +//[[[end]]] +params ["_trgt","_mPos",["_mShape","ICON"],["_mType","mil_dot"],["_mText",""],["_mColor","ColorBlack"],["_mSize",[0.7,0.7]],"_mBrush","_mDir","_mAlpha",["_mrkrName",""]]; + +diag_log format["Epoch: ADMIN: Creating marker at %1 called by %2.", _mPos, _trgt]; +if(count _trgt < 2)exitWith{}; +_trgtType = _trgt select 0; +_trgtObj = _trgt select 1; +if(_mrkrName == "")then{_mrkrName = str(_trgtObj) + str(diag_tickTime);}; + +switch _trgtType do { + + case 0: { + if(isPlayer _trgtObj)then{ + [_trgtObj,_mPos,_mShape,_mType,_mColor,_mSize,_mBrush,_mDir,_mText,_mAlpha,_mrkrName] remoteExec ['EPOCH_makeMarker',_trgtObj]; + }; + }; + + case 1: { + if!(isNull _trgtObj)then{ + private _targets = (units group _trgtObj); + if !(_targets isEqualTo []) then { + [nil,_mPos,_mShape,_mType,_mColor,_mSize,_mBrush,_mDir,_mText,_mAlpha,_mrkrName] remoteExec ['EPOCH_makeMarker',_targets]; + }; + }; + }; + + case 2: { + if(_trgtObj == "")then{_trgtObj=diag_tickTime;}; + _mrkr = createMarker [_mrkrName, _mPos]; + _mrkr setMarkerShape _mShape; + _mrkr setMarkerType _mType; + if!(_mText == "")then{_mrkr setMarkerText _mText;}; + _mrkr setMarkerColor _mColor; + _mrkr setMarkerSize _mSize; + if!(isNil "_mBrush")then{_mrkr setMarkerBrush _mBrush;}; + if!(isNil "_mDir")then{_mrkr setMarkerDir _mDir;}; + if!(isNil "_mAlpha")then{_mrkr setMarkerAlpha _mAlpha;}; + }; + + case 3: { + if(_trgtObj isEqualType [] && {!(_trgtObj isEqualTo [])})then{ + [nil,_mPos,_mShape,_mType,_mColor,_mSize,_mBrush,_mDir,_mText,_mAlpha,_mrkrName] remoteExec ['EPOCH_makeMarker',_trgtObj]; + }; + }; + + + default {diag_log format["Epoch: ADMIN: Marker failed at %1 called by %2.", _mPos, _trgt];}; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_removeMarker.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_removeMarker.sqf new file mode 100644 index 0000000..5ee6739 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_removeMarker.sqf @@ -0,0 +1,55 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Delete map marker. + + Parameter(s): + _this select 0: OBJECT (Player) / ARRAY - Players. + _this select 1: INTEGER - 0 - Player Only, 1 - Player Group, 2 - Everyone, 3 - Custom Array of players. + _this select 2: STRING - Marker Name + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_server_removeMarker.sqf +*/ +params [["_trgtObj",[]],["_trgtType",0],["_mrkrName",""]]; +diag_log format["Epoch: ADMIN: Deleting marker %1 | %2.", _mrkrName, _trgtObj]; + + +switch _trgtType do { + + case 0: { + if(isPlayer _trgtObj)then{ + [_mrkrName] remoteExec ['EPOCH_removeMarker',_trgtObj]; + }; + }; + + case 1: { + if!(isNull _trgtObj)then{ + private _targets = (units group _trgtObj); + if !(_targets isEqualTo []) then { + [_mrkrName] remoteExec ['EPOCH_removeMarker',_targets]; + }; + }; + }; + + case 2: { + deleteMarker _mrkrName; + }; + + case 3: { + if(_trgtObj isEqualType [] && {!(_trgtObj isEqualTo [])})then{ + if !(_trgtObj isEqualTo []) then { + [_mrkrName] remoteExec ['EPOCH_removeMarker',_trgtObj]; + }; + }; + }; + + + default {diag_log format["Epoch: ADMIN: Marker delete failed at %1 called by %2.", _mrkrName, _trgtObj];}; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_storageInit.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_storageInit.sqf new file mode 100644 index 0000000..2bd6eef --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_storageInit.sqf @@ -0,0 +1,15 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Adds killed handler to storage object. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_storageInit.sqf +*/ +_this addMPEventHandler["MPKilled", { _this call EPOCH_server_save_killedStorage }]; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_teleportPlayer.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_teleportPlayer.sqf new file mode 100644 index 0000000..c2f5def --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_teleportPlayer.sqf @@ -0,0 +1,24 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Adds killed handler to storage object. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_teleportPlayer.sqf +*/ +private ["_tp"]; +params ["_player","_teleporter",["_token","",[""]]]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (isNull _teleporter) exitWith{}; +if (_player distance _teleporter > 20) exitWith{}; + +_tp = _teleporter getVariable["ParentBuilding", []]; +if !(_tp isEqualTo []) then { + _player setPosATL _tp; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_traderKilled.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_traderKilled.sqf new file mode 100644 index 0000000..82a90ec --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_traderKilled.sqf @@ -0,0 +1,41 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Sets marker for trader to red and triggers drone to spawn on killer + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_traderKilled.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_markers","_objHiveKey","_slot","_playerCStats","_playerKarma","_playerKarmaAdj","_kIndex"]; +//[[[end]]] +params ["_trader","_player"]; +if (!isNull _trader) then { + _markers = _trader getVariable["MARKER_REF",[]]; + if !(_markers isequalto []) then { + { + _x setMarkerColor "ColorRed"; + }forEach _markers; + }; + _slot = _trader getVariable["AI_SLOT", -1]; + if (_slot != -1) then { + // Spawn Drone on player + [_player, "UAV"] call EPOCH_server_triggerEvent; + _objHiveKey = format ["%1:%2", (call EPOCH_fn_InstanceID), _slot]; + ["AI", _objHiveKey] call EPOCH_fnc_server_hiveDEL; + ["AI_ITEMS", _objHiveKey] call EPOCH_fnc_server_hiveDEL; + }; + // send karma stat to seller + _kIndex = EPOCH_communityStats find "Karma"; + _playerCStats = _player getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars]; + _playerKarma = _playerCStats select _kIndex; + _playerKarmaAdj = -5; + if(_playerKarma < 0)then{_playerKarmaAdj = 5}; + [_player, "Karma", _playerKarmaAdj, true] call EPOCH_server_updatePlayerStats; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_vehicleInit.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_vehicleInit.sqf new file mode 100644 index 0000000..5060cad --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_server/EPOCH_server_vehicleInit.sqf @@ -0,0 +1,30 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Vehicle Event Handlers to enable saving to DB + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_vehicleInit.sqf +*/ +_this addMPEventHandler["MPKilled", { _this call EPOCH_server_save_killedVehicle }]; +_this addMPEventHandler["MPHit", { EPOCH_saveVehQueue pushBackUnique (_this select 0) }]; +_this addEventHandler["Local", { EPOCH_saveVehQueue pushBackUnique (_this select 0) }]; +_this addEventHandler["GetOut", { EPOCH_saveVehQueue pushBackUnique (_this select 0) }]; + +// fix to prevent rope break +if (_this iskindof "AIR") then { + _this addEventHandler ["RopeAttach", { + params ["_object1", "_rope", "_object2"]; + if (isnull (driver _object2)) then { + if !(owner _object1 == owner _object2) then { + _object2 setowner (owner _object1); + }; + }; + }]; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_traders/EPOCH_server_loadTraders.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_traders/EPOCH_server_loadTraders.sqf new file mode 100644 index 0000000..ca0e3a7 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_traders/EPOCH_server_loadTraders.sqf @@ -0,0 +1,237 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Splits a position into two arrays: Whole number array and decimal array. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_traders/EPOCH_server_loadTraders.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private [ "_TraderGodMode","_StaticTraderItemPurge","_DynamicTraderRespawnCount","_TraderItemsDeleteRestart","_TraderInit","_TraderItemsClean","_newstock","_agent","_aiTables", + "_arr","_config","_currentStock","_existingStock","_indexStock","_markers","_objHiveKey","_pos","_randomAIUniform","_response","_response2","_schedule", + "_serverSettingsConfig","_staticTrader","_staticTradersArrCount","_staticTradersArray","_storedVehicleLimit","_traderSlotIndex","_work","_arrchanged","_deleteat","_maxrnd", + "_WinterDeco","_HelloweenDeco","_TraderDeco" + ]; +//[[[end]]] +params [["_maxTraderLimit",0]]; + +_staticTradersArray = +EPOCH_staticNPCTraderPos; +EPOCH_staticNPCTraderPos = nil; +_config = (configFile >> "CfgEpoch" >> worldName); +if !(isclass _config) then { + _config = (configFile >> "CfgEpoch" >> "Default"); +}; +_staticTradersArray append getArray(_config >> "staticNpcPos"); +_staticTradersArrCount = count _staticTradersArray; +_aiTables = getArray(_config >> "traderUniforms"); +_serverSettingsConfig = configFile >> "CfgEpochServer"; +_TraderGodMode = [_serverSettingsConfig, "TraderGodMode", false] call EPOCH_fnc_returnConfigEntry; +_storedVehicleLimit = [_serverSettingsConfig, "storedVehicleLimit", 20] call EPOCH_fnc_returnConfigEntry; +_StaticTraderItemPurge = [_serverSettingsConfig, "StaticTraderItemPurge", []] call EPOCH_fnc_returnConfigEntry; +_DynamicTraderRespawnCount = [_serverSettingsConfig, "DynamicTraderRespawnCount", 150] call EPOCH_fnc_returnConfigEntry; +_TraderItemCountPerItem = [_serverSettingsConfig, "TraderItemCountPerItem", [100,100]] call EPOCH_fnc_returnConfigEntry; +_TraderItemsDeleteRestart = [_serverSettingsConfig, "TraderItemsDeleteRestart", []] call EPOCH_fnc_returnConfigEntry; +_TraderDeco = [_serverSettingsConfig, "TraderDeco", true] call EPOCH_fnc_returnConfigEntry; + +_WinterDeco = (Epoch_ServerRealtime select 1) == 12 && (Epoch_ServerRealtime select 2) > 20 && _TraderDeco; +_HelloweenDeco = (((Epoch_ServerRealtime select 1) == 10 && (Epoch_ServerRealtime select 2) >= 24) || ((Epoch_ServerRealtime select 1) == 11 && (Epoch_ServerRealtime select 2) <= 3)) && _TraderDeco; + +_TraderInit = { + _this allowdamage !_TraderGodMode; + _this setDir _dir; + _this setVariable ["AI_SLOT", _i, true]; + _this setVariable ["AI_ITEMS", _arr, true]; + _this addEventHandler ["Killed", { _this call EPOCH_server_traderKilled; }]; + EPOCH_Traders pushback _this; + addToRemainsCollector[_this]; + _this addUniform _randomAIUniform; + _this disableAI "FSM"; + _this setBehaviour "CARELESS"; + _this setCombatMode "RED"; + _this setSkill 0; + if (_HelloweenDeco) then { + removeHeadgear _this; + _this addHeadgear (selectrandom ["thor_mask_epoch","iron_mask_epoch","wolf_mask_epoch","pkin_mask_epoch","clown_mask_epoch","hockey_mask_epoch","plague_mask_epoch","ghostface_mask_epoch","skull_mask_epoch","witch_mask_epoch"]); + } + else { + if (_WinterDeco) then { + removeHeadgear _this; + _this addHeadgear "santa_hat_epoch"; + }; + }; +}; +_TraderItemsClean = { + private ["_idx","_delete","_k"]; + _idx = 0; + for "_k" from 1 to (count (_arr select 0)) do { + _delete = false; + _item = _arr select 0 select _idx; + _currentStock = (_arr select 1) param[_idx, 0]; + _maxrnd = 1; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _currentStock = _currentStock / _maxrnd; + if (_currentStock >= (_TraderItemCountPerItem select 0)) then { + _currentStock = _TraderItemCountPerItem select 1; + (_arr select 1) set [_idx,_currentStock*_maxrnd]; + _arrchanged = true; + }; + if (_currentStock == 0) then { + _arrchanged = true; + _delete = true; + } + else { + if (_item in _TraderItemsDeleteRestart) then { +// diag_log format ["EPOCH_DEBUG: TraderSlot: %1 | Removed %2 from Trader (Items to remove on Restart)",_i,str _item]; + _arrchanged = true; + _delete = true; + } + else { + if (_item isKindOf "Air" || _item isKindOf "Ship" || _item isKindOf "LandVehicle" || _item isKindOf "Tank") then { + _newstock = 0; + for "_k" from 1 to _currentStock do { + if (EPOCH_storedVehicleCount < _storedVehicleLimit) then { + _newstock = _newstock + 1; + EPOCH_storedVehicleCount = EPOCH_storedVehicleCount + 1; + if !(_item in EPOCH_traderStoredVehicles) then { + EPOCH_traderStoredVehicles pushBack _item; + EPOCH_traderStoredVehiclesCnt pushBack 1; + } + else { + _indexStock = EPOCH_traderStoredVehicles find _item; + if (_indexStock != -1) then { + _existingStock = EPOCH_traderStoredVehiclesCnt select _indexStock; + EPOCH_traderStoredVehiclesCnt set [_indexStock, (_existingStock + 1)]; + }; + }; + }; + }; + if !(_newstock == _currentStock) then { + _arrchanged = true; + if (_newstock > 0) then { +// diag_log format ["EPOCH_DEBUG: TraderSlot: %1 | Changed stock of %2 from Trader | _currentStock: %3 | _newstock: %4 | EPOCH_storedVehicleCount: %5 | _storedVehicleLimit: %6",_i,str _item,_currentStock,_newstock,EPOCH_storedVehicleCount,_storedVehicleLimit]; + (_arr select 1) set [_idx,_newstock]; + } + else { +// diag_log format ["EPOCH_DEBUG: TraderSlot: %1 | Removed %2 from Trader | EPOCH_storedVehicleCount: %3 | _storedVehicleLimit: %4",_i,str _item,EPOCH_storedVehicleCount,_storedVehicleLimit]; + _delete = true; + }; + }; + }; + }; + }; + if (_delete) then { + (_arr select 0) deleteat _idx; + (_arr select 1) deleteat _idx; + } + else { + _idx = _idx + 1; + }; + }; +}; + +EPOCH_storedVehicleCount = 0; + +for "_i" from 0 to (_maxTraderLimit-1) do { + _traderSlotIndex = EPOCH_TraderSlots pushBack _i; + _randomAIUniform = selectRandom _aiTables; + _arr = [[], []]; + _arrchanged = false; + _objHiveKey = format ["%1:%2", (call EPOCH_fn_InstanceID), _i]; + _response = ["AI_ITEMS", _objHiveKey] call EPOCH_fnc_server_hiveGETRANGE; + if ((_response select 0) == 1 && (_response select 1) isEqualType []) then { + _arr = (_response select 1); + if (_arr isEqualTo []) then { + _arr = [[], []]; + }; + }; + if (_arr isEqualTo [[], []]) then{ + _arr = EPOCH_starterTraderItems; + _arrchanged = true; + }; + call _TraderItemsClean; + + // Spawn static traders first + if (_staticTradersArrCount > 0 && _i < _staticTradersArrCount) then { + _staticTrader = _staticTradersArray select _i; + _staticTrader params ["_class","_pos","_dir"]; + if (count (_arr select 0) > (_StaticTraderItemPurge select 0)) then { +// diag_log format ["EPOCH_DEBUG: TraderSlot: %1 | Cleaning %2 Items from Trader | before: %3",_i,((count (_arr select 0))*(_StaticTraderItemPurge select 1)/100), count (_arr select 0)]; + _arrchanged = true; + for "_j" from 1 to ((count (_arr select 0))*(_StaticTraderItemPurge select 1)/100) do { + _deleteat = (round random (count (_arr select 0)-1)); + (_arr select 0) deleteAt _deleteat; + (_arr select 1) deleteAt _deleteat; + }; + }; + EPOCH_TraderSlots deleteAt _traderSlotIndex; + _agent = createAgent [_class, _pos, [], 0, "CAN_COLLIDE"]; + _agent call _TraderInit; + _agent setPosATL _pos; + if (_arrchanged) then { +// diag_log format ["EPOCH_DEBUG: TraderSlot: %1 | Saved",_i]; + ["AI_ITEMS", _objHiveKey, EPOCH_expiresAIdata, _arr] call EPOCH_fnc_server_hiveSETEX; + }; + if (EPOCH_SHOW_TRADERS) then { + _markers = ["StaticTrader",_pos] call EPOCH_server_createGlobalMarkerSet; + _agent setVariable["MARKER_REF", _markers]; + }; + } + else { + // Spawn dynamic traders + _response2 = ["AI", _objHiveKey] call EPOCH_fnc_server_hiveGETRANGE; + if ((_response2 select 0) == 1 && (_response2 select 1) isEqualType [] && !((_response2 select 1) isEqualTo [])) then { + (_response2 select 1) params ["_class","_home","_work"]; + if (_home isEqualType [] && _work isEqualType []) then { + // check schedule + _pos = _home; + _schedule = [9, 17]; + if ((_work select 1) isEqualType []) then { + _schedule = _work select 1; + } + else { +// diag_log format ["DEBUG INVAILD SCHEDULE: SLOT: %1 CLASS: %2 POS: %3 WORK: %4", _i, _class, _pos, _work]; + }; + if (daytime > (_schedule select 0) && daytime < (_schedule select 1)) then { + _pos = (_work select 0); + }; + if (!(count (_arr select 0) >= _DynamicTraderRespawnCount) && (nearestobjects [_pos,call EPOCH_JammerClasses,call EPOCH_MaxJammerRange]) isequalto []) then { + EPOCH_TraderSlots deleteAt _traderSlotIndex; + _agent = createAgent [_class, _pos, [], 0, "NONE"]; + if !(EPOCH_forceStaticTraders) then { + [_agent, _home, _work] execFSM "\epoch_server\system\Trader_brain.fsm"; + }; + _dir = random 360; + _agent call _TraderInit; + if (surfaceiswater _pos) then { + _agent setPosASL _pos; + } + else { + _agent setPosATL _pos; + }; + if (_arrchanged) then { +// diag_log format ["EPOCH_DEBUG: TraderSlot: %1 | Saved",_i]; + ["AI_ITEMS", _objHiveKey, EPOCH_expiresAIdata, _arr] call EPOCH_fnc_server_hiveSETEX; + }; + if (EPOCH_SHOW_TRADERS) then { + _markers = ["DynamicTrader",_pos] call EPOCH_server_createGlobalMarkerSet; + _agent setVariable["MARKER_REF", _markers]; + }; + } + else { +// diag_log format ["EPOCH_DEBUG: TraderSlot: %1 | Supressed Trader Load - Too much items (%2) and will respawn",_i,count (_arr select 0)]; + ["AI", _objHiveKey] call EPOCH_fnc_server_hiveDEL; + ["AI_ITEMS", _objHiveKey] call EPOCH_fnc_server_hiveDEL; + }; + }; + }; + }; +}; +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_traders/EPOCH_server_spawnTraders.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_traders/EPOCH_server_spawnTraders.sqf new file mode 100644 index 0000000..5c423cc --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_traders/EPOCH_server_spawnTraders.sqf @@ -0,0 +1,128 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Splits a position into two arrays: Whole number array and decimal array. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_traders/EPOCH_server_spawnTraders.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private [ "_serverSettingsConfig","_acceptableBlds","_agent","_aiClass","_aiTables","_buildingHome","_buildingWork","_buildings","_checkBuilding","_config","_endTime","_home", + "_homes","_markers","_objHiveKey","_pos","_position","_randomAIUniform","_return","_schedule","_slot","_spawnCount","_startTime","_traderHomes","_usedBuildings","_work", + "_WinterDeco","_HelloweenDeco","_TraderDeco","_TraderMinDistance","_traderblockblds","_Traderblocks" +]; +//[[[end]]] +_serverSettingsConfig = configFile >> "CfgEpochServer"; +_TraderGodMode = [_serverSettingsConfig, "TraderGodMode", false] call EPOCH_fnc_returnConfigEntry; +_spawnCount = count EPOCH_TraderSlots; +_config = (configFile >> "CfgEpoch" >> worldName); +if !(isclass _config) then { + _config = (configFile >> "CfgEpoch" >> "Default"); +}; +_aiTables = getArray(_config >> "traderUniforms"); +_acceptableBlds = getArray(_config >> "traderBlds"); +_TraderMinDistance = getnumber(_config >> "TraderMinDistance"); +if (_TraderMinDistance isEqualto 0) then { + _TraderMinDistance = worldsize / 12; +}; +_traderblockblds = getArray(_config >> "traderblockblds"); +if (_traderblockblds isEqualto []) then { + _traderblockblds = ["pier","bridge","fireescape","medevac_house","pillboxbunker","containerine"]; +}; +_traderHomes = getArray(_config >> "traderHomes"); +_TraderDeco = [_serverSettingsConfig, "TraderDeco", true] call EPOCH_fnc_returnConfigEntry; + +_WinterDeco = (Epoch_ServerRealtime select 1) == 12 && (Epoch_ServerRealtime select 2) > 20 && _TraderDeco; +_HelloweenDeco = (((Epoch_ServerRealtime select 1) == 10 && (Epoch_ServerRealtime select 2) >= 24) || ((Epoch_ServerRealtime select 1) == 11 && (Epoch_ServerRealtime select 2) <= 3)) && _TraderDeco; + +_usedBuildings = []; +_checkBuilding = { + private ["_return"]; + params ["_building","_aiClass"]; + _return = !(_building in _usedBuildings); + if !(_return) exitWith {_return}; + _return = !((_building buildingPos -1) isEqualTo []); + if !(_return) exitWith {_return}; + _return = (_building nearEntities [_aiClass, 50]) isEqualTo []; + if !(_return) exitWith {_return}; + _return = ({(tolower (typeOf _building) find _x) > -1} count _traderblockblds) < 1; + _return +}; +_Traderblocks = []; +{ + if (alive _x) then { + _Traderblocks pushback [getpos _x, _TraderMinDistance]; + }; +} foreach EPOCH_Traders; + +for "_i" from 1 to _spawnCount do { + _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 0, 0, 1000, 0, _Traderblocks] call BIS_fnc_findSafePos; + if (count _position == 2) then { + _randomAIUniform = selectRandom _aiTables; + _aiClass = "C_man_1"; + _homes = (nearestObjects[_position, _traderHomes, 500]) select {[_x,_aiClass] call _checkBuilding}; + if !(_homes isEqualTo []) then { + _buildingHome = selectRandom _homes; + _usedBuildings pushBack _buildingHome; + _buildings = (nearestObjects[_buildingHome, _acceptableBlds, 500]) select {[_x,_aiClass] call _checkBuilding}; + if !(_buildings isEqualTo []) then { + _buildingWork = selectRandom _buildings; + _usedBuildings pushBack _buildingWork; + _home = selectRandom (_buildingHome buildingPos -1); + _work = selectRandom (_buildingWork buildingPos -1); + if ((nearestobjects [_home,call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) isequalto [] && (nearestobjects [_work,call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) isequalto []) then { + _startTime = floor(random 16); + _endTime = _startTime + 8; + _schedule = [_startTime, _endTime]; + _pos = _home; + if (daytime > _startTime && daytime < _endTime) then { + _pos = _work; + }; + _agent = createAgent [_aiClass, _pos, [], 0, "CAN_COLLIDE"]; + addToRemainsCollector[_agent]; + _agent addUniform _randomAIUniform; + if !(EPOCH_forceStaticTraders) then { + [_agent, _home, [_work, _schedule]] execFSM "\epoch_server\system\Trader_brain.fsm"; + }; + if (_HelloweenDeco) then { + removeHeadgear _agent; + _agent addHeadgear (selectrandom ["thor_mask_epoch","iron_mask_epoch","wolf_mask_epoch","pkin_mask_epoch","clown_mask_epoch","hockey_mask_epoch","plague_mask_epoch","ghostface_mask_epoch","skull_mask_epoch","witch_mask_epoch"]); + } + else { + if (_WinterDeco) then { + removeHeadgear _agent; + _agent addHeadgear "santa_hat_epoch"; + }; + }; + _agent allowdamage !_TraderGodMode; + if (surfaceiswater _pos) then { + _agent setPosASL _pos; + } + else { + _agent setPosATL _pos; + }; + _slot = EPOCH_TraderSlots deleteAt 0; + _agent setVariable["AI_SLOT", _slot, true]; + _agent setVariable["AI_ITEMS", EPOCH_starterTraderItems, true]; + _objHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _slot]; + ["AI_ITEMS", _objHiveKey, EPOCH_expiresAIdata, EPOCH_starterTraderItems] call EPOCH_fnc_server_hiveSETEX; + _agent addEventHandler["Killed", { _this call EPOCH_server_traderKilled; }]; + ["AI", _objHiveKey, [_aiClass, _home, [_work, _schedule]] ] call EPOCH_fnc_server_hiveSET; + if (EPOCH_SHOW_TRADERS) then { + _markers = ["NewDynamicTrader",_pos] call EPOCH_server_createGlobalMarkerSet; + _agent setVariable["MARKER_REF", _markers]; + }; + EPOCH_Traders pushback _agent; + _Traderblocks pushback [getpos _agent, _TraderMinDistance]; + }; + }; + }; + }; +}; +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_effectCrypto.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_effectCrypto.sqf new file mode 100644 index 0000000..ba8a52d --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_effectCrypto.sqf @@ -0,0 +1,46 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Mod - Server side effect crypto main function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_trading/EPOCH_server_effectCrypto.sqf + + Example: + [_player,100] call EPOCH_server_effectCrypto; // adds 100 + [_player,-100] call EPOCH_server_effectCrypto; // removes 100 + + Parameter(s): + _this select 0: OBJECT - player + _this select 1: NUMBER - amount to add to existing crypto + Returns: + MIXED +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cIndex","_current_crypto","_vars"]; +//[[[end]]] +params [["_player",objNull,[objNull]],["_crypto",0,[0]] ]; +if (!isNull _player && isPlayer _player) then { + // get index of custom variable + _cIndex = EPOCH_customVars find "Crypto"; + // get custom variables + _vars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar]; + // select current value + _current_crypto = _vars select _cIndex; + // get min and max limits for selected custom variable + (EPOCH_customVarLimits select _cIndex) params ["_playerCryptoLimitMax","_playerCryptoLimitMin"]; + // add input number to existing variable while keeping it within min and max range. + _current_crypto = ((_current_crypto + _crypto) min _playerCryptoLimitMax) max _playerCryptoLimitMin; + // send final value back to the player + _current_crypto remoteExec ['EPOCH_effectCrypto',_player]; + // set final variable + _vars set[_cIndex, _current_crypto]; + // save modified custom variables array + _player setVariable["VARS", _vars]; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_makeNPCTrade.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_makeNPCTrade.sqf new file mode 100644 index 0000000..6cbe5b6 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_makeNPCTrade.sqf @@ -0,0 +1,348 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: He-Man - Ignatz-Gaming + + Description: + NPC trade mech + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeNPCTrade.sqf +*/ + +private [ "_MaxBankDebit","_SkipOut","_VAL","_aiItems","_bankBalance","_bankData","_cIndex","_config","_currQty","_current_crypto","_current_cryptoRaw","_errorMsg","_final_location","_foundSmoke", + "_group","_helipad","_helipads","_item","_itemClasses","_itemQty","_itemQtys","_itemTax","_itemWorth","_itemsIn","_itemsOut","_lockOwner","_makeTradeIn","_message","_nearByHolder", + "_objHiveKey","_objOwner","_playerCryptoLimit","_playerGroup","_playerNetID","_playerUID","_position","_qtyIndex","_response","_return","_returnIn","_returnOut","_road", + "_serverSettingsConfig","_slot","_smoke","_tax","_tmpposition","_tradeIn","_tradeOut","_tradeQtyTotal","_tradeTotal","_vars","_vehHiveKey","_vehObj","_vehSlot","_vehicle","_vehicleBought", + "_vehicleSold","_vehicles","_vehslot","_wH","_wHPos","_wp","_kIndex","_playerCStats","_playerKarma","_playerKarmaAdj","_EnableTempVehTrade","_MaxVehTradeDist" +]; +params ["_trader","_itemsIn","_itemsOut","_player",["_token","",[""]] ]; + +_playerUID = getplayeruid _player; + +_EnableTempVehTrade = ["CfgEpochClient", "EnableTempVehTrade", false] call EPOCH_fnc_returnConfigEntryV2; +_serverSettingsConfig = configFile >> "CfgEpochServer"; +_vehicleSold = false; +_vehicleBought = false; + +_returnIn = []; +_returnOut = []; +_final_location = []; + +if (isNull _trader) exitWith{}; +if !([_player,_token] call EPOCH_server_getPToken) exitWith {}; +if (_player distance _trader > 20) exitWith{}; + +_slot = _trader getVariable["AI_SLOT", -1]; +if (_slot != -1) then { + + _tradeTotal = 0; + _tradeIn = 0; + _tradeOut = 0; + _tradeQtyTotal = 0; + _message = ""; + _SkipOut = false; + + _config = 'CfgPricing' call EPOCH_returnConfig; + + // get vars array and current Crypto value + _cIndex = EPOCH_customVars find "Crypto"; + _vars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar]; + _current_crypto = _vars select _cIndex; + _current_cryptoRaw = _current_crypto; + + // SELL ITEMS TO TRADER + _aiItems = _trader getVariable["AI_ITEMS", [[], []] ]; + _itemClasses = _aiItems select 0; + _itemQtys = _aiItems select 1; + _MaxVehTradeDist = ["CfgEpochClient", "MaxVehTradeDist", 30] call EPOCH_fnc_returnConfigEntryV2; + { + _x params ["_item","_itemQty"]; + if (isClass (_config >> _item)) then { + _itemWorth = getNumber(_config >> _item >> "price"); + _maxrnd = 1; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _itemWorth = round (_itemWorth*(_itemQty/_maxrnd)); + _makeTradeIn = false; + if (_item isKindOf "Air" || _item isKindOf "Ship" || _item isKindOf "LandVehicle" || _item isKindOf "Tank") then{ + _vehicles = (nearestobjects [_trader,[_item],_MaxVehTradeDist]) select {owner _x == owner _player && alive _x}; + if !(_vehicles isEqualTo[]) then { + _vehicle = _vehicles select 0; + _vehSlot = _vehicle getVariable["VEHICLE_SLOT", "ABORT"]; + if (!_vehicleSold && (_vehSlot != "ABORT" || _EnableTempVehTrade)) then { + _vehicleSold = true; + _makeTradeIn = true; + if (_vehSlot == "ABORT") exitwith { + _itemQty = 0; + _itemsIn set [_foreachindex,[_item,_itemQty]]; + removeFromRemainsCollector [_vehicle]; + deleteVehicle _vehicle; + }; + _BaseClass = _vehicle getvariable ["VEHICLE_BaseClass",""]; + if !(_BaseClass isequalto "") then { + _item = _BaseClass; + _itemsIn set [_foreachindex,[_item,_itemQty]]; + }; + removeFromRemainsCollector [_vehicle]; + deleteVehicle _vehicle; + _vehHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _vehSlot]; + _VAL = []; + ["Vehicle", _vehHiveKey, _VAL] call EPOCH_fnc_server_hiveSET; + EPOCH_VehicleSlots pushBack _vehSlot; + missionNamespace setVariable ['EPOCH_VehicleSlotCount', count EPOCH_VehicleSlots, true]; + }; + }; + } + else { + _makeTradeIn = true; + }; + if (_makeTradeIn) then { + _returnIn pushBack [_item,_itemQty]; + _tradeIn = _tradeIn + _itemWorth; + _current_crypto = _current_crypto + _itemWorth; + _tradeQtyTotal = _tradeQtyTotal + _itemQty; + if !(_item in ([_serverSettingsConfig, "TraderItemsDeleteInstant", []] call EPOCH_fnc_returnConfigEntry)) then { + _qtyIndex = _itemClasses find _item; + if (_qtyIndex == -1) then { + _itemClasses pushBack _item; + _itemQtys pushBack _itemQty; + } else { + _currQty = _itemQtys select _qtyIndex; + _itemQtys set [_qtyIndex, (_currQty + _itemQty)]; + }; + }; + // send karma stat to seller + _kIndex = EPOCH_communityStats find "Karma"; + _playerCStats = _player getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars]; + _playerKarma = _playerCStats select _kIndex; + _playerKarmaAdj = 1; + if(_playerKarma < 0)then{_playerKarmaAdj = -1}; + [_player, "Karma", _playerKarmaAdj, true] call EPOCH_server_updatePlayerStats; + }; + }; + } forEach _itemsIn; + _response = ["Bank", _playerUID] call EPOCH_fnc_server_hiveGETRANGE; + if ((_response select 0) == 1 && (_response select 1) isEqualType []) then { + _bankData = _response select 1; + if !(_bankData isEqualTo[]) then { + _MaxBankDebit = [_serverSettingsConfig, "MaxBankDebitforTrade", -999999] call EPOCH_fnc_returnConfigEntry; + _bankBalance = _bankData select 0; + if (_bankBalance < _MaxBankDebit) then { + if (_tradeIn > 0) then { + _bankBalance = _bankBalance + _tradeIn; + _return = ["Bank", _playerUID, EPOCH_expiresBank, [_bankBalance]] call EPOCH_fnc_server_hiveSETEX; + _message = _message + "Items sold, but the Money goes to your Bank - to much Bank-Debit"; + } + else { + _message = _message + "Purchase not possible - to much Bank-Debit"; + }; + _current_crypto = _current_cryptoRaw; + _tradeIn = 0; + _itemsIn = []; + _itemsOut = []; + _SkipOut = true; + }; + }; + }; + + if (!_SkipOut) then { + { + _x params ["_item","_itemQty"]; + if (isClass (_config >> _item)) then{ + _itemWorth = getNumber(_config >> _item >> "price"); + _itemTax = getNumber(_config >> _item >> "tax"); + _tax = _itemWorth * (EPOCH_taxRate + _itemTax); + _itemWorth = ceil (_itemWorth + _tax); + _maxrnd = 1; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _itemWorth = round (_itemWorth*(_itemQty/_maxrnd)); + _qtyIndex = _itemClasses find _item; + if (_qtyIndex != -1) then { + _currQty = _itemQtys select _qtyIndex; + if (_currQty >= _itemQty) then { + if (_current_crypto >= _itemWorth) then { + if (_item isKindOf "Air" || _item isKindOf "Ship" || _item isKindOf "LandVehicle" || _item isKindOf "Tank") then{ + if (!_vehicleBought) then { + if !(EPOCH_VehicleSlots isEqualTo[]) then { + _position = getPosATL _player; + _helipad = nearestObjects[_player, ["Land_HelipadEmpty_F", "Land_HelipadCircle_F"], 100]; + _helipads = []; + _smoke = nearestObject[_player, "SmokeShell"]; + if (!isNull _smoke) then { + _helipad pushBack _smoke; + }; + if (_item isKindOf "Ship") then { + { + if (surfaceIsWater (getposATL _x)) then { + _helipads pushBack _x; + } + } forEach _helipad; + } + else { + { + if !(surfaceIsWater (getposATL _x)) then { + _helipads pushBack _x; + } + } forEach _helipad; + }; + if !(_helipads isEqualTo[]) then { + _foundSmoke = false; + { + if (_x isKindOf "SmokeShell") then { + _objOwner = owner _x; + if (_objOwner == owner _player) then { + _position = getPosATL _x; + _foundSmoke = true; + } + else { + { + if (_objOwner == owner _x) exitWith{ + _position = getPosATL _x; + _foundSmoke = true; + }; + } forEach (units _player); + }; + }; + if (_foundSmoke) exitWith {}; + } forEach _helipads; + if !(_foundSmoke) then { + _position = getPosATL (_helipads select 0); + }; + } + else { + _tmpposition = []; + if (_item isKindOf "Ship") then { + _tmpposition = [_position, 20, 150, 5, 0, 1000, 1] call BIS_fnc_findSafePos; + _tmpposition = [_tmpposition, 0, 60, 10, 2, 1000, 0] call BIS_fnc_findSafePos; + } + else { + _tmpposition = [_position, 20, 120, 5, 0, 2000, 0] call BIS_fnc_findSafePos; + }; + if ((count _tmpposition) == 2) then { + _tmpposition set [2, 0]; + if (surfaceIsWater _tmpposition) then { + _tmpposition = ATLtoASL _tmpposition; + }; + _position = _tmpposition; + } + else { + _road = [getpos _player,100] call BIS_fnc_nearestRoad; + if (!isnull _road) then { + _position = getpos _road; + }; + }; + }; + _vehslot = EPOCH_VehicleSlots select 0; + EPOCH_VehicleSlots = EPOCH_VehicleSlots - [_vehslot]; + missionNamespace setVariable ['EPOCH_VehicleSlotCount', count EPOCH_VehicleSlots, true]; + _vehicleBought = true; + _lockOwner = getPlayerUID _player; + _playerGroup = _player getVariable["GROUP", ""]; + if (_playerGroup != "") then { + _lockOwner = _playerGroup; + }; + _vehObj = [_item,_position,random 360,true,_vehslot,_lockOwner,"NONE",false,false] call EPOCH_spawn_vehicle; + _final_location = getPosATL _vehObj; + _group = group _player; + _wp = _group addWaypoint [_final_location, 0]; + deleteWaypoint [_group, 0]; + _returnOut pushBack [_item,_itemQty]; + _itemQtys set[_qtyIndex, (_currQty - _itemQty)]; + _tradeOut = _tradeOut - _itemWorth; + _current_crypto = _current_crypto - _itemWorth; + _tradeQtyTotal = _tradeQtyTotal + _itemQty; + } + else { + _errorMsg = "Failed to purchase vehicle."; + [_errorMsg, 5] remoteExec ['Epoch_message',_player]; + }; + }; + } + else { + if (_item isKindOf "Bag_Base") then { + _wH = objNull; + _nearByHolder = nearestObjects [_player,["groundWeaponHolder"],3]; + if (_nearByHolder isEqualTo []) then { + _wHPos = _player modelToWorld [0,1,0]; + if (surfaceIsWater _wHPos) then { + _wHPos = ASLToATL _wHPos; + }; + _wH = createVehicle ["groundWeaponHolder",_wHPos, [], 0, "CAN_COLLIDE"]; + } + else { + _wH = _nearByHolder select 0; + }; + _wH addBackpackCargoGlobal [_item,1]; + }; + _returnOut pushBack [_item,_itemQty]; + _itemQtys set [_qtyIndex, (_currQty - _itemQty)]; + _tradeOut = _tradeOut - _itemWorth; + _current_crypto = _current_crypto - _itemWorth; + _tradeQtyTotal = _tradeQtyTotal + _itemQty; + }; + // send karma stat to buyer + _kIndex = EPOCH_communityStats find "Karma"; + _playerCStats = _player getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars]; + _playerKarma = _playerCStats select _kIndex; + _playerKarmaAdj = 1; + if(_playerKarma < 0)then{_playerKarmaAdj = -1}; + [_player, "Karma", _playerKarmaAdj, true] call EPOCH_server_updatePlayerStats; + }; + }; + }; + }; + } forEach _itemsOut; + }; + if !(_itemsIn isEqualTo []) then { + if (_itemsIn isEqualTo _returnIn) then { + _message = _message + "All Items sold"; + } + else { + _message = _message + "Not all Items sold"; + }; + }; + if !(_itemsOut isEqualTo []) then { + if (_itemsOut isEqualTo _returnOut) then { + if !(_message isequalto "") then { + _message = _message + " | "; + }; + _message = _message + "All Items purchased"; + } + else { + if !(_message isequalto "") then { + _message = _message + " / "; + }; + _message = _message + "Not all Items purchased"; + }; + }; + _tradeTotal = _tradeIn + _tradeOut; + if !(_returnIn isequalto [] && _returnOut isEqualTo []) then { + _trader setVariable["AI_ITEMS", [_itemClasses, _itemQtys], true]; + _objHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _slot]; + ["AI_ITEMS", _objHiveKey, EPOCH_expiresAIdata, [_itemClasses, _itemQtys]] call EPOCH_fnc_server_hiveSETEX; + if !(_tradeTotal isequalto 0) then { + _playerCryptoLimit = EPOCH_customVarLimits select _cIndex; + _playerCryptoLimit params ["_playerCryptoLimitMax","_playerCryptoLimitMin"]; + _current_crypto = ((_current_cryptoRaw + _tradeTotal) min _playerCryptoLimitMax) max _playerCryptoLimitMin; + _current_crypto remoteExec ['EPOCH_effectCrypto',_player]; + _vars set[_cIndex, _current_crypto]; + _player setVariable["VARS", _vars]; + + // Update Player Stats + _kIndex = EPOCH_communityStats find "NPCTrades"; + if (_kIndex > -1) then { + [_player, "NPCTrades", 1, true] call EPOCH_server_updatePlayerStats; + }; + }; + }; + + // Send completed trade back to player + [_returnIn, _returnOut,_message] remoteexec ["EPOCH_NpcTrade_return",_player]; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf new file mode 100644 index 0000000..d4976a9 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf @@ -0,0 +1,78 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Mod P2P Trading + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cIndex","_current_crypto1","_current_crypto2","_overFlowItems","_player1_vars","_player2_vars","_playerCryptoLimit","_trade1","_trade2"]; +//[[[end]]] +params ["_player1", "_player2","_array","_tradeOffer",["_token","",[""]] ]; + +if (isNull _player2) exitWith{}; +if !([_player1, _token] call EPOCH_server_getPToken) exitWith{}; +if (_player1 distance _player2 > 10) exitWith{}; + +if ((_player1 getVariable["currentTradeKey", -1]) isEqualto (_player2 getVariable["currentTradeKey", -2])) then{ + if ((_player1 getVariable["Accept", false]) && (_player2 getVariable["Accept", false])) then{ + + _trade1 = _player1 getVariable["Offer", [[], 0]]; + _trade2 = _player2 getVariable["Offer", [[], 0]]; + + _trade1 params ["_tradeOffer1","_tradeCryptoOffer1"]; + _trade2 params ["_tradeOffer2","_tradeCryptoOffer2"]; + + _cIndex = EPOCH_customVars find "Crypto"; + _player1_vars = _player1 getVariable["VARS", call EPOCH_defaultVars_SEPXVar]; + _player2_vars = _player2 getVariable["VARS", call EPOCH_defaultVars_SEPXVar]; + _current_crypto1 = _player1_vars select _cIndex; + _current_crypto2 = _player2_vars select _cIndex; + + // test this may work since players crypto is + if (_current_crypto1 >= _tradeCryptoOffer1 && _current_crypto2 >= _tradeCryptoOffer2) then{ + + _playerCryptoLimit = EPOCH_customVarLimits select _cIndex; + _playerCryptoLimit params ["_playerCryptoLimitMax","_playerCryptoLimitMin"]; + + if (_tradeCryptoOffer1 > 0) then{ + + _current_crypto1 = ((_current_crypto1 - _tradeCryptoOffer1) min _playerCryptoLimitMax) max _playerCryptoLimitMin; + // send to player + _current_crypto1 remoteExec ['EPOCH_effectCrypto',_player1]; + _player1_vars set[_cIndex, _current_crypto1]; + _player1 setVariable["VARS", _player1_vars]; + }; + + if !(_tradeOffer2 isEqualTo[]) then{ + _overFlowItems = createVehicle["groundWeaponHolder", getPosATL _player1, [], 0, "CAN_COLLIDE"]; + { + if ([_x, "CfgWeapons"] call EPOCH_fnc_isAny) then{ + _overFlowItems addItemCargoGlobal[_x, 1]; + } else { + _overFlowItems addMagazineCargoGlobal[_x, 1]; + }; + } forEach _tradeOffer2; + }; + + if (_tradeCryptoOffer2 > 0) then{ + + _current_crypto1 = ((_current_crypto1 + _tradeCryptoOffer2) min _playerCryptoLimitMax) max _playerCryptoLimitMin; + // send to player + _current_crypto1 remoteExec ['EPOCH_effectCrypto',_player1]; + _player1_vars set[_cIndex, _current_crypto1]; + _player1 setVariable["VARS", _player1_vars]; + }; + + diag_log format["ADMIN: P1:%1 P2:%2 In:%3:%4 Out:%5:%6", _player1, _player2, _tradeOffer2, _tradeCryptoOffer2, _tradeOffer1, _tradeCryptoOffer1]; + }; + }; + +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_takeCrypto.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_takeCrypto.sqf new file mode 100644 index 0000000..30bdcb5 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_takeCrypto.sqf @@ -0,0 +1,35 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Mod - Server side take crypto + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_getCrypto"]; +//[[[end]]] +params ["_player",["_token","",[""]],["_CryptoItems",[]]]; + +if !([_player,_token] call EPOCH_server_getPToken) exitWith {}; + +_getCrypto = 0; +{ + if (_player distance _x < 10) then { + _getCrypto = _getCrypto + (_x getVariable ["Crypto", 0]); + _x setVariable ["Crypto", nil, true]; + if (_x getvariable ["RemoveOnTake",false]) then { + deletevehicle _x; + }; + }; +} foreach _CryptoItems; +if (_getCrypto > 0) then { + [_player,_getCrypto] call EPOCH_server_effectCrypto; + diag_log format["Epoch: ADMIN: %1 picked up %2 Crypto at %3", getPlayerUID _player, _getCrypto, getposATL _player]; +}; \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_tradeRequest.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_tradeRequest.sqf new file mode 100644 index 0000000..9f11a13 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_trading/EPOCH_server_tradeRequest.sqf @@ -0,0 +1,30 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Mod - Server side take crypto + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_trading/EPOCH_server_tradeRequest.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_tradeKey"]; +//[[[end]]] +params ["_target","_source",["_token","",[""]] ]; + +if !([_source, _token] call EPOCH_server_getPToken) exitWith{}; +if (isNull _target) exitWith{}; +if (_source distance _target > 10) exitWith{}; + +// Generate Unique Key good for only this trade request between these two players. +_tradeKey = floor(diag_tickTime + random 9999); +_source setVariable["currentTradeKey", _tradeKey]; +_target setVariable["currentTradeKey", _tradeKey]; + +// send to player +_source remoteExec ['EPOCH_tradeRequest',_target]; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_fill_inventory.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_fill_inventory.sqf new file mode 100644 index 0000000..734946f --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_fill_inventory.sqf @@ -0,0 +1,23 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Fill vehicle inventory + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_fill_inventory.sqf +*/ +params ["_vehicle","_type","_class","_qty"]; +if (!isNull _vehicle) then { + switch (_type) do { + case 0: { _vehicle addWeaponCargoGlobal[_class, _qty] }; + case 1: { _vehicle addBackpackCargoGlobal[_class, _qty] }; + case 2: { _vehicle addMagazineCargoGlobal[_class, _qty] }; + case 3: { _vehicle addItemCargoGlobal[_class, _qty] }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf new file mode 100644 index 0000000..f03b3f9 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf @@ -0,0 +1,160 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Fill vehicle inventory + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_ExceptedBaseObjects","_AutoLockStorages","_IndestructibleBaseObjects","_UseIndestructible","_arr","_attachments","_availableColorsConfig","_cfgBaseBuilding","_class","_class_raw","_color","_colors","_count","_damage","_diag","_dir","_inventory","_location","_magazineName","_magazineSize","_magazineSizeMax","_marker","_objQty","_objType","_objTypes","_qty","_response","_selections","_serverSettingsConfig","_storageSlotIndex","_textureSelectionIndex","_textures","_vehHiveKey","_vehicle","_wMags","_wMagsArray","_worldspace","_wsCount"]; +//[[[end]]] +params [["_maxStorageLimit",0]]; + +_serverSettingsConfig = configFile >> "CfgEpochServer"; +_UseIndestructible = [_serverSettingsConfig, "UseIndestructible", false] call EPOCH_fnc_returnConfigEntry; +_IndestructibleBaseObjects = [_serverSettingsConfig, "IndestructibleBaseObjects", []] call EPOCH_fnc_returnConfigEntry; +_ExceptedBaseObjects = [_serverSettingsConfig, "ExceptedBaseObjects", []] call EPOCH_fnc_returnConfigEntry; +_AutoLockStorages = [_serverSettingsConfig, "AutoLockStorages", false] call EPOCH_fnc_returnConfigEntry; + +_diag = diag_tickTime; +EPOCH_StorageSlots = []; +EPOCH_activeGardens = []; +EPOCH_activeSolars = []; +for "_i" from 1 to _maxStorageLimit do { + _storageSlotIndex = EPOCH_StorageSlots pushBack str(_i); + _vehHiveKey = format ["%1:%2", (call EPOCH_fn_InstanceID), _i]; + _response = ["Storage", _vehHiveKey] call EPOCH_fnc_server_hiveGETRANGE; + if ((_response select 0) == 1 && (_response select 1) isEqualType []) then { + _arr = _response select 1; + if !(_arr isEqualTo []) then { + EPOCH_StorageSlots deleteAt _storageSlotIndex; + _class_raw = _arr select 0; + _damage = _arr select 2; + _inventory = _arr select 3; + + // legacy change class + _class = switch (_class_raw) do { + case "LockBoxProxy_EPOCH": { "LockBox_EPOCH" }; + case "SafeProxy_EPOCH": { "Safe_EPOCH" }; + default { _class_raw }; + }; + + if !(_inventory isEqualType []) then { _inventory = []; }; + + _worldspace = _arr select 1; + _worldspace params ["_pos","_vectordir","_vectorup",["_useworld",false]]; + _vectordirup = [_vectordir,_vectorup]; + + // increased position precision + if (count _pos == 2) then{ + _pos = (_pos select 0) vectorAdd(_pos select 1); + }; + + _vehicle = createVehicle[_class, [0,0,0], [], 0, "CAN_COLLIDE"]; + + // find gardens + if (_class isEqualTo "Garden_EPOCH") then { + EPOCH_activeGardens pushBack _vehicle; + }; + + if (_class in ["SolarCharger_EPOCH","SolarChargerXL_EPOCH"]) then { + EPOCH_activeSolars pushBack _vehicle; + }; + + if (_UseIndestructible) then { + if ({_vehicle iskindof _x} count _ExceptedBaseObjects == 0) then { + { + if (_vehicle iskindof _x) exitwith { + _vehicle allowdamage false; + }; + } foreach _IndestructibleBaseObjects; + }; + }; + + if (_useworld) then { + _vehicle setposworld _pos; + } + else { + _vehicle setposATL _pos; + }; + + _vehicle setVectorDirAndUp _vectordirup; + + // temp set damage to mark for maint + _vehicle setDamage 0.01; + + _vehicle setVariable ["STORAGE_SLOT", str(_i), true]; + + if (isDamageAllowed _vehicle) then { + _vehicle call EPOCH_server_storageInit; + }; + if (count _arr >= 5) then { + _color = _arr select 4; + _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + _availableColorsConfig = _cfgBaseBuilding >> _class >> "availableColors"; + if (isArray _availableColorsConfig) then { + _colors = getArray(_availableColorsConfig); + _textureSelectionIndex = _cfgBaseBuilding >> _class >> "textureSelectionIndex"; + _selections = if (isArray(_textureSelectionIndex)) then { getArray(_textureSelectionIndex) } else { [0] }; + _count = (count _colors)-1; + { + _textures = _colors select 0; + if (_count >= _forEachIndex) then { + _textures = _colors select _forEachIndex; + }; + _vehicle setObjectTextureGlobal [_x, (_textures select _color)]; + } forEach _selections; + _vehicle setVariable ["STORAGE_TEXTURE", _color]; + }; + }; + + if (count _arr >= 6) then { + if (_class isKindOf 'Constructions_lockedstatic_F') then{ + // set locked state of secure storage + if (((_arr select 6) != -1) || _AutoLockStorages) then { + _vehicle setVariable["EPOCH_Locked", true, true]; + } + else { + _vehicle setVariable["EPOCH_Locked", false, true]; + if (_vehicle iskindof "GunSafe_EPOCH") then { + { + _vehicle animate _x; + } foreach [['handle1',1],['handle2',1],['door1',1],['door2',1]]; + }; + }; + _vehicle setVariable ["STORAGE_OWNERS", _arr select 5]; + }; + }; + + clearWeaponCargoGlobal _vehicle; + clearMagazineCargoGlobal _vehicle; + clearBackpackCargoGlobal _vehicle; + clearItemCargoGlobal _vehicle; + + if !(_inventory isEqualTo []) then { + [_vehicle,_inventory] call EPOCH_server_CargoFill; + }; + + if (EPOCH_DEBUG_VEH) then { + _marker = createMarker [str(_pos) , _pos]; + _marker setMarkerShape "ICON"; + _marker setMarkerType "mil_dot"; + _marker setMarkerText _class; + _marker setMarkerColor "ColorBlue"; + }; + }; + }; +}; + +missionNamespace setVariable ['EPOCH_StorageSlotsCount', count EPOCH_StorageSlots, true]; + +diag_log format ["Epoch: Storage SPAWN TIMER %1 slots left: %2", diag_tickTime - _diag, EPOCH_StorageSlotsCount]; + +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf new file mode 100644 index 0000000..780f27a --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf @@ -0,0 +1,257 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Load Vehicles + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_actualHitpoints","_allHitpoints","_allVehicles","_allowDamage","_arrNum","_availableColorsConfig","_cfgEpochVehicles","_check","_class","_colors","_count","_dataFormat","_dataFormatCount","_diag","_disableVehicleTIE","_dmg","_found","_immuneIfStartInBase","_jammerOwner","_jammers","_location","_lockedOwner","_marker","_nearestJammer","_removemagazinesturret","_removeweapons","_response","_selections","_serverSettingsConfig","_textureSelectionIndex","_textures","_vehHiveKey","_vehLockHiveKey","_vehicle","_vehicleDynamicSimulationSystem","_vehicleSlotIndex"]; +//[[[end]]] +params [["_maxVehicleLimit",0]]; + +_diag = diag_tickTime; +_dataFormat = ["", [], 0, [], 0, [], [], 0, "", "", []]; +_dataFormatCount = count _dataFormat; +EPOCH_VehicleSlots = []; +_allVehicles = []; + +_serverSettingsConfig = configFile >> "CfgEpochServer"; +_immuneIfStartInBase = [_serverSettingsConfig, "immuneIfStartInBase", true] call EPOCH_fnc_returnConfigEntry; +_vehicleDynamicSimulationSystem = [_serverSettingsConfig, "vehicleDynamicSimulationSystem", true] call EPOCH_fnc_returnConfigEntry; + +_removeweapons = [_serverSettingsConfig, "removevehweapons", []] call EPOCH_fnc_returnConfigEntry; +_removemagazinesturret = [_serverSettingsConfig, "removevehmagazinesturret", []] call EPOCH_fnc_returnConfigEntry; +_disableVehicleTIE = [_serverSettingsConfig, "disableVehicleTIE", true] call EPOCH_fnc_returnConfigEntry; + +for "_i" from 1 to _maxVehicleLimit do { + _vehicleSlotIndex = EPOCH_VehicleSlots pushBack str(_i); + + _vehHiveKey = format ["%1:%2", call EPOCH_fn_InstanceID,_i]; + (["Vehicle", _vehHiveKey] call EPOCH_fnc_server_hiveGETRANGE) params [["_status",0],["_arr",[]]]; + if (_status isEqualTo 1 && _arr isEqualType []) then { + if (_arr isEqualTo []) exitwith {}; + _arrNum = count _arr; + + // New Upgrade System adds to DB array, check and correct older saved vehicles + if (_arrNum < _dataFormatCount) then { + { + _check = _arr select _foreachindex; + if (isnil '_check') then { + _arr pushback (_dataFormat select _foreachindex); + }; + } foreach _dataFormat; + // recount array + _arrNum = count _arr; + }; + + if (_arrNum == _dataFormatCount) then { + + // Validate and replace invaild data + { + if !((_arr select _forEachIndex) isEqualType _x) then {_arr set[_forEachIndex, _x]}; + } forEach _dataFormat; + + _arr params ["_class","_worldspace","_damage","_hitpoints","_fuel","_inventory","_ammo","_color","_baseClass",["_plateNumber",""],["_Textures",[]]]; + + if (_class != "" && _damage < 1) then { + // remove location from worldspace and set to new var + _worldspace params [["_location",[]],["_VectorDir",[0,0,0]],["_VectorUp",[0,0,1]],["_useposworld",false]]; + if !(_location isEqualTo []) then { + // increased position precision + if (count _location == 2) then{ + _location = (_location select 0) vectorAdd (_location select 1); + }; + + // temp for changes in class names + _found = ["O_Heli_Transport_04_F","O_Heli_Transport_04_bench_F","O_Heli_Transport_04_box_F","O_Heli_Transport_04_covered_F","B_Heli_Transport_03_unarmed_F","O_Truck_03_covered_F"] find _class; + if (_found != -1) then { + _class = ["O_Heli_Transport_04_EPOCH","O_Heli_Transport_04_bench_EPOCH","O_Heli_Transport_04_box_EPOCH","O_Heli_Transport_04_covered_EPOCH","B_Heli_Transport_03_unarmed_EPOCH","O_Truck_03_covered_EPOCH"] select _found; + }; + + // spawn vehicle at temp location. + _vehicle = createVehicle [_class, [random 500, random 500,500], [], 0, "CAN_COLLIDE"]; + // turn off BIS randomization + _vehicle setVariable ["BIS_enableRandomization", false]; + if !(isNull _vehicle) then { + + // set damage and hitpoints + _vehicle setDamage _damage; + _allHitpoints = getAllHitPointsDamage _vehicle; + if !(_allHitpoints isEqualTo []) then{ + _actualHitpoints = _allHitpoints select 0; + if ((count _actualHitpoints) == (count _hitpoints)) then{ + { + _dmg = _hitpoints param [_forEachIndex,0]; + if (_x in ["HitFuel", "HitEngine"]) then { + _dmg = _dmg min 0.9; + }; + _vehicle setHitIndex [_forEachIndex, _dmg]; + } forEach _actualHitpoints; + }; + }; + + // make vehicle immune from further damage. + _vehicle allowDamage false; + + // store spawned vehicles in array to make one call to remains handler + _allVehicles pushBack _vehicle; + // remove selected slot from array and set on vehicle + EPOCH_VehicleSlots deleteAt _vehicleSlotIndex; + _vehicle setVariable ["VEHICLE_SLOT", str(_i), true]; + // set server side token and init vehicle event handlers. + _vehicle call EPOCH_server_setVToken; + _vehicle call EPOCH_server_vehicleInit; + // set final direction and postion of vehicle + _vehicle setVectorDirAndUp [_VectorDir,_VectorUp]; + if (_useposworld) then { + _vehicle setposWorld _location; + } + else { + _vehicle setposATL _location; + }; + // set fuel level + _vehicle setFuel _fuel; + // apply persistent textures + if (((missionnamespace getvariable ["UseCustomTextures",false]) || _color isEqualTo -1) && {!(_Textures isEqualTo [])}) then { + { + _vehicle setobjecttextureglobal [_foreachindex,_x]; + } foreach _Textures; + _vehicle setVariable ["VEHICLE_TEXTURE", _color]; + } + else { + _cfgEpochVehicles = 'CfgEpochVehicles' call EPOCH_returnConfig; + _availableColorsConfig = (_cfgEpochVehicles >> _class >> "availableColors"); + if (isArray(_availableColorsConfig)) then { + _colors = getArray(_availableColorsConfig); + _textureSelectionIndex = (_cfgEpochVehicles >> _class >> "textureSelectionIndex"); + _selections = if (isArray(_textureSelectionIndex)) then { getArray(_textureSelectionIndex) } else { [0] }; + _count = (count _colors) - 1; + { + _textures = _colors select 0; + if (_count >= _forEachIndex) then { + _textures = _colors select _forEachIndex; + }; + _vehicle setObjectTextureGlobal [_x, _textures select _color]; + } forEach _selections; + _vehicle setVariable ["VEHICLE_TEXTURE", _color]; + }; + }; + if !(_baseClass isequalto "") then { + _vehicle setvariable ["VEHICLE_BASECLASS",_baseClass]; + }; + // disable thermal imaging equipment + if (_disableVehicleTIE) then { + _vehicle disableTIEquipment true; + }; + // lock all vehicles + _vehicle lock true; + // load vehicle inventory + clearWeaponCargoGlobal _vehicle; + clearMagazineCargoGlobal _vehicle; + clearBackpackCargoGlobal _vehicle; + clearItemCargoGlobal _vehicle; + + if !(_removeweapons isequalto []) then { + { + _vehicle removeWeaponGlobal _x; + } foreach _removeweapons; + }; + if !(_removemagazinesturret isequalto []) then { + { + _vehicle removeMagazinesTurret _x; + } foreach _removemagazinesturret; + }; + + // utilize He-Man's new Cargo functions + [_vehicle,_inventory] call EPOCH_server_CargoFill; + + // remove and add back magazines + if !(_ammo isequalto []) then { + if ((_ammo select 0) isequaltype true) then { + { + _vehicle removeMagazinesTurret [_x select 0, _x select 1]; + } foreach magazinesAllTurrets _vehicle; + { + if ((_x select 2) > 0) then { + _vehicle addMagazineTurret [_x select 0,_x select 1,_x select 2]; + }; + } foreach (_ammo select 1); + } + else { + {_vehicle removeMagazineGlobal _x}count (magazines _vehicle); + {_vehicle addMagazine _x}count _ammo; + }; + }; + + // allow damage + _allowDamage = true; + if (_immuneIfStartInBase) then { + _jammers = nearestObjects[_vehicle, call EPOCH_JammerClasses,call EPOCH_MaxJammerRange]; + if!(_jammers isEqualTo [])then { + // get jammer owner + _nearestJammer = _jammers select 0; + _jammerOwner = _nearestJammer getVariable["BUILD_OWNER", "-2"]; + // get vehicle lock owner + _lockedOwner = "-1"; + _vehLockHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), str(_i)]; + (["VehicleLock", _vehLockHiveKey] call EPOCH_fnc_server_hiveGETRANGE) params [["_status", 0 ],["_payload", [] ]]; + if (_status isEqualTo 1) then { + _lockedOwner = _payload param [0,"-1"]; + }; + // if match keep vehicle immune till first unlock + if (_jammerOwner isEqualTo _lockedOwner) then { + _vehicle setVariable ["EPOCH_disallowedDamage", true]; + _allowDamage = false; + }; + }; + }; + + // add previous license plate + if !(_plateNumber isEqualTo "") then { + _vehicle setPlateNumber _plateNumber; + }; + + if (_allowDamage) then { + _vehicle allowDamage true; + }; + + // new Dynamicsimulation + if(_vehicleDynamicSimulationSystem)then + { + _vehicle enableSimulationGlobal false; // turn it off until activated by dynamicSim + _vehicle enableDynamicSimulation true; + }; + + if (EPOCH_DEBUG_VEH) then { + _marker = createMarker [str(_location) , _location]; + _marker setMarkerShape "ICON"; + _marker setMarkerType "mil_dot"; + _marker setMarkerText _class; + _marker setMarkerColor "ColorGreen"; + }; + } else { + diag_log format["DEBUG: vehicle object Null: class: %1, loc: %2, slot: %3",_class, _location,str(_i)]; + }; + } else { + diag_log format["DEBUG: invalid vehicle position array %1",_location]; + }; + } else { + diag_log format["DEBUG: vehicle destroyed already (%2) or invalid vehicle class: %1",_class, _damage]; + }; + }; + } else { + diag_log format["DEBUG: invalid vehicle data: %1 - %2",_status,_arr]; + }; +}; +// add all spawned vehicles to remains collector. +addToRemainsCollector _allVehicles; +diag_log format ["Epoch: Loaded %1 Vehicles in %2 seconds - Free Slots: %3", count _allVehicles, diag_tickTime - _diag, _maxVehicleLimit - count _allVehicles]; +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles_old.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles_old.sqf new file mode 100644 index 0000000..984eaac --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles_old.sqf @@ -0,0 +1,281 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Load Vehicles + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_actualHitpoints","_allHitpoints","_allVehicles","_arr","_arrNum","_attachments","_class","_color","_colors","_config","_count","_damage","_dataFormat","_dataFormatCount","_diag","_dmg","_found","_hitpoints","_immuneVehicleSpawn","_immuneVehicleSpawnTime","_location","_magazineName","_magazineSize","_magazineSizeMax","_marker","_objQty","_objType","_objTypes","_qty","_removemagazinesturret","_removeweapons","_response","_selections","_serverSettingsConfig","_simulationHandler","_textureSelectionIndex","_textures","_vehHiveKey","_vehicle","_vehicleSlotIndex","_wMags","_wMagsArray","_worldspace"]; +//[[[end]]] +params [["_maxVehicleLimit",0]]; + +_diag = diag_tickTime; +_dataFormat = ["", [], 0, [], 0, [], [], 0]; +_dataFormatCount = count _dataFormat; +EPOCH_VehicleSlots = []; +_allVehicles = []; + +_serverSettingsConfig = configFile >> "CfgEpochServer"; +_immuneVehicleSpawn = [_serverSettingsConfig, "immuneVehicleSpawn", false] call EPOCH_fnc_returnConfigEntry; +_removeweapons = [_serverSettingsConfig, "removevehweapons", []] call EPOCH_fnc_returnConfigEntry; +_removemagazinesturret = [_serverSettingsConfig, "removevehmagazinesturret", []] call EPOCH_fnc_returnConfigEntry; +_disableVehicleTIE = [_serverSettingsConfig, "disableVehicleTIE", true] call EPOCH_fnc_returnConfigEntry; + +for "_i" from 1 to _maxVehicleLimit do { + _vehicleSlotIndex = EPOCH_VehicleSlots pushBack str(_i); + + _vehHiveKey = format ["%1:%2", call EPOCH_fn_InstanceID,_i]; + _response = ["Vehicle", _vehHiveKey] call EPOCH_fnc_server_hiveGETRANGE; + + if ((_response select 0) == 1 && (_response select 1) isEqualType []) then { + _arr = _response select 1; + _arrNum = count _arr; + + if (_arrNum == _dataFormatCount) then { + + // Validate and replace invaild data + { + if !((_arr select _forEachIndex) isEqualType _x) then {_arr set[_forEachIndex, _x]}; + } forEach _dataFormat; + + _class = _arr select 0; + _worldspace = _arr select 1; + _damage = _arr select 2; + + if (_class != "" && _damage < 1) then { + _worldspace params [["_location",[]],["_VectorDir",[0,0,0]],["_VectorUp",[0,0,1]],["_useposworld",false]]; + + if !(_location isEqualTo []) then { + + // increased position precision + if (count _location == 2) then{ + _location = (_location select 0) vectorAdd (_location select 1); + }; + + EPOCH_VehicleSlots deleteAt _vehicleSlotIndex; + + // temp for changes in class names + _found = ["O_Heli_Transport_04_F","O_Heli_Transport_04_bench_F","O_Heli_Transport_04_box_F","O_Heli_Transport_04_covered_F","B_Heli_Transport_03_unarmed_F","O_Truck_03_covered_F"] find _class; + if (_found != -1) then { + _class = ["O_Heli_Transport_04_EPOCH","O_Heli_Transport_04_bench_EPOCH","O_Heli_Transport_04_box_EPOCH","O_Heli_Transport_04_covered_EPOCH","B_Heli_Transport_03_unarmed_EPOCH","O_Truck_03_covered_EPOCH"] select _found; + }; + + _vehicle = createVehicle [_class, [random 500, random 500,500], [], 0, "CAN_COLLIDE"]; + _allVehicles pushBack _vehicle; + _vehicle call EPOCH_server_setVToken; + if (_useposworld) then { + _vehicle setposWorld _location; + } + else { + _vehicle setposATL _location; + }; + _vehicle setVectorDirAndUp [_VectorDir,_VectorUp]; + _vehicle setDamage _damage; + + _allHitpoints = getAllHitPointsDamage _vehicle; + if !(_allHitpoints isEqualTo []) then{ + _actualHitpoints = _allHitpoints select 0; + _hitpoints = _arr select 3; + if ((count _actualHitpoints) == (count _hitpoints)) then{ + { + _dmg = _hitpoints param [_forEachIndex,0]; + if (_x in ["HitFuel", "HitEngine"]) then { + _dmg = _dmg min 0.9; + }; + _vehicle setHitIndex [_forEachIndex, _dmg]; + } forEach _actualHitpoints; + }; + }; + + if (_immuneVehicleSpawn) then{ + _vehicle allowDamage false; + }; + + _vehicle setFuel (_arr select 4); + + _vehicle call EPOCH_server_vehicleInit; + + _config = configFile >> "CfgVehicles" >> _class >> "availableColors"; + if (isArray(_config)) then { + _color = _arr select 7; + _colors = getArray(_config); + _textureSelectionIndex = configFile >> "CfgVehicles" >> _class >> "textureSelectionIndex"; + _selections = if (isArray(_textureSelectionIndex)) then { getArray(_textureSelectionIndex) } else { [0] }; + _count = (count _colors) - 1; + { + _textures = _colors select 0; + if (_count >= _forEachIndex) then { + _textures = _colors select _forEachIndex; + }; + _vehicle setObjectTextureGlobal [_x, _textures select _color]; + } forEach _selections; + _vehicle setVariable ["VEHICLE_TEXTURE", _color]; + }; + + clearWeaponCargoGlobal _vehicle; + clearMagazineCargoGlobal _vehicle; + clearBackpackCargoGlobal _vehicle; + clearItemCargoGlobal _vehicle; + + if !(_removeweapons isequalto []) then { + { + _vehicle removeWeaponGlobal _x; + } foreach _removeweapons; + }; + if !(_removemagazinesturret isequalto []) then { + { + _vehicle removeMagazinesTurret _x; + } foreach _removemagazinesturret; + }; + + if (_disableVehicleTIE) then { + _vehicle disableTIEquipment true; + }; + + _vehicle lock true; + + _vehicle setVariable ["VEHICLE_SLOT", str(_i), true]; + + //diag_log format ["FILLING: _vehicle %1 pos: %2", _vehicle, (getPosATL _vehicle)]; + { + _objType = _forEachIndex; + + _objTypes = _x; + _objQty = []; + + if (_objType in [1, 2, 3]) then { + _objTypes = _x select 0; + _objQty = _x select 1; + }; + + { + switch _objType do { + // Weapon cargo + case 0: { + if (_x isEqualType []) then { + if ((count _x) >= 4) then { + + _vehicle addWeaponCargoGlobal[_x deleteAt 0, 1]; + + _attachments = []; + _wMags = false; + _wMagsArray = []; + // suppressor, laser, optics, magazines(array), bipods + { + // magazines + if (_x isEqualType []) then{ + _wMags = true; + _wMagsArray = _x; + } + else { + // attachments + if (_x != "") then{ + _attachments pushBack _x; + }; + }; + } forEach _x; + + // add all attachments to vehicle + // TODO replace with adding attachments directly to gun (Arma feature dependant) + { + _vehicle addItemCargoGlobal[_x, 1]; + } forEach _attachments; + + if (_wMags) then{ + if (_wMagsArray isEqualType [] && (count _wMagsArray) >= 2) then{ + _vehicle addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1]; + }; + }; + + }; + }; + }; + // Magazine cargo + case 1: { + _magazineName = _x; + _magazineSize = _objQty select _forEachIndex; + + if ((_magazineName isEqualType "STRING") && (_magazineSize isEqualType 0)) then { + _magazineSizeMax = getNumber (configFile >> "CfgMagazines" >> _magazineName >> "count"); + if (_magazineSizeMax >= 1) then { + // Add full magazines cargo + _vehicle addMagazineAmmoCargo [_magazineName, floor (_magazineSize / _magazineSizeMax), _magazineSizeMax]; + + // Add last non full magazine + if ((_magazineSize % _magazineSizeMax) > 0) then { + _vehicle addMagazineAmmoCargo [_magazineName, 1, floor (_magazineSize % _magazineSizeMax)]; + }; + }; + }; + }; + // Backpack cargo + case 2: { + if (_x isEqualType "STRING") then { + _qty = _objQty select _forEachIndex; + _vehicle addBackpackCargoGlobal [_x, _qty]; + }; + }; + // Item cargo + case 3: { + if (_x isEqualType "STRING") then { + _qty = _objQty select _forEachIndex; + _vehicle addItemCargoGlobal [_x, _qty]; + }; + }; + }; + } forEach _objTypes; + } forEach (_arr select 5); + + // remove and add back magazines + if !((_arr select 6) isequalto []) then { + if ((_arr select 6 select 0) isequaltype true) then { + { + _vehicle removeMagazinesTurret [_x select 0, _x select 1]; + } foreach magazinesAllTurrets _vehicle; + { + if ((_x select 2) > 0) then { + _vehicle addMagazineTurret [_x select 0,_x select 1,_x select 2]; + }; + } foreach (_arr select 6 select 1); + } + else { + {_vehicle removeMagazineGlobal _x}count (magazines _vehicle); + {_vehicle addMagazine _x}count (_arr select 6); + }; + }; + + if (EPOCH_DEBUG_VEH) then { + _marker = createMarker [str(_location) , _location]; + _marker setMarkerShape "ICON"; + _marker setMarkerType "mil_dot"; + _marker setMarkerText _class; + _marker setMarkerColor "ColorGreen"; + }; + }; + }; + }; + }; +}; + +// re-enable damage to vehicles after we wait +if (_immuneVehicleSpawn) then{ + _immuneVehicleSpawnTime = [_serverSettingsConfig, "immuneVehicleSpawnTime", 120] call EPOCH_fnc_returnConfigEntry; + [_allVehicles,_immuneVehicleSpawnTime] spawn{ + sleep (_this select 1); + {_x allowDamage true} count (_this select 0); + }; +}; + +addToRemainsCollector _allVehicles; + +diag_log format ["Epoch: Vehicle SPAWN TIMER %1, LOADED %2 VEHICLES", diag_tickTime - _diag, count _allVehicles]; + +true diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_CargoFill.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_CargoFill.sqf new file mode 100644 index 0000000..a468f52 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_CargoFill.sqf @@ -0,0 +1,103 @@ +/* + Author: He-Man - Ignatz-Gaming + + Contributors: + + Description: + Fill a Cargo Inventory (that is readed out with EPOCH_server_CargoSave before) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_CargoFill.sqf + + Example: + [_vehicle, _Inventory] call EPOCH_server_CargoFill; + + Parameter(s): + _this select 0: OBJ - Storage or Vehicle + _this select 1: ARRAY - Cargo Items + + Returns: + NOTHING +*/ + + +params [["_vehicle",objnull],["_items",[]]]; +{ + _objType = _forEachIndex; + _objTypes = _x; + _objQty = []; + if (_objType in [1, 2, 3]) then { + _objTypes = _x select 0; + _objQty = _x select 1; + }; + { + switch _objType do { + // Weapon cargo + case 0: { + if (_x isEqualType []) then { + if ((count _x) == 2) then { + _vehicle addWeaponWithAttachmentsCargoGlobal _x; + } + else { + _vehicle addWeaponWithAttachmentsCargoGlobal [_x,1]; + }; + }; + }; + // Magazine cargo + case 1: { + _magazineName = _x; + _magazineSize = _objQty select _forEachIndex; + if ((_magazineName isEqualType "STRING") && (_magazineSize isEqualType 0)) then { + _magazineSizeMax = getNumber (configFile >> "CfgMagazines" >> _magazineName >> "count"); + if (_magazineSizeMax >= 1) then { + // Add full magazines cargo + _vehicle addMagazineAmmoCargo [_magazineName, floor (_magazineSize / _magazineSizeMax), _magazineSizeMax]; + // Add last non full magazine + if ((_magazineSize % _magazineSizeMax) > 0) then { + _vehicle addMagazineAmmoCargo [_magazineName, 1, floor (_magazineSize % _magazineSizeMax)]; + }; + }; + }; + }; + // Backpack cargo + case 2: { + if (_x isEqualType "STRING") then { + _qty = _objQty select _forEachIndex; + _vehicle addBackpackCargoGlobal [_x, _qty]; + }; + }; + // Item cargo + case 3: { + if (_x isEqualType "STRING") then { + _qty = _objQty select _forEachIndex; + _vehicle addItemCargoGlobal [_x, _qty]; + }; + }; + // Sub-Containers + case 4: { + _type = _x select 0; + _subContainers = (everycontainer _vehicle) select {(_x select 0) isequalto _type && magazinesAmmoCargo (_x select 1) isequalto [] && weaponsItemsCargo (_x select 1) isequalto []}; + if !(_subContainers isequalto []) then { + _subContainer = _subContainers select 0 select 1; + [_subContainer,_x select 1] call EPOCH_server_CargoFill; + } + else { + if (_type isKindOf "Bag_Base") then { + _vehicle addBackpackCargoGlobal [_type, 1]; + } + else { + _vehicle addItemCargoGlobal [_type, 1]; + }; + _subContainers = (everycontainer _vehicle) select {(_x select 0) isequalto _type && magazinesAmmoCargo (_x select 1) isequalto [] && weaponsItemsCargo (_x select 1) isequalto []}; + if !(_subContainers isequalto []) then { + _subContainer = _subContainers select 0 select 1; + [_subContainer,_x select 1] call EPOCH_server_CargoFill; + }; + }; + }; + }; + } forEach _objTypes; +} forEach _items; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_CargoSave.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_CargoSave.sqf new file mode 100644 index 0000000..ddb134c --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_CargoSave.sqf @@ -0,0 +1,91 @@ +/* + Author: He-Man - Ignatz-Gaming + + Contributors: + + Description: + Reads Cargo Inventory and push it back in a Variable + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_CargoSave.sqf + + Example: + _Inventory = [_vehicle, _dominimize] call EPOCH_server_CargoSave; + + Parameter(s): + _this select 0: OBJ - Storage or Vehicle + _this select 1: BOOL - Minimize the Magazine Array + + Returns: + ARRAY +*/ + + +private [ + "_wepsItemsCargo","_magsAmmoCargo","_containers","_allContainers","_cargo","_magsAmmoCargox","_wepsItemsCargox","_magsAmmoCargoMinimized","_cargoIndex", + "_inventory","_ItemCargo","_ItemCargox"]; +params [["_vehicle",objnull],["_unpack",false]]; +// may not be needed but should prevent in DB. +_wepsItemsCargo = weaponsItemsCargo _vehicle; +if (isNil "_wepsItemsCargo") then { + _wepsItemsCargo = []; +}; +_magsAmmoCargo = magazinesAmmoCargo _vehicle; +if (isNil "_magsAmmoCargo") then { + _magsAmmoCargo = []; +}; +_ItemCargo = getItemCargo _vehicle; +if (isNil "_ItemCargo") then { + _ItemCargo = [[],[]]; +}; + +_containers = []; +_allContainers = (everycontainer _vehicle); +{ + _x params ["_type","_cargo"]; + if (_unpack) then { + _magsAmmoCargox = magazinesAmmoCargo _cargo; + { + _magsAmmoCargo pushback _x; + } foreach _magsAmmoCargox; + _wepsItemsCargox = weaponsItemsCargo _cargo; + { + _wepsItemsCargo pushback _x; + } foreach _wepsItemsCargox; + _ItemCargox = getItemCargo _cargo; + _ItemCargox params ["_items","_itemcounts"]; + { + _cargoIndex = (_ItemCargo select 0) find _x; + if (_cargoIndex >= 0) then { + (_ItemCargo select 1) set [_cargoIndex,(_ItemCargo select 1 select _cargoIndex) + (_itemcounts select _foreachindex)]; + } + else { + (_ItemCargo select 0) pushback (_items select _foreachindex); + (_ItemCargo select 1) pushback (_itemcounts select _foreachindex); + }; + } foreach _items; + } + else { + _containerInventory = _cargo call EPOCH_server_CargoSave; + _containers pushback [_type , _containerInventory]; + }; +} foreach _allContainers; + +// minimize magazine ammo cargo +_magsAmmoCargoMinimized = [[],[]]; +{ + (_magsAmmoCargoMinimized select 0) pushBack (_x select 0); + (_magsAmmoCargoMinimized select 1) pushBack (_x select 1); +} forEach _magsAmmoCargo; + +_inventory = [ + _wepsItemsCargo, + _magsAmmoCargoMinimized, + getBackpackCargo _vehicle, + _ItemCargo, + _containers +]; +_inventory diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_PaintVehicle.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_PaintVehicle.sqf new file mode 100644 index 0000000..0cf1eb3 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_PaintVehicle.sqf @@ -0,0 +1,27 @@ +private ["_ok"]; +_ok = true; +params [["_vehicle",objnull],["_PaintingCosts",0],["_textures",[]],["_player",objnull],["_token","",[""]]]; +if !([_player,_token] call EPOCH_server_getPToken) exitWith {}; +if (isnull _vehicle) exitwith {}; +if (_Textures isEqualTo []) exitwith {}; +if(_PaintingCosts > 0)then{ + _cIndex = EPOCH_customVars find "Crypto"; + _vars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar]; + _current_crypto = _vars select _cIndex; + if (_current_crypto < _PaintingCosts) exitwith { + _ok = false; + }; + _playerCryptoLimit = EPOCH_customVarLimits select _cIndex; + _playerCryptoLimit params ["_playerCryptoLimitMax","_playerCryptoLimitMin"]; + _current_crypto = ((_current_crypto - _PaintingCosts) min _playerCryptoLimitMax) max _playerCryptoLimitMin; + _current_crypto remoteExec ['EPOCH_effectCrypto',_player]; + _vars set[_cIndex, _current_crypto]; + _player setVariable["VARS", _vars]; +}; +if (_ok) then { + { + _vehicle SetObjectTextureGlobal [_foreachindex,_x]; + } foreach _Textures; + _vehicle setVariable ["VEHICLE_TEXTURE", -1]; + EPOCH_saveVehQueue pushBackUnique _vehicle; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_RemoveMagOrItemCargo.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_RemoveMagOrItemCargo.sqf new file mode 100644 index 0000000..4da7fea --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_RemoveMagOrItemCargo.sqf @@ -0,0 +1,70 @@ +/* + Author: He-Man - Ignatz-Gaming + + Contributors: + + Description: + Removes Items or Magazines from any Cargo + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/Epoch_Server_RemoveMagOrItemCargo.sqf + + Example: + _done = [_vehicle,[_itemtype,_itemcount,_rounds]] call Epoch_Server_RemoveMagOrItemCargo; + + Parameter(s): + _this select 0: OBJ - Storage or Vehicle + _this select 1: STRING - ItemType to remove + _this select 2: SCALAR - ItemQuantity to remove (optional) + _this select 2: SCALAR - Magazine Rounds to find and remove (optional) + Returns: + BOOL - If the Magazine(s) / Item(s) are successfully removed then "true", else "false" +*/ +private ["_return","_removed","_items","_objType","_arr","_size"]; +params ["_cargo","_class",["_count",1],["_bulletfind",0]]; +_return = false; +_removed = 0; +_items = [_cargo,false] call Epoch_Server_CargoSave; +_objType = -1; +if ([_class,"cfgMagazines"] call Epoch_fnc_isAny) then { + _objType = 1; +} +else { + if ([_class, "CfgWeapons"] call EPOCH_fnc_isAny) then { + _objType = 3; + }; +}; +if (_objType > -1) then { + _arr = _items select _objType; + _arr params ["_objTypes","_objQty"]; + { + _size = _objQty select _forEachIndex; + switch _objType do { + case 1: { + if ((_x isEqualTo _class) && ((_size isEqualTo _bulletfind) || _bulletfind == 0)) then { + _objQty set [_foreachindex,0]; + _removed = _removed + 1; + }; + }; + case 3: { + if (_x isEqualTo _class && _size >= _count) then { + _objQty set [_foreachindex,_size - _count]; + _removed = _removed + _count; + }; + }; + }; + if (_removed >= _count) exitwith {_return = true;}; + } forEach _objTypes; +}; +if (_return) then { + clearWeaponCargoGlobal _cargo; + clearMagazineCargoGlobal _cargo; + clearBackpackCargoGlobal _cargo; + clearItemCargoGlobal _cargo; + [_cargo,_items] call Epoch_Server_CargoFill; +}; + +_return diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_fillVehicle.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_fillVehicle.sqf new file mode 100644 index 0000000..1d0b80b --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_fillVehicle.sqf @@ -0,0 +1,24 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Refuel Vehicles + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_fillVehicle.sqf +*/ +params ["_vehicle","_value","_player",["_token","",[""]]]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (_player distance _vehicle > 20) exitWith{}; +if (!isNull _vehicle) then { + if (local _vehicle) then { + _vehicle setFuel _value; + } else { + [_vehicle, _value] remoteExec ['EPOCH_client_fillVehicle',_vehicle]; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_lockStorage.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_lockStorage.sqf new file mode 100644 index 0000000..79524ab --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_lockStorage.sqf @@ -0,0 +1,75 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Refuel Vehicles + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockStorage.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgBaseBuilding","_owners","_playerGroup","_playerUID","_response","_type","_locked","_LockStateChanged","_msg"]; +//[[[end]]] +params ["_unit","_lockStatus","_player",["_token","",[""]] ]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (isNull _unit) exitWith{}; +if (_player distance _unit > 20) exitWith{}; +_VehLockMessages = ['CfgEpochClient' call EPOCH_returnConfig, "VehLockMessages", true] call EPOCH_fnc_returnConfigEntry; +_type = typeOf _unit; +_playerUID = getPlayerUID _player; +_playerGroup = _player getVariable["GROUP", ""]; + +_fnc_Lock_Unlock = { + _locked = !_locked; + _unit setVariable ["EPOCH_Locked", _locked, true]; + if (_unit iskindof "GunSafe_EPOCH") then { + _animations = if (_locked) then {[['door1',0],['door2',0],['handle1',0],['handle2',0]]} else {[['handle1',1],['handle2',1],['door1',1],['door2',1]]}; + [_unit,_animations,[0,1,0]] remoteexec ['EPOCH_fnc_AnimateScheduled',_player]; + }; + _LockStateChanged = true; +}; + +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +if (getNumber(_cfgBaseBuilding >> _type >> "isSecureStorage") == 1) then { + _owners = _unit getVariable["STORAGE_OWNERS", []]; + _locked = _unit getVariable ["EPOCH_Locked", true]; + _LockStateChanged = false; + if (_playerUID in _owners) then { + call _fnc_Lock_Unlock; + } + else { + if (_playerGroup != "") then { + if (_playerGroup in _owners) then { + call _fnc_Lock_Unlock; + } + else { + _response = ["Group", _playerGroup] call EPOCH_fnc_server_hiveGETRANGE; + (_response param [1,[]]) params ["","","",["_modArray",[]],["_memberArray",[]]]; + if ( + {(_x select 0) in _owners} count _modArray > 0 || + {(_x select 0) in _owners} count _memberArray > 0 + ) then { + call _fnc_Lock_Unlock; + }; + }; + }; + }; + _msg = ["You are not the owner",5]; + if (_LockStateChanged) then { + if (_locked) then { + EPOCH_saveStorQueue pushBackUnique _unit; + _msg = ["Storage Locked",5,[[1,0,0,0.2],[1,1,1,1]]]; + } + else { + _msg = ["Storage Unlocked",5,[[0,1,0,0.2],[1,1,1,1]]]; + }; + }; + if (_VehLockMessages) then { + _msg remoteExec ["Epoch_Message",_player]; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_lockVehicle.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_lockVehicle.sqf new file mode 100644 index 0000000..37d0222 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_lockVehicle.sqf @@ -0,0 +1,128 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + (Un)Lock Vehicles + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockVehicle.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_VehLockMessages","_msg","_crew","_driver","_isLocked","_lockOwner","_lockedOwner","_logic","_playerGroup","_playerUID","_response","_vehLockHiveKey","_vehSlot","_nearhome"]; +//[[[end]]] +params [ + ["_vehicle",objNull,[objNull]], + ["_value",true,[true]], + ["_player",objNull,[objNull]], + ["_token","",[""]] +]; + +if (isNull _vehicle) exitWith {}; +if !([_player,_token] call EPOCH_server_getPToken) exitWith {}; +if (_player distance _vehicle > 20) exitWith {}; + +_VehLockMessages = ['CfgEpochClient' call EPOCH_returnConfig, "VehLockMessages", true] call EPOCH_fnc_returnConfigEntry; + +// Group access +_playerUID = getPlayerUID _player; +_playerGroup = _player getVariable["GROUP", ""]; + +_lockOwner = _playerUID; +if (_playerGroup != "") then { + _lockOwner = _playerGroup; +}; + +_lockedOwner = "-1"; +_nearhome = false; +_vehSlot = _vehicle getVariable["VEHICLE_SLOT", "ABORT"]; +_vehLockHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _vehSlot]; +if (_vehSlot != "ABORT") then { + _response = ["VehicleLock", _vehLockHiveKey] call EPOCH_fnc_server_hiveGETRANGE; + if ((_response select 0) == 1 && (_response select 1) isEqualType [] && !((_response select 1) isEqualTo[])) then { + _lockedOwner = _response select 1 select 0; + }; +} +else { + _lockedOwner = _vehicle getvariable ["EPOCH_LockedOwner","-1"]; +}; + +// get locked state +_isLocked = locked _vehicle in[2, 3]; + +_driver = driver _vehicle; +_crew = []; +{ + // only get alive crew + if (alive _x) then { + _crew pushBack _x; + }; +} forEach (crew _vehicle); + + +// if vehicle has a crew and player is not inside vehicle only allow locking if already owner +_logic = if !(_crew isEqualTo []) then { + if (_player in _crew) then { + // allow unlock if player is the driver or is inside the vehicle with out a driver. + (_player isEqualTo _driver || isNull(_driver) || _lockedOwner == _lockOwner || !alive _driver) + } else { + // allow only if player is already the owner as they are not inside the occupied vehicle. + (_lockedOwner == _lockOwner) + }; +} else { + // vehicle has no crew, so allow only if: unlocked, is already the owner, vehicle has no owner. + (!_isLocked || _lockedOwner == _lockOwner || _lockedOwner == "-1") +}; + +// Lockout mech +if (_logic) then { + + if (_value) then { + if !(_vehSlot isequalto "ABORT") then { + _nearhome = {(_x getVariable["BUILD_OWNER", "-1"]) in [_lockOwner] && {((_vehicle distance _x) < (getnumber (missionconfigfile >> "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange")))}} count Epoch_PlotPoles > 0; + ["VehicleLock", _vehLockHiveKey, if (_nearhome) then {EPOCH_vehicleLockTimeHome} else {EPOCH_vehicleLockTime}, [_lockOwner]] call EPOCH_fnc_server_hiveSETEX; + } + else { + _vehicle setvariable ["EPOCH_LockedOwner",_lockOwner]; + }; + } else { + // re-allow damage (server-side) on first unlock + if (_vehicle getVariable ["EPOCH_disallowedDamage", false]) then { + _vehicle allowDamage true; + _vehicle setVariable ["EPOCH_disallowedDamage", nil]; + }; + }; + + // lock/unlock + if (local _vehicle) then { + _vehicle lock _value; + } else { + [_vehicle, _value] remoteExec ['EPOCH_client_lockVehicle',_vehicle]; + }; + if (_VehLockMessages) then { + if (_value) then { + _msg = format ["Vehicle Locked for %1 ", + if (_nearhome && {(call compile EPOCH_vehicleLockTimeHome) > (call compile EPOCH_vehicleLockTime)}) then { + (((call compile EPOCH_vehicleLockTimeHome)/60/60) toFixed 1) + " hours - Base Lock" + } + else { + (((call compile EPOCH_vehicleLockTime)/60/60) toFixed 1) + " hours" + } + ]; + [_msg,10,[[1,0,0,0.2],[1,1,1,1]]] remoteExec ["Epoch_Message",_player]; + } + else { + _msg = "Vehicle unlocked"; + [_msg,10,[[0,1,0,0.2],[1,1,1,1]]] remoteExec ["Epoch_Message",_player]; + }; + }; +} +else { + if (_VehLockMessages) then { + ["You are not the owner",5] remoteExec ["Epoch_Message",_player]; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_packJack.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_packJack.sqf new file mode 100644 index 0000000..24335df --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_packJack.sqf @@ -0,0 +1,25 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Pack object into magazine item + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packJack.sqf +*/ +params ["_unit","_player",["_token","",[""]]]; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (isNull _unit) exitWith{}; +if (_player distance _unit > 20) exitWith{}; + +// TODO configize +if (typeOf _unit == "Jack_SIM_EPOCH") then { + deleteVehicle _unit; + // TODO handle overflow + _player addMagazine["JackKit", 1]; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_packStorage.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_packStorage.sqf new file mode 100644 index 0000000..1c70c0a --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_packStorage.sqf @@ -0,0 +1,142 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Dumps inventory of safe/lockbox to ground + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packStorage.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_arrCount","_attachments","_class","_config","_gwh","_inventory","_magazineName","_magazineSize","_magsAmmoCargo","_objQty","_objType","_objTypes","_owners","_posWH","_qty","_returnItems","_wMags","_wMagsArray","_wepsItemsCargo"]; +//[[[end]]] +params ["_unit","_player",["_token","",[""]] ]; + +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (isNull _unit) exitWith{}; +if (_player distance _unit > 20) exitWith{}; + +_class = typeOf _unit; +if (_class isKindOf 'Constructions_lockedstatic_F') then { + + _owners = _unit getVariable["STORAGE_OWNERS", []]; + if ((getPlayerUID _player) in _owners) then { + + _posWH = getPosATL _unit; + + // may not be needed but should prevent in DB. + _wepsItemsCargo = weaponsItemsCargo _unit; + if (isNil "_wepsItemsCargo") then { + _wepsItemsCargo = []; + }; + _magsAmmoCargo = magazinesAmmoCargo _unit; + if (isNil "_magsAmmoCargo") then { + _magsAmmoCargo = []; + }; + + // dump items on ground + _inventory = [ + _wepsItemsCargo, + _magsAmmoCargo, + getBackpackCargo _unit, + getItemCargo _unit + ]; + + [_unit, _player] call EPOCH_server_save_killedStorage; + deleteVehicle _unit; + + _gwh = createVehicle["groundWeaponHolder", _posWH, [], 0, "CAN_COLLIDE"]; + _gwh setPosATL _posWH; + _config = 'CfgBaseBuilding' call EPOCH_returnConfig; + _returnItems = getArray(_config >> _class >> "returnOnPack"); + { + _gwh addMagazineCargoGlobal _x; + } forEach _returnItems; + + { + _objType = _forEachIndex; + + _objTypes = _x; + _objQty = []; + + if (_objType in[2, 3]) then { + _objTypes = _x select 0; + _objQty = _x select 1; + }; + + { + switch _objType do { + case 0: { + if (_x isEqualType []) then { + _arrCount = count _x; + if (_arrCount >= 4) then { + + _gwh addWeaponCargoGlobal[_x deleteAt 0, 1]; + + _attachments = []; + _wMags = false; + _wMagsArray = []; + // suppressor, laser, optics, magazines(array), bipods + { + // magazines + if (_x isEqualType []) then{ + _wMags = true; + _wMagsArray = _x; + } + else { + // attachments + if (_x != "") then{ + _attachments pushBack _x; + }; + }; + } forEach _x; + + // add all attachments to vehicle + // TODO replace with adding attachments directly to gun (Arma feature dependant) + { + _gwh addItemCargoGlobal[_x, 1]; + } forEach _attachments; + + if (_wMags) then{ + if (_wMagsArray isEqualType [] && (count _wMagsArray) >= 2) then{ + _gwh addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1]; + }; + }; + + }; + }; + }; + case 1: { + if (_x isEqualType []) then { + if ((count _x) == 2) then { + _magazineName = _x select 0; + _magazineSize = _x select 1; + + if ((_magazineName isEqualType "STRING") && (_magazineSize isEqualType 0)) then { + _gwh addMagazineAmmoCargo[_magazineName, 1, _magazineSize]; + }; + }; + }; + }; + case 2: { + if (_x isEqualType "STRING") then { + _qty = _objQty select _forEachIndex; + _gwh addBackpackCargoGlobal[_x, _qty]; + }; + }; + case 3: { + if (_x isEqualType "STRING") then { + _qty = _objQty select _forEachIndex; + _gwh addItemCargoGlobal[_x, _qty]; + }; + }; + }; + }forEach _objTypes; + }forEach _inventory; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_repairVehicle.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_repairVehicle.sqf new file mode 100644 index 0000000..20162e3 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_repairVehicle.sqf @@ -0,0 +1,50 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Dumps inventory of safe/lockbox to ground + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_repairVehicle.sqf +*/ +private ["_god"]; +params ["_vehicle","_value","_player",["_token","",[""]]]; +if (isNull _vehicle) exitWith{}; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (_player distance _vehicle > 20) exitWith{}; + +if ((_value select 0) isEqualTo "ALL") then { + _vehicle setDamage (_value select 1); +} +else { + if (local _vehicle) then { + _god = !(isDamageAllowed _vehicle); + if (_god) then { + _vehicle allowdamage true; + }; + { + if ((_x select 0) isequaltype 0) then { + _vehicle setHitIndex _x; + } + else { + _vehicle setHitPointDamage _x; + }; + } foreach _value; + if (_god) then { + _vehicle allowdamage false; + }; + } else { + [_vehicle, _value] remoteExec ['EPOCH_client_repairVehicle',_vehicle]; + }; +}; + +if !({_x > 0} count ((getAllHitPointsDamage _vehicle) select 2) > 0) then { + _vehicle setdamage 0; +}; + +_vehicle call EPOCH_server_save_vehicle; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedBuilding.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedBuilding.sqf new file mode 100644 index 0000000..7af8c70 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedBuilding.sqf @@ -0,0 +1,57 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Killed building handler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedBuilding.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_ammoObj","_vehHiveKey","_vehSlot"]; +//[[[end]]] +params ["_building","_killer"]; +if (!isNull _building) then { + _vehSlot = _building getVariable["BUILD_SLOT", -1]; + if (_vehSlot != -1) then { + // Set off trap object + _ammoObj = _building getVariable ["EPOCH_TRAP_OBJ",objNull]; + if !(isNull _ammoObj) then { + _ammoObj setDamage 1; + }; + _vehHiveKey = format ["%1:%2", (call EPOCH_fn_InstanceID), _vehSlot]; + ["Building", _vehHiveKey] call EPOCH_fnc_server_hiveDEL; + EPOCH_BuildingSlots set [_vehSlot, 0]; + missionNamespace setVariable ['EPOCH_BuildingSlotCount', { _x == 0 } count EPOCH_BuildingSlots, true]; + + // If is BaseCam, remove from Array + if (_building iskindof "BaseCam_EPOCH") then { + EPOCH_BaseCams = EPOCH_BaseCams - [_building]; + publicvariable "EPOCH_BaseCams"; + }; + if (_building in (call EPOCH_JammerClasses)) then { + EPOCH_Plotpoles = EPOCH_Plotpoles - [_building]; + publicvariable "EPOCH_Plotpoles"; + }; + // Check if building killer is the owner and log accordingly + if (_killer isequaltype objnull) then { + if ((_building getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID _killer, _killer getVariable["GROUP", ""]]) then + { + ['BuildingRemoved', format["%1 was removed by %2 (owner) at %3", typeOf _building, _killer, getPosATL _building]] call EPOCH_fnc_server_hiveLog; + } + else + { + ['BuildingKilled', format["%1 was killed by %2 at %3", typeOf _building, _killer, getPosATL _building]] call EPOCH_fnc_server_hiveLog; + }; + } + else { + // Killer is no Obj, but a String (some AdminTools use it) + ['BuildingRemoved', format["%1 was removed by %2 at %3", typeOf _building, _killer, getPosATL _building]] call EPOCH_fnc_server_hiveLog; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedStorage.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedStorage.sqf new file mode 100644 index 0000000..a11422b --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedStorage.sqf @@ -0,0 +1,30 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Killed building handler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedStorage.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_vehHiveKey","_vehSlot"]; +//[[[end]]] +params ["_storage","_killer"]; + +if (!isNull _storage) then { + _vehSlot = _storage getVariable["STORAGE_SLOT", "ABORT"]; + if (_vehSlot != "ABORT") then { + _vehHiveKey = format ["%1:%2", (call EPOCH_fn_InstanceID), _vehSlot]; + ["Storage", _vehHiveKey] call EPOCH_fnc_server_hiveDEL; + EPOCH_StorageSlots pushBack _vehSlot; + missionNamespace setVariable ['EPOCH_StorageSlotsCount', count EPOCH_StorageSlots, true]; + + ['StorageKilled', format["%1 was killed by %2 at %3", typeOf _storage, _killer, getPosATL _storage]] call EPOCH_fnc_server_hiveLog; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedVehicle.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedVehicle.sqf new file mode 100644 index 0000000..8cb89d5 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedVehicle.sqf @@ -0,0 +1,30 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Killed building handler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedVehicle.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_vehHiveKey","_vehSlot"]; +//[[[end]]] +params ["_vehicle","_killer"]; +if (!isNull _vehicle) then { + _vehSlot = _vehicle getVariable ["VEHICLE_SLOT", "ABORT"]; + if (_vehSlot != "ABORT") then { + _vehHiveKey = format ["%1:%2", (call EPOCH_fn_InstanceID), _vehSlot]; + ["Vehicle", _vehHiveKey] call EPOCH_fnc_server_hiveDEL; + EPOCH_VehicleSlots pushBackUnique _vehSlot; + + missionNamespace setVariable ['EPOCH_VehicleSlotCount', count EPOCH_VehicleSlots, true]; + + ['VehicleKilled', format["%1 was killed by %2 at %3", typeOf _vehicle, _killer, getPosATL _vehicle]] call EPOCH_fnc_server_hiveLog; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_storage.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_storage.sqf new file mode 100644 index 0000000..a86045b --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_storage.sqf @@ -0,0 +1,42 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Save Storage Object + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_storage.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_VAL","_cargo","_cargoIndex","_class","_colorSlot","_damage","_inventory","_locked","_magsAmmoCargo","_magsAmmoCargoMinimized","_magsAmmoCargox","_newComponents","_selectedWeapon","_selectedWeaponComponents","_storageOwners","_vehHiveKey","_vehSlot","_vehiclePos","_weapon","_weaponComponents","_wepsItemsCargo","_wepsItemsCargoNormalized","_wepsItemsCargox","_worldspace"]; +//[[[end]]] +params [["_vehicle",objNull]]; + +if (!isNull _vehicle) then { + _class = typeOf _vehicle; + _vehSlot = _vehicle getVariable["STORAGE_SLOT", "ABORT"]; + if (_vehSlot != "ABORT") then { + + _vehHiveKey = format ["%1:%2", (call EPOCH_fn_InstanceID),_vehSlot]; + + _damage = 0; + _vehicle setDamage 0; + + _inventory = _vehicle call EPOCH_server_CargoSave; + + _colorSlot = _vehicle getVariable ["STORAGE_TEXTURE",0]; + _storageOwners = _vehicle getVariable["STORAGE_OWNERS",[]]; + _locked = if (_vehicle getVariable["EPOCH_Locked", true]) then {1} else {-1}; + _worldspace = [getposworld _vehicle call EPOCH_precisionPos, vectordir _vehicle, vectorup _vehicle, true]; + + _VAL = [_class, _worldspace, _damage, _inventory, _colorSlot, _storageOwners, _locked]; + ["Storage", _vehHiveKey, EPOCH_expiresBuilding, _VAL] call EPOCH_fnc_server_hiveSETEX; + diag_log format["STORAGE: saved to hive %1 Pos %2 Owners %3 Locked %4", _class, _worldspace, _storageOwners, _locked]; + }; + +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicle.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicle.sqf new file mode 100644 index 0000000..976aad0 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicle.sqf @@ -0,0 +1,43 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Save Storage Object + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicle.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_VAL","_baseType","_colorSlot","_hitpoints","_inventory","_vehHiveKey","_vehSlot"]; +//[[[end]]] +params [["_vehicle",objNull]]; + +if (!isNull _vehicle) then { + + if (!alive _vehicle) exitWith {diag_log format["DEBUG DEAD VEHICLE SKIPPED SAVE: %1 %2", _vehicle]}; + _vehSlot = _vehicle getVariable["VEHICLE_SLOT", "ABORT"]; + if (_vehSlot != "ABORT") then { + + _vehHiveKey = format ["%1:%2", (call EPOCH_fn_InstanceID),_vehSlot]; + + _hitpoints = (getAllHitPointsDamage _vehicle) param [2,[]]; + + _inventory = _vehicle call EPOCH_server_CargoSave; + + _colorSlot = _vehicle getVariable ["VEHICLE_TEXTURE",0]; + _baseType = _vehicle getVariable ["VEHICLE_BASECLASS",""]; + + _Textures = []; + if (missionnamespace getvariable ["UseCustomTextures",false] || _colorSlot isEqualTo -1) then { + _Textures = getObjectTextures _vehicle; + }; + + _VAL = [typeOf _vehicle,[getposworld _vehicle call EPOCH_precisionPos,vectordir _vehicle,vectorup _vehicle,true],damage _vehicle,_hitpoints,fuel _vehicle,_inventory,[true,magazinesAllTurrets _vehicle],_colorSlot,_baseType, getPlateNumber _vehicle, _Textures]; + ["Vehicle", _vehHiveKey, EPOCH_expiresVehicle, _VAL] call EPOCH_fnc_server_hiveSETEX; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicles.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicles.sqf new file mode 100644 index 0000000..edede29 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicles.sqf @@ -0,0 +1,34 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Adds an array of objects to save queues + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicles.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_objSlot","_storSlot","_vehSlot"]; +//[[[end]]] +params [["_objects",[]] ]; +{ + if (!isNull _x) then { + _vehSlot = _x getVariable ["VEHICLE_SLOT", "ABORT"]; + if (_vehSlot != "ABORT") then { + EPOCH_saveVehQueue pushBackUnique _x; + }; + _storSlot = _x getVariable["STORAGE_SLOT", "ABORT"]; + if (_storSlot != "ABORT") then { + EPOCH_saveStorQueue pushBackUnique _x; + }; + _objSlot = _x getVariable["BUILD_SLOT", -1]; + if (_objSlot != -1) then{ + EPOCH_saveBuildQueue pushBackUnique _x; + }; + }; +} forEach _objects; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_upgrade_vehicle.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_upgrade_vehicle.sqf new file mode 100644 index 0000000..1f3b249 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_server_upgrade_vehicle.sqf @@ -0,0 +1,145 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: He-Man and DirtySanchez + + Description: + Upgrade vehicle + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike +*/ + +private ["_slot","_pos","_dir","_cargo","_damage","_OldHitPoints","_typeVeh","_baseVeh","_color","_fuel","_newVeh","_checkclass","_cfgEpochVehicles","_availableColorsConfig","_colors","_textureSelectionIndex","_selections","_textures","_count","_newHitpoints","_idx","_dmg","_lock"]; +params [["_array",[]],["_player",objnull],["_token","",[""]]]; +if (_array isequalto []) exitwith { + diag_log "Array is empty"; +}; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{ + diag_log "Tokencheck failed"; +}; +_array params [["_veh",objnull],["_UpgradeVeh",""],["_removeCrypto",[]]]; +if (isnull _veh) exitwith { + diag_log "Vehicle is null"; +}; +if (_UpgradeVeh isequalto "") exitwith { + diag_log "No Upgrade Vehicle Class"; +}; +if (!(_removeCrypto isequalto []) && !(_removeCrypto isEqualTo 0)) then { + [_player,-_removeCrypto] call EPOCH_server_effectCrypto; +}; +_slot = _veh getvariable ["vehicle_slot","-1"]; +if (_slot isequalto "-1") exitwith { + diag_log "Vehicle has no Slot"; +}; + +_pos = getposasl _veh; +_dir = getdir _veh; +_cargo = _veh call EPOCH_server_CargoSave; +_damage = damage _veh; +_OldHitPoints = getAllHitPointsDamage _veh; +_typeVeh = typeOf _veh; +_baseVeh = _veh getVariable ["VEHICLE_BASECLASS",_typeVeh]; +_color = _veh getVariable ["VEHICLE_TEXTURE",""]; +_textures = getobjecttextures _veh; +_fuel = fuel _veh; +_lock = locked _veh; +deletevehicle _veh; +waituntil {isnull _veh}; +_pos set [2,(_pos select 2)+0.5]; +_newVeh = createVehicle [_UpgradeVeh, [random 500, random 500,500], [], 0, "CAN_COLLIDE"]; +_newVeh setVariable ["VEHICLE_SLOT", _slot, true]; +_newVeh setVariable ["VEHICLE_BASECLASS", _baseVeh]; +_newVeh call EPOCH_server_setVToken; +_newVeh call EPOCH_server_vehicleInit; +// set fuel level +_newVeh setFuel _fuel; +_newVeh lock _lock; +// apply persistent textures +if (_color isEqualTo -1 && {(_newVeh iskindof _typeVeh)}) then { + { + _newVeh SetObjectTextureGlobal [_foreachindex,_x]; + } foreach _textures; + _newVeh setVariable["VEHICLE_TEXTURE", _color]; +} +else { + _checkclass = _typeVeh; + if !(_newVeh iskindof _typeVeh) then { + _checkclass = _UpgradeVeh; + }; + _cfgEpochVehicles = 'CfgEpochVehicles' call EPOCH_returnConfig; + _availableColorsConfig = (_cfgEpochVehicles >> _checkclass >> "availableColors"); + if (isArray(_availableColorsConfig)) then{ + _colors = getArray (_availableColorsConfig); + _textureSelectionIndex = (_cfgEpochVehicles >> _checkclass >> "textureSelectionIndex"); + _selections = if (isArray(_textureSelectionIndex)) then{ getArray(_textureSelectionIndex) } else { [0] }; + _textures = _colors select 0; + if (!(_newVeh iskindof _typeVeh) || _color isequalto "") then { + _color = floor(random(count _textures)); + }; + _count = (count _colors) - 1; + { + if (_count >= _forEachIndex) then{ + _textures = _colors select _forEachIndex; + }; + _newVeh setObjectTextureGlobal[_x, (_textures select _color)]; + } forEach _selections; + _newVeh setVariable["VEHICLE_TEXTURE", _color]; + }; +}; + +// disable thermal imaging equipment +_newVeh disableTIEquipment true; + +// set damage and hitpoints +_newVeh setDamage _damage; +_newHitpoints = getAllHitPointsDamage _newVeh; +{ + _idx = (_newHitpoints select 0) find _x; + if (_idx > -1) then { + _dmg = _OldHitPoints select 2 select _foreachindex; + if (_x in ["HitFuel", "HitEngine"]) then { + _dmg = _dmg min 0.9; + }; + _newVeh setHitPointDamage [_x, _dmg]; + }; +} foreach (_OldHitPoints select 0); + +// new Dynamicsimulation +if([configFile >> "CfgEpochServer", "vehicleDynamicSimulationSystem", true] call EPOCH_fnc_returnConfigEntry)then +{ + _newveh enableSimulationGlobal false; // turn it off until activated by dynamicSim + _newveh enableDynamicSimulation true; +}; + +// add back old inventory +clearWeaponCargoGlobal _newveh; +clearMagazineCargoGlobal _newveh; +clearBackpackCargoGlobal _newveh; +clearItemCargoGlobal _newveh; +[_newveh,_cargo] call EPOCH_server_CargoFill; + +// Remove forbidden Weapons and Ammo +_serverSettingsConfig = configFile >> "CfgEpochServer"; +_removeweapons = [_serverSettingsConfig, "removevehweapons", []] call EPOCH_fnc_returnConfigEntry; +_removemagazinesturret = [_serverSettingsConfig, "removevehmagazinesturret", []] call EPOCH_fnc_returnConfigEntry; +_disableVehicleTIE = [_serverSettingsConfig, "disableVehicleTIE", true] call EPOCH_fnc_returnConfigEntry; +if (_disableVehicleTIE) then { + _newVeh disableTIEquipment true; +}; +if !(_removeweapons isequalto []) then { + { + _newVeh removeWeaponGlobal _x; + } foreach _removeweapons; +}; +if !(_removemagazinesturret isequalto []) then { + { + _newVeh removeMagazinesTurret _x; + } foreach _removemagazinesturret; +}; + +_newVeh setdir _dir; +_newVeh setposasl _pos; + +// save new vehicle to db +_newveh call EPOCH_Server_Save_Vehicle; diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicle.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicle.sqf new file mode 100644 index 0000000..45fa244 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicle.sqf @@ -0,0 +1,150 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Vehicle Spawn Function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicle.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_availableColorsConfig","_cfgEpochVehicles","_color","_colors","_count","_marker","_maxDamage","_removemagazinesturret","_removeweapons","_selections","_serverSettingsConfig","_textureSelectionIndex","_textures","_vehLockHiveKey","_vehObj"]; +//[[[end]]] +params ["_vehClass","_position","_direction","_locked","_slot",["_lockOwner",""],["_can_collide","CAN_COLLIDE"],["_spawnLoot",false],["_spawnDamaged",true]]; +if !(isClass (configFile >> "CfgVehicles" >> _vehClass)) exitWith {objNull}; +_serverSettingsConfig = configFile >> "CfgEpochServer"; +_removeweapons = [_serverSettingsConfig, "removevehweapons", []] call EPOCH_fnc_returnConfigEntry; +_removemagazinesturret = [_serverSettingsConfig, "removevehmagazinesturret", []] call EPOCH_fnc_returnConfigEntry; +_disableVehicleTIE = [_serverSettingsConfig, "disableVehicleTIE", true] call EPOCH_fnc_returnConfigEntry; +_vehObj = createVehicle[_vehClass, [random 500,random 500, 500], [], 0, "CAN_COLLIDE"]; +// turn off BIS randomization +_vehObj setVariable ["BIS_enableRandomization", false]; +if !(isNull _vehObj) then{ + _vehObj call EPOCH_server_setVToken; + + // add random damage to vehicle (avoid setting engine or fuel to 100% damage to prevent instant destruction) + if (_spawnDamaged) then { + { + _maxDamage = if ((tolower _x) in ["hitengine","hitfuel","hithull","hitbody"]) then {0.8} else {1}; + _vehObj setHitIndex [_forEachIndex,((random 1 max 0.1) min _maxDamage)]; + } forEach ((getAllHitPointsDamage _vehObj) param [0,[]]); + }; + // make vehicle immune from further damage. + _vehObj allowDamage false; + + // Set Direction and position + if (_direction isEqualType []) then{ + _vehObj setposATL _position; + _vehObj setVectorDirAndUp _direction; + } else { + _vehObj setdir _direction; + _vehObj setVectorUp surfaceNormal _position; + _vehObj setposATL _position; + }; + // Normalize vehicle inventory + clearWeaponCargoGlobal _vehObj; + clearMagazineCargoGlobal _vehObj; + clearBackpackCargoGlobal _vehObj; + clearItemCargoGlobal _vehObj; + + if !(_removeweapons isequalto []) then { + { + _vehObj removeWeaponGlobal _x; + } foreach _removeweapons; + }; + if !(_removemagazinesturret isequalto []) then { + { + _vehObj removeMagazinesTurret _x; + } foreach _removemagazinesturret; + }; + + // Disable Termal Equipment + if (_disableVehicleTIE) then { + _vehObj disableTIEquipment true; + }; + + // Vehicle Lock + _vehObj lock _locked; + + // randomize fuel TODO push min max to config + _vehObj setFuel ((random 1 max 0.1) min 0.9); + + // get colors from config + _cfgEpochVehicles = 'CfgEpochVehicles' call EPOCH_returnConfig; + _availableColorsConfig = (_cfgEpochVehicles >> _vehClass >> "availableColors"); + if (isArray(_availableColorsConfig)) then{ + + _textureSelectionIndex = (_cfgEpochVehicles >> _vehClass >> "textureSelectionIndex"); + _selections = if (isArray(_textureSelectionIndex)) then{ getArray(_textureSelectionIndex) } else { [0] }; + _colors = getArray(_availableColorsConfig); + _textures = _colors select 0; + _color = floor(random(count _textures)); + _count = (count _colors) - 1; + { + if (_count >= _forEachIndex) then{ + _textures = _colors select _forEachIndex; + }; + _vehObj setObjectTextureGlobal[_x, (_textures select _color)]; + } forEach _selections; + _vehObj setVariable["VEHICLE_TEXTURE", _color]; + }; + + // add random loots + if (_spawnLoot) then { + if (_vehClass isKindOf "Ship") then{ + [_vehObj, "VehicleBoat"] call EPOCH_serverLootObject; + } else { + [_vehObj, "Vehicle"] call EPOCH_serverLootObject; + }; + }; + + // Set slot used by vehicle + _vehObj setVariable["VEHICLE_SLOT", _slot, true]; + + // Lock vehicle for owner + if (_locked && _lockOwner != "") then { + _vehLockHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _slot]; + ["VehicleLock", _vehLockHiveKey, EPOCH_vehicleLockTime, [_lockOwner]] call EPOCH_fnc_server_hiveSETEX; + } else { + _vehLockHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _slot]; + ["VehicleLock", _vehLockHiveKey] call EPOCH_fnc_server_hiveDEL; + }; + + // new Dynamicsimulation + if([configFile >> "CfgEpochServer", "vehicleDynamicSimulationSystem", true] call EPOCH_fnc_returnConfigEntry)then + { + _vehObj enableSimulationGlobal false; // turn it off until activated by dynamicSim + _vehObj enableDynamicSimulation true; + }; + + + // SAVE VEHICLE + _vehObj call EPOCH_server_save_vehicle; + + // Event Handlers + _vehObj call EPOCH_server_vehicleInit; + + // Markers + if (EPOCH_DEBUG_VEH) then{ + _marker = createMarker[str(_position), _position]; + _marker setMarkerShape "ICON"; + _marker setMarkerType "mil_dot"; + _marker setMarkerText _vehClass; + }; + + // Add to A3 remains collector + addToRemainsCollector[_vehObj]; + + // make vehicle mortal again + _vehObj allowDamage true; + +} else { + diag_log format["DEBUG: Failed to create vehicle: %1", _this]; +}; + +_vehObj diff --git a/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicles.sqf b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicles.sqf new file mode 100644 index 0000000..8977b59 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicles.sqf @@ -0,0 +1,155 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Dynamic vehicle spawner + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicles.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_tmppos","_check","_allCitys","_allCitysDync","_allowedTypes","_cityPos","_collide","_direction","_find","_getRandomPos","_isShip","_limit","_marker","_nearBy","_newPosition","_position","_preferedPos","_range","_road","_roads","_selectedCity","_serverMapConfig","_slot","_spawnCount","_spawnPositionSize","_spawnPositionSizeDefaults","_vehClass","_vehCount","_vehObj"]; +//[[[end]]] +params [["_allowedVehiclesList",[]] ]; + +if (_allowedVehiclesList isEqualTo []) exitWith { + diag_log "DEBUG: All vehicles over limit"; +}; + +_spawnPositionSizeDefaults = [ + ["FlatAreaCity",1], + ["FlatAreaCitySmall",1], + ["NameCity",2], + ["NameVillage",1], + ["NameCityCapital",4], + ["Airport",5], + ["NameLocal",2], + ["StrongpointArea",1], + ["VegetationBroadleaf",1], + ["VegetationFir",1], + ["ViewPoint",1] +]; +_serverMapConfig = configFile >> "CfgEpoch" >> worldName; +_spawnPositionSize = [_serverMapConfig, "vehicleSpawnTypes", _spawnPositionSizeDefaults] call EPOCH_fnc_returnConfigEntry; + +_allowedTypes = []; +{ + _allowedTypes pushBack (_x select 0) +}forEach _spawnPositionSize; + +_allCitys = "getText(_x >> 'type') in _allowedTypes" configClasses (configfile >> "CfgWorlds" >> worldName >> "Names"); +_allCitysDync = []; + +{ + _cityPos = getArray(_x >> "position"); + _range = getNumber(_x >> "radiusA") * 1.3; + _nearBy = count(_cityPos nearEntities[["LandVehicle", "Ship", "Air", "Tank"], _range]); + _find = _allowedTypes find (getText(_x >> "type")); + if (_find > -1) then{ + _limit = _spawnPositionSize select _find select 1; + if (_limit > _nearBy) then{ + _allCitysDync pushBack _x; + }; + }; +} forEach _allCitys; + +_position = [0,0,0]; +_spawnCount = (count EPOCH_VehicleSlots - EPOCH_storedVehicleCount); + +// diag_log format["DEBUG: count EPOCH_VehicleSlots: %1 EPOCH_storedVehicleCount: %2 _spawnCount %3", (count EPOCH_VehicleSlots), EPOCH_storedVehicleCount, _spawnCount,_allowedVehiclesList]; +// diag_log format["DEBUG: _allowedVehiclesList: %1 ", _allowedVehiclesList]; + +for "_i" from 1 to _spawnCount do { + + _slot = EPOCH_VehicleSlots deleteAt 0; + + _vehCount = count _allowedVehiclesList; + // diag_log format["DEBUG: _allowedVehiclesList: %1 ", _allowedVehiclesList]; + _vehClass = _allowedVehiclesList deleteAt(floor(random(_vehCount))); + if (isNil "_vehClass") exitWith{diag_log "DEBUG: Failed to find vehicle class"}; + + _direction = random 360; + _position = [0,0,0]; + _getRandomPos = true; + + _preferedPos = getArray(configFile >> "CfgEpoch" >> worldname >> "whitelistedVehiclePos" >> _vehClass); + if !(_preferedPos isEqualTo []) then{ + _newPosition = selectRandom _preferedPos; + if ((nearestObjects[(_newPosition select 0), ["LandVehicle", "Ship", "Air", "Tank"], 50]) isEqualTo []) then{ + _position = _newPosition select 0; + _direction = _newPosition select 1; + _getRandomPos = false; + }; + }; + + if (_getRandomPos) then{ + _isShip = _vehClass isKindOf "Ship"; + if (_isShip || (_vehClass isKindOf "Air")) then{ + if (_isShip) then{ + _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 0, 0, 4000, 1] call BIS_fnc_findSafePos; + _position = [_position, 0, 100, 10, 2, 4000, 0] call BIS_fnc_findSafePos; + } else { + _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 5000, 0] call BIS_fnc_findSafePos; + _tmppos = _position; + _check = []; + for "_i" from 1 to 10 do { // Check max 10 times for a Flat and Empty Position in Area + _check = _tmppos isFlatEmpty [5, -1, .4, 7, 0, false]; + if !((_check) isequalto []) exitwith { + _position = _tmppos; + }; + _tmppos = [_position, 0, 150, 10, 0, .3, 0] call BIS_fnc_findSafePos; + }; + if (_check isequalto []) then { // Suppress Vehicle Spawn on this position and try again next Restart + diag_log format ["Vehicle Spawn at %1 supressed - No good spot found",_position]; + _position = []; + }; + }; + } else { + + if (_allCitysDync isEqualTo []) then { + _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 3, 0, 1000, 0] call BIS_fnc_findSafePos; + } else { + _selectedCity = _allCitysDync deleteAt (floor random(count _allCitysDync)); + _cityPos = getArray(_selectedCity >> "position"); + _range = getNumber(_selectedCity >> "radiusA") * 1.3; + + _roads = _cityPos nearRoads _range; + if !(_roads isEqualTo []) then { + _road = selectRandom _roads; + _position = getPosATL _road; + _position deleteAt 2; + }; + }; + }; + }; + + if ((count _position == 2 && _getRandomPos) || !_getRandomPos) then{ + + _collide = "CAN_COLLIDE"; + if (_getRandomPos) then{ + _collide = "NONE"; + _position set[2, 0.1]; + if (surfaceIsWater _position) then{ + _position = ASLToATL _position; + }; + }; + + _vehObj = [_vehClass,_position,_direction,true,_slot,"",_collide,true,true] call EPOCH_spawn_vehicle; + + if (EPOCH_DEBUG_VEH) then { + _marker = createMarker [str(_position) , _position]; + _marker setMarkerShape "ICON"; + _marker setMarkerType "mil_dot"; + _marker setMarkerText _vehClass; + _marker setMarkerColor "ColorBlue"; + }; + + }; +}; +missionNamespace setVariable ['EPOCH_VehicleSlotCount', count EPOCH_VehicleSlots, true]; +true diff --git a/Server/@epochhive/addons/epoch_server/config.cpp b/Server/@epochhive/addons/epoch_server/config.cpp new file mode 100644 index 0000000..2313a6d --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/config.cpp @@ -0,0 +1,158 @@ +/**************************************************************************** +Copyright (C) 2015 - ARMA 3 EPOCH MOD [EpochMod.com] (v0.3.0.1) +*****************************************************************************/ + +#define _ARMA_ + +class CfgPatches { + class A3_epoch_server { + units[] = {}; + weapons[] = {}; + requiredVersion = 0.1; + requiredAddons[] = {"A3_epoch_server_core","A3_epoch_config","A3_server_settings","A3_server_events"}; + #include "build.hpp" + }; +}; +class CfgServerFunctions +{ + version = 1; + class A3E + { + tag = "EPOCH"; + file = "\epoch_server\compile"; + class epoch_group { + class server_upgradeGroup {}; + class server_updatePlayerGroup {}; + class server_createGroup {}; + class server_deleteGroup {}; + class server_invitePlayer {}; + }; + class epoch_grouptemp { + class server_upgradeTempGroup {}; + class server_updatePlayerTempGroup {}; + class server_createTempGroup {}; + class server_deleteTempGroup {}; + class server_invitePlayerTempGroup {}; + }; + class epoch_bases { + class swapBuilding {}; + class saveBuilding {}; + class server_loadBuildings {}; + class server_saveBuilding {}; + class server_upgradeBUILD {}; + class server_removeBUILD {}; + class server_paintBUILD {}; + class server_maintBUILD {}; + class server_simulSwap {}; + class server_simToStatic {}; + class server_unsuppported {}; + }; + class epoch_looting { + class server_lootContainer {}; + class server_spawnBoatLoot {}; + class server_destroyTrash {}; + class server_knockDownTree {}; + class server_mineRocks {}; + class server_lootAnimal {}; + class server_spawnLoot {}; + }; + class epoch_player { + class fnc_addItemToX {}; + class fnc_savePlayer {}; + class server_savePlayer {}; + class server_makeSP {}; + class server_loadPlayer {}; + class server_checkPlayer {}; + class server_onPlayerDisconnect {}; + class server_deadPlayer {}; + class server_revivePlayer {}; + class server_SetUnitLoadout {}; + class server_storeCrypto {}; + class server_equippedItem {}; + class server_unpackBackpack {}; + class server_deadPlayerDetonate{}; + class server_playerSetVariable{}; + class server_PayCrypto{}; + class fnc_updatePlayerStats{}; + class server_updatePlayerStats{}; + class server_SetFinalPlayerPos{}; + }; + class epoch_traders { + class server_loadTraders {}; + class server_spawnTraders {}; + }; + class epoch_trading { + class server_effectCrypto {}; + class server_makeTrade {}; + class server_tradeRequest {}; + class server_makeNPCTrade {}; + class server_takeCrypto {}; + }; + class epoch_vehicle { + class server_save_vehicles {}; + class server_save_vehicle {}; + class server_save_killedVehicle {}; + class server_save_killedStorage {}; + class server_save_killedBuilding {}; + class load_vehicles {}; + class load_vehicles_old {}; + class load_storage {}; + class server_save_storage {}; + class spawn_vehicles {}; + class server_lockVehicle {}; + class server_fillVehicle {}; + class server_repairVehicle {}; + class server_lockStorage {}; + class server_packStorage {}; + class server_packJack {}; + class spawn_vehicle {}; + class server_upgrade_vehicle {}; + class server_CargoSave {}; + class server_CargoFill {}; + class server_removemagoritemcargo {}; + class server_PaintVehicle {}; + }; + class epoch_server { + class precisionPos {}; + class serverLootObject {}; + class server_vehicleInit {}; + class server_storageInit {}; + class server_buildingInit {}; + class server_traderKilled {}; + class localCleanup {}; + class server_createTeleport {}; + class server_getRealTime {}; + class server_teleportPlayer {}; + class returnConfig {}; + class serverCommand {}; + class server_makeMarker {}; + class server_removeMarker {}; + class server_createGlobalMarkerSet {}; + class server_deleteGlobalMarkerSet {}; + class server_isNearChecks {}; + class server_DefuseBomb {}; + class server_PutCrypto {}; + class server_UpdateTopStats{}; + }; + class epoch_missions { + class Server_createObject {}; + class server_airDropCrate {}; + class server_fillContainer {}; + class Server_createAirDrop {}; + class Server_missionComms{}; + }; + class epoch_antagonists { + class server_triggerEvent {}; + class server_handle_say3D {}; + class server_handle_switchMove {}; + class server_handle_sapperObjs {}; + class server_triggerAntagonist{}; + }; + }; +}; +class CfgServerVersion +{ + client = "1.3.2"; + config = "1.3.2"; + hive = "0.6.0.0"; +}; diff --git a/Server/@epochhive/addons/epoch_server/init/server_init.sqf b/Server/@epochhive/addons/epoch_server/init/server_init.sqf new file mode 100644 index 0000000..42154bc --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/init/server_init.sqf @@ -0,0 +1,521 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Starts main functions + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/init/server_init.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_ReservedSlots","_SideHQ1","_SideHQ2","_SideHQ3","_abortAndError","_allBunkers","_allowedVehicleIndex","_allowedVehicleListName","_allowedVehiclesList","_allowedVehiclesListArray","_animationStates","_blacklist","_bunkerCounter","_bunkerLocations","_bunkerLocationsKey","_cfgServerVersion","_channelColor","_channelNumber","_channelTXT","_clientVersion","_colCount","_config","_configSize","_configVersion","_customRadioactiveLocations","_date","_dateChanged","_debug","_debugLocation","_distance","_epochConfig","_epochWorldPath","_existingStock","_firstBunker","_hiveVersion","_index","_indexStock","_instanceID","_list","_loc1","_locName","_locPOS","_locSize","_location","_locations","_markers","_markertxt","_maxColumns","_maxRows","_memoryPoints","_modelInfo","_nearBLObj","_newBunkerCounter","_object","_originalLocation","_pOffset","_pos","_radio","_radioactiveLocations","_radioactiveLocationsTmp","_radius","_response","_rng","_rngChance","_rowCount","_sapper","_score","_scriptHiveKey","_seed","_selectedBunker","_serverConfig","_serverSettingsConfig","_servicepoints","_size","_startTime","_staticDateTime","_staticFuelSources","_timeDifference","_valuesAndWeights","_veh","_vehicleCount","_vehicleSlotLimit","_worldSize"]; +//[[[end]]] +_startTime = diag_tickTime; +missionNamespace setVariable ['Epoch_ServerVersion', getText(configFile >> "CfgMods" >> "Epoch" >> "version"), true]; +diag_log format["Epoch: Starting ArmA3 Epoch Server, Version %1. Note: If server crashes directly after this point check that Redis is running and the connection info is correct.",Epoch_ServerVersion]; + +_abortAndError = { + // kick all players with reverse BE kicks + true remoteExec ['EPOCH_client_rejectPlayer',-2, true]; + // flood server rpt with reason + for "_i" from 0 to 15 do { + diag_log _this; + }; +}; + +_cfgServerVersion = configFile >> "CfgServerVersion"; +_serverSettingsConfig = configFile >> "CfgEpochServer"; +_epochConfig = configFile >> "CfgEpoch"; + +_clientVersion = getText(_cfgServerVersion >> "client"); +_configVersion = getText(_cfgServerVersion >> "config"); +_hiveVersion = getText(_cfgServerVersion >> "hive"); + +if (_clientVersion != Epoch_ServerVersion) exitWith{ + format["Epoch: Version mismatch! Current: %2 Needed: %1", _clientVersion, Epoch_ServerVersion] call _abortAndError; +}; +if (_configVersion != getText(configFile >> "CfgPatches" >> "A3_server_settings" >> "epochVersion")) exitWith { + format["Epoch: Config file needs updated! Current: %1 Needed: %2", _configVersion, getText(configFile >> "CfgPatches" >> "A3_server_settings" >> "epochVersion")] call _abortAndError; +}; +if (isClass(getMissionConfig "CfgEpochClient") && _configVersion != getText(getMissionConfig "CfgEpochClient" >> "epochVersion")) exitWith{ + format["Epoch: Mission Config file needs updated! Current: %1 Needed: %2", _configVersion, getText(getMissionConfig "CfgEpochClient" >> "epochVersion")] call _abortAndError; +}; +if (("epochserver" callExtension "") != _hiveVersion) exitWith { + format["Epoch: Server DLL mismatch! Current: %1 Needed: %2", "epochserver" callExtension "",_hiveVersion] call _abortAndError; +}; + +_serverConfig = call compile ("epochserver" callExtension "000"); +EPOCH_fn_InstanceID = compileFinal (str (_serverConfig select 0)); +_instanceID = call EPOCH_fn_InstanceID; +if (isNil "_instanceID") exitWith{ + "Epoch: InstanceID missing!" call _abortAndError; +}; + +EPOCH_modCUPWeaponsEnabled = (getNumber (configFile >> "CfgPatches" >> "CUP_Weapons_WeaponsCore" >> "requiredVersion") > 0); +EPOCH_modCUPVehiclesEnabled = (getNumber (configFile >> "CfgPatches" >> "CUP_WheeledVehicles_Core" >> "requiredVersion") > 0); +if (EPOCH_modCUPWeaponsEnabled) then { + diag_log "Epoch: CUP Weapons detected"; +}; +if (EPOCH_modCUPVehiclesEnabled) then { + diag_log "Epoch: CUP Vehicles detected"; +}; + +// detect if Ryan's Zombies and Deamons mod is present +if (["CfgEpochClient", "ryanZombiesEnabled", true] call EPOCH_fnc_returnConfigEntryV2) then { + EPOCH_mod_Ryanzombies_Enabled = (parseNumber (getText (configFile >> "CfgPatches" >> "Ryanzombies" >> "version")) >= 4.5); + if (EPOCH_mod_Ryanzombies_Enabled) then { + diag_log "Epoch: Ryanzombies detected"; + missionNamespace setVariable ["EPOCH_mod_Ryanzombies_Enabled", true, true]; + }; +} else { + EPOCH_mod_Ryanzombies_Enabled = false; +}; + +// detect if Mad Arma is present +if (["CfgEpochClient", "madArmaEnabled", true] call EPOCH_fnc_returnConfigEntryV2) then { + EPOCH_mod_madArma_Enabled = (parseNumber (getText (configFile >> "CfgPatches" >> "bv_wheels" >> "version")) >= 2016); + if (EPOCH_mod_madArma_Enabled) then { + diag_log "Epoch: Mad Arma detected"; + missionNamespace setVariable ["EPOCH_mod_madArma_Enabled", true, true]; + }; +} else { + EPOCH_mod_madArma_Enabled = false; +}; + +diag_log "Epoch: Init Variables"; +call compile preprocessFileLineNumbers "\epoch_server\init\server_variables.sqf"; +call compile preprocessFileLineNumbers "\epoch_server\init\server_securityfunctions.sqf"; + +// Set Server RealTime +Epoch_ServerRealtime = date; +_response = "epochserver" callExtension "510"; +if (_response != "") then { + diag_log format ["Epoch: Set Real Time: %1", _response]; + _date = parseSimpleArray _response; + _date resize 5; + Epoch_ServerRealtime = _date; +}; + +// Enable Dynamic simulation +_dynSimToggle = [_serverSettingsConfig, "enableDynamicSimulationSystem", true] call EPOCH_fnc_returnConfigEntry; +enableDynamicSimulationSystem _dynSimToggle; +if(_dynSimToggle)then +{ + "IsMoving" setDynamicSimulationDistanceCoef ([_serverSettingsConfig, "isMovingCoefValue", 2] call EPOCH_fnc_returnConfigEntry); + "Group" setDynamicSimulationDistance ([_serverSettingsConfig, "groupDynSimDistance", 500] call EPOCH_fnc_returnConfigEntry); + "Vehicle" setDynamicSimulationDistance ([_serverSettingsConfig, "vehicleDynSimDistance", 350] call EPOCH_fnc_returnConfigEntry); + "EmptyVehicle" setDynamicSimulationDistance ([_serverSettingsConfig, "emptyVehicleDynSimDistance", 250] call EPOCH_fnc_returnConfigEntry); + "Prop" setDynamicSimulationDistance ([_serverSettingsConfig, "propDynSimDistance", 50] call EPOCH_fnc_returnConfigEntry); +}; +["I", _instanceID, "86400", ["CONTINUE"]] call EPOCH_fnc_server_hiveSETEX; +diag_log format["Epoch: Start Hive, Instance ID: '%1'", _instanceID]; + +diag_log "Epoch: Init Connect/Disconnect handlers"; + +onPlayerConnected {}; // seems this is needed or addMissionEventHandler "PlayerConnected" does not work. as of A3 1.60 +addMissionEventHandler ["PlayerConnected", { + params ["_id","_uid","_name","_jip","_owner"]; + // TODO: diabled STEAMAPI - Vac ban check needs reworked. + // "epochserver" callExtension format["001|%1", _uid]; + // diag_log format["playerConnected:%1", _this]; + ["PlayerData", _uid, EPOCH_expiresPlayer, [_name]] call EPOCH_fnc_server_hiveSETEX; + ['Connected', [_uid, _name]] call EPOCH_fnc_server_hiveLog; +}]; + +addMissionEventHandler ["HandleDisconnect", {_this call EPOCH_server_onPlayerDisconnect}]; + +diag_log "Epoch: Setup Side Settings"; +//set side status +_SideHQ1 = createCenter resistance; +_SideHQ2 = createCenter east; +_SideHQ3 = createCenter west; +RESISTANCE setFriend [WEST, 0]; +WEST setFriend [RESISTANCE, 0]; +RESISTANCE setFriend [EAST, 0]; +EAST setFriend [RESISTANCE, 0]; +// friendly +EAST setFriend[WEST, 1]; +WEST setFriend[EAST, 1]; + +diag_log format["Epoch: Setup World Settings for %1",worldName]; +//World Settings +_worldSize = worldSize; +_epochWorldPath = _epochConfig >> worldName; +if (isClass _epochWorldPath) then { + _configSize = getNumber(_epochWorldPath >> "worldSize"); + if (_configSize > 0) then { + _worldSize = _configSize; + }; +}; +epoch_centerMarkerPosition = getMarkerPos "center"; +if (epoch_centerMarkerPosition isEqualTo [0,0,0]) then { + diag_log "Epoch: Error cannot find center marker! - default used instead"; + epoch_centerMarkerPosition = [worldSize / 2, worldsize / 2, 0]; +}; +EPOCH_dynamicVehicleArea = _worldSize / 2; + +// custom radio channels +EPOCH_customChannels = []; +for "_i" from 0 to 9 do { + _radio = configfile >> "CfgWeapons" >> format["EpochRadio%1", _i]; + _channelTXT = getText(_radio >> "displayName"); + // _channelNumber = getNumber(_radio >> "channelID"); + _channelColor = getArray(_radio >> "channelColor"); + _index = radioChannelCreate[_channelColor, _channelTXT, "%UNIT_NAME", []]; + EPOCH_customChannels pushBack _index; +}; + +UseCustomTextures = ([_serverSettingsConfig, "UseCustomTextures", false] call EPOCH_fnc_returnConfigEntry); +Epoch_UseLootHelper = ([_serverSettingsConfig, "UseLootHelper", false] call EPOCH_fnc_returnConfigEntry); + +//Execute Server Functions +diag_log "Epoch: Loading buildings"; +EPOCH_BuildingSlotsLimit call EPOCH_server_loadBuildings; + +diag_log "Epoch: Loading teleports and static props"; +call EPOCH_server_createTeleport; + +diag_log "Epoch: Loading NPC traders"; +EPOCH_Traders = []; +EPOCH_NPCSlotsLimit call EPOCH_server_loadTraders; + +diag_log "Epoch: Spawning NPC traders"; +call EPOCH_server_spawnTraders; +publicvariable "EPOCH_Traders"; + +if (([_serverSettingsConfig, "ReplaceCarService", false] call EPOCH_fnc_returnConfigEntry)) then { + { + private _shop = "paintshop" createvehicle (getpos _x); + _shop setposatl ((getposatl _x) vectorAdd [0,0,0.1]); + _shop setVectorDirAndUp [VectorDir _x, VectorUp _x]; + _x HideobjectGlobal true; + } foreach (epoch_centerMarkerPosition nearObjects ["Land_CarService_F", EPOCH_dynamicVehicleArea]); +}; +if (([_serverSettingsConfig, "PaintShopIcons", false] call EPOCH_fnc_returnConfigEntry)) then { + { + _markers = ["PaintGarage", (getpos _x)] call EPOCH_server_createGlobalMarkerSet; + } foreach (allmissionobjects "paintshop"); +}; + +diag_log "Epoch: Loading vehicles"; +// Vehicle slot limit set to total of all allowed limits +_allowedVehicleIndex = if (EPOCH_modCUPVehiclesEnabled) then {if (EPOCH_mod_madArma_Enabled) then {3} else {1}} else {if (EPOCH_mod_madArma_Enabled) then {2} else {0}}; +_allowedVehicleListName = ["allowedVehiclesList","allowedVehiclesList_CUP","allowedVehiclesList_MAD","allowedVehiclesList_MADCUP"] select _allowedVehicleIndex; +if !(EPOCH_forcedVehicleSpawnTable isEqualTo "") then { + _allowedVehicleListName = EPOCH_forcedVehicleSpawnTable; +}; +// do something here + +_allowedVehiclesList = getArray(_epochConfig >> worldName >> _allowedVehicleListName); +_vehicleSlotLimit = 0; +{_vehicleSlotLimit = _vehicleSlotLimit + (_x select 1)} forEach _allowedVehiclesList; +_ReservedVehSlots = [_serverSettingsConfig, "ReservedVehSlots", 50] call EPOCH_fnc_returnConfigEntry; +_vehicleSlotLimit = _vehicleSlotLimit + _ReservedVehSlots; +if (EPOCH_useOldLoadVehicles) then { + _vehicleSlotLimit call EPOCH_load_vehicles_old; +} else { + _vehicleSlotLimit call EPOCH_load_vehicles; +}; +diag_log "Epoch: Spawning vehicles"; +_allowedVehiclesListArray = []; +{ + _x params ["_vehClass","_velimit"]; + _vehicleCount = {(_x getvariable ["VEHICLE_BaseClass",typeOf _x]) == _vehClass} count vehicles; + + // Load how many of this vehicle are in stock at any trader. + _indexStock = EPOCH_traderStoredVehicles find _vehClass; + if (_indexStock != -1) then { + _existingStock = EPOCH_traderStoredVehiclesCnt select _indexStock; + _vehicleCount = _vehicleCount + _existingStock; + }; + + for "_i" from 1 to (_velimit-_vehicleCount) do { + _allowedVehiclesListArray pushBack _vehClass; + }; +} forEach _allowedVehiclesList; +[_allowedVehiclesListArray] call EPOCH_spawn_vehicles; + +diag_log "Epoch: Loading storage"; +EPOCH_StorageSlotsLimit call EPOCH_load_storage; + +diag_log "Epoch: Loading static loot"; +call EPOCH_server_spawnBoatLoot; + +[] execFSM "\epoch_server\system\server_monitor.fsm"; + +// Setting Server Date and Time +_dateChanged = false; +_date = date; + +_staticDateTime = [_serverSettingsConfig, "StaticDateTime", []] call EPOCH_fnc_returnConfigEntry; +_timeDifference = [_serverSettingsConfig, "timeDifference", 0] call EPOCH_fnc_returnConfigEntry; + +if (_staticDateTime isEqualto []) then { + _date = Epoch_ServerRealtime; + _date set[0, (_date select 0) + 21]; + _date set[3, (_date select 3) + _timeDifference]; + _dateChanged = true; +} else { + { + if (_x != 0) then { + _date set [_forEachIndex, _x]; + _dateChanged = true; + }; + }forEach _staticDateTime; +}; +if (_dateChanged) then { + setDate _date; +/* + //add 1 min to be 100% correct + _date set [4, (_date select 4) + 1]; + _date spawn { + uiSleep 60; + setDate _this; + }; +*/ +}; + +_config = 'CfgServicePoint' call EPOCH_returnConfig; +_servicepoints = getArray (_config >> worldname >> 'ServicePoints'); +{ + _pos = _x; + _markertxt = "Service Point"; + if (count _x > 3) then { + _pos = _x select 0; + if ((_x select 3) isequaltype "") then { + _markertxt = _x select 3; + }; + }; + if !(_markertxt isequalto "") then { + _markers = ["ServicePoint", _pos,_markertxt] call EPOCH_server_createGlobalMarkerSet; + if !(surfaceiswater _pos) then { + "Land_HelipadCircle_F" createvehicle _pos; + }; + }; +} forEach _ServicePoints; + +// Remove Auto-Refuel from all maps +if ([_serverSettingsConfig, "disableAutoRefuel", false] call EPOCH_fnc_returnConfigEntry) then { + // get all fuel source objects on the map (Note: this maybe slow consider refactor with another command) + _staticFuelSources = ((epoch_centerMarkerPosition nearObjects ['Building',EPOCH_dynamicVehicleArea]) select {getFuelCargo _x > 0}); + // globalize all fuel sources + missionNamespace setVariable ["EPOCH_staticFuelSources", _staticFuelSources, true]; +} +else { + // Remove Auto-Refuel in PlotPole-Range + if ([_serverSettingsConfig, "disableFuelNearPlots", true] call EPOCH_fnc_returnConfigEntry) then { + _staticFuelSources = []; + { + { + _staticFuelSources pushback _x; + } foreach (((_x nearObjects ['Building',call EPOCH_MaxJammerRange]) select {getFuelCargo _x > 0})); + + } foreach (missionnamespace getvariable ["Epoch_Plotpoles",call {_allplots = [];{_allplots append (allmissionobjects _x)} foreach (call EPOCH_JammerClasses);_allplots}]); + missionNamespace setVariable ["EPOCH_staticFuelSources", _staticFuelSources, true]; + }; +}; + +// set time multiplier +setTimeMultiplier ([_serverSettingsConfig, "timeMultiplier", 1] call EPOCH_fnc_returnConfigEntry); + +// globalize tax rate +missionNamespace setVariable ["EPOCH_taxRate", [_serverSettingsConfig, "taxRate", 0.1] call EPOCH_fnc_returnConfigEntry, true]; + +// pick random radioactive locations +_radioactiveLocations = getArray(_epochConfig >> worldName >> "radioactiveLocations"); +_blacklist = (call EPOCH_JammerClasses) + (getArray(_epochConfig >> worldName >> "radioactiveLocBLObjects")); +_distance = getNumber(_epochConfig >> worldName >> "radioactiveLocBLDistance"); +_radioactiveLocationsTmp = []; +if !(_radioactiveLocations isEqualTo []) then { + private _locations = nearestLocations[epoch_centerMarkerPosition, _radioactiveLocations, EPOCH_dynamicVehicleArea]; + if !(_locations isEqualTo []) then { + { + _locPOS = locationPosition _x; + _nearBLObj = nearestObjects [_locPOS, _blacklist, _distance]; + if!(_nearBLObj isEqualTo [])then{_locations = _locations - [_x]}; + }forEach _locations; + for "_i" from 0 to ((getNumber(_epochConfig >> worldName >> "radioactiveLocationsCount"))-1) do + { + if (_locations isEqualTo []) exitWith {}; + private _selectedLoc = selectRandom _locations; + _locations = _locations - [_selectedLoc]; + _locSize = size _selectedLoc; + _radius = sqrt((_locSize select 0)^2 + (_locSize select 1)^2); + _locName = (str(_selectedLoc)) splitString " "; + _radioactiveLocationsTmp pushBack [_locName,[random 666,_radius]]; + private _position = locationPosition _selectedLoc; + _markers = ["Radiation", _position] call EPOCH_server_createGlobalMarkerSet; + }; + }; + _customRadioactiveLocations = getArray(_epochConfig >> worldName >> "customRadioactiveLocations"); + if !(_customRadioactiveLocations isEqualTo []) then { + { + _x params [["_position",[0,0,0]],["_radius",0],["_className",""] ]; + if ((!(_position isEqualTo [0,0,0]) && !(_radius isEqualTo 0) && !(_className isEqualTo "")) && ((nearestObjects [_position, _blacklist, _distance]) isEqualTo [])) then{ + _object = (_x select 2) createVehicle _position; + _object setVariable ["EPOCH_Rads",[random 666,(_x select 1)],true]; + _markers = ["Radiation", _position] call EPOCH_server_createGlobalMarkerSet; + _object setVariable ["EPOCH_MarkerSet",_markers,true]; + }else{ + diag_log "EPOCHDebug:Check your custom radioactive locations for errors or blacklisted locations"; + }; + }forEach _customRadioactiveLocations; + }; +}; +missionNamespace setVariable ["EPOCH_radioactiveLocations", _radioactiveLocationsTmp, true]; + +// spawn bunkers, just in VR for now. +if (worldName == "VR") then { + _debug = true; + _debugLocation = getMarkerPos "respawn_west"; + _memoryPoints = ["one","two","three","four"]; + _bunkerCounter = 0; + _newBunkerCounter = 0; + + // size + _maxRows = 30; + _maxColumns = 30; + + _rngChance = 0; // Lower this to spawn more positions + _scriptHiveKey = "EPOCH:DynamicBunker"; // do not change + + _bunkerLocationsKey = format ["%1:%2", _instanceID, worldname]; // change instance id to force a new map to be generated. + _response = [_scriptHiveKey, _bunkerLocationsKey] call EPOCH_fnc_server_hiveGETRANGE; + _response params [["_status",0],["_data",[]] ]; + + _firstBunker = objNull; + _bunkerLocations = []; + + // check for proper return and data type + if (_status == 1 && _data isEqualType [] && !(_data isEqualTo [])) then { + _bunkerLocations = _data; + + // spawn cached bunkers + { + if (_x isEqualType [] && !(_x isEqualTo [])) then { + _x params ["_selectedBunker", "_posWorld", ["_memoryPointsStatus",[]] ]; + _object = createSimpleObject [_selectedBunker, _posWorld]; + if (isNull _firstBunker) then {_firstBunker = _object;}; + { + _object animate [_x,(_memoryPointsStatus param [_forEachIndex,1]),true]; + } forEach _memoryPoints; + _bunkerCounter = _bunkerCounter + 1; + }; + } forEach _bunkerLocations; + + } else { + + // generate new bunker + _size = 13.08; + + _allBunkers = []; + _newBunkerCounter = 0; + // Generate Seed + _seed = random 999999; + diag_log format["Generating bunker with seed: %1",_seed]; + _location = _debugLocation; + _originalLocation = +_location; + _valuesAndWeights = [ + "bunker_epoch", 0.2, // empty bunker + "bunker_epoch_01", 0.1, // tall concrete maze 1 + "bunker_epoch_02", 0.05, // Epoch Corp storage + // "bunker_epoch_03", 0.01, // save for xmas + "bunker_epoch_04", 0.05, // generator room + // "bunker_epoch_05", 0.01, // invisible walls + "bunker_epoch_06", 0.05, // jail + "bunker_epoch_07", 0.05, // clone chamber + "bunker_epoch_08", 0.01, // epoch celebration room + "bunker_epoch_09", 0.05, // tallest concrete walls + "bunker_epoch_10", 0.05, // knee high concrete walls + "bunker_epoch_11", 0.1, // sewer + "bunker_epoch_12", 0.05, // concrete mid wall + "bunker_epoch_13", 0.05, // tall concrete maze 2 + "bunker_epoch_14", 0.08, // odd concrete walls + "bunker_epoch_15", 0.05 // concrete mid wall maze + ]; + _rowCount = 0; + _colCount = 0; + //spawn x number of connected bunkers. + while {true} do { + if (_colCount > _maxColumns) exitWith {}; + _rng = _seed random [_location select 0,_location select 1]; + if (_rng > _rngChance) then { + _selectedBunker = selectRandomWeighted _valuesAndWeights; + _object = createVehicle [_selectedBunker, _location, [], 0, "CAN_COLLIDE"]; + if (isNull _firstBunker) then {_firstBunker = _object;}; + _allBunkers pushBack _object; + _newBunkerCounter = _newBunkerCounter + 1; + }; + _location set [0,(_location select 0) + _size]; + _rowCount = _rowCount + 1; + if (_rowCount >= _maxRows) then { + _rngChance = 0.3; + _colCount = _colCount + 1; + _rowCount = 0; + _location set [0,_originalLocation select 0]; + _location set [1,(_location select 1) + _size]; + }; + }; + _score = 0; + { + _veh = _x; + _animationStates = []; + { + _pOffset = _veh selectionPosition _x; + if !(_pOffset isEqualTo [0,0,0]) then { + _loc1 = _veh modelToWorldVisual _pOffset; + _list = _loc1 nearObjects ["bunker_epoch", 1]; + if !(_list isEqualTo []) then { + _score = _score + 1; + _animationStates pushBack 0; + _veh animate [_x,0]; + } else { + _animationStates pushBack 1; + _veh animate [_x,1]; + }; + }; + } forEach _memoryPoints; + _modelInfo = getModelInfo _veh; + _bunkerLocations pushBack [_modelInfo select 1, getPosWorld _veh, _animationStates, _score]; + } forEach _allBunkers; + + // save to DB + [_scriptHiveKey, _bunkerLocationsKey, _bunkerLocations] call EPOCH_fnc_server_hiveSET; + }; + + // move respawn point into first bunker. + if (!(isNull _firstBunker) && {_firstBunker distance _debugLocation > 1}) then { + deleteMarker "respawn_west"; + createMarker ["respawn_west", getposATL _firstBunker]; + }; + + if (_debug) then { + diag_log format["DEBUG: Spawned %1 Existing Bunker",_bunkerCounter]; + if (_newBunkerCounter > 0) then { + diag_log format["DEBUG: Spawned %1 New Bunker.",_newBunkerCounter]; + }; + }; +}; + + + +// start accepting logins +missionNamespace setVariable ["EPOCH_SERVER_READY", true, true]; + +// spawn a single sapper to preload +_sapper = createAgent ["Epoch_Sapper_F", [0,0,0], [], 0, "CAN_COLLIDE"]; +_sapper setDamage 1; +_sapper enableSimulationGlobal false; + +diag_log format ["Epoch: Server Start Complete: %1 seconds",diag_tickTime-_startTime]; + +// unit test start +if (EPOCH_enableUnitTestOnStart isEqualTo 1) then { + call EPOCH_fnc_server_hiveUnitTest; + EPOCH_enableUnitTestOnStart = nil; +}; diff --git a/Server/@epochhive/addons/epoch_server/init/server_securityfunctions.sqf b/Server/@epochhive/addons/epoch_server/init/server_securityfunctions.sqf new file mode 100644 index 0000000..3ead123 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/init/server_securityfunctions.sqf @@ -0,0 +1,2296 @@ +/* + Authors: Aaron Clark - EpochMod.com + Niklas Wagner - skaronator.com + Contributors: + + Description: + Arma 3 Epoch ANTIHACK/ADMINTOOL + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/init/server_securityfunctions.sqf +*/ +private ["_skn_unlock","_skn_adminMenuUnlock","_code","_functionName","_remoteExecClientStr","_onLoad","_onUnload","_skn_blockedSpawnMenuUID","_temp","_skn_adminMenuOwner","_case","_skn_adminMenuHigh","_skn_adminMenuLow","_config","_debugClass","_cfg_systemDebug","_skn_systemDebug1","_skn_systemDebug2","_skn_systemDebug3","_skn_systemDebug4","_skn_systemDebug5","_cfg_remoteExecClient","_remoteExecClient_NAMES","_cfg_limits","_skn_playerCryptoLimit","_cfg_learning","_skn_trustedUsers","_str_learningModeCheck","_cfg_quality","_skn_perfMode","_skn_viewDistance","_skn_viewDistanceObects","_skn_terrainGrid","_cfg_blacklistConfig","_skn_badDisplaysArray","_skn_badAnimations","_cfg_variablesConfig","_skn_badVarCheckArray","_skn_nilVarCheckArray","_skn_commandMenuArray","_skn_addEHConfig","_skn_displayAddEHChecks","_skn_addEHArray","_serverSettingsConfig","_skn_enableAntihack","_skn_check_addons","_checkFiles","_skn_check_files","_skn_whitelist_cfgPatches","_skn_adminsOwner","_skn_adminsHigh","_skn_adminsLow","_banReasons","_skn_banReason","_antihack_banDuration","_epoch_banReasons","_kickReasons","_epoch_kickReason","_epoch_kickReasons","_ownerSettings","_skn_adminMenuOwnerSetting","_adminSettings","_skn_adminMenuHighSetting","_lowSettings","_skn_adminMenuLowSetting","_skn_adminMenuMenuKey","_skn_adminMenuInfrontTeleport","_skn_adminMenuJumpUp","_skn_adminMenuBanReasons","_skn_adminMenuCryproCfg","_skn_cfgPatchesCfg","_skn_PVSPrefix","_rndVAR_Count","_skn_rndVA","_skn_PVC_INDEX","_skn_AH_rndVarVehicle","_skn_AH_rndVarPlayer","_skn_AH_rndVarAHInitCheck","_skn_AH_Init","_skn_AH_Code","_skn_AH_Code_CA","_skn_AH_Code_CB","_skn_AH_Ban","_skn_AH_rndVar","_skn_doKickBan","_skn_pv_hackerLog","_skn_pv_adminLog","_skn_server_adminLog","_skn_doAdminRequest","_skn_doAdminLog","_skn_doTokenAuth","_skn_antiTeleportPVC","_skn_Admin_Code","_skn_Admin_Init","_skn_adminRequest_PVC","_skn_adminLog_PVC","_skn_adminLog","_skn_AdminKeyDown","_skn_AdminMenu_Init","_skn_getCtrl","_skn_fnc_Spec","_skn_fnc_Zoom","_skn_Update_AdminButtons","_skn_mainMenuCfg","_skn_FillMainMenu","_skn_FillPlayerMenu","_skn_switchMainMenu","_skn_dbClickMainMenu","_skn_spawnMenu","_skn_spawnSpawnMenu","_skn_removespawnMenu","_skn_fillSpawnMenu","_skn_hackerLog","_skn_switchTable","_skn_daynight","_skn_customBanreason","_skn_flipVehicle","_skn_freeCam","_skn_delete","_skn_deleteMenu","_skn_deleteNow","_skn_doBan","_skn_mapTeleport","_skn_old_esp","_skn_hideAdmin","_skn_old_espMap","_skn_infrontTP","_skn_jumpUp","_skn_esp","_skn_godMode","_skn_repairVehicle","_skn_spawnLoot","_skn_mapLootArray","_skn_mapAnimalArray","_skn_mapAIArray","_skn_mapBasesArray","_skn_tg_Spec","_skn_tg_sortOrder","_skn_tg_toggle","_skn_tg_BanPlayer","_skn_tg_delete","_skn_tg_mapTeleport","_skn_tg_spawnTyp","_skn_tg_limitSpawn","_skn_tg_old_espMap","_skn_tg_old_esp","_skn_tg_hideAdmin","_skn_tg_infrontTP","_skn_tg_jumpUp","_skn_tg_godMode","_skn_tg_map_player","_skn_tg_map_corpse","_skn_tg_map_loot","_skn_tg_map_animals","_skn_tg_map_vehicle","_skn_tg_map_ai","_skn_tg_map_trader","_skn_tg_map_basebuilding","_skn_t1","_skn_t2","_skn_t3","_skn_t4","_skn_t5","_skn_AH_rndVarAHInitCheckToken","_stringInArray","_displaysArray","_displays","_cfg_displayArray","_skn_adminUIDArray","_skn_adminNAMEArray","_skn_tempuid","_skn_spawnPointCenter","_centerDistance","_sknBanANDSleep","_sknBanANDSleepQuick","_sknPatches","_skn_addonCheckCode","_skn_fileCheckCode","_sknAddActionCheck","_skn_code_ban","_skn_code_init","_skn_code_antihack","_skn_admincode","_skn_admininit","_configs"]; + +_config = (configFile >> "CfgSecConf"); +if (isClass _config) then {diag_log "Loading config..."}; + +_debugClass = if ([_config,"debug",false] call EPOCH_fnc_returnConfigEntry) then { "DebugActive" } else { "DebugDisabled" }; + +_cfg_systemDebug = (_config >> _debugClass); +_skn_systemDebug1 = getText(_cfg_systemDebug >> "systemChat1"); +_skn_systemDebug2 = getText(_cfg_systemDebug >> "systemChat2"); +_skn_systemDebug3 = getText(_cfg_systemDebug >> "systemChat3"); +_skn_systemDebug4 = getText(_cfg_systemDebug >> "systemChat4"); +_skn_systemDebug5 = getText(_cfg_systemDebug >> "systemChat5"); + +_cfg_remoteExecClient = (_config >> "remoteExecClient"); +_remoteExecClient_NAMES = [_cfg_remoteExecClient, "functions", []] call EPOCH_fnc_returnConfigEntry; + +_cfg_limits = (_config >> "limits"); +_skn_playerCryptoLimit = [_cfg_limits, "playerCrypto", 250000] call EPOCH_fnc_returnConfigEntry; + +_cfg_learning = (_config >> "learning"); +_skn_trustedUsers = [_cfg_learning,"trustedUsers",[]] call EPOCH_fnc_returnConfigEntry; +_str_learningModeCheck = if ([_cfg_learning,"mode",true] call EPOCH_fnc_returnConfigEntry) then{"((getPlayerUID _player) in "+str _skn_trustedUsers+")"} else {"true"}; + +_cfg_quality = (_config >> "forcedQuality"); +_skn_perfMode = getText(_cfg_quality >> "mode"); +_skn_viewDistance = [_cfg_quality >> _skn_perfMode, "viewDistance", 2500] call EPOCH_fnc_returnConfigEntry; +_skn_viewDistanceObects = [_cfg_quality >> _skn_perfMode, "viewDistanceObects", 2000] call EPOCH_fnc_returnConfigEntry; +_skn_terrainGrid = [_cfg_quality >> _skn_perfMode, "terrainGrid", 10] call EPOCH_fnc_returnConfigEntry; + +_cfg_blacklistConfig = (_config >> "blacklist"); +_skn_badDisplaysArray = [_cfg_blacklistConfig, "badDisplays", [-1337,17,19,30,32,45,59,69,71,125,132,155,156,157,162,165,166,167,312,1320,1321,2727,2928,2929,316000]] call EPOCH_fnc_returnConfigEntry; +_skn_badAnimations = [_cfg_blacklistConfig, "animations", ['AmovPercMstpSnonWnonDnon_exerciseKata','AmovPercMstpSnonWnonDnon_exercisePushup','GestureSpasm1','GestureSpasm4','GestureNod']] call EPOCH_fnc_returnConfigEntry; + +_cfg_variablesConfig = (_config >> "variables"); +_skn_badVarCheckArray = [_cfg_variablesConfig, "badVars", ['EPOCH_GMODE','ESP_map','ESP_mainMap','ESP_adminMap','AntiAntiAntiAntiHax','fnc_usec_damageHandler','fnc_usec_unconscious','VAGINA_secret','yolo','VERSION','life_fnc_handleDamage','EPOCH_spawnVehicle_PVS','CLASS911_Menu','nuke_vars','JJMMEE_INIT_MENU','PLAYERON','PLAYERNEXT2','ALTISLIFEON','LY_Menu','PLAY','LY_SwaggerLikeUs','BIS_fnc_dbg_reminder_value','BIS_fnc_dbg_reminder']] call EPOCH_fnc_returnConfigEntry; +_skn_nilVarCheckArray = [_cfg_variablesConfig, "nilVars", ['EPOCH_antiWallCount','EPOCH_playerEnergy','EPOCH_playerHunger','EPOCH_playerStamina','EPOCH_playerCrypto','EPOCH_target','EPOCH_ESP_TARGETS','EPOCH_ESPMAP_TARGETS','EPOCH_taxRate','EPOCH_ESP_VEHICLEPLAYER','EPOCH_ESP_PLAYER','EPOCH_ESP_VEHICLES']] call EPOCH_fnc_returnConfigEntry; +_skn_commandMenuArray = [(_config >> "commandMenu"), "menus",['','RscMenuEngage','RscSelectTeam','RscTeam','RscMenuTeam','RscMoveHigh','#GETIN','#RscStatus','#WATCH0','RscCombatMode','RscMenuReply','RscCallSupport','#CUSTOM_RADIO','#User:BIS_fnc_addCommMenuItem_menu','RscRadio','RscReply','#ACTION','RscMenuFormations','#WATCH','RscGroupRootMenu','RscMainMenu','RscMenuMove','RscWatchDir','RscWatchMoveDir','#User:BIS_Menu_GroupCommunication','RscMenuStatus','RscFormations']] call EPOCH_fnc_returnConfigEntry; + +_skn_addEHConfig = (_config >> "addEventHandler"); +_skn_displayAddEHChecks = [_skn_addEHConfig, "checks",[]] call EPOCH_fnc_returnConfigEntry; + +_skn_addEHArray = []; +{ + _code = ["CfgEpochClient", _x, ""] call EPOCH_fnc_returnConfigEntryV2; + _skn_addEHArray pushBack [_x,_code,(_code != "")]; +} forEach _skn_displayAddEHChecks; + +_serverSettingsConfig = configFile >> "CfgEpochServer"; +_skn_enableAntihack = [_serverSettingsConfig, "antihack_Enabled", true] call EPOCH_fnc_returnConfigEntry; +_skn_check_addons = [_serverSettingsConfig, "antihack_cfgPatchesCheck", true] call EPOCH_fnc_returnConfigEntry; +_checkFiles = [ + ["epoch_code\compile\setup\EPOCH_clientInit.sqf", "EPOCH_clientInit"], + ["epoch_code\compile\EPOCH_onEachFrame.sqf", "EPOCH_onEachFrame"], + ["epoch_code\compile\setup\EPOCH_client_rejectPlayer.sqf", "EPOCH_client_rejectPlayer"], + ["epoch_code\compile\setup\EPOCH_clientRespawn.sqf", "EPOCH_clientRespawn"] +]; +_skn_check_files = [_serverSettingsConfig, "antihack_checkFilesNew", _checkFiles] call EPOCH_fnc_returnConfigEntry; + +_skn_whitelist_cfgPatches = [_serverSettingsConfig, "antihack_whitelistedCfgPatches", []] call EPOCH_fnc_returnConfigEntry; +_skn_adminsOwner = [_serverSettingsConfig, "adminMenu_Owner", []] call EPOCH_fnc_returnConfigEntry; +_skn_adminsHigh = [_serverSettingsConfig, "adminMenu_High", []] call EPOCH_fnc_returnConfigEntry; +_skn_adminsLow = [_serverSettingsConfig, "adminMenu_Low", []] call EPOCH_fnc_returnConfigEntry; +_banReasons = [ + "Mod mismatch, check that the mods you have enabled match server." +]; +_skn_banReason = [_serverSettingsConfig, "antihack_banReason", "EpochMod.com Autoban"] call EPOCH_fnc_returnConfigEntry; +_antihack_banDuration = [_serverSettingsConfig, "antihack_banDuration", 5] call EPOCH_fnc_returnConfigEntry; +_epoch_banReasons = [_serverSettingsConfig, "antihack_banReasons", _banReasons] call EPOCH_fnc_returnConfigEntry; +_kickReasons = [ + "Mod mismatch, check that mods enabled match server." +]; +_epoch_kickReason = [_serverSettingsConfig, "antihack_kickReason", "EpochMod.com Autokick"] call EPOCH_fnc_returnConfigEntry; +_epoch_kickReasons = [_serverSettingsConfig, "antihack_kickReasons", _kickReasons] call EPOCH_fnc_returnConfigEntry; +_ownerSettings = ["ESP-PLAYER","ESP-VEHICLE","ESP-LOOT","OLD-ESP","OLD-MAP","PLAYER-TELEPORT","MAP-TELEPORT","INFRONT-TELEPORT","MAP-PLAYER","MAP-CORPSE","MAP-LOOT","MAP-VEHICLE","MAP-AI","MAP-BASEBUILDING","TARGET-HEAL","TARGET-AMMO","TARGET-KILL","TARGET-CRYPTO","TARGET-VEHICLEREPAIR","VEHICLEFLIP","BANPANNEL","SPAWN-MENU","FREE-CAM","INVISIBLE","SPAWNLOOT","GODMODE","HEAL","VEHICLEREPAIR"]; +_skn_adminMenuOwnerSetting = [_serverSettingsConfig, "adminMenu_OwnerSetting", _ownerSettings] call EPOCH_fnc_returnConfigEntry; +_adminSettings = ["PLAYER-TELEPORT","MAP-TELEPORT","TARGET-HEAL","TARGET-AMMO","TARGET-KILL","VEHICLEFLIP","BANPANNEL"]; +_skn_adminMenuHighSetting = [_serverSettingsConfig, "adminMenu_HighSetting", _adminSettings] call EPOCH_fnc_returnConfigEntry; +_lowSettings = ["PLAYER-TELEPORT","MAP-TELEPORT","TARGET-HEAL"]; +_skn_adminMenuLowSetting = [_serverSettingsConfig, "adminMenu_LowSetting", _lowSettings] call EPOCH_fnc_returnConfigEntry; +_skn_adminMenuMenuKey = [_serverSettingsConfig, "adminMenu_menuKey", 0x3B] call EPOCH_fnc_returnConfigEntry; +_skn_adminMenuInfrontTeleport = [_serverSettingsConfig, "adminMenu_infrontTeleport", 0x06] call EPOCH_fnc_returnConfigEntry; +_skn_adminMenuJumpUp = [_serverSettingsConfig, "adminMenu_JumpUp", 0x05] call EPOCH_fnc_returnConfigEntry; +_skn_adminMenuUnlock = [_serverSettingsConfig, "adminMenu_unlock", 0x08] call EPOCH_fnc_returnConfigEntry; +_skn_adminMenuBanReasons = [_serverSettingsConfig, "adminMenu_BanReasons", ["Traderzone","Hacking","Glitch","Combat Log"]] call EPOCH_fnc_returnConfigEntry; +_skn_adminMenuCryproCfg = [_serverSettingsConfig, "adminMenu_cryptoCfg", [2500,1000,500,100,50,-1000]] call EPOCH_fnc_returnConfigEntry; +_skn_cfgPatchesCfg = [_serverSettingsConfig, "antihack_cfgPatchesMode", [2]] call EPOCH_fnc_returnConfigEntry; +_skn_PVSPrefix = [_serverSettingsConfig, "antihack_PVSPrefix", "EPAH_"] call EPOCH_fnc_returnConfigEntry; + +// build array with X number of random strings +_rndVAR_Count = 99; // 86 = number of (_skn_rndVA deleteAt 0) +_skn_rndVA = parseSimpleArray ('epochserver' callExtension format['810|%1', _rndVAR_Count]); + +EPOCH_hiveWhitelistVarsArray = []; + +// For client PVC +_skn_PVC_INDEX = _skn_rndVA deleteAt 0; +// [["function", _transferBankBalance],_transferTarget] +EPOCH_sendRemoteExecClient = compileFinal (" + params ['_first','_target']; + _first params ['_functionName','_data']; + [_functionName, _data] remoteExec ['EPOCH_"+_skn_PVC_INDEX+"',_target]; +"); + +// build dynamic RE-C functions +_remoteExecClientStr = "params [""_function"",""_data""];switch (_function) do {"; +{ + _functionName = format ["EPOCH_dyn_%1",_x]; + missionNamespace setVariable [_functionName, compileFinal ([_cfg_remoteExecClient, _x, ""] call EPOCH_fnc_returnConfigEntry), true]; + _remoteExecClientStr = _remoteExecClientStr + format['case "%1": {_data call %2};',_x,_functionName]; +} forEach _remoteExecClient_NAMES; +_remoteExecClientStr = _remoteExecClientStr + "};"; + +// broadcast main RE-C function +missionNamespace setVariable [format["EPOCH_%1",_skn_PVC_INDEX], compileFinal _remoteExecClientStr, true]; + +// diag_log format["DEBUG: _remoteExecClientStr %1",_remoteExecClientStr]; + +_skn_AH_rndVarVehicle = _skn_rndVA deleteAt 0; +_skn_AH_rndVarPlayer = _skn_rndVA deleteAt 0; + +EPOCH_server_getVToken = compileFinal ("_this getVariable ['"+_skn_AH_rndVarVehicle+"',false]"); +EPOCH_server_setVToken = compileFinal ("_this setVariable ['"+_skn_AH_rndVarVehicle+"',true];true"); +EPOCH_server_getPToken = compileFinal ("private['_ret','_var'];_ret = false;if ((_this select 0) isEqualType objNull)then{if (!isNull(_this select 0))then{_var=(_this select 0) getVariable '"+_skn_AH_rndVarPlayer+"';if (!isNil '_var') then {_ret= _var==(_this select 1)}}};if(!_ret)then{['kick',(_this select 0),'Token Check Failed'] call EPOCH_serverCommand};_ret"); +EPOCH_server_setPToken = compileFinal ("private '_var';_var = 'epochserver' callExtension '810';_this setVariable ['"+_skn_AH_rndVarPlayer+"',_var];_var"); + +if (!_skn_enableAntihack) exitWith { + EPOCH_server_pushPlayer = compileFinal (" + params ['_playerNetID','_playerUID','_C_SET','_fsmHandle','_player']; + _C_SET pushBack ''; + [_fsmHandle,['_C_SET', _C_SET]] remoteExecCall ['setFSMVariable', _player]; + "); + EPOCH_server_isPAdmin = compileFinal ("false"); + EPOCH_server_Authed = compileFinal ("true"); + EPOCH_server_disconnect = compileFinal("true"); +}; + +// Check AH init code +_skn_AH_rndVarAHInitCheck = _skn_rndVA deleteAt 0; +// Init as array +call compile(_skn_AH_rndVarAHInitCheck+"=[];"); + +_skn_AH_Init = _skn_rndVA deleteAt 0; +_skn_AH_Code = _skn_rndVA deleteAt 0; +_skn_AH_Code_CA = _skn_rndVA deleteAt 0; +_skn_AH_Code_CB = _skn_rndVA deleteAt 0; +_skn_AH_Ban = _skn_rndVA deleteAt 0; +_skn_AH_rndVar = _skn_rndVA deleteAt 0; +_skn_doKickBan = _skn_PVSPrefix + (_skn_rndVA deleteAt 0); + +//ADMIN STUFF: +//PVC from SERVER: +_skn_pv_hackerLog = _skn_rndVA deleteAt 0; +_skn_pv_adminLog = _skn_rndVA deleteAt 0; +//Server Functions: +_skn_server_adminLog = _skn_rndVA deleteAt 0; + +//PVS from CLIENT: +_skn_doAdminRequest = _skn_PVSPrefix + (_skn_rndVA deleteAt 0); +_skn_doAdminLog = _skn_PVSPrefix + (_skn_rndVA deleteAt 0); +_skn_doTokenAuth = _skn_PVSPrefix + (_skn_rndVA deleteAt 0); +_skn_antiTeleportPVC = _skn_rndVA deleteAt 0; + +//ADMIN MENU CODE & INIT +_skn_Admin_Code = _skn_rndVA deleteAt 0; +_skn_Admin_Init = _skn_rndVA deleteAt 0; + +//ADMIN FUNCTIONS +_skn_adminRequest_PVC = _skn_rndVA deleteAt 0; +_skn_adminLog_PVC = _skn_rndVA deleteAt 0; +_skn_adminLog = _skn_rndVA deleteAt 0; +_skn_AdminKeyDown = _skn_rndVA deleteAt 0; +_skn_AdminMenu_Init = _skn_rndVA deleteAt 0; +_skn_getCtrl = _skn_rndVA deleteAt 0; +_skn_fnc_Spec = _skn_rndVA deleteAt 0; +_skn_fnc_Zoom = _skn_rndVA deleteAt 0; +_skn_Update_AdminButtons = _skn_rndVA deleteAt 0; +_skn_mainMenuCfg = _skn_rndVA deleteAt 0; +_skn_FillMainMenu = _skn_rndVA deleteAt 0; +_skn_FillPlayerMenu = _skn_rndVA deleteAt 0; +_skn_switchMainMenu = _skn_rndVA deleteAt 0; +_skn_dbClickMainMenu = _skn_rndVA deleteAt 0; +_skn_spawnMenu = _skn_rndVA deleteAt 0; +_skn_spawnSpawnMenu = _skn_rndVA deleteAt 0; +_skn_removespawnMenu = _skn_rndVA deleteAt 0; +_skn_fillSpawnMenu = _skn_rndVA deleteAt 0; +_skn_hackerLog = _skn_rndVA deleteAt 0; +_skn_switchTable = _skn_rndVA deleteAt 0; +_skn_daynight = _skn_rndVA deleteAt 0; +_skn_customBanreason = _skn_rndVA deleteAt 0; +_skn_flipVehicle = _skn_rndVA deleteAt 0; +_skn_freeCam = _skn_rndVA deleteAt 0; +_skn_delete = _skn_rndVA deleteAt 0; +_skn_deleteMenu = _skn_rndVA deleteAt 0; +_skn_deleteNow = _skn_rndVA deleteAt 0; +_skn_doBan = _skn_rndVA deleteAt 0; +_skn_mapTeleport = _skn_rndVA deleteAt 0; +_skn_old_esp = _skn_rndVA deleteAt 0; +_skn_hideAdmin = _skn_rndVA deleteAt 0; +_skn_old_espMap = _skn_rndVA deleteAt 0; +_skn_infrontTP = _skn_rndVA deleteAt 0; +_skn_jumpUp = _skn_rndVA deleteAt 0; +_skn_unlock = _skn_rndVA deleteAt 0; +_skn_esp = _skn_rndVA deleteAt 0; +_skn_godMode = _skn_rndVA deleteAt 0; +_skn_repairVehicle = _skn_rndVA deleteAt 0; +_skn_spawnLoot = _skn_rndVA deleteAt 0; +_skn_mapLootArray = _skn_rndVA deleteAt 0; +_skn_mapAnimalArray = _skn_rndVA deleteAt 0; +_skn_mapAIArray = _skn_rndVA deleteAt 0; +_skn_mapBasesArray = _skn_rndVA deleteAt 0; + +//ADMIN TOGGLE VARIABLES +_skn_tg_Spec = _skn_rndVA deleteAt 0; +_skn_tg_sortOrder = _skn_rndVA deleteAt 0; +_skn_tg_toggle = _skn_rndVA deleteAt 0; +_skn_tg_BanPlayer = _skn_rndVA deleteAt 0; +_skn_tg_delete = _skn_rndVA deleteAt 0; +_skn_tg_mapTeleport = _skn_rndVA deleteAt 0; +_skn_tg_spawnTyp = _skn_rndVA deleteAt 0; +_skn_tg_limitSpawn = _skn_rndVA deleteAt 0; +_skn_tg_old_espMap = _skn_rndVA deleteAt 0; +_skn_tg_old_esp = _skn_rndVA deleteAt 0; +_skn_tg_hideAdmin = _skn_rndVA deleteAt 0; +_skn_tg_infrontTP = _skn_rndVA deleteAt 0; +_skn_tg_jumpUp = _skn_rndVA deleteAt 0; +_skn_tg_godMode = _skn_rndVA deleteAt 0; + +_skn_tg_map_player = _skn_rndVA deleteAt 0; +_skn_tg_map_corpse = _skn_rndVA deleteAt 0; +_skn_tg_map_loot = _skn_rndVA deleteAt 0; +_skn_tg_map_animals = _skn_rndVA deleteAt 0; +_skn_tg_map_vehicle = _skn_rndVA deleteAt 0; +_skn_tg_map_ai = _skn_rndVA deleteAt 0; +_skn_tg_map_trader = _skn_rndVA deleteAt 0; +_skn_tg_map_basebuilding = _skn_rndVA deleteAt 0; + +_skn_t1 = _skn_rndVA deleteAt 0; +_skn_t2 = _skn_rndVA deleteAt 0; +_skn_t3 = _skn_rndVA deleteAt 0; +_skn_t4 = _skn_rndVA deleteAt 0; +_skn_t5 = _skn_rndVA deleteAt 0; + +_skn_AH_rndVarAHInitCheckToken = _skn_t1+_skn_t2+_skn_t3+_skn_t4+_skn_t5; +EPOCH_server_Authed = compileFinal("_this in "+_skn_AH_rndVarAHInitCheck); +EPOCH_server_disconnect = compileFinal(" + _ret = false; + _index = " +_skn_AH_rndVarAHInitCheck + " find _this; + if (_index != -1) then { + " +_skn_AH_rndVarAHInitCheck + " deleteAt _index; + _ret = true; + }; + _ret +"); + +EPOCH_server_movePlayer = compileFinal(" +params [['_playerObj',objNull,[objNull]],['_pos',[],[[]]]]; +if !(isNull _playerObj) then { + "+_skn_antiTeleportPVC+" = true; + (owner _playerObj) publicVariableClient '"+_skn_antiTeleportPVC+"'; + [format['Teleport %1 (%2) To Position: %3', name _playerObj, getPlayerUID _playerObj,_pos], 0] call "+_skn_server_adminLog+"; + [vehicle _playerObj,_pos] spawn { + uiSleep 0.5; + (_this select 0) setPosATL (_this select 1); + }; +}; +"); + +EPOCH_server_teleportCheck = compileFinal(" +params [['_playerObj',objNull,[objNull]],'_allow']; +if !(isNull _playerObj) then { + "+_skn_antiTeleportPVC+" = _allow; + (owner _playerObj) publicVariableClient '"+_skn_antiTeleportPVC+"'; +}; +"); + +_stringInArray = { + private "_ret"; + _ret = false; + {if (_x in _case)exitWith {_ret = true}}forEach _this; + _ret +}; + +_displaysArray = []; +{_displaysArray pushBack [_x,[],[]]} forEach ["RscDisplayMainMap","RscDisplayGetReady","RscDisplayInventory","RscDisplayLoadMission","RscDisplayInterrupt","RscDisplayOptionsVideo","RscDisplayOptions","RscDisplayAVTerminal","RscDisplayConfigure","RscDisplayConfigureAction","RscDisplayConfigureControllers","RscDisplayControlSchemes","RscDisplayCustomizeController","RscDisplayDebriefing","RscDisplayDiary","RscDisplayGameOptions","RscDisplayJoystickSchemes","RscDisplayLoading","RscDisplayMicSensitivityOptions","RscDisplayOptionsAudio","RscDisplayOptionsLayout","RscDisplayStart","RscDisplayVehicleMsgBox","RscDisplayInsertMarker"]; +_displays = [(_config >> "displayOnload"), "checkDisplays", _displaysArray] call EPOCH_fnc_returnConfigEntry; + +_cfg_displayArray = []; +{ + _onLoad = (getText(configFile >> (_x select 0) >> "onLoad")); + _onUnload = (getText(configFile >> (_x select 0) >> "onUnload")); + _onLoad = [_onLoad]; + _onUnload = [_onUnload]; + { + _onLoad pushBack _x; + } forEach(_x select 1); + { + _onUnload pushBack _x; + } forEach(_x select 2); + _cfg_displayArray pushBack[(_x select 0), _onLoad, _onUnload]; +}forEach _displays; + +_skn_adminUIDArray = []; +_skn_adminNAMEArray = []; +_skn_tempuid = []; +{ + _skn_adminUIDArray pushBack(_x select 0); + _skn_adminNAMEArray pushBack(_x select 1); + +} forEach _skn_adminsOwner; +_skn_adminsOwner = _skn_adminUIDArray; +{ + _skn_tempuid pushBack(_x select 0); + _skn_adminUIDArray pushBack(_x select 0); + _skn_adminNAMEArray pushBack(_x select 1); + +} forEach _skn_adminsHigh; +_skn_adminsHigh = _skn_tempuid; +_skn_tempuid = []; +{ + _skn_adminUIDArray pushBack(_x select 0); + _skn_tempuid pushBack(_x select 0); + _skn_adminNAMEArray pushBack(_x select 1); +} forEach _skn_adminsLow; +_skn_adminsLow = _skn_tempuid; +_skn_tempuid = nil; + +{_skn_adminMenuOwnerSetting set[_forEachIndex, toUpper _x]}forEach _skn_adminMenuOwnerSetting; +{_skn_adminMenuHighSetting set [_forEachIndex,toUpper _x]}forEach _skn_adminMenuHighSetting; +{_skn_adminMenuLowSetting set [_forEachIndex,toUpper _x]}forEach _skn_adminMenuLowSetting; + +_skn_adminMenuOwner = "[]"; +_skn_adminMenuHigh = "[]"; +_skn_adminMenuLow = "[]"; + +_skn_blockedSpawnMenuUID = []; +if !("SPAWN-MENU" in _skn_adminMenuHighSetting) then {_skn_blockedSpawnMenuUID = _skn_adminsHigh}; +if !("SPAWN-MENU" in _skn_adminMenuLowSetting) then {{_skn_blockedSpawnMenuUID pushBack _x}forEach _skn_adminsLow}; +if !("SPAWN-MENU" in _skn_adminMenuOwnerSetting) then {{_skn_blockedSpawnMenuUID pushBack _x}forEach _skn_adminsOwner}; + +_case = _skn_adminMenuOwnerSetting; //All Cfg for Owner Menu +for "_i" from 1 to 3 do { + _temp = "[['=============== MAIN MENU ===============',[],'','1',[]]"; + if (["PLAYER-TELEPORT","MAP-TELEPORT","INFRONT-TELEPORT"] call _stringInArray) then { + + if ("PLAYER-TELEPORT" in _case) then { + _temp = _temp + " + ,[' Player To Admin',[],{[101,_this select 1] call "+_skn_adminRequest_PVC+"},'4',[]] + ,[' Admin To Player', [], { [102, _this select 1] call "+_skn_adminRequest_PVC+" },'4',[]] + "; + }; + if ("INFRONT-TELEPORT" in _case) then { + _temp = _temp + " + ,[' In Front', [], {"+_skn_tg_infrontTP+" = !"+_skn_tg_infrontTP+"},'2',[]] + ,[' Jump Up', [], {"+_skn_tg_jumpUp+" = !"+_skn_tg_jumpUp+"},'2',[]] + "; + }; + if ("MAP-TELEPORT" in _case) then { + _temp = _temp + " + ,[' Alt+Click Map', [], {"+_skn_tg_mapTeleport+"=!"+_skn_tg_mapTeleport+";['Map to Teleport', if ("+_skn_tg_mapTeleport+") then[{2}, { 1 }]] call "+_skn_adminLog_PVC+" },'2',[]] + "; + }; + }; + if (["FREE-CAM","INVISIBLE"] call _stringInArray) then { + _temp = _temp + ",['Spectate', [],'','1',[]]"; + if ("MAP-TELEPORT" in _case) then { + _temp = _temp + " + ,[' Free Look Cam ', [], "+_skn_freeCam+",'0',[]] + "; + }; + if ("INVISIBLE" in _case) then { + _temp = _temp + " + ,[' Invisible Mode', [], "+_skn_hideAdmin+", '2', []] + "; + }; + }; + if (["MAP-PLAYER","MAP-CORPSE","MAP-LOOT","MAP-ANIMALS","MAP-VEHICLE","MAP-AI","MAP-BASEBUILDING"] call _stringInArray) then { + _temp = _temp + ",['Map Tools', [],'','1',[]]"; + if ("MAP-PLAYER" in _case) then { + _temp = _temp + " + ,[' Player Marker', [], {"+_skn_tg_map_player+" = !"+_skn_tg_map_player+"; ['Player MARKER',if ("+_skn_tg_map_player+") then [{2},{1}]] call "+_skn_adminLog_PVC+"}, '2', []] + "; + }; + if ("MAP-CORPSE" in _case) then { + _temp = _temp + " + ,[' Corpse Marker', [], {"+_skn_tg_map_corpse+" = !"+_skn_tg_map_corpse+"; ['Corpse MARKER',if ("+_skn_tg_map_corpse+") then [{2},{1}]] call "+_skn_adminLog_PVC+"}, '2', []] + "; + }; + if ("MAP-LOOT" in _case) then { + _temp = _temp + " + ,[' Loot Marker', [], {"+_skn_tg_map_loot+" = !"+_skn_tg_map_loot+"; if ("+_skn_tg_map_loot+") then {waitUntil {"+_skn_mapLootArray+" = nearestObjects[player,['WH_Loot', 'Animated_Loot'], 12500];uiSleep 10;!"+_skn_tg_map_loot+"};"+_skn_mapLootArray+" = []};['Loot MARKER',if ("+_skn_tg_map_loot+") then [{2},{1}]] call "+_skn_adminLog_PVC+"}, '2', []] + "; + }; + if ("MAP-ANIMALS" in _case) then { + _temp = _temp + " + ,[' Animal Marker', [], {"+_skn_tg_map_animals+" = !"+_skn_tg_map_animals+"; if ("+_skn_tg_map_animals+") then {waitUntil {"+_skn_mapAnimalArray+" = nearestObjects[player, ['Sheep_random_EPOCH','Goat_random_EPOCH','Snake_random_EPOCH','Snake2_random_EPOCH','Hen_random_EPOCH','Cock_random_EPOCH','Fin_random_EPOCH','Alsatian_random_EPOCH','Rabbit_EPOCH'], 12500];uiSleep 10;!"+_skn_tg_map_animals+"};"+_skn_mapAnimalArray+" = []};['Animal MARKER',if ("+_skn_tg_map_animals+") then [{2},{1}]] call "+_skn_adminLog_PVC+"}, '2', []] + "; + }; + if ("MAP-VEHICLE" in _case) then { + _temp = _temp + " + ,[' Vehicle Marker', [], {"+_skn_tg_map_vehicle+" = !"+_skn_tg_map_vehicle+"; ['Vehicle MARKER',if ("+_skn_tg_map_vehicle+") then [{2},{1}]] call "+_skn_adminLog_PVC+"}, '2', []] + "; + }; + if ("MAP-AI" in _case) then { + _temp = _temp + " + ,[' AI Marker', [], {"+_skn_tg_map_ai+" = !"+_skn_tg_map_ai+"; if ("+_skn_tg_map_ai+") then {waitUntil {"+_skn_mapAIArray+" = nearestObjects[player, ['I_Soldier_EPOCH','I_Soldier1_EPOCH','I_Soldier2_EPOCH','I_Soldier3_EPOCH','O_recon_F'], 12500];uiSleep 10;!"+_skn_tg_map_ai+"};"+_skn_mapAIArray+" = []}; ['AI MARKER',if ("+_skn_tg_map_ai+") then [{2},{1}]] call "+_skn_adminLog_PVC+"}, '2', []] + "; + }; + if ("MAP-TRADER" in _case) then { + _temp = _temp + " + ,[' Trader Marker', [], {"+_skn_tg_map_trader+" = !"+_skn_tg_map_trader+"; ['Trader MARKER',if ("+_skn_tg_map_trader+") then [{2},{1}]] call "+_skn_adminLog_PVC+"}, '2', []] + "; + }; + if ("MAP-BASEBUILDING" in _case) then { + _temp = _temp + " + ,[' Base Building Marker', [], {"+_skn_tg_map_basebuilding+" = !"+_skn_tg_map_basebuilding+"; if ("+_skn_tg_map_basebuilding+") then {waitUntil {"+_skn_mapBasesArray+" = (Epoch_PlotPoles - [objnull]);uiSleep 15;!"+_skn_tg_map_basebuilding+"};"+_skn_mapBasesArray+" = []}; ['Base Building MARKER',if ("+_skn_tg_map_basebuilding+") then [{2},{1}]] call "+_skn_adminLog_PVC+"}, '2', []] + "; + }; + }; + if (["ESP-PLAYER","ESP-LOOT","ESP-VEHICLE"] call _stringInArray) then { + _temp = _temp + ",['3D Tools', [],'','1',[]]"; + if ("ESP-PLAYER" in _case) then { + _temp = _temp + " + ,[' Player ESP', true, "+_skn_esp+", '2', []] + "; + }; + if ("ESP-VEHICLE" in _case) then { + _temp = _temp + " + ,[' Vehicle ESP', false, "+_skn_esp+", '2', []] + "; + }; + if ("ESP-LOOT" in _case) then { + _temp = _temp + " + ,[' Loot ESP (WIP)', [], '', '1', []] + "; + }; + }; + if (["OLD-ESP","OLD-MAP"] call _stringInArray) then { + _temp = _temp + ",['Old Visualisation Tools', [],'','1',[]]"; + if ("OLD-ESP" in _case) then { + _temp = _temp + ",[' 3D ESP', [], "+_skn_old_esp+", '2', []]"; + }; + if ("OLD-MAP" in _case) then { + _temp = _temp + ",[' MAP ESP', [], "+_skn_old_espMap+", '2', []]"; + }; + }; + if (["GODMODE","HEAL","VEHICLEREPAIR"] call _stringInArray) then { + _temp = _temp + ",['Self Menu', [], '', '1', []]"; + if ("GODMODE" in _case) then { + _temp = _temp + ",[' Godmode', [], "+_skn_godMode+", '2', []]"; + }; + if ("HEAL" in _case) then { + _temp = _temp + ",[' Heal self',[],{[103,netId player] call "+_skn_adminRequest_PVC+"},'-1',[0.016,0.702,0.078,1]]"; + }; + if ("VEHICLEREPAIR" in _case) then { + _temp = _temp + ",[' Repair Vehicle', [], "+_skn_repairVehicle+", '0', []]"; + }; + }; + if (["TARGET-HEAL","TARGET-AMMO","TARGET-KILL","TARGET-CRYPTO","TARGET-VEHICLEREPAIR"] call _stringInArray) then { + _temp = _temp + ",['Target Actions', [], '', '1', []]"; + if ("TARGET-HEAL" in _case) then { + _temp = _temp + ",[' Heal',[],{[103,_this select 1] call "+_skn_adminRequest_PVC+"},'4',[0.016,0.702,0.078,1]]"; + }; + if ("TARGET-KILL" in _case) then { + _temp = _temp + ",[' Kill',[],{[100,_this select 1] call "+_skn_adminRequest_PVC+"},'4',[0.859,0.094,0.094,1]]"; + }; + if ("TARGET-AMMO" in _case) then { + _temp = _temp + ",[' Give Ammo',[],{[200,_this select 1] call "+_skn_adminRequest_PVC+"},'4',[]]"; + }; + if ("TARGET-VEHICLEREPAIR" in _case) then { + _temp = _temp + ",[' Repair Vehicle', [], "+_skn_repairVehicle+", '4', []]"; + }; + if ("TARGET-CRYPTO" in _case) then { + { + _temp = _temp + ",[' Give Crypto - "+str _x+"',"+str _x+",{[107,[_this select 1,_this select 2]] call "+_skn_adminRequest_PVC+"},'4',[]]" + }count _skn_adminMenuCryproCfg; + }; + }; + _temp = _temp + ",['Custom Stuff', [], '', '1', []]"; + if ("VEHICLEFLIP" in _case) then { + _temp = _temp + ",[' Unflip Vehicle', [], "+_skn_flipVehicle+", '0', []]"; + }; + if ("SPAWNLOOT" in _case) then { + _temp = _temp + ",[' Loot Buildings (25m)', 25, "+_skn_spawnLoot+", '0', []]"; + }; + _temp = _temp + ",[' Skip +6 hours', [], "+_skn_daynight+", '0', []]"; + _temp = _temp + ",[' Disconnect yourself', [], { (findDisplay 46) closeDisplay 0 }, '0', [0.859,0.094,0.094,1]]"; + if ("BANPANNEL" in _case) then { + _temp = _temp + ",['Ban Menu',[],'','1',[]] + ,[' BattlEye Ban - Custom Ban Reason',[],"+_skn_customBanreason+",'4',[]] + "; + { + _temp = _temp + ",[' BattlEye Ban - "+_x+"','"+_x+"',"+_skn_customBanreason+",'4',[]]" + }count _skn_adminMenuBanReasons; + }; + + _temp = _temp + " + ,['Key Binds',[],'','1',[]] + ,[' 4 Key - Fly Up',[],'','1',[]] + ,[' 5 Key - Teleport In Front',[],'','1',[]] + ,[' F2 - Cancel Spectating',[],'','1',[]] + ,[' F5 - Delete Target',[],'','1',[]] + ,[' 7 - (Un)Lock Target',[],'','1',[]] + ,[' ALT + Left MB - Teleport on Map',[],'','1',[]] + ]; + "; + if (_i == 1) then { + _skn_adminMenuOwner = _temp; + _case = _skn_adminMenuHighSetting; + }; + if (_i == 2) then { + _skn_adminMenuHigh = _temp; + _case = _skn_adminMenuLowSetting; + }; + if (_i == 3) then { + _skn_adminMenuLow = _temp; + }; +}; + +_skn_spawnPointCenter = getMarkerPos "respawn_west"; +_centerDistance = [_serverSettingsConfig, "antihack_TPcenterDistance", 30] call EPOCH_fnc_returnConfigEntry; +_maxTravelDistance = [_serverSettingsConfig, "antihack_maxTravelDistance", 30] call EPOCH_fnc_returnConfigEntry; + +// Only set these if prefix is not used since we can filter for it +if (_skn_PVSPrefix == "") then { + "epochserver" callExtension format["800|%1|%2|%3|%4", _skn_doKickBan, _skn_doAdminRequest, _skn_doAdminLog, _skn_doTokenAuth]; +}; + +EPOCH_server_pushPlayer = compileFinal (" + params ['_playerNetID','_playerUID','_C_SET','_fsmHandle','_player']; + if (_playerUID in "+ str _skn_adminUIDArray+") then { + _playerNetID publicVariableClient '"+_skn_Admin_Code+"'; + _playerNetID publicVariableClient '"+_skn_pv_adminLog+"'; + _playerNetID publicVariableClient '"+_skn_pv_hackerLog+"'; + _C_SET pushBack '[] spawn "+_skn_Admin_Init+"'; + } else { + _C_SET pushBack '[] spawn "+_skn_AH_Init+"'; + }; + [_fsmHandle,['_C_SET', _C_SET]] remoteExecCall ['setFSMVariable', _player]; + true +"); +EPOCH_server_isPAdmin = compileFinal ("if (isNull _this) then {false} else {getPlayerUID _this in "+str _skn_adminUIDArray+"}"); + +_sknBanANDSleep = _skn_AH_Ban+"; uiSleep 60"; +_sknBanANDSleepQuick = _skn_AH_Ban+"; uiSleep 1"; + +// CfgPatches Check +_sknPatches = []; +"_sknPatches pushBack (configName _x); true" configClasses (configFile >> "CfgPatches"); +{_sknPatches pushBackUnique _x}forEach _skn_whitelist_cfgPatches; +_skn_addonCheckCode = if (_skn_check_addons) then {"[] spawn{_config = '!(configName _x in "+str _sknPatches+")' configClasses (configFile >> 'CfgPatches');if !(_config isEqualTo []) then {[format['Disallowed Addon %1',_config],["+str (_skn_cfgPatchesCfg select 0)+",0]] call "+_skn_AH_Ban+"}};"} else {""}; +_skn_fileCheckCode = if (_skn_check_files isEqualTo []) then {""} else {"{if (str(compile preprocessFileLineNumbers (_x select 0)) != str(missionNamespace getVariable [_x select 1,'']))exitWith{[format['Modified File %1 (%2/%3)',_x select 1,count toArray str (compile preprocessFileLineNumbers (_x select 0)),count toArray str(missionNamespace getVariable [_x select 1,''])],0] call "+_skn_AH_Ban+"}} forEach "+str _skn_check_files+";"}; + +// Addaction Checks +_sknAddActionCheck = if ([_serverSettingsConfig, "antihack_addActionCheck", true] call EPOCH_fnc_returnConfigEntry) then{ " +if (player == _ActionVehicle) then[{_ActionCount = _ActionCount + 1}, { _ActionVehicle = player; _ActionCount = 0 }]; +_addCase = player addAction['', '', [], -5, false, true, '', 'false']; +player removeAction _addCase; +if (_addCase != _ActionCount) then{ + [format['addAction %1/%2', _addCase, _ActionCount], 0] call "+_sknBanANDSleep+"; +}; +"} else {""}; + +// Anti teleport checks +_antiTeleportCheck = if ([_serverSettingsConfig, "antihack_antiTeleportCheck", true] call EPOCH_fnc_returnConfigEntry) then{" +_cntBan = 0; +while {true} do { + _lastTime = diag_tickTime; + _lastPos = getPosATL vehicle player; + _notNearbySpawn = _lastPos distance "+str _skn_spawnPointCenter+" > "+str _centerDistance+"; + while {alive player} do { + _curTime = diag_tickTime; + _curPos = getPosATL vehicle player; + _distance = _lastPos distance _curPos; + + if ((_curTime-_lastTime) > 1 || _distance > "+str _maxTravelDistance+") then { + if (((_distance/(_curTime-_lastTime)) > "+str _maxTravelDistance+") && _notNearbySpawn && (player == vehicle player)) then { + if (isNil '"+_skn_antiTeleportPVC+"') then { + [format['[TEST] TP from %1 to %2, %3 meters, now at %4', _lastPos, _curPos, round _distance, getPosATL player],1] call "+_sknBanANDSleep+"; + vehicle player setPosATL _lastPos; + _cntBan = _cntBan + 1; + if (_cntBan > 4) then { + + }; + } else { + uiSleep 10; + _lastPos = getPosATL vehicle player; + _lastTime = diag_tickTime; + _notNearbySpawn = false; + }; + } else { + _lastPos = _curPos; + _lastTime = _curTime; + _notNearbySpawn = _lastPos distance "+str _skn_spawnPointCenter+" > "+str _centerDistance+"; + }; + }; + }; + uiSleep 0.1; +}; +uiSleep 0.25; +"} else {""}; + +// Init Server Side Event Handlers +//[_data,_player,_token]; +call compile("'"+_skn_doTokenAuth+"' addPublicVariableEventHandler { + _array = _this select 1; + _tokenSet = false; + if !([_array select 1, _array select 2] call EPOCH_server_getPToken) exitWith{}; + if (_array select 0 isEqualTo '"+_skn_AH_rndVarAHInitCheckToken+"') then { + _tokenSet = true; + _puid = (_array select 1) getVariable['PUID', '']; + if (_puid != '') then { + if !(_puid in "+_skn_AH_rndVarAHInitCheck+") then { + "+_skn_AH_rndVarAHInitCheck+" pushBack _puid; + diag_log format['DEBUG: player auth token set %1', _array]; + }; + }; + }; + if !(_tokenSet) then { + _playerUID = getPlayerUID (_array select 1); + if (_playerUID != '') then{ + 'epochserver' callExtension format['911|%1|%2', _playerUID, 'Auth failure, Please reconnect']; + }; + }; +};"); + +call compile ("'"+_skn_doKickBan+"' addPublicVariableEventHandler { + _array = _this select 1; + _array params ['_text','_mode','_player','_token']; + if !([_player,_token] call EPOCH_server_getPToken) exitWith { + ['ahe', format['Token is different [%1,%2] %3',if (!isNull _player) then { _player getVariable ['"+_skn_AH_rndVarPlayer+"','']}else{'PlayerObj NULL'}, _array select 3, _array]] call EPOCH_fnc_server_hiveLog; + }; + _text = toString(_text); + _reasonIndex = -1; + if (_mode isEqualType []) then{ + _mode = _mode select 0; + _reasonIndex = _mode select 1; + }; + _reason = ''; + _logName = 'ahl'; + _logMode = 1; + _logColor = [1,1,1,1]; + switch _mode do { + case 0: { + _logName = 'ahb'; + _logColor = [1,0,0,1]; + _logMode = 0; + if (_reasonIndex != -1) then { + _reason = "+str(_epoch_banReasons)+" select _reasonIndex; + }; + ['ban', _player , format['"+_skn_banReason+" %1',_reason], "+str(_antihack_banDuration)+"] call EPOCH_serverCommand; + }; + case 2: { + _logName = 'ahk'; + _logColor = [0,0,1,1]; + if (_reasonIndex != -1) then { + _reason = "+str(_epoch_kickReasons)+" select _reasonIndex; + }; + ['kick', _player , format['"+_epoch_kickReason+" %1',_reason]] call EPOCH_serverCommand; + }; + }; + "+_skn_pv_hackerLog+" pushBack[[_logMode, call EPOCH_server_getRealTime, name _player, getPlayerUID _player, _text], _logColor]; + [_logName, format['%1 (%2): %3', name _player, getPlayerUID _player, _text]] call EPOCH_fnc_server_hiveLog; + diag_log str([_logName, format['%1 (%2): %3', name _player, getPlayerUID _player, _text]]); + { + if (_x call EPOCH_server_isPAdmin) then { + (owner _x) publicVariableClient '"+_skn_pv_hackerLog+"'; + }; + }forEach allPlayers; +};"); +//0 = BAN +//1 = LOG +//2 = KICK + +_skn_code_ban = compileFinal (" + _this set [0,toArray (_this select 0)]; + _this pushBack player; + _this pushBack Epoch_personalToken; + "+_skn_doKickBan+" = _this; + publicVariableServer '"+_skn_doKickBan+"'; + true +"); +_skn_code_init = compileFinal (" + comment 'Epoch Mod Antihack - Niklas Wagner - www.skaronator.com - Aaron Clark - www.epochmod.com - License: (CC) Attribution-NonCommercial-NoDerivatives 4.0 International'; + waitUntil {(getPlayerUID player) != ''}; + _start = diag_tickTime; + waitUntil {!isNil '"+_skn_AH_Code+"' || (diag_tickTime-_start > 20)}; + if (isNil '"+_skn_AH_Code+"') exitWith { + "+_skn_doKickBan+" = [format['Cannot Load AH [%1,%2]',!isNil '"+_skn_AH_Code_CA+"',!isNil '"+_skn_AH_Code_CB+"'],2,player,Epoch_personalToken]; + publicVariableServer '"+_skn_doKickBan+"'; + (findDisplay 46) closeDisplay 0 + }; + [] spawn "+_skn_AH_Code+"; + uiSleep 3; + if ((isNil '"+_skn_AH_Code_CA+"') || (isNil '"+_skn_AH_Code_CB+"')) then { + uiSleep 5; + if ((isNil '"+_skn_AH_Code_CA+"') || (isNil '"+_skn_AH_Code_CB+"')) then { + [] spawn "+_skn_AH_Code+"; + uiSleep 3; + }; + }; + uiSleep 5; + if ((isNil '"+_skn_AH_Code_CA+"') || (isNil '"+_skn_AH_Code_CB+"')) then { + "+_skn_doKickBan+" = [format['Cannot Load AH [%1,%2]',!isNil '"+_skn_AH_Code_CA+"',!isNil '"+_skn_AH_Code_CB+"'],2,player,Epoch_personalToken]; + publicVariableServer '"+_skn_doKickBan+"'; + (findDisplay 46) closeDisplay 0 + }; + "); +_skn_code_antihack = compileFinal (" + comment 'Epoch Mod Antihack - Niklas Wagner - www.skaronator.com - Aaron Clark - www.epochmod.com - License: (CC) Attribution-NonCommercial-NoDerivatives 4.0 International'; + if ((!isNil '"+_skn_AH_Code_CA+"') && (!isNil '"+_skn_AH_Code_CB+"')) exitWith {}; + "+_skn_AH_Code_CA+" = true; + "+_skn_addonCheckCode+" + _t = '"+_skn_t1+"'; + [] spawn { + uiSleep 5; + FW"+_skn_AH_rndVar+" = ''; + FA"+_skn_AH_rndVar+" = 0; + FWC"+_skn_AH_rndVar+" = 0; + _sknOnFire = { + _wep = _this select 1; + _ammo = player ammo _wep; + if !(_wep in ['Throw','Put']) then { + if (FW"+_skn_AH_rndVar+" == _wep && FA"+_skn_AH_rndVar+" == _ammo) then { + if (FWC"+_skn_AH_rndVar+" > 1) then { + [format['[TEST] Unlimited Ammo: [%1,%2]', _wep, _ammo], 1] call "+_skn_AH_Ban+"; + [] spawn {uiSleep 60;FWC"+_skn_AH_rndVar+" = 0}; + }; + FWC"+_skn_AH_rndVar+" = FWC"+_skn_AH_rndVar+" +1; + [] spawn {uiSleep 20;FWC"+_skn_AH_rndVar+" = 0}; + }; + }; + FA"+_skn_AH_rndVar+" = _ammo; + FW"+_skn_AH_rndVar+" = _wep; + true + }; + + uiNamespace setVariable['RscDisplayRemoteMissions',displayNull]; + uiNamespace setVariable['RscDisplayArsenal',displayNull]; + missionnamespace setVariable['BIS_fnc_showNotification_queue',nil]; + while {true} do { + { + if (!isNull (_x select 0)) then { + [format['Menu: %1',_x select 1],0] call "+_sknBanANDSleep+"; + }; + }forEach[ + [(findDisplay 64) displayCtrl 1002,'findDisplay 64'], + [(findDisplay 49) displayCtrl 0,'findDisplay 49'], + [uiNamespace getVariable 'RscDisplayRemoteMissions','RscDisplayRemoteMissions'], + [uiNamespace getVariable 'RscDisplayArsenal','RscDisplayArsenal'], + [missionnamespace getvariable 'BIS_fnc_showNotification_queue','showNotification'] + ]; + { + if (!isNull (findDisplay _x)) then { + [format['Menu: findDisplay %1',_x],0] call "+_sknBanANDSleep+"; + }; + }forEach "+str _skn_badDisplaysArray+"; + if (!isNull (uiNamespace getVariable 'RscDisplayConfigureAction')) then { + _ctrlTxt = toLower ctrlText 1000; + if (_ctrlTxt != '') then { + if (_ctrlTxt != toLower localize 'STR_A3_RscDisplayConfigureAction_Title') then { + [format['Menu: RscDisplayConfigureAction-A %1',_ctrlTxt],0] call "+_sknBanANDSleep+"; + }; + }; + { + if (buttonAction _x != '') then { + [format['Menu: RscDisplayConfigureAction-B (%1)',_x],0] call "+_sknBanANDSleep+"; + }; + }forEach [1,104,105,106,107,108,109]; + }; + if (!isNull (uiNamespace getVariable 'RscDisplayInsertMarker')) then { + _ctrlTxt = toLower ctrlText 1001; + if (_ctrlTxt != '') then { + if (_ctrlTxt != toLower localize 'STR_A3_RscDisplayInsertMarker_Title') then { + [format['Menu: RscDisplayInsertMarker-A %1',_ctrlTxt],0] call "+_sknBanANDSleep+"; + }; + }; + if ((buttonAction 1 != '') || (buttonAction 2 != '')) then { + [format['Menu: RscDisplayInsertMarker-B [%1,%2]',buttonAction 1,buttonAction 2],0] call "+_sknBanANDSleep+"; + }; + }; + if (!isNull (findDisplay 129)) then {closeDialog 0}; + + if !(commandingMenu in "+str _skn_commandMenuArray+") then { + [format['Menu: commandMenu: %1',commandingMenu],0] call "+_sknBanANDSleep+"; + }; + + onMapSingleClick ''; + player allowDamage true; + vehicle player allowDamage true; + + { + _ehKey = _x select 0; + if (_x select 2) then { + player removeEventHandler [_ehKey, 0]; + }; + _ehCode = _x select 1; + if (_ehKey == 'Fired') then {_ehCode = (_ehCode + '_this call '+str(_sknOnFire)) }; + _addCase = player addEventHandler [_ehKey, _ehCode]; + if !(_x select 2) then { + player removeEventHandler [_ehKey, 0]; + }; + if (_addCase > 0) then { + [format['EH: %1 %2',_ehKey,_addCase],0] call "+_sknBanANDSleep+"; + }; + } forEach "+str _skn_addEHArray+"; + + uiSleep 0.01; + }; + }; + _t = _t + '"+_skn_t2+"'; + [] spawn { + disableSerialization; + _ActionCount = -1; + _ActionVehicle = player; + _displayCount = 0; + _personalToken = Epoch_personalToken; + _antiWallCount = 0; + waitUntil{!isNull (findDisplay 46)}; + setViewDistance "+str _skn_viewDistance+"; + setObjectViewDistance["+str _skn_viewDistanceObects+", 100]; + setTerrainGrid "+str _skn_terrainGrid+"; + uiSleep 5; + while {true} do { + if (isNil 'Epoch_personalToken') then { + "+_skn_doKickBan+" = [format['personalToken NIL: %1/%2',Epoch_personalToken,_personalToken],0,player,_personalToken]; + publicVariableServer '"+_skn_doKickBan+"'; + uiSleep 60; + }; + { + if (isNil _x) then { + [format['%1: nil',_x],0] call "+_sknBanANDSleep+"; + }; + }forEach "+str _skn_nilVarCheckArray+"; + if !(groupIconsVisible isEqualTo [false,false]) then { + [format['GroupIcons %1',groupIconsVisible],0] call "+_sknBanANDSleep+"; + }; + if (unitRecoilCoefficient player != 1) then { + [format['Recoil %1',unitRecoilCoefficient player],0] call "+_sknBanANDSleep+"; + }; + if (animationState player in "+str _skn_badAnimations+") then { + [format['BadMove: %1',animationState player],0] call "+_sknBanANDSleep+"; + }; + if (EPOCH_playerEnergy > 2500 || EPOCH_playerEnergy < 0) then { + [format['Energy: %1',EPOCH_playerEnergy],0] call "+_sknBanANDSleep+"; + }; + if (EPOCH_playerHunger > 5000 || EPOCH_playerHunger < 0) then { + [format['Hunger: %1',EPOCH_playerHunger],0] call "+_sknBanANDSleep+"; + }; + if (EPOCH_playerThirst > 2500 || EPOCH_playerThirst < 0) then { + [format['Thirsk: %1',EPOCH_playerThirst],0] call "+_sknBanANDSleep+"; + }; + if (EPOCH_playerStamina > 2500 || EPOCH_playerStamina < 0) then { + [format['Stamina: %1',EPOCH_playerStamina],0] call "+_sknBanANDSleep+"; + }; + if (EPOCH_playerCrypto > "+str _skn_playerCryptoLimit+" || EPOCH_playerCrypto < 0) then { + [format['Crypto: %1',EPOCH_playerCrypto],0] call "+_sknBanANDSleep+"; + }; + if (_antiWallCount != EPOCH_antiWallCount) then { + if (_antiWallCount > EPOCH_antiWallCount) then { + [format['antiWall: %1/%2',EPOCH_antiWallCount,_antiWallCount],0] call "+_sknBanANDSleep+"; + }; + _antiWallCount = EPOCH_antiWallCount; + }; + if (EPOCH_target isEqualTo player) then { + [format['setVelocityTarget: %1', EPOCH_target], 0] call "+_sknBanANDSleep+"; + }; + if !(EPOCH_ESP_TARGETS isEqualTo []) then { + [format['ESP-O: %1', EPOCH_ESP_TARGETS], 0] call "+_sknBanANDSleep+"; + }; + if !(EPOCH_ESPMAP_TARGETS isEqualTo []) then { + [format['MAP-ESP: %1', EPOCH_ESPMAP_TARGETS], 0] call "+_sknBanANDSleep+"; + }; + if !(EPOCH_ESP_VEHICLEPLAYER isEqualTo []) then { + [format['ESP-N: %1', EPOCH_ESP_VEHICLEPLAYER], 0] call "+_sknBanANDSleep+"; + }; + if (EPOCH_ESP_PLAYER || EPOCH_ESP_VEHICLES) then { + [format['ESP-N: %1', EPOCH_ESP_VEHICLES], 0] call "+_sknBanANDSleep+"; + }; + if (EPOCH_taxRate != "+str EPOCH_taxRate+") then { + [format['taxTate: %1',EPOCH_taxRate],0] call "+_sknBanANDSleep+"; + }; + if !(EPOCH_group_upgrade_lvl isEqualTo "+str EPOCH_group_upgrade_lvl+") then { + [format['groupUpgradeLvL: %1',EPOCH_group_upgrade_lvl],0] call "+_sknBanANDSleep+"; + }; + if (viewDistance != "+str _skn_viewDistance+") then{ + [format['viewDistance %1',viewDistance],0] call "+_sknBanANDSleep+"; + }; + "+_sknAddActionCheck+" + _display = findDisplay 46; + if !(isNull _display) then { + { + _display displayRemoveAllEventHandlers _x; + _addCase = _display displayAddEventHandler [_x,([""CfgEpochClient"", _x, """"] call EPOCH_fnc_returnConfigEntryV2)]; + if (_addCase != _displayCount) then { + [format['DEH: %3 %1/%2',_addCase,_displayCount,_x],0] call "+_sknBanANDSleep+"; + }; + } forEach (['CfgEpochClient', 'displayAddEventHandler', []] call EPOCH_fnc_returnConfigEntryV2); + }; + uiSleep ((random 1)+1); + }; + }; + _t = _t + '"+_skn_t3+"'; + [] spawn {"+_antiTeleportCheck+"}; + _t = _t + '"+_skn_t4+"'; + [] spawn { + uiNamespace setVariable['ESP_mainMap', nil]; + uiNamespace setVariable['ESP_adminMap', nil]; + while {true} do { + { + _badVar = _x; + { + _var = _x getVariable _badVar; + if (!isNil '_var') then { + [format['BadVar %1=%2 (%3)',_badVar,_var,_forEachIndex],0] call "+_sknBanANDSleep+"; + _x setVariable [_badVar,nil]; + }; + }forEach [missionNamespace, parsingNamespace, uiNamespace]; + }forEach "+str _skn_badVarCheckArray+"; + "+_skn_fileCheckCode+" + { + _display = _x select 0; + _displayCheckOkay = false; + { + if ((getText(configFile>>_display>>'onLoad'))==_x) exitWith { _displayCheckOkay = true }; + }forEach (_x select 1); + if (!_displayCheckOkay) then { + [format['Changed %1 >> onLoad >> %2', _display, getText(configFile>>_display>>'onLoad')],0] call "+_sknBanANDSleep+"; + _displayCheckOkay = false; + }; + { + if ((getText(configFile>>_display>>'onUnload'))==_x) exitWith { _displayCheckOkay = true }; + }forEach (_x select 2); + if (!_displayCheckOkay) then { + [format['Changed %1 >> onUnload >> %2', _display, getText(configFile>>_display>>'onUnload')],0] call "+_sknBanANDSleep+"; + } + }forEach "+str _cfg_displayArray+"; + uiSleep ((random 10)+10); + }; + }; + _t = _t + '"+_skn_t5+"'; + "+_skn_doTokenAuth+" = [_t,player,Epoch_personalToken]; + publicVariableServer '"+_skn_doTokenAuth+"'; + "+_skn_doTokenAuth+" = nil; + "+_skn_AH_Code_CB+" = true; + true +"); + +missionNamespace setVariable [_skn_AH_Ban, _skn_code_ban, true]; +missionNamespace setVariable [_skn_AH_Code, _skn_code_antihack, true]; +missionNamespace setVariable [_skn_AH_Init, _skn_code_init, true]; + +/*********************************************** ADMIN MENU *****************************************************/ +/*********************************************** ADMIN MENU *****************************************************/ +/*********************************************** ADMIN MENU *****************************************************/ +/*********************************************** ADMIN MENU *****************************************************/ +/*********************************************** ADMIN MENU *****************************************************/ +call compile (" + "+_skn_pv_adminLog+" = []; + "+_skn_pv_hackerLog+" = []; + "+_skn_server_adminLog+" = { + _toggle = ' -----'; + if ((_this select 1) != 0) then { + _toggle = if ((_this select 1) == 2) then {' -ON-'} else {'-OFF-'}; + }; + _adminUID = getPlayerUID _admin; + _adminNAME = "+str _skn_adminNAMEArray+" select ("+str _skn_adminUIDArray+" find _adminUID); + ['aml', format['%1 (%2): [%4] %3',_adminNAME,_adminUID,_this select 0,_toggle]] call EPOCH_fnc_server_hiveLog; + + "+_skn_pv_adminLog+" pushBack [call EPOCH_server_getRealTime,_adminNAME,_toggle,_this select 0]; + diag_log format ['SKN2 AdminRequest %1',"+_skn_pv_adminLog+"]; + { + if (_x call EPOCH_server_isPAdmin) then { + (owner _x) publicVariableClient '"+_skn_pv_adminLog+"'; + }; + }forEach allPlayers; + true + }; +"); +//[text,toggle,admin,token] +//toggle: 0:NOTHING 1:OFF 2:ON +call compile ("'"+_skn_doAdminLog+"' addPublicVariableEventHandler { + _array = _this select 1; + diag_log format ['SKN AdminLog %1',_array]; + _admin = _array select 2; + + if !([_admin,_array select 3] call EPOCH_server_getPToken) exitWith {}; + if !(_admin call EPOCH_server_isPAdmin) exitWith {}; + [_array select 0,_array select 1] call "+_skn_server_adminLog+"}; +"); +//[case,[contentarray],player,token] +call compile ("'"+_skn_doAdminRequest+"' addPublicVariableEventHandler { + _array = _this select 1; + diag_log format ['SKN AdminRequest %1',_array]; + _admin = _array select 2; + + if !([_admin,_array select 3] call EPOCH_server_getPToken) exitWith {}; + if !(_admin call EPOCH_server_isPAdmin) exitWith {}; + + _case = _array select 0; + _content = _array select 1; + + if (_case == 100) then { + _playerObj = objectFromNetId _content; + [format['Kill Target: %1 (%2)',name _playerObj,getPlayerUID _playerObj],0] call "+_skn_server_adminLog+"; + _playerObj setDamage 1; + }; + if (_case == 101) then { + _playerObj = objectFromNetId _content; + "+_skn_antiTeleportPVC+" = true; + (owner _playerObj) publicVariableClient '"+_skn_antiTeleportPVC+"'; + [format['Teleport To Admin: %1 (%2)', name _playerObj, getPlayerUID _playerObj], 0] call "+_skn_server_adminLog+"; + [vehicle _playerObj,_admin] spawn { + uiSleep 0.5; + (_this select 0) setPos ((_this select 1) modelToWorld [0,1,0]); + (_this select 0) setDir (getDir (_this select 1)); + }; + }; + if (_case == 102) then { + _playerObj = objectFromNetId _content; + _behindM = if (vehicle _playerObj == _playerObj) then [{-1},{-5}]; + + vehicle _admin setPos (_playerObj modelToWorld [0,_behindM,0]); + vehicle _admin setDir (getDir _playerObj); + [format['Teleport Admin To: %1 (%2)', name _playerObj, getPlayerUID _playerObj], 0] call "+_skn_server_adminLog+"; + }; + if (_case == 103) then { + _playerObj = objectFromNetId _content; + _playerObj setDamage 0; + [['healPlayer',true], _playerObj] call EPOCH_sendRemoteExecClient; + if (_playerObj == _admin) then { + ['Healed Self',0] call "+_skn_server_adminLog+"; + } else { + [format['Heal Target: %1 (%2)',name _playerObj,getPlayerUID _playerObj],0] call "+_skn_server_adminLog+"; + } + }; + if (_case == 104) then { + if ((_content isKindOf 'LandVehicle') || (_content isKindOf 'Air') || (_content isKindOf 'Ship') || (_content isKindOf 'Tank')) then { + [_content, _admin] call EPOCH_server_save_killedVehicle; + } else { + if (_content isKindOf 'Constructions_lockedstatic_F' || (_content isKindOf 'Buildable_Storage')) then{ + [_content, _admin] call EPOCH_server_save_killedStorage; + } else { + [_content, _admin] call EPOCH_server_save_killedBuilding; + }; + }; + [format['Delete: %1 at [%2]',typeOf _content, getPos _content],0] call "+_skn_server_adminLog+"; + _content spawn { + if !(isNull _this) then { + _this hideObjectGlobal true; + sleep 1; + if !(isNull _this) then {deleteVehicle _this}; + }; + }; + }; + if (_case == 106) then { + _admin hideObjectGlobal _content; + }; + if (_case == 107) then { + _player = objectFromNetId (_content select 0); + if (!isNull _player) then { + _cIndex = EPOCH_customVars find 'Crypto'; + _vars = _player getVariable['VARS', call EPOCH_defaultVars_SEPXVar]; + _current_crypto = (((_vars select _cIndex) + (_content select 1)) min "+str _skn_playerCryptoLimit+") max 0; + _current_crypto remoteExec ['EPOCH_effectCrypto',_player]; + _vars set[_cIndex, _current_crypto]; + _player setVariable['VARS', _vars]; + if (_player == _admin) then { + [format['Give Crypto Myself: %1',_content select 1],0] call "+_skn_server_adminLog+"; + } else { + [format['Give Crypto to %1 (%2): %3',name _player,getPlayerUID _player,_content select 1],0] call "+_skn_server_adminLog+"; + } + }; + }; + if (_case == 108) then { + if (!isNull _content) then { + [format['Repaire Vehicle: %1',typeOf _content],0] call "+_skn_server_adminLog+"; + _content setDamage 0; + diag_log format ['Debug-Vehicle: Repair: 108,%1',_content]; + if (local _content) then { + _content setFuel 1; + } else { + [_content, 1] remoteExec ['EPOCH_client_fillVehicle',_admin]; + }; + _content call EPOCH_server_save_vehicle; + }; + }; + if (_case == 109) then { + if (surfaceIsWater _content) then [{vehicle _admin setPosASL _content},{vehicle _admin setPosATL _content}]; + }; + if (_case == 110) then { + if (_content iskindof 'Landvehicle' || _content iskindof 'SHIP' || _content iskindof 'AIR' || _content iskindof 'TANK') then { + _lock = locked _content; + _newvalue = if (_lock in [2,3]) then {false} else {true}; + if (local _content) then { + _content lock _newvalue; + } + else { + [_content, _newvalue] remoteExec ['EPOCH_client_lockVehicle',_content]; + }; + [[format ['%1 %2', typeof _content,if (_newvalue) then {'locked'} else {'unlocked'}],'PLAIN DOWN']] remoteexec ['cutText',_admin]; + } + else { + if (_content iskindof 'Constructions_lockedstatic_F') then { + _locked = _content getVariable ['EPOCH_Locked', true]; + _content setvariable ['EPOCH_Locked',!_locked,true]; + [[format ['%1 %2', typeof _content,if (_locked) then {'unlocked'} else {'locked'}],'PLAIN DOWN']] remoteexec ['cutText',_admin]; + }; + }; + }; + if (_case == 111) then { + skiptime _content; + }; + if (_case == 200) then { + _playerObj = objectFromNetId _content; + _weaponClass = currentWeapon _playerObj; + _mags = getArray(configFile >> 'CfgWeapons' >> _weaponClass >> 'magazines'); + if !(_mags isEqualTo[]) then { + _firstMag = _mags select 0; + _magazineSizeMax = getNumber(configFile >> 'CfgMagazines' >> _firstMag >> 'count'); + _playerObj addMagazine[_firstMag, _magazineSizeMax]; + if (_playerObj == _admin) then { + [format['Gave Ammo (%1) to Self', _firstMag], 0] call "+_skn_server_adminLog+"; + } else { + [format['Gave Ammo (%3) to Target: %1 (%2)', name _playerObj, getPlayerUID _playerObj, _firstMag], 0] call "+_skn_server_adminLog+"; + }; + }; + }; + if (_case == 555) then { + _target = objectFromNetId (_content select 1); + + _itemSpawner = { + _nearbyWH = objNull; + if (vehicle _target != _target) then { + _nearbyWH = vehicle _target; + } else { + _nearbyWHArr = nearestObjects[_target, ['groundWeaponHolder'], 2]; + if !(_nearbyWHArr isEqualTo[]) then { + _nearbyWH = _nearbyWHArr select 0; + } else { + _posWH = getposATL _target; + _nearbyWH = createVehicle['groundWeaponHolder', _posWH, [], 0, 'CAN_COLLIDE']; + _nearbyWH setPosATL _posWH; + }; + }; + if !(isNull _nearbyWH) then { + switch (_this select 1) do { + case 1: { _nearbyWH addMagazineCargoGlobal[(_this select 0), 1] }; + case 2: { _nearbyWH addWeaponCargoGlobal[(_this select 0), 1] }; + case 3: { _nearbyWH addItemCargoGlobal[(_this select 0), 1] }; + case 4: { _nearbyWH addBackpackCargoGlobal[(_this select 0), 1] }; + }; + }; + }; + + _permVehicleSpawner = { + _item = _this; + _return = false; + if (_item isKindOf 'Air' || _item isKindOf 'Ship' || _item isKindOf 'LandVehicle') then { + if !(EPOCH_VehicleSlots isEqualTo[]) then { + _serverSettingsConfig = configFile >> 'CfgEpochServer'; + _removeweapons = [_serverSettingsConfig, 'removevehweapons', []] call EPOCH_fnc_returnConfigEntry; + _removemagazinesturret = [_serverSettingsConfig, 'removevehmagazinesturret', []] call EPOCH_fnc_returnConfigEntry; + _disableVehicleTIE = [_serverSettingsConfig, 'disableVehicleTIE', true] call EPOCH_fnc_returnConfigEntry; + _position = getPosATL _target; + + _slot = EPOCH_VehicleSlots select 0; + EPOCH_VehicleSlots = EPOCH_VehicleSlots - [_slot]; + missionNamespace setVariable ['EPOCH_VehicleSlotCount', count EPOCH_VehicleSlots, true]; + + _vehObj = createVehicle[_item, _position, [], 20, 'NONE']; + _return = true; + _vehObj call EPOCH_server_setVToken; + addToRemainsCollector[_vehObj]; + + if (_disableVehicleTIE) then { + _vehObj disableTIEquipment true; + }; + + clearWeaponCargoGlobal _vehObj; + clearMagazineCargoGlobal _vehObj; + clearBackpackCargoGlobal _vehObj; + clearItemCargoGlobal _vehObj; + + if !(_removeweapons isequalto []) then { + { + _vehObj removeWeaponGlobal _x; + } foreach _removeweapons; + }; + if !(_removemagazinesturret isequalto []) then { + { + _vehObj removeMagazinesTurret _x; + } foreach _removemagazinesturret; + }; + + _vehObj lock true; + + _playerUID = getPlayerUID _target; + _playerGroup = _target getVariable['GROUP', '']; + + _lockOwner = _playerUID; + if (_playerGroup != '') then { + _lockOwner = _playerGroup; + }; + + _vehLockHiveKey = format['%1:%2', (call EPOCH_fn_InstanceID), _slot]; + ['VehicleLock', _vehLockHiveKey, EPOCH_vehicleLockTime, [_lockOwner]] call EPOCH_fnc_server_hiveSETEX; + + _cfgEpochVehicles = 'CfgEpochVehicles' call EPOCH_returnConfig; + _availableColorsConfig = (_cfgEpochVehicles >> _item >> 'availableColors'); + + if (isArray(_availableColorsConfig)) then { + _textureSelectionIndex = (_cfgEpochVehicles >> _item >> 'textureSelectionIndex'); + _selections = if (isArray(_textureSelectionIndex)) then {getArray(_textureSelectionIndex)} else {[0]}; + _colors = getArray(_availableColorsConfig); + _textures = _colors select 0; + _color = floor(random(count _textures)); + _count = (count _colors) - 1; + { + if (_count >= _forEachIndex) then { + _textures = _colors select _forEachIndex; + }; + _vehObj setObjectTextureGlobal[_x, (_textures select _color)]; + } forEach _selections; + _vehObj setVariable['VEHICLE_TEXTURE', _color]; + }; + + _vehObj setVariable['VEHICLE_SLOT', _slot, true]; + _vehObj call EPOCH_server_save_vehicle; + _vehObj call EPOCH_server_vehicleInit; + } else { + diag_log 'ADMIN: Unable to spawn vehicle, no slots available'; + }; + }; + _return + }; + + _allClasses = []; + { + _classname = _x select 0; + _allClasses pushBack _classname; + _type = _x select 1; + if (_type in [0,1,2]) then {_classname call _permVehicleSpawner}; + if (_type in [3,4,5]) then {[_classname,2] call _itemSpawner}; + if (_type in [6,7]) then {[_classname,1] call _itemSpawner}; + if (_type == 8) then {[_classname,4] call _itemSpawner}; + if (_type == 9) then {[_classname,3] call _itemSpawner}; + }forEach (_content select 0); + + if (_target == _admin) then { + [format['Spawn: %1',_allClasses], 0] call "+_skn_server_adminLog+"; + } else { + [format['Spawn Target: %1 (%2) %3', name _target, getPlayerUID _target, _allClasses], 0] call "+_skn_server_adminLog+"; + }; + }; + if (_case == 666) then { + _playerObj = objectFromNetId (_content select 1); + _banID = 0; + 'epochserver' callExtension format['820|%1|"+_skn_banReason+" #%2',getPlayerUID _playerObj,_banID]; + ['amb', format['%1 (%2): %3', name _playerObj, getPlayerUID _playerObj, _content select 0]] call EPOCH_fnc_server_hiveLog; + }; +};"); + +_skn_admincode = compileFinal (" + + waitUntil {(getPlayerUID player) != ''}; + "+_skn_tg_sortOrder+" = 'Range'; + "+_skn_tg_toggle+" = []; + "+_skn_tg_BanPlayer+" = objNull; + "+_skn_tg_delete+" = objNull; + "+_skn_tg_mapTeleport+" = false; + "+_skn_tg_old_esp+" = false; + "+_skn_tg_godMode+" = false; + "+_skn_tg_old_espMap+" = false; + "+_skn_tg_spawnTyp+" = 6000; + "+_skn_tg_hideAdmin+" = false; + "+_skn_tg_infrontTP+" = false; + "+_skn_tg_jumpUp+" = false; + + "+_skn_tg_map_player+" = false; + "+_skn_tg_map_corpse+" = false; + "+_skn_tg_map_loot+" = false; + "+_skn_mapLootArray+" = []; + "+_skn_tg_map_animals+" = false; + "+_skn_mapAnimalArray+" = []; + "+_skn_tg_map_vehicle+" = false; + "+_skn_tg_map_ai+" = false; + "+_skn_mapAIArray+" = []; + "+_skn_tg_map_trader+" = false; + "+_skn_tg_map_basebuilding+" = false; + "+_skn_mapBasesArray+" = []; + + uiNamespace setVariable['ESP_mainMap', findDisplay 12 displayCtrl 51]; + uiNamespace setVariable['ESP_adminMap', findDisplay -1337 displayCtrl 7]; + (findDisplay 46) displayAddEventHandler ['KeyDown','_this call "+_skn_AdminKeyDown+"']; + ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ['MouseButtonDown', 'if (_this select 6) then {_this call "+_skn_mapTeleport+"}']; + + { + (uiNamespace getVariable _x) ctrlRemoveAllEventHandlers 'Draw'; + (uiNamespace getVariable _x) ctrlAddEventHandler['Draw',{ + _getDmgColor = { + _dmg = damage _this; + [0,1,_dmg,1] call EPOCH_colorRange + }; + _display = _this select 0; + if ("+_skn_tg_map_player+") then { + _size = (0.75/ctrlMapScale _display) max 20; + { + _display drawIcon [ + getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), [1,0,0,1], visiblePosition _x, _size, _size, getDir _x, name _x + ]; + }forEach (allPlayers select {alive _x}); + }; + if ("+_skn_tg_map_corpse+") then { + _size = (0.75/ctrlMapScale _display) max 20; + { + if (!isNull _x) then { + _color = [1,1,1,1]; + _display drawIcon [ + getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), _color, visiblePosition _x, _size, _size, getDir _x, typeOf _x + ]; + }; + }forEach allDeadMen; + }; + if ("+_skn_tg_map_loot+") then { + { + if (!isNull _x) then { + _color = [1,1,1,1]; + _display drawRectangle [ + visiblePosition _x, + 5, + 5, + getDir _x, + [1,1,1,1], + '#(rgb,8,8,3)color(1,0,0,1)' + ]; + }; + }forEach "+_skn_mapLootArray+"; + }; + if ("+_skn_tg_map_animals+") then { + _size = (0.5/ctrlMapScale _display) max 20; + { + if (alive _x) then { + _display drawIcon [ + getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), [1,1,0,1], visiblePosition _x, _size, _size, getDir _x, + getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'displayName') + ]; + }; + }forEach "+_skn_mapAnimalArray+"; + }; + if ("+_skn_tg_map_vehicle+") then { + _size = (1/ctrlMapScale _display) max 20; + { + if((_x isKindOf 'LandVehicle') || (_x isKindOf 'Ship') || (_x isKindOf 'Air') || (_x isKindOf 'Tank'))then{ + if (alive _x) then { + _display drawIcon [ + getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), [0,1,1,1], visiblePosition _x, _size, _size, getDir _x, + getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'displayName') + ]; + }; + }; + }forEach vehicles; + }; + if ("+_skn_tg_map_ai+") then { + _size = (0.75/ctrlMapScale _display) max 20; + { + if (alive _x) then { + _display drawIcon [ + getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), [0.5,0.5,0.5,1], visiblePosition _x, _size, _size, getDir _x, + getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'displayName') + ]; + }; + }forEach "+_skn_mapAIArray+"; + }; + if ("+_skn_tg_map_trader+") then { + _size = (0.75/ctrlMapScale _display) max 20; + { + _agent = agent _x; + _typeOf = typeOf _agent; + if!(_typeOf in ['Sheep_random_EPOCH','Goat_random_EPOCH','Snake_random_EPOCH','Snake2_random_EPOCH','Hen_random_EPOCH','Cock_random_EPOCH','Fin_random_EPOCH','Alsatian_random_EPOCH','Rabbit_EPOCH'])then{ + _display drawIcon [ + getText (configFile >> 'CfgVehicles' >> _typeOf >> 'Icon'), [0,1,0,1], visiblePosition _agent, _size, _size, getDir _agent, + getText (configFile >> 'CfgVehicles' >> _typeOf >> 'displayName') + ]; + }; + }forEach agents; + }; + if ("+_skn_tg_map_basebuilding+") then { + _size = (1/ctrlMapScale _display) max 20; + { + _display drawIcon [ + getText (configFile >> 'CfgVehicles' >> 'PlotPole_Epoch' >> 'Icon'), _x call _getDmgColor, visiblePosition _x, _size, _size, getDir _x, + str(_x getVariable ['BUILD_OWNER', _owner])+' '+(getText (configFile >> 'CfgVehicles' >> 'PlotPole_Epoch' >> 'displayName')) + ]; + }forEach "+_skn_mapBasesArray+"; + }; + if ("+_skn_tg_old_espMap+") then { + { + if !(isNull _x) then { + _pos = visiblePosition _x; + if (isPlayer _x) then { + _lastPos = _x getVariable['ESP_old_MAP', []]; + _playerGrp = group _x; + _grpColorIndex = EPOCH_ESPGROUPS find _playerGrp; + if (_grpColorIndex == -1) then { + EPOCH_ESPGROUPCOLORS pushBack[random 1, random 1, random 1, 1]; + _grpColorIndex = EPOCH_ESPGROUPS pushBack _playerGrp; + }; + _color = EPOCH_ESPGROUPCOLORS select _grpColorIndex; + (_this select 0) drawIcon[getText(configFile >> 'CfgVehicles' >> typeOf(vehicle _x) >> 'Icon'), _color, _pos, 0.5 / ctrlMapScale(_this select 0), 0.5 / ctrlMapScale(_this select 0), getDir _x, name _x, 1, 0.05, 'PuristaMedium']; + if ((count _lastPos) >= 100) then { + for '_i' from 10 to 100 step 10 do { + _pos1 = _lastPos select(_i - 10); + _pos2 = _lastPos select _i; + if (!isNil '_pos1' && !isNil '_pos2') then { + (_this select 0) drawLine[_pos1, _pos2, [1, 0, 0, 1]]; + }; + }; + }; + }; + }; + }forEach EPOCH_ESPMAP_TARGETS; + }; + }]; + }forEach ['ESP_mainMap','ESP_adminMap']; + "+_skn_adminRequest_PVC+" = { + _this pushBack player; + _this pushBack Epoch_personalToken; + "+_skn_doAdminRequest+" = _this; + publicVariableServer '"+_skn_doAdminRequest+"'; + }; + "+_skn_adminLog_PVC+" = { + _this pushBack player; + _this pushBack Epoch_personalToken; + "+_skn_doAdminLog+" = _this; + publicVariableServer '"+_skn_doAdminLog+"'; + }; + "+_skn_AdminKeyDown+" = { + _keyDown = _this select 1; + if (_keyDown == "+str _skn_adminMenuMenuKey+") then {call "+_skn_AdminMenu_Init+"}; + if (_keyDown == 0x3C) then {if (cameraOn != vehicle player) then { vehicle player switchCamera 'External' } }; + if (_keyDown == "+str _skn_adminMenuInfrontTeleport+") then {call "+_skn_infrontTP+"}; + if (_keyDown == "+str _skn_adminMenuJumpUp+") then {call "+_skn_jumpUp+"}; + if (_keyDown == 0x3F) then {call "+_skn_delete+"}; + if (_keyDown == "+str _skn_adminMenuUnlock+") then {call "+_skn_unlock+"}; + }; + "+_skn_AdminMenu_Init+" = { + disableSerialization; + _hours = floor(servertime/60/60); + _minutes = round((serverTime/60)-(_hours*60)); + + if (!dialog) then {createDialog 'Skaronator_AdminMenu'; + {(_x call "+_skn_getCtrl+") ctrlShow false}forEach[40,41,4101,42,43,50,51,52,60,6000,61,62,63,64,65,66,67,68,69,70,71] }; + if (getPlayerUID player in "+str _skn_blockedSpawnMenuUID+") then {ctrlEnable [21,false]}; + ctrlEnable [22,false]; + (1 call "+_skn_getCtrl+") ctrlSetText format['Players %1 of %2',count allPlayers,playersNumber civilian]; + (2 call "+_skn_getCtrl+") ctrlSetText format['Epoch Mod Admin Menu by Skaronator.com - Server Uptime: %1h %2min', _hours, _minutes]; + (5 call "+_skn_getCtrl+") ctrlSetEventHandler ['LBDblClick', '_this call "+_skn_fnc_Spec+"']; + (5 call "+_skn_getCtrl+") ctrlSetEventHandler ['LBSelChanged', '_this call "+_skn_fnc_Zoom+"']; + (6 call "+_skn_getCtrl+") ctrlSetEventHandler ['LBDblClick', '_this call "+_skn_dbClickMainMenu+"']; + (7 call "+_skn_getCtrl+") ctrlSetEventHandler ['MouseButtonDown', 'if (_this select 6) then {_this call "+_skn_mapTeleport+"}']; + if (call "+_skn_removespawnMenu+") then {uiSleep 0.4}; + + call "+_skn_Update_AdminButtons+"; + _menu = call "+_skn_mainMenuCfg+"; + _menu call "+_skn_FillMainMenu+"; + call "+_skn_FillPlayerMenu+"; + 0 call "+_skn_switchMainMenu+"; + }; + "+_skn_hideAdmin+" = { + "+_skn_tg_hideAdmin+" = !"+_skn_tg_hideAdmin+"; + [106, "+_skn_tg_hideAdmin+"] call "+_skn_adminRequest_PVC+"; + }; + "+_skn_esp+" = { + _enable = false; + if (_this) then { + EPOCH_ESP_PLAYER = !EPOCH_ESP_PLAYER; + if (EPOCH_ESP_PLAYER) then { + ['Player ESP',2] call "+_skn_adminLog_PVC+"; + _enable = true + } else { + ['Player ESP',1] call "+_skn_adminLog_PVC+"; + } + } else { + EPOCH_ESP_VEHICLES = !EPOCH_ESP_VEHICLES; + if (EPOCH_ESP_VEHICLES) then { + ['Vehicle ESP',2] call "+_skn_adminLog_PVC+"; + _enable = true + } else { + ['Vehicle ESP',1] call "+_skn_adminLog_PVC+"; + } + }; + + if (EPOCH_ESP_VEHICLEPLAYER isEqualTo [] && _enable) then { + waitUntil { + EPOCH_ESP_VEHICLEPLAYER = (cameraOn nearEntities [['Epoch_Male_F', 'Epoch_Female_F', 'LandVehicle', 'Ship', 'Air', 'Tank'], viewDistance max 1000 min 2500]) - [vehicle player]; + uiSleep 1; + !EPOCH_ESP_PLAYER && !EPOCH_ESP_VEHICLES + }; + EPOCH_ESP_VEHICLEPLAYER = []; + }; + }; + "+_skn_godMode+" = { + "+_skn_tg_godMode+" = !"+_skn_tg_godMode+"; + if ("+_skn_tg_godMode+") then { + ['God Mode',2] call "+_skn_adminLog_PVC+"; + EPOCH_GMODE = true; + waitUntil { + player setBleedingRemaining 0; + player setOxygenRemaining 1; + player allowDamage false; + uiSleep 0.25; + !"+_skn_tg_godMode+" + }; + player allowDamage true; + EPOCH_GMODE = nil; + } else { + ['God Mode',1] call "+_skn_adminLog_PVC+"; + } + }; + "+_skn_repairVehicle+" = { + "+_skn_systemDebug5+" + _veh = objNull; + if (_this isEqualTo []) then { + if (vehicle player == player) then { + _veh = cursorTarget + } else { + _veh = vehicle player + } + } else { + _player = objectfromnetId (_this select 1); + if (vehicle _player != _player) then { + _veh = vehicle _player + } + }; + "+_skn_systemDebug4+" + if (!isNull _veh) then { + if ((_veh isKindOf 'LandVehicle') || (_veh isKindOf 'Air') || (_veh isKindOf 'Ship') || (_veh isKindOf 'Tank')) then { + [108,_veh] call "+_skn_adminRequest_PVC+"; + "+_skn_systemDebug3+" + } + } + }; + "+_skn_spawnLoot+" = { + _masterConfig = 'CfgBuildingLootPos' call EPOCH_returnConfig; + _lootClasses = []; + _lootClassesIgnore = ['Default']; + '_cN = configName _x;if !(_cN in _lootClassesIgnore)then{_lootClasses pushBack _cN}; true' configClasses _masterConfig; + _cntBuildings = 0; + { + if (_x call EPOCH_spawnLoot) then { + _cntBuildings = _cntBuildings + 1; + }; + }forEach (nearestObjects[player, _lootClasses, _this]); + [format['Looting %2 Buildings within (%1)m',_this,_cntBuildings],0] call "+_skn_adminLog_PVC+"; + hint format['Spawned Loot for %1 Buildings',_cntBuildings]; + }; + "+_skn_old_esp+" = { + "+_skn_tg_old_esp+" = !"+_skn_tg_old_esp+"; + if ("+_skn_tg_old_esp+") then { + ['ESP Old',2] call "+_skn_adminLog_PVC+"; + waitUntil{ + EPOCH_ESP_TARGETS = (cameraOn nearEntities[['Epoch_Male_F', 'Epoch_Female_F', 'LandVehicle', 'Ship', 'Air', 'Tank'], 1000]) - [vehicle player]; + uiSleep 1; + !"+_skn_tg_old_esp+" + }; + } else { + ['ESP Old',1] call "+_skn_adminLog_PVC+"; + EPOCH_ESP_TARGETS = []; + }; + }; + "+_skn_old_espMap+" = { + "+_skn_tg_old_espMap+" = !"+_skn_tg_old_espMap+"; + if ("+_skn_tg_old_espMap+") then { + ['ESP-map Old', 2] call "+_skn_adminLog_PVC+"; + waitUntil{ + uiSleep 1; + EPOCH_ESPMAP_TARGETS = (cameraOn nearEntities[['CAManBase', 'LandVehicle', 'Ship', 'Air', 'Tank'], 10000]) - [player, vehicle player]; + { + if (isPlayer _x) then { + _pos = visiblePosition _x; + _lastPos = _x getVariable['ESP_old_MAP', []]; + _lastPos pushBack _pos; + if (count _lastPos > 101) then { + _lastPos deleteAt 0; + }; + _x setVariable['ESP_old_MAP', _lastPos]; + }; + }forEach EPOCH_ESPMAP_TARGETS; + !"+_skn_tg_old_espMap+" + }; + } else { + ['ESP-map Old', 1] call "+_skn_adminLog_PVC+"; + EPOCH_ESPMAP_TARGETS = []; + }; + }; + "+_skn_getCtrl+" = compileFinal '(findDisplay -1337) displayCtrl _this'; + "+_skn_Update_AdminButtons+" = { + disableSerialization; + + {((_x select 0) call "+_skn_getCtrl+") ctrlSetText (_x select 1)}forEach + [ + [23,format['Hacker Log (%1)',count "+_skn_pv_hackerLog+"]], + [24,format['Admin Log (%1)',count "+_skn_pv_adminLog+"]] + ]; + }; + "+_skn_mapTeleport+" = { + if ("+_skn_tg_mapTeleport+") then { + _pos = (_this select 0) posScreenToWorld [_this select 2, _this select 3]; + if (vehicle player == player) then { + if (surfaceIsWater _pos) then [{vehicle player setPosASL _pos},{vehicle player setPosATL _pos}]; + } else { + [109,_pos] call "+_skn_adminRequest_PVC+"; + }; + if (!dialog) then {openMap [false, false]}; + }; + }; + "+_skn_deleteNow+" = { + if (!isNull "+_skn_tg_delete+") then { + if (!isPlayer "+_skn_tg_delete+") then { + [104,"+_skn_tg_delete+"] call "+_skn_adminRequest_PVC+"; + }; + }; + "+_skn_tg_delete+" = objNull; + }; + "+_skn_delete+" = { + if (!isNull cursorTarget) then { + if ("+_skn_tg_delete+" isEqualto cursorTarget) then { + call "+_skn_deleteNow+"; + } + else { + "+_skn_tg_delete+" = cursorTarget; + hintSilent parsetext format ['Delete %1?
Press again to confirm!',typeof "+_skn_tg_delete+"]; + systemchat format ['Delete %1? Press again to confirm!',typeof "+_skn_tg_delete+"]; + }; + }; + }; + "+_skn_fnc_Spec+" = { + _player = objectFromNetId (_this select 0 lbData (_this select 1)); + if (isNull _player) exitWith {}; + if (!isPlayer _player) exitWith {}; + cutText ['F2 To Cancel!','PLAIN DOWN',1]; + vehicle _player switchCamera 'External'; + }; + "+_skn_fnc_Zoom+" = { + _player = objectFromNetId (_this select 0 lbData (_this select 1)); + if (isNull _player) exitWith {}; + if (!isPlayer _player) exitWith {}; + { + ctrlMapAnimClear _x; + _x ctrlMapAnimAdd [1,0.075,getpos _player]; + ctrlMapAnimCommit _x; + } foreach [((findDisplay 12) displayCtrl 51),(7 call "+_skn_getCtrl+")]; + }; + "+_skn_mainMenuCfg+" = {"+_skn_adminMenuLow+"}; + if (getPlayerUID player in "+str _skn_adminsOwner+") then { + "+_skn_mainMenuCfg+" = {"+_skn_adminMenuOwner+"}; + }; + if (getPlayerUID player in "+str _skn_adminsHigh+") then { + "+_skn_mainMenuCfg+" = {"+_skn_adminMenuHigh+"}; + }; + "+_skn_freeCam+" = { + _getPos = player modelToWorld[0, -1.5, 1.75]; + _cam = 'camera' camCreate _getPos; + _cam setDir (_getPos getDir player); + _cam camCommand 'MANUAL ON'; + _cam camCommand 'INERTIA OFF'; + _cam cameraEffect['INTERNAL', 'BACK']; + showCinemaBorder false; + cutText['Right Click To Cancel!', 'PLAIN DOWN', 1]; + }; + "+_skn_FillMainMenu+" = { + lbClear (8 call "+_skn_getCtrl+"); + _ctrl = 6 call "+_skn_getCtrl+"; + lbClear _ctrl; + for '_i' from 0 to count _menu -1 do { + _item = _menu select _i; + + _titleoption = _item select 3; + _color = _item select 4; + + _index = _ctrl lbAdd format['%1',_item select 0]; + if (count _color == 0) then { + _color = [1, 1, 1, 1]; + if (_titleoption == '1') then {_color = [0.42,0.64,0.88,1]}; + if (_titleoption == '3') then {_color = [0.27,0.39,0.53,1]}; + }; + + if (_titleoption == '2') then { + _color = if (_index in "+_skn_tg_toggle+") then [{[0.17,1,0,1]},{[0.51,0.51,0.51,1]}]; + }; + + _ctrl lbSetColor [_i,_color]; + _ctrl lbSetData [_i,str [_item select 1,_item select 2,_titleoption]]; + }; + }; + "+_skn_switchMainMenu+" = { + disableSerialization; + + _main = 6 call "+_skn_getCtrl+"; + _map = 7 call "+_skn_getCtrl+"; + _table = 8 call "+_skn_getCtrl+"; + if (_this == 0) then { + _main ctrlSetPosition [0.293698 * safezoneW + safezoneX,0.2888 * safezoneH + safezoneY,0.206297 * safezoneW,0.4862 * safezoneH]; + _map ctrlSetPosition [0.501031 * safezoneW + safezoneX,0.28836 * safezoneH + safezoneY,0.205265 * safezoneW,0.486548 * safezoneH]; + _table ctrlShow false; + _table ctrlSetPosition [0.293698 * safezoneW + safezoneX,0.2888 * safezoneH + safezoneY,0.206297 * safezoneW,0.4862 * safezoneH]; + _table ctrlCommit 0; + _main ctrlSetFade 0; + _map ctrlShow true; + }; + if (_this in [1,2]) then { + {(_x call "+_skn_getCtrl+") ctrlShow false}forEach[30,31,32,33,34]; + + _main ctrlSetPosition [0.293698 * safezoneW + safezoneX,0.2888 * safezoneH + safezoneY,0.412598 * safezoneW,0.4862 * safezoneH]; + _map ctrlSetPosition [0.709388 * safezoneW + safezoneX,0.28836 * safezoneH + safezoneY,-0.00312413 * safezoneW,0.486548 * safezoneH]; + _main ctrlSetFade 0; + if (_this == 2) then { + _main ctrlcommit 0; + _main ctrlSetFade 1; + }; + }; + _main ctrlCommit 0.8; + _map ctrlCommit 0.8; + }; + "+_skn_dbClickMainMenu+" = { + _currentSelect = _this select 1; + _data = call compile (_this select 0 lbData _currentSelect); + _tO = _data select 2; + + if (_tO == '1') exitWith {}; + if (_tO == '2') exitWith { + (_data select 0) spawn (_data select 1); + if (_currentSelect in "+_skn_tg_toggle+") then { + lbSetColor [6,_currentSelect,[0.51,0.51,0.51,1]]; + "+_skn_tg_toggle+" = "+_skn_tg_toggle+" - [_currentSelect]; + } else { + lbSetColor [6,_currentSelect,[0.165,1,0,1]]; + "+_skn_tg_toggle+" pushBack _currentSelect; + }; + }; + if (_tO == '4') exitWith { + if ((lbCurSel 5) >= 0) then { + [_text,lbData [5, lbCurSel 5],(_data select 0)] spawn (_data select 1); + }; + }; + if ((_data select 1) isEqualType {}) then {(_data select 0) spawn (_data select 1)}; + }; + Skaronator_fnc_handleButton = compileFinal (' + disableSerialization; + _idc = ctrlIDC (_this select 0); + if (_idc == 10) then { "+_skn_tg_sortOrder+" = ''Range''; call "+_skn_FillPlayerMenu+"}; + if (_idc == 11) then { "+_skn_tg_sortOrder+" = ''Alphabetically''; call "+_skn_FillPlayerMenu+"}; + + if (_idc == 20) then {call "+_skn_AdminMenu_Init+"}; + if (_idc == 21) then {call "+_skn_spawnMenu+"}; + + if (_idc == 23) then {call "+_skn_hackerLog+"}; + if (_idc == 24) then {call "+_skn_adminLog+"}; + + if (_idc == 32) then {true call "+_skn_doBan+"}; + if (_idc == 33) then {false call "+_skn_doBan+"}; + + if (_idc == 50) then {lbClear 43;"+_skn_tg_limitSpawn+" = [true,true,true,true,true,true,true,true,true,true,true]}; + if (_idc == 51) then {true call "+_skn_spawnSpawnMenu+"}; + if (_idc == 52) then {false call "+_skn_spawnSpawnMenu+"}; + if (_idc in [6000,61,62,63,64,65,66,67,68,69,70,71]) then { + "+_skn_tg_spawnTyp+" = _idc; + _idc call "+_skn_fillSpawnMenu+"; + }; + if (_idc == 4101) then {_idc call "+_skn_fillSpawnMenu+"}; + '); + "+_skn_spawnSpawnMenu+" = { + _target = objNull; + if (_this) then { + if ((lbCurSel 5) >= 0) then { + _target = objectFromNetId (lbData [5, lbCurSel 5]); + }; + } else { + _target = player; + }; + if (isNull _target) exitWith {}; + _ctrl = 43 call "+_skn_getCtrl+"; + _spawn = []; + for '_i' from 0 to (lbSize _ctrl)-1 do { + _data = call compile (_ctrl lbData _i); + _spawn pushBack [_data select 0, _data select 2]; + }; + lbClear _ctrl; + "+_skn_tg_limitSpawn+" = [true,true,true,true,true,true,true,true,true,true,true]; + "+_skn_systemDebug2+" + [555,[_spawn,netId _target]] call "+_skn_adminRequest_PVC+"; + }; + "+_skn_spawnMenu+" = { + false call "+_skn_doBan+"; + if (!isNull "+_skn_tg_BanPlayer+") then {uiSleep 0.8;false spawn "+_skn_switchTable+"}; + 2 call "+_skn_switchMainMenu+"; + lbclear (6 call "+_skn_getCtrl+"); + _table = 8 call "+_skn_getCtrl+"; + lbclear _table; + _table ctrlShow false; + "+_skn_tg_limitSpawn+" = [true,true,true,true,true,true,true,true,true,true,true]; + comment '[primaryWeapon,secondaryWeapon,launcher,backpack,map,rangefinderSlot,vehicleSlot]'; + (41 call "+_skn_getCtrl+") ctrlSetEventHandler ['LBDblClick', "" + _ctrl = _this select 0; + _currentSelect = _this select 1; + _type = call compile (_ctrl lbData _currentSelect) select 1; + _allowed = true; + if (_type != -1) then { + _allowed = "+_skn_tg_limitSpawn+" select _type; + "+_skn_tg_limitSpawn+" set [_type,false]; + }; + "+_skn_systemDebug1+" + if (_allowed) then { + _otherList = 43 call "+_skn_getCtrl+"; + _index = _otherList lbAdd format ['%1',_ctrl lbText _currentSelect]; + _otherList lbSetData [_index, _ctrl lbData _currentSelect]; + _otherList lbSetPicture [_index,_ctrl lbPicture _currentSelect]; + } else { + hint 'You can just select one Weapon/Item of this Type!'; + }; + ""]; + + (43 call "+_skn_getCtrl+") ctrlSetEventHandler ['LBDblClick', ' + _ctrl = _this select 0; + _currentSelect = _this select 1; + _type = call compile (_ctrl lbData _currentSelect) select 1; + if (_type != -1) then { + "+_skn_tg_limitSpawn+" set [_type,true]; + }; + _ctrl lbDelete _currentSelect; + ']; + + {_i = _x call "+_skn_getCtrl+";_i ctrlShow true;_i ctrlSetFade 1;_i ctrlcommit 0;_i ctrlSetFade 0;_i ctrlcommit 0.8}forEach[40,41,4101,42,43,50,51,52,60,6000,61,62,63,64,65,66,67,68,69,70,71]; + "+_skn_tg_spawnTyp+" call "+_skn_fillSpawnMenu+"; + }; + "+_skn_removespawnMenu+" = { + if (ctrlShown (40 call "+_skn_getCtrl+")) then { + {_i = _x call "+_skn_getCtrl+";_i ctrlShow true;_i ctrlSetFade 1;_i ctrlcommit 0.8}forEach[40,41,4101,42,43,50,51,52,60,6000,61,62,63,64,65,66,67,68,69,70,71]; + [] spawn {uiSleep 0.8;{_x call "+_skn_getCtrl+" ctrlShow false}forEach[40,41,4101,42,43,50,51,52,60,6000,61,62,63,64,65,66,67,68,69,70,71]}; + true + } else {false}; + }; + _cfgPricing = 'CfgPricing' call EPOCH_returnConfig; + skn_airVehicles = []; + skn_landVehicles = []; + skn_shipVehicles = []; + skn_weapons = []; + skn_magazines = []; + skn_items = []; + skn_backpacks = []; + skn_uniforms = []; + skn_attachments = []; + skn_headgear = []; + skn_vests = []; + { + if (getText(_x >> 'displayName') != '' && {getText(_x >> 'picture') != ''} && {isClass(_cfgPricing >> configName _x)}) then { + if ((configName _x) iskindof 'AIR') exitwith { + if (getNumber(_x >> 'type') != 0) then { + skn_airVehicles pushback (configName _x); + }; + }; + if ((configName _x) iskindof 'LandVehicle') exitwith { + if (configName _x != 'PaperCar') then { + skn_landVehicles pushback (configName _x); + }; + }; + if ((configName _x) iskindof 'SHIP') exitwith { + if (getNumber(_x >> 'type') in [1,2,3,4]) then { + skn_shipVehicles pushback (configName _x); + }; + }; + if (getNumber(_x >> 'isbackpack') == 1) exitwith { + skn_backpacks pushback (configName _x); + }; + }; + } foreach ('true' configClasses (configFile >> 'CfgVehicles')); + { + if (getText(_x >> 'displayName') != '' && {getText(_x >> 'picture') != ''} && {getNumber(_x >> 'scope') in [1,2]} && {isClass(_cfgPricing >> configName _x)}) then { + if (getNumber(_x >> 'type') in [1,2,4]) exitwith { + skn_weapons pushback (configName _x); + }; + if (getNumber(_x >> 'ItemInfo' >> 'type') in [801]) exitwith { + skn_uniforms pushback (configName _x); + }; + if (((configName _x) call BIS_fnc_itemType) select 0 in ['Item']) exitwith { + skn_attachments pushback (configName _x); + }; + if (((configName _x) call BIS_fnc_itemType) select 1 in ['Headgear']) exitwith { + skn_headgear pushback (configName _x); + }; + if (((configName _x) call BIS_fnc_itemType) select 1 in ['Vest']) exitwith { + skn_vests pushback (configName _x); + }; + }; + } foreach ('true' configClasses (configFile >> 'CfgWeapons')); + { + if (getText(_x >> 'displayName') != '' && {getText(_x >> 'picture') != ''} && {getNumber(_x >> 'scope') in [1,2]} && {isClass(_cfgPricing >> configName _x)}) then { + if (getText(_x >> 'ammo') != '') then { + skn_magazines pushback (configName _x); + } + else { + skn_items pushback (configName _x); + }; + }; + } foreach ('true' configClasses (configFile >> 'CfgMagazines')); + + "+_skn_fillSpawnMenu+" = { + _ctrl = 41 call "+_skn_getCtrl+"; + lbclear _ctrl; + if !(_this isequalto 4101) then { + _button = _this call "+_skn_getCtrl+"; + _button ctrlSetTextColor [1, 0, 0, 1]; + {_x call "+_skn_getCtrl+" ctrlSetTextColor [1, 1, 1, 1]}forEach([6000,61,62,63,64,65,66,67,68,69,70,71]-[_this]); + }; + _searchtxt = tolower (ctrlText((findDisplay -1337) displayCtrl 4101)); + if ("+_skn_tg_spawnTyp+" == 61 || "+_skn_tg_spawnTyp+" == 6000) then { + { + _configfilex = (configFile >> 'CfgVehicles' >> _x); + if (((tolower _x) find _searchtxt > -1 || tolower (getText(_configfilex >> 'displayName')) find _searchtxt > -1)) then { + _index = _ctrl lbAdd format['%1', getText(_configfilex >> 'displayName')]; + _ctrl lbSetData[_index, str[_x, 6, 0]]; + _ctrl lbSetPicture[_index, getText(_configfilex >> 'picture')]; + }; + } foreach skn_airVehicles; + }; + if ("+_skn_tg_spawnTyp+" == 62 || "+_skn_tg_spawnTyp+" == 6000) then { + { + _configfilex = (configFile >> 'CfgVehicles' >> _x); + if (((tolower _x) find _searchtxt > -1 || tolower (getText(_configfilex >> 'displayName')) find _searchtxt > -1)) then { + _index = _ctrl lbAdd format['%1', getText(_configfilex >> 'displayName')]; + _ctrl lbSetData[_index, str[_x, 6, 1]]; + _ctrl lbSetPicture[_index, getText(_configfilex >> 'picture')]; + }; + } foreach skn_landVehicles; + }; + if ("+_skn_tg_spawnTyp+" == 63 || "+_skn_tg_spawnTyp+" == 6000) then { + { + _configfilex = (configFile >> 'CfgVehicles' >> _x); + if (((tolower _x) find _searchtxt > -1 || tolower (getText(_configfilex >> 'displayName')) find _searchtxt > -1)) then { + _index = _ctrl lbAdd format['%1', getText(_configfilex >> 'displayName')]; + _ctrl lbSetData[_index, str[_x, 6, 2]]; + _ctrl lbSetPicture[_index, getText(_configfilex >> 'picture')]; + }; + } foreach skn_shipVehicles; + }; + if ("+_skn_tg_spawnTyp+" == 64 || "+_skn_tg_spawnTyp+" == 6000) then { + { + _configfilex = (configFile >> 'CfgWeapons' >> _x); + if (((tolower _x) find _searchtxt > -1 || tolower (getText(_configfilex >> 'displayName')) find _searchtxt > -1)) then { + _index = _ctrl lbAdd format['%1', getText(_configfilex >> 'displayName')]; + _type = getNumber(_configfilex >> 'type') - 1; + if (getNumber(_configfilex >> 'type') == 4) then { _type = 2 }; + _ctrl lbSetData[_index, str[_x, _type, _type + 3]]; + _ctrl lbSetPicture[_index, getText(_configfilex >> 'picture')]; + }; + } foreach skn_weapons; + }; + if ("+_skn_tg_spawnTyp+" == 65 || "+_skn_tg_spawnTyp+" == 6000) then { + { + _configfilex = (configFile >> 'CfgMagazines' >> _x); + if (((tolower _x) find _searchtxt > -1 || tolower (getText(_configfilex >> 'displayName')) find _searchtxt > -1)) then { + _index = _ctrl lbAdd format['%1', getText(_configfilex >> 'displayName')]; + _ctrl lbSetData[_index, str[_x, -1, 6]]; + _ctrl lbSetPicture[_index, getText(_configfilex >> 'picture')]; + }; + } foreach skn_magazines; + }; + if ("+_skn_tg_spawnTyp+" == 66 || "+_skn_tg_spawnTyp+" == 6000) then { + { + _configfilex = (configFile >> 'CfgMagazines' >> _x); + if (((tolower _x) find _searchtxt > -1 || tolower (getText(_configfilex >> 'displayName')) find _searchtxt > -1)) then { + _index = _ctrl lbAdd format['%1', getText(_configfilex >> 'displayName')]; + _ctrl lbSetData[_index, str[_x, -1, 7]]; + _ctrl lbSetPicture[_index, getText(_configfilex >> 'picture')]; + }; + } foreach skn_items; + }; + if ("+_skn_tg_spawnTyp+" == 67 || "+_skn_tg_spawnTyp+" == 6000) then { + { + _configfilex = (configFile >> 'CfgVehicles' >> _x); + if (((tolower _x) find _searchtxt > -1 || tolower (getText(_configfilex >> 'displayName')) find _searchtxt > -1)) then { + _index = _ctrl lbAdd format['%1', getText(_configfilex >> 'displayName')]; + _ctrl lbSetData[_index, str[_x, 3, 8]]; + _ctrl lbSetPicture[_index, getText(_configfilex >> 'picture')]; + }; + } foreach skn_backpacks; + }; + if ("+_skn_tg_spawnTyp+" == 68 || "+_skn_tg_spawnTyp+" == 6000) then { + { + _configfilex = (configFile >> 'CfgWeapons' >> _x); + if (((tolower _x) find _searchtxt > -1 || tolower (getText(_configfilex >> 'displayName')) find _searchtxt > -1)) then { + _index = _ctrl lbAdd format['%1', getText(_configfilex >> 'displayName')]; + _ctrl lbSetData[_index, str[_x, -1, 9]]; + _ctrl lbSetPicture[_index, getText(_configfilex >> 'picture')]; + }; + } foreach skn_uniforms; + }; + if ("+_skn_tg_spawnTyp+" == 69 || "+_skn_tg_spawnTyp+" == 6000) then { + { + _configfilex = (configFile >> 'CfgWeapons' >> _x); + if (((tolower _x) find _searchtxt > -1 || tolower (getText(_configfilex >> 'displayName')) find _searchtxt > -1)) then { + _index = _ctrl lbAdd format['%1', getText(_configfilex >> 'displayName')]; + _ctrl lbSetData[_index, str[_x, -1, 9]]; + _ctrl lbSetPicture[_index, getText(_configfilex >> 'picture')]; + }; + } foreach skn_attachments; + }; + if ("+_skn_tg_spawnTyp+" == 70 || "+_skn_tg_spawnTyp+" == 6000) then { + { + _configfilex = (configFile >> 'CfgWeapons' >> _x); + if (((tolower _x) find _searchtxt > -1 || tolower (getText(_configfilex >> 'displayName')) find _searchtxt > -1)) then { + _index = _ctrl lbAdd format['%1', getText(_configfilex >> 'displayName')]; + _ctrl lbSetData[_index, str[_x, -1, 9]]; + _ctrl lbSetPicture[_index, getText(_configfilex >> 'picture')]; + }; + } foreach skn_headgear; + }; + if ("+_skn_tg_spawnTyp+" == 71 || "+_skn_tg_spawnTyp+" == 6000) then { + { + _configfilex = (configFile >> 'CfgWeapons' >> _x); + if (((tolower _x) find _searchtxt > -1 || tolower (getText(_configfilex >> 'displayName')) find _searchtxt > -1)) then { + _index = _ctrl lbAdd format['%1', getText(_configfilex >> 'displayName')]; + _ctrl lbSetData[_index, str[_x, -1, 9]]; + _ctrl lbSetPicture[_index, getText(_configfilex >> 'picture')]; + }; + } foreach skn_vests; + }; + _ctrl lbSetCurSel 0; + }; + "+_skn_FillPlayerMenu+" = { + _ctrl = 5 call "+_skn_getCtrl+"; + lbclear _ctrl; + + _sorted = []; + _unsorted = allPlayers; + _tmp = []; + + _buttonRange = 10 call "+_skn_getCtrl+"; + _buttonRange ctrlSetText 'Range'; + _buttonAlphabetically = 11 call "+_skn_getCtrl+"; + _buttonAlphabetically ctrlSetText 'Alphabet'; + + if ("+_skn_tg_sortOrder+" == 'Range') then { + _pos = getPosATL vehicle player; + { + _tmp pushback [_x distance _pos, _x]; + } forEach _unsorted; + _buttonRange ctrlSetTextColor [1, 0, 0, 1]; + _buttonAlphabetically ctrlSetTextColor [1, 1, 1, 1]; + }; + if ("+_skn_tg_sortOrder+" == 'Alphabetically') then { + { + _tmp pushBack [name _x, _x],; + }forEach _unsorted; + _buttonAlphabetically ctrlSetTextColor [1, 0, 0, 1]; + _buttonRange ctrlSetTextColor [1, 1, 1, 1]; + }; + _tmp sort true; + { + _sorted pushback (_x select 1); + } foreach _tmp; + if (_sorted isEqualTo []) then {_sorted = [player]}; + _skn_fnc_addPlayerToList = { + _player = _this select 0; + _index = _ctrl lbAdd format ['%1', format ['%1 [%2 h]',name _player,((_player getvariable ['EPOCH_playerPlayTime',0])/60/60) toFixed 1]]; + _ctrl lbSetData [_index, netId _player]; + _ctrl lbSetColor [_index, _this select 1]; + if (vehicle _player == _player) then { + _pic = ''; + if (currentWeapon _player != '') then { + _pic = getText(configFile >> 'CfgWeapons' >> currentweapon _player >> 'picture') + } else { + if (primaryWeapon _player == '') then { + _pic = getText(configFile >> 'CfgVehicles' >> typeof vehicle _player >> 'picture') + } else { + _pic = getText(configFile >> 'CfgWeapons' >> primaryweapon _player >> 'picture') + }; + }; + _ctrl lbSetPicture [_index,_pic]; + } else { + _ctrl lbSetPicture [_index,getText(configFile >> 'CfgVehicles' >> typeof vehicle _player >> 'picture')]; + }; + }; + + _ctrl lbAdd ' Admins'; + _ctrl lbSetColor [(lbsize _ctrl)-1, [0,0.6,1,1]]; + { + if (getPlayerUID _x in "+str _skn_adminUIDArray+") then {_sorted = _sorted - [_x];[_x,[0,1,0,1]] call _skn_fnc_addPlayerToList}; + }forEach _sorted; + _ctrl lbAdd ''; + _ctrl lbAdd ' Normal Player'; + _ctrl lbSetColor [(lbsize _ctrl)-1, [1,1,1,1]]; + + { + if (vehicle _x == _x) then {_sorted = _sorted - [_x];[_x,[0,1,0,1]] call _skn_fnc_addPlayerToList}; + }forEach _sorted; + _ctrl lbAdd ''; + _ctrl lbAdd ' Vehicle Player'; + _ctrl lbSetColor [(lbsize _ctrl)-1, [1,1,1,1]]; + + {[_x,[0,1,0,1]] call _skn_fnc_addPlayerToList}forEach _sorted; + _ctrl lbAdd '';_ctrl lbAdd ''; +}; +"+_skn_switchTable+" = { + disableSerialization; + _map = 7 call "+_skn_getCtrl+"; + _table = 8 call "+_skn_getCtrl+"; + + if ((ctrlPosition _table) isEqualTo [0.293698 * safezoneW + safezoneX,0.2888 * safezoneH + safezoneY,0.206297 * safezoneW,0.4862 * safezoneH]) then { + _table ctrlSetPosition [0.293698 * safezoneW + safezoneX,0.2888 * safezoneH + safezoneY,0.206297 * safezoneW,0.4862 * safezoneH]; + _table ctrlCommit 0; + + + _table ctrlSetEventHandler ['LBSelChanged', 'if ((_this select 1) != -1) then {lnbSetCurSelRow [8,-1]};']; + + _table ctrlShow _this; + _table ctrlSetPosition [0.293698 * safezoneW + safezoneX,0.2888 * safezoneH + safezoneY,0.412598 * safezoneW,0.4862 * safezoneH]; + _table ctrlCommit 0.8; + }; + + _time = diag_tickTime; + waitUntil { + if (diag_tickTime-_time>1) exitWith {true}; + if ((ctrlPosition _map) isEqualTo [0.709388 * safezoneW + safezoneX,0.28836 * safezoneH + safezoneY,-0.00312413 * safezoneW,0.486548 * safezoneH]) exitWith {_map ctrlShow false;true}; + false + }; +}; +"+_skn_hackerLog+" = { + 1 call "+_skn_switchMainMenu+"; + + lbClear (6 call "+_skn_getCtrl+"); + _table = 8 call "+_skn_getCtrl+"; + lbClear _table; + true spawn "+_skn_switchTable+"; + if (call "+_skn_removespawnMenu+") then { + uiSleep 0.4; + _table ctrlSetFade 1; + _table ctrlcommit 0; + _table ctrlSetFade 0; + _table ctrlcommit 0.8; + }; + + _table ctrlShow true; + _table lnbAddRow ['==================================== HACKER LOG ======================================']; + + { + _player = _x select 0; + _color = _x select 1; + + _index = _table lnbAddRow [_player select 1,_player select 2,nil,if (_player select 0 == 0) then [{format['BANNED: %1',_player select 4]},{_player select 4}]]; + if (count _color > 0) then { + lnbSetColor [8,[_index,0],_color]; + lnbSetColor [8,[_index,1],_color]; + lnbSetColor [8,[_index,3],_color]; + }; + }forEach "+_skn_pv_hackerLog+"; +}; +"+_skn_adminLog+" = { + 1 call "+_skn_switchMainMenu+"; + lbClear (6 call "+_skn_getCtrl+"); + + _table = 8 call "+_skn_getCtrl+"; + lbClear _table; + true spawn "+_skn_switchTable+"; + if (call "+_skn_removespawnMenu+") then {uiSleep 0.4; + _table ctrlSetFade 1; + _table ctrlcommit 0; + _table ctrlSetFade 0; + _table ctrlcommit 0.8; + }; + + _table ctrlShow true; + _table lnbAddRow ['===================================== ADMIN LOG ======================================']; + + {_table lnbAddRow _x}forEach "+_skn_pv_adminLog+"; +}; +"+_skn_flipVehicle+" = { + _target = cursorTarget; + if (isNull _target) then { + _vehicles = player nearEntities[['LandVehicle', 'Ship', 'Air'], 15]; + if !(_vehicles isEqualTo []) then { + _target = _vehicles select 0; + }; + }; + + if (!isNull _target) then { + if (!isPlayer _target) then { + _target setVectorUp [0, 0, 1]; + cutText [format ['Unflipping Vehicle..'],'PLAIN DOWN']; + }; + }; +}; +"+_skn_infrontTP+" = { + if ("+_skn_tg_infrontTP+") then { + if (vehicle player == player) then { + _distance = 10; + _object = vehicle player; + _dir = getdir _object; + _pos = getPosATL _object; + if (_object isKindOf 'Air') then { + _distance = 50; + _pos = [(_pos select 0)+_distance*sin(_dir),(_pos select 1)+_distance*cos(_dir),((getpos _object) select 2)+100]; + } else { + _pos = [(_pos select 0)+_distance*sin(_dir),(_pos select 1)+_distance*cos(_dir),_pos select 2]; + if (surfaceIsWater _pos) then {_pos set [2,(getPosASL _object) select 2]}; + }; + if (surfaceIsWater _pos) then [{vehicle player setPosASL _pos},{vehicle player setPosATL _pos}]; + } else { + cutText ['You can just Teleport Infront when you are not inside of a Vehicle!','PLAIN DOWN']; + }; + }; +}; +"+_skn_jumpUp+" = { + if ("+_skn_tg_jumpUp+") then { + if (vehicle player == player) then { + _skn_velo = velocity player; + _skn_velo set [2,10]; + player setVelocity _skn_velo; + } else { + cutText ['You can just Jump up when you are not inside of a Vehicle!','PLAIN DOWN']; + }; + }; +}; +"+_skn_unlock+" = { + _target = cursortarget; + if (_target iskindof 'Landvehicle' || _target iskindof 'SHIP' || _target iskindof 'AIR' || _target iskindof 'TANK' || _target iskindof 'Constructions_lockedstatic_F') then { + [110,_target] call "+_skn_adminRequest_PVC+"; + } + else { + cutText ['No (Un)Lockable Target found!','PLAIN DOWN']; + }; +}; +"+_skn_daynight+" = { + [111,6] call "+_skn_adminRequest_PVC+"; +}; +"+_skn_customBanreason+" = { + disableSerialization; + _player = objectFromNetId (_this select 1); + _name = name _player; + {(_x call "+_skn_getCtrl+") ctrlShow true}forEach[30,31,32,33,34]; + + _edit = 31 call "+_skn_getCtrl+"; + _edit ctrlSetText ''; + if ((_this select 2) isEqualType 'STRING') then { + _edit ctrlSetText format['%1',(_this select 2)]; + }; + + _text = 34 call "+_skn_getCtrl+"; + _text ctrlSetText format ['Custom Banreason for %1:',_name]; + "+_skn_tg_BanPlayer+" = _player; + findDisplay -1337 displayAddEventHandler ['Unload', {"+_skn_tg_BanPlayer+" = objNull}]; + + _map = 7 call "+_skn_getCtrl+"; + _map ctrlSetPosition [0.501031 * safezoneW + safezoneX,0.44456 * safezoneH + safezoneY,0.205265 * safezoneW,0.328148 * safezoneH]; + _map ctrlCommit 0.8; +}; +"+_skn_doBan+" = { + disableSerialization; + if (_this && !isNull "+_skn_tg_BanPlayer+") then { + _reason = ctrlText 31; + if (_reason == '') then { + ctrlSetText [31, 'Please enter a banreason!']; + } else { + [666,[_reason,netId "+_skn_tg_BanPlayer+"]] call "+_skn_adminRequest_PVC+"; + }; + }; + + {_i = _x call "+_skn_getCtrl+";_i ctrlShow false;_i ctrlShow true}forEach[32,33]; + + "+_skn_tg_BanPlayer+" = objNull; + + _map = 7 call "+_skn_getCtrl+"; + _map ctrlSetPosition [0.501031 * safezoneW + safezoneX,0.28836 * safezoneH + safezoneY,0.205265 * safezoneW,0.486548 * safezoneH]; + _map ctrlCommit 0.8; +}; +"); + +_skn_admininit = compileFinal ("waitUntil {(!isNil '"+_skn_Admin_Code+"') && (!isNil '"+_skn_pv_adminLog+"') && (!isNil '"+_skn_pv_hackerLog+"')};[] spawn "+_skn_Admin_Code+""); +call compile (_skn_Admin_Code+" = _skn_admincode"); + +missionNamespace setVariable [_skn_Admin_Init, _skn_admininit, true]; diff --git a/Server/@epochhive/addons/epoch_server/init/server_variables.sqf b/Server/@epochhive/addons/epoch_server/init/server_variables.sqf new file mode 100644 index 0000000..d9106fe --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/init/server_variables.sqf @@ -0,0 +1,174 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Init Server Variables + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/init/server_variables.sqf +*/ +EPOCH_BuildingSlots = []; +EPOCH_TraderSlots = []; +EPOCH_saveBldQueue = []; +EPOCH_saveVehQueue = []; +EPOCH_saveStorQueue = []; +EPOCH_saveBuildQueue = []; +EPOCH_cleanupQueue = []; +EPOCH_defaultVars_SEPXVar = compileFinal str(EPOCH_defaultVars); +EPOCH_group_upgrade_lvl_SEPXVar = EPOCH_group_upgrade_lvl; +EPOCH_staticTraderLocations = []; +EPOCH_staticNPCTraderPos = []; +EPOCH_traderStoredVehicles = []; +EPOCH_traderStoredVehiclesCnt = []; +Epoch_LootedBuildings = []; + +private _configArray = [ + ["serverRestart", false], + ["forceRestartTime", 14400], + ["StorageSlotsLimit",1500], + ["BuildingSlotsLimit", 1500], + ["StaticDateTime", []], + ["timeDifference", 0], + ["lootMultiplier", 0.5], + ["WeatherChances", [0.1,0.1,0.1,0.1]], + ["showEarthQuakes", true], + ["showSatellites", true], + ["showShippingContainers", true], + ["cloneCost", 100], + ["vehicleLockTime", "1800"], + ["vehicleLockTimeHome", "259200"], + ["antagonistChancePDeath", 0.33], + ["taxRate", 0.1], + ["starterTraderItems", [[], []]], + ["SHOW_TRADERS", true], + ["SHOW_JAMMERS", true], + ["SHOW_BOATLOOT", true], + ["NPCSlotsLimit", 50], + ["forceStaticTraders", true], + ["expiresBuilding", "604800"], + ["expiresPlayer", "2592000"], + ["expiresBank", "7776000"], + ["expiresVehicle", "604800"], + ["expiresAIdata", "604800"], + ["expiresCommunityStats", "7776000"], + ["expiresPlayerTopStats", "604800"], + ["hiveAdminCmdExec", false], + ["hiveAdminSavePlayerList", true], + ["hiveAdminCmdTime", 5], + ["DEBUG_VEH", false], + ["useOldLoadVehicles", false], + ["enableUnitTestOnStart", 0], + ["forcedVehicleSpawnTable",""], + ["forcedLootSpawnTable",""] +]; + +EPOCH_fnc_returnConfigEntry = { + private["_defaultData", "_config", "_varData"]; + _defaultData = _this select 2; + _varData = _defaultData; + if (isClass(_this select 0)) then{ + _config = (_this select 0) >> (_this select 1); + _varData = switch (typeName _defaultData) do { + case "SCALAR": {if (isNumber (_config)) then { getNumber _config } else {_defaultData} }; + case "BOOL": {if (isText (_config)) then {(getText _config) isEqualTo "true"} else {if (isNumber (_config)) then {(getNumber _config) isEqualTo 1} else {_defaultData}}}; + case "ARRAY": {if (isArray (_config)) then { getArray _config } else {_defaultData} }; + case "STRING": {if (isText (_config)) then { getText _config } else {_defaultData} }; + default {_defaultData}; + }; + }; + _varData +}; + +// Cast default vars to global vars +// Note: TODO not all of these should be cast to a global var to save memory. If used only once use config lookup. +private _serverSettingsConfig = configFile >> "CfgEpochServer"; +{ + private _varData = [_serverSettingsConfig,_x select 0,_x select 1] call EPOCH_fnc_returnConfigEntry; + missionNamespace setVariable[format["EPOCH_%1", _x select 0], _varData]; +}forEach _configArray; + +// Convert Starter Trader items from alternative syntax +if (count EPOCH_starterTraderItems == 0) then { + EPOCH_starterTraderItems = [[],[]]; +}; +if ((EPOCH_starterTraderItems select 0) isEqualTypeArray ["",0]) then { + private _EPOCH_starterTraderItems = [[],[]]; + { + if (_x isEqualTypeArray ["",0]) then { + (_EPOCH_starterTraderItems select 0) pushback (_x select 0); + (_EPOCH_starterTraderItems select 1) pushback (_x select 1); + }; + } foreach EPOCH_starterTraderItems; + EPOCH_starterTraderItems = _EPOCH_starterTraderItems; +}; + +// Convert Starter Trader Magazines from mags to rounds +{ + _maxrnd = 1; + if ([_x,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _x >> "count"); + }; + if (_maxrnd > 1) then { + _currentStock = (EPOCH_starterTraderItems select 1 select _foreachindex)*_maxrnd; + (EPOCH_starterTraderItems select 1) set [_foreachindex, _currentStock]; + }; +} foreach (EPOCH_starterTraderItems select 0); + +// Load / Build Top-Statistics +_TopStatsVarsDb = (['CommunityStats', '0_TopStatsVars'] call EPOCH_fnc_server_hiveGETRANGE) param [1,[]]; +_TopStatsDb = (['CommunityStats', '0_TopStats'] call EPOCH_fnc_server_hiveGETRANGE) param [1,[]]; +EPOCH_TopStatsVars = (["CfgEpochClient", "TopStatsDialogEntries", []] call EPOCH_fnc_returnConfigEntryV2) apply {_x param [0,""]}; +EPOCH_TopStats = []; +_EPOCH_expiresCommunityStats = call compile EPOCH_expiresCommunityStats; +_EPOCH_expiresPlayerTopStats = call compile EPOCH_expiresPlayerTopStats; +{ + _added1 = false; + if (count _TopStatsVarsDb >= _foreachindex) then { + if (_x isEqualTo (_TopStatsVarsDb select _foreachindex)) then { + if (count _TopStatsDb >= _foreachindex) then { + _newstats2 = []; + { + _x params ["_value","_UID","_name"]; + (['CommunityStats', _UID] call EPOCH_fnc_server_hiveGETTTL) params ["","_communityStats","_ttl"]; + if !(_communityStats isequalto []) then { + if (_ttl > ((_EPOCH_expiresCommunityStats - _EPOCH_expiresPlayerTopStats) max 0)) then { + _newstats2 pushback [_value,_UID,_name]; + }; + }; + } foreach (_TopStatsDb select _foreachindex); + EPOCH_TopStats pushback _newstats2; + _added1 = true; + }; + }; + }; + if (!_added1) then { + EPOCH_TopStats pushback []; + }; +} foreach EPOCH_TopStatsVars; +if !(EPOCH_TopStatsVars isEqualTo _TopStatsVarsDb) then { + ["CommunityStats", "0_TopStatsVars", EPOCH_expiresCommunityStats, EPOCH_TopStatsVars] call EPOCH_fnc_server_hiveSETEX; +}; +publicvariable "EPOCH_TopStats"; +publicvariable "EPOCH_TopStatsVars"; + +Epoch_LootCleanupTime = getNumber ((getmissionconfig "CfgBuildingLootPos") >> "LootCleanupTime"); +if (Epoch_LootCleanupTime == 0) then { + Epoch_LootCleanupTime = 300; +}; + +Epoch_LootContainers = []; +{ + _x params ["","_class",""]; + if (_class isEqualType []) then { + Epoch_LootContainers = Epoch_LootContainers + _class; + } + else { + Epoch_LootContainers pushback _class; + }; +} forEach (getArray (missionConfigFile >> "CfgBuildingLootPos" >> "Default" >> "lootTypes")); +Epoch_LootContainers = compilefinal (str Epoch_LootContainers); diff --git a/Server/@epochhive/addons/epoch_server/license.txt b/Server/@epochhive/addons/epoch_server/license.txt new file mode 100644 index 0000000..35440e4 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/license.txt @@ -0,0 +1,9 @@ +Epoch Mod for Arma 3 +http://epochmod.com +by Epoch Mod Team +https://github.com/EpochModTeam/Epoch + +The contents of this pbo are under the following license: +http://www.bistudio.com/community/licenses/arma-public-license-share-alike + +Keep this file and file headers with attribution intact for proper use. \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server/system/Trader_brain.fsm b/Server/@epochhive/addons/epoch_server/system/Trader_brain.fsm new file mode 100644 index 0000000..9d8d394 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/system/Trader_brain.fsm @@ -0,0 +1,584 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"trader",0,250,-200.000000,-275.000000,-100.000000,-225.000000,0.000000,"trader"}; +item1[] = {"_",8,218,50.000000,375.000000,150.000000,425.000000,5.000000,""}; +item2[] = {"decision",2,250,175.000000,-200.000000,275.000000,-150.000000,0.000000,"decision"}; +item3[] = {"decision_made",4,218,175.000000,-25.000000,275.000000,25.000000,100.000000,"decision made"}; +item4[] = {"action",2,250,50.000000,125.000000,150.000000,175.000000,0.000000,"action"}; +item5[] = {"actioned",4,218,-200.000000,125.000000,-100.000000,175.000000,100.000000,"actioned"}; +item6[] = {"dispose",4,218,125.000000,-325.000000,225.000000,-275.000000,90.000000,"dispose"}; +item7[] = {"reset_vars",2,250,-75.000000,-200.000000,25.000000,-150.000000,0.000000,"reset vars"}; +item8[] = {"_",8,218,-75.000000,-25.000000,25.000000,25.000000,5.000000,""}; +item9[] = {"met",4,218,-200.000000,-125.000000,-100.000000,-75.000000,10.000000,"met"}; +item10[] = {"_",8,218,50.000000,50.000000,150.000000,100.000000,5.000000,""}; +item11[] = {"end",1,250,425.000000,25.000000,525.000000,75.000000,0.000000,"end"}; +item12[] = {"dispose",4,218,250.000000,25.000000,350.000000,75.000000,80.000000,"dispose"}; +item13[] = {"criteria",2,250,-200.000000,-25.000000,-100.000000,25.000000,0.000000,"criteria"}; +item14[] = {"interrupt_action",2,250,50.000000,-25.000000,150.000000,25.000000,0.000000,"interrupt action"}; +item15[] = {"player",4,218,50.000000,-125.000000,150.000000,-75.000000,10.000000,"player"}; +item16[] = {"_",8,218,50.000000,-200.000000,150.000000,-150.000000,5.000000,""}; +item17[] = {"go_work",4,218,307.360077,-260.220886,397.360077,-210.220947,70.000000,"go work"}; +item18[] = {"go_home",4,218,350.000000,-200.000000,450.000000,-150.000000,60.000000,"go home"}; +item19[] = {"work",4,218,175.000000,250.000000,275.000000,300.000000,60.000000,"work"}; +item20[] = {"move_to_work",2,4346,425.000000,250.000000,525.000000,300.000000,0.000000,"move to work"}; +item21[] = {"home",4,218,100.000000,300.000000,200.000000,350.000000,50.000000,"home"}; +item22[] = {"move_to_home",2,250,425.000000,325.000000,525.000000,375.000000,0.000000,"move to home"}; +item23[] = {"look_at",4,218,225.000000,-300.000000,325.000000,-250.000000,80.000000,"look at"}; +item24[] = {"serve",4,218,225.000000,175.000000,325.000000,225.000000,70.000000,"serve"}; +item25[] = {"look_at",2,250,425.000000,175.000000,525.000000,225.000000,0.000000,"look at"}; +item26[] = {"no_decisiion",4,218,50.000000,-275.000000,150.000000,-225.000000,85.000000,"no decisiion"}; +item27[] = {"interrupt",4,218,250.000000,100.000000,350.000000,150.000000,75.000000,"interrupt"}; +item28[] = {"trade",2,250,425.000000,100.000000,525.000000,150.000000,0.000000,"trade"}; +item29[] = {"_",8,218,-200.000000,-200.000000,-100.000000,-150.000000,5.000000,""}; +link0[] = {0,29}; +link1[] = {1,4}; +link2[] = {2,3}; +link3[] = {2,6}; +link4[] = {2,17}; +link5[] = {2,18}; +link6[] = {2,23}; +link7[] = {2,26}; +link8[] = {3,4}; +link9[] = {4,5}; +link10[] = {4,12}; +link11[] = {4,19}; +link12[] = {4,21}; +link13[] = {4,24}; +link14[] = {4,27}; +link15[] = {5,13}; +link16[] = {6,2}; +link17[] = {7,16}; +link18[] = {8,14}; +link19[] = {9,7}; +link20[] = {10,4}; +link21[] = {12,11}; +link22[] = {13,8}; +link23[] = {13,9}; +link24[] = {14,10}; +link25[] = {14,15}; +link26[] = {15,2}; +link27[] = {16,2}; +link28[] = {17,2}; +link29[] = {18,2}; +link30[] = {19,20}; +link31[] = {20,1}; +link32[] = {21,22}; +link33[] = {22,1}; +link34[] = {23,2}; +link35[] = {24,25}; +link36[] = {25,1}; +link37[] = {26,7}; +link38[] = {27,28}; +link39[] = {28,1}; +link40[] = {29,7}; +globals[] = {0.000000,0,0,0,0,640,480,1,92,6316128,1,-256.926910,577.747742,523.678101,-359.150879,828,844,1}; +window[] = {2,-1,-1,-32000,-32000,557,1952,2977,32,3,850}; +*//*%FSM*/ +class FSM +{ + fsmName = "traders"; + class States + { + /*%FSM*/ + class trader + { + name = "trader"; + itemno = 0; + init = /*%FSM*/"_trader = _this select 0;" \n + "_home = _this select 1;" \n + "_work = _this select 2 select 0;" \n + "_schedule = _this select 2 select 1;" \n + "_trgt = objNull;" \n + "" \n + "_trader disableAI ""FSM"";" \n + "_trader disableAI ""TARGET"";" \n + "_trader disableAI ""AUTOTARGET"";" \n + "_trader setBehaviour ""CARELESS"";" \n + "_trader setCombatMode ""BLUE"";" \n + "" \n + "_traderNames=[""Aaron"",""Kenneth"",""Paul"",""Darren"",""Damian"",""Niklas"",""Andrew"",""Nigel"",""Harry"",""Phil"",""Antony"",""Dave"",""Hammish"",""Richard"",""Peter"",""Conor""];" \n + "_traderName = selectRandom _traderNames;" \n + "" \n + "_trgtArray = [""Epoch_Man_base_F"",""Epoch_Female_base_F""];" \n + "_tRange = 20;//Travel Range - Pause if players within range when travelling home" \n + "_sRange = 10;//Serve Range - Look at players within this distance" \n + "_maxTravelTime = 480;//Max time before process times out and continues, after moving. moveToCompleted will timeout before this." \n + "_atWork = false;" \n + "_atHome = true;" \n + "_lastDir = getDir _trader;" \n + "_l = diag_tickTime;" \n + "" \n + "" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 29; + priority = 5.000000; + to="reset_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class decision + { + name = "decision"; + itemno = 2; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class decision_made + { + itemno = 3; + priority = 100.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_decisionMade;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class dispose + { + itemno = 6; + priority = 90.000000; + to="decision"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(alive _trader)"/*%FSM*/; + action=/*%FSM*/"_doDispose = true;" \n + "_decisionMade = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class no_decisiion + { + itemno = 26; + priority = 85.000000; + to="reset_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > 3;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class look_at + { + itemno = 23; + priority = 80.000000; + to="decision"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _nrPlyrs >0 && diag_tickTime - _l > 3;"/*%FSM*/; + action=/*%FSM*/"_servePlyr = true;" \n + "_decisionMade = true;" \n + "_trgt = _nrPlyrs select 0;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class go_work + { + itemno = 17; + priority = 70.000000; + to="decision"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!_atWork) && (_daytime > (_schedule select 0) && _daytime < (_schedule select 1));"/*%FSM*/; + action=/*%FSM*/"_goWork = true;" \n + "_decisionMade = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class go_home + { + itemno = 18; + priority = 60.000000; + to="decision"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!_atHome) && (!(_daytime > (_schedule select 0) && _daytime < (_schedule select 1)));"/*%FSM*/; + action=/*%FSM*/"_goHome = true;" \n + "_decisionMade = true;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class action + { + name = "action"; + itemno = 4; + init = /*%FSM*/"_nrPlyrs = _trader nearEntities [_trgtArray, _tRange];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class actioned + { + itemno = 5; + priority = 100.000000; + to="criteria"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_actionDone;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class dispose + { + itemno = 12; + priority = 80.000000; + to="end"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doDispose;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class interrupt + { + itemno = 27; + priority = 75.000000; + to="trade"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_override;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class serve + { + itemno = 24; + priority = 70.000000; + to="look_at"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_servePlyr;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class work + { + itemno = 19; + priority = 60.000000; + to="move_to_work"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_goWork && !_override;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class home + { + itemno = 21; + priority = 50.000000; + to="move_to_home"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_goHome && !_override;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class reset_vars + { + name = "reset_vars"; + itemno = 7; + init = /*%FSM*/"//Default Vars" \n + "" \n + "" \n + "_rnd = 0;" \n + "_actionDone = false;" \n + "_decisionMade = false;" \n + "_sWait = 0;" \n + "_doDispose = false;" \n + "_chooseTarget = false;" \n + "_criteria = Nil;" \n + "_criteriaMet = false;" \n + "_allowInterrupt = false;" \n + "_t = diag_tickTime;" \n + "" \n + "" \n + "_traderPos=[0,0,0];" \n + "_goWork = false;" \n + "_goHome = false;" \n + "_nrPlyrs = [];" \n + "_servePlyr = false;" \n + "_override = false;" \n + "" \n + "_criteriaMetAction = nil;" \n + "" \n + "_traderPos = getPosATL _trader;" \n + "_daytime = daytime;" \n + "_nrPlyrs = _trader nearEntities [_trgtArray, _sRange];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 16; + priority = 5.000000; + to="decision"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + name = "end"; + itemno = 11; + init = /*%FSM*/"diag_log format[""KILLED TRADER: %1"", (!alive _trader)];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class criteria + { + name = "criteria"; + itemno = 13; + init = /*%FSM*/"//intentionally left blank"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class met + { + itemno = 9; + priority = 10.000000; + to="reset_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(call compile _criteria) || (diag_tickTime > (_t + _sWait));"/*%FSM*/; + action=/*%FSM*/"if (!isNil ""_criteriaMetAction"") then {" \n + "call compile _criteriaMetAction;" \n + "};"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 8; + priority = 5.000000; + to="interrupt_action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class interrupt_action + { + name = "interrupt_action"; + itemno = 14; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class player + { + itemno = 15; + priority = 10.000000; + to="decision"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(count _nrPlyrs > 0) && _allowInterrupt;"/*%FSM*/; + action=/*%FSM*/"_trader moveTo getPos _trader;" \n + "_override = true;" \n + "_actionDone = false;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 10; + priority = 5.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class move_to_work + { + name = "move_to_work"; + itemno = 20; + init = /*%FSM*/"_trader moveTo _work;" \n + "_sWait = _maxTravelTime;" \n + "_actionDone = true;" \n + "_t = diag_tickTime;" \n + "_criteria = format[""moveToCompleted %1"",""_trader""];" \n + "_criteriaMetAction = format [""_atWork = %1"",true];" \n + "_atHome = false;" \n + "_allowInterrupt = true;" \n + "" \n + "_markers = _trader getVariable[""MARKER_REF"",[]];" \n + "if !(_markers isEqualTo []) then {" \n + " [_markers] call EPOCH_server_deleteGlobalMarkerSet;" \n + " ['DynamicTrader', _work] call EPOCH_server_createGlobalMarkerSet;" \n + " _trader setVariable['MARKER_REF', _markers];" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 1; + priority = 5.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class move_to_home + { + name = "move_to_home"; + itemno = 22; + init = /*%FSM*/"_trader moveTo _home;" \n + "_sWait = _maxTravelTime;" \n + "_actionDone = true;" \n + "_t = diag_tickTime;" \n + "_criteria = format[""moveToCompleted %1"",""_trader""];" \n + "_criteriaMetAction = format [""_atHome = %1"",true];" \n + "_atWork = false;" \n + "_allowInterrupt = true;" \n + "" \n + "_markers = _trader getVariable[""MARKER_REF"",[] ];" \n + "if !(_markers isEqualTo []) then {" \n + " [_markers] call EPOCH_server_deleteGlobalMarkerSet;" \n + " ['DynamicTrader', _home] call EPOCH_server_createGlobalMarkerSet;" \n + " _trader setVariable['MARKER_REF', _markers];" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 1; + priority = 5.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class look_at + { + name = "look_at"; + itemno = 25; + init = /*%FSM*/"if !(isNull _trgt) then {" \n + "_dir = _trader getDir _trgt;" \n + "if(_lastDir != _dir)then{" \n + " _trader setDir _dir;" \n + " _lastDir = _dir;" \n + "};" \n + "};" \n + "_sWait = 1;" \n + "_actionDone = true;" \n + "_t = diag_tickTime;" \n + "_criteria = format [""%1"", true ];" \n + "_l = diag_tickTime;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 1; + priority = 5.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class trade + { + name = "trade"; + itemno = 28; + init = /*%FSM*/"if !(isNull _trgt) then {" \n + " _trader setDir (_trader getDir _trgt);" \n + "};" \n + "_sWait = 480;" \n + "_actionDone = true;" \n + "_t = diag_tickTime;" \n + "_allowInterrupt = true;" \n + "_criteria = format [""count %1 < %2"",""_nrPlyrs"",1];" \n + "" \n + "if (_goHome) then {" \n + "_criteriaMetAction = format [""%1 moveTo %2"",""_trader"",""_home""];" \n + "};" \n + "" \n + "if (_goWork) then {" \n + "_criteriaMetAction = format [""%1 moveTo %2"",""_trader"",""_work""];" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 1; + priority = 5.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="trader"; + finalStates[] = + { + "end", + }; +}; +/*%FSM*/ \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server/system/mission_control.fsm b/Server/@epochhive/addons/epoch_server/system/mission_control.fsm new file mode 100644 index 0000000..7289473 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/system/mission_control.fsm @@ -0,0 +1,315 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"mission_control",0,4346,-225.000000,-400.000000,-125.000000,-350.000000,0.000000,"mission control"}; +item1[] = {"_",8,218,-225.000000,-300.000000,-125.000000,-250.000000,0.000000,""}; +item2[] = {"start",2,250,-225.000000,-225.000000,-125.000000,-175.000000,0.000000,"start"}; +item3[] = {"wait",4,218,-100.000000,-225.000000,0.000000,-175.000000,0.000000,"wait"}; +item4[] = {"commands",2,250,-100.000000,-100.000000,0.000000,-50.000000,0.000000,"commands"}; +item5[] = {"continue",4,218,-225.000000,-100.000000,-125.000000,-50.000000,10.000000,"continue"}; +item6[] = {"end",4,218,-350.000000,25.000000,-250.000000,75.000000,5.000000,"end"}; +item7[] = {"___2",4,218,25.000000,-225.000000,125.000000,-175.000000,0.000000,"0"}; +item8[] = {"end",1,250,-350.000000,-100.000000,-250.000000,-50.000000,0.000000,"end"}; +item9[] = {"add_player",2,250,150.000000,-225.000000,250.000000,-175.000000,0.000000,"add player"}; +item10[] = {"clean_up",2,250,-225.000000,25.000000,-125.000000,75.000000,0.000000,"clean up"}; +item11[] = {"__",4,218,25.000000,-150.000000,125.000000,-100.000000,0.000000,"1"}; +item12[] = {"remove_player",2,250,150.000000,-150.000000,250.000000,-100.000000,0.000000,"remove player"}; +item13[] = {"",7,210,296.000000,46.000000,304.000000,54.000000,0.000000,""}; +item14[] = {"",7,210,296.000000,-204.000000,304.000000,-196.000000,0.000000,""}; +item15[] = {"",7,210,296.000000,-129.000000,304.000000,-120.999992,0.000000,""}; +item16[] = {"",7,210,296.000000,46.000000,304.000000,54.000000,0.000000,""}; +item17[] = {"_",8,218,150.000000,25.000000,250.000000,75.000000,0.000000,""}; +item18[] = {"check_players",2,250,150.000000,125.000000,250.000000,175.000000,0.000000,"check players"}; +item19[] = {"_",8,218,25.000000,25.000000,125.000000,75.000000,0.000000,""}; +item20[] = {"_",8,218,-100.000000,25.000000,0.000000,75.000000,0.000000,""}; +item21[] = {"client_command_",2,250,25.000000,125.000000,125.000000,175.000000,0.000000,"client" \n "command / messages"}; +item22[] = {"___1",4,218,25.000000,-81.163773,124.999992,-31.163784,0.000000,"2"}; +item23[] = {"hold_var",2,250,149.999969,-81.163773,249.999969,-31.163784,0.000000,"hold var"}; +link0[] = {0,1}; +link1[] = {1,2}; +link2[] = {2,3}; +link3[] = {3,4}; +link4[] = {4,7}; +link5[] = {4,11}; +link6[] = {4,22}; +link7[] = {5,2}; +link8[] = {6,8}; +link9[] = {7,9}; +link10[] = {9,14}; +link11[] = {10,5}; +link12[] = {10,6}; +link13[] = {11,12}; +link14[] = {12,15}; +link15[] = {14,15}; +link16[] = {15,16}; +link17[] = {16,17}; +link18[] = {17,18}; +link19[] = {18,19}; +link20[] = {19,21}; +link21[] = {20,10}; +link22[] = {21,20}; +link23[] = {22,23}; +link24[] = {23,15}; +globals[] = {0.000000,0,0,0,0,640,480,1,319,6316128,1,-356.228333,361.065094,273.349731,-454.917542,719,730,1}; +window[] = {2,-1,-1,-32000,-32000,733,208,1233,208,3,737}; +*//*%FSM*/ +class FSM +{ + fsmName = "mission control server"; + class States + { + /*%FSM*/ + class mission_control + { + name = "mission_control"; + init = /*%FSM*/"_clientCmd = [];" \n + "_plyrArr = [];" \n + "" \n + "//Vars" \n + "_plyArrTmp = [];" \n + "" \n + "//Held Var" \n + "_tmpVar = [];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + priority = 0.000000; + to="start"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class start + { + name = "start"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class wait + { + priority = 0.000000; + to="commands"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _clientCmd > 0"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class commands + { + name = "commands"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class __ + { + priority = 0.000000; + to="remove_player"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_clientCmd select 1 == 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class ___1 + { + priority = 0.000000; + to="hold_var"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_clientCmd select 1 == 2"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class ___2 + { + priority = 0.000000; + to="add_player"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_clientCmd select 1 == 0"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + name = "end"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class add_player + { + name = "add_player"; + init = /*%FSM*/"_plyrArr pushBack [_clientCmd select 0,_clientCmd select 2, _clientCmd select 3];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + priority = 0.000000; + to="check_players"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class clean_up + { + name = "clean_up"; + init = /*%FSM*/"_clientCmd = [];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class continue + { + priority = 10.000000; + to="start"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _plyrArr > 0"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + priority = 5.000000; + to="end"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _plyrArr < 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class remove_player + { + name = "remove_player"; + init = /*%FSM*/"_plyrArrTmp = +_plyrArr;" \n + "_plyrArr = [];" \n + "{" \n + " if!(_x select 0 == _clientCmd select 0)then{" \n + " _plyrArr pushBack _x;" \n + " };" \n + "}forEach _plyrArrTmp;" \n + "_plyrArrTmp = [];" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + priority = 0.000000; + to="check_players"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class check_players + { + name = "check_players"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + priority = 0.000000; + to="client_command_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class client_command_ + { + name = "client_command_"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + priority = 0.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class hold_var + { + name = "hold_var"; + init = /*%FSM*/"if( in _plyrArr)then{" \n + "" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + priority = 0.000000; + to="check_players"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="mission_control"; + finalStates[] = + { + "end", + }; +}; +/*%FSM*/ \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server/system/server_monitor.fsm b/Server/@epochhive/addons/epoch_server/system/server_monitor.fsm new file mode 100644 index 0000000..3349e73 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server/system/server_monitor.fsm @@ -0,0 +1,619 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"Init",0,4346,600.000000,-575.000000,700.000000,-525.000000,0.000000,"Init"}; +item1[] = {"_",8,218,600.000000,-500.000000,700.000000,-450.000000,0.000000,""}; +item2[] = {"Process",2,250,600.000000,-350.000000,700.000000,-300.000000,0.000000,"Process"}; +item3[] = {"Vehicle_and_Player",4,218,750.986694,-310.854675,850.986694,-260.854675,1.000000,"" \n "Vehicle and Player" \n "Checks"}; +item4[] = {"CMD_queue",4,218,450.000000,-450.000000,550.000000,-400.000000,10.000000,"CMD queue"}; +item5[] = {"Save_Players",4,218,450.000000,-375.000000,550.000000,-325.000000,3.000000,"Save" \n "Players"}; +item6[] = {"Cleanup",4,218,750.000000,-375.000000,850.000000,-325.000000,8.000000,"Cleanup"}; +item7[] = {"Events_Manager",4,218,599.992371,-192.435822,699.992371,-142.435822,0.000000,"Events" \n "Manager"}; +item8[] = {"Save_Vehicles",4,218,450.000000,-300.000000,550.000000,-250.000000,4.000000,"Save" \n "Vehicles"}; +item9[] = {"Cleanup_Handler",4,218,750.000000,-450.000000,850.000000,-400.000000,8.000000,"Cleanup" \n "Handler"}; +item10[] = {"Server_FPS",4,218,746.045227,-248.683014,846.045227,-198.683014,0.000000,"Server FPS"}; +item11[] = {"Forced_Restart",4,218,684.856567,-214.145233,784.856567,-164.145233,0.000000,"Forced" \n "Restart"}; +item12[] = {"Events_Monitor",4,218,516.730896,-213.251221,616.730896,-163.251221,0.000000,"Events" \n "Monitor"}; +item13[] = {"_",-1,250,532.894043,-183.108612,548.753357,-175.178955,0.000000,""}; +item14[] = {"Loot_Cleanup",4,218,419.174591,-226.325470,519.174561,-176.325470,8.000000,"Loot" \n "Cleanup"}; +version=1; +class LayoutItems +{ + class Item13 + { + class ItemInfo + { + FontFace="Arial"; + FontHeight=10; + lStyle=1; + }; + }; +}; +link0[] = {0,1}; +link1[] = {1,2}; +link2[] = {2,3}; +link3[] = {2,4}; +link4[] = {2,5}; +link5[] = {2,6}; +link6[] = {2,7}; +link7[] = {2,8}; +link8[] = {2,9}; +link9[] = {2,10}; +link10[] = {2,11}; +link11[] = {2,12}; +link12[] = {2,14}; +link13[] = {3,2}; +link14[] = {4,2}; +link15[] = {5,2}; +link16[] = {6,2}; +link17[] = {7,2}; +link18[] = {8,2}; +link19[] = {9,2}; +link20[] = {10,2}; +link21[] = {11,2}; +link22[] = {12,2}; +link23[] = {14,2}; +globals[] = {0.000000,0,0,0,0,640,480,1,7,6316128,1,275.180084,1161.319580,208.497711,-659.879456,900,884,1}; +window[] = {2,-1,-1,-1,-1,942,182,1474,182,3,918}; +*//*%FSM*/ +class FSM +{ + fsmName = "Server Monitor"; + class States + { + /*%FSM*/ + class Init + { + name = "Init"; + itemno = 0; + init = /*%FSM*/"diag_log ""Loaded Server FSM"";" \n + "" \n + "_cfgSecConf = (configFile >> ""CfgSecConf"");" \n + "_cfgSecConf_vehicles = (_cfgSecConf >> ""vehicles"");" \n + "_safeVehicles = [_cfgSecConf_vehicles, ""safeVehicles"", [""I_UAV_01_F"",""B_Heli_Transport_01_F"",""Steerable_Parachute_F"",""NonSteerable_Parachute_F"",""Land_Camping_Light_F"",""container_epoch""]] call EPOCH_fnc_returnConfigEntry;" \n + "" \n + "_serverSettingsConfig = configFile >> ""CfgEpochServer"";" \n + "_ahInitAuthCfg = [_serverSettingsConfig, ""antihack_ahInitAuthCfg"", [0,180]] call EPOCH_fnc_returnConfigEntry;" \n + "_events = [_serverSettingsConfig, ""events"", []] call EPOCH_fnc_returnConfigEntry;" \n + "_events2Check = [];" \n + "" \n + "_initAhInitBanOrLog = _ahInitAuthCfg select 0;" \n + "_initTimeLimit = _ahInitAuthCfg select 1;" \n + "" \n + "// Load Epoch Events 3.0" \n + "{" \n + " diag_log format[""Loading Settings for %1 event..."",configName _x];" \n + " _events pushBack [getNumber (_x >> ""delay""),getText (_x >> ""script""),getNumber (_x >> ""runOnStart""),getNumber (_x >> ""usePrefix""),getNumber (_x >> ""runNumTimes""),getArray (_x >> ""input""),getArray (_x >> ""disallowedWorlds"")];" \n + "} forEach (""isClass _x"" configClasses (configFile >> ""CfgEpochServerEvents""));" \n + "" \n + "_cmdDelay = EPOCH_hiveAdminCmdTime;" \n + "_cmdRun = EPOCH_hiveAdminCmdExec;" \n + "_savePlayerList = EPOCH_hiveAdminSavePlayerList;" \n + "" \n + "_scriptBasedRestart = EPOCH_ServerRestart;" \n + "_forceRestartTime = EPOCH_forceRestartTime;" \n + "_forceRestartTimeWarning = _forceRestartTime-300;" \n + "" \n + "_prevRestartIn = 0;" \n + "_serverLocked = false;" \n + "_serverRestarting = false;" \n + "_players = [];" \n + "_prevPlayers = [];" \n + "_cleanupItems = [];" \n + "_oldFPS = -1;" \n + "EPOCH_diag_fps = -1;" \n + "_serverFpsTime = diag_tickTime;" \n + "_serverFPSCheckFine = true;" \n + "" \n + "_delayTimeSim = diag_tickTime;" \n + "_delayTimeCMD = diag_tickTime;" \n + "_delayTimeDeSim = diag_tickTime;" \n + "_delayTimeSaveVeh = diag_tickTime;" \n + "_lastWeatherChange = diag_tickTime;" \n + "_lastObjectCleanup = diag_tickTime;" \n + "_lastObjectCleanup1 = diag_tickTime;" \n + "_lastLootCleanup = diag_ticktime;" \n + "" \n + "_pvehTime = diag_tickTime;" \n + "_forcedrestartTimer = diag_tickTime;" \n + "_pvemTime = diag_tickTime;" \n + "" \n + "_instanceID = call EPOCH_fn_InstanceID;" \n + "" \n + "_checkAuth = {" \n + " params [""_puid"",""_player""];" \n + " if !(isNull _player) then {" \n + " if !(_puid call EPOCH_server_Authed) then {" \n + " private _lastCheck = _player getVariable ""LAST_AUTH_CHECK"";" \n + " if (isNil ""_lastCheck"") then {" \n + " _player setVariable[""LAST_AUTH_CHECK"", diag_tickTime];" \n + " _lastCheck = diag_tickTime;" \n + " };" \n + " if (diag_tickTime - _lastCheck > _initTimeLimit) then {" \n + " _player setVariable[""LAST_AUTH_CHECK"", nil];" \n + " if (_initAhInitBanOrLog == 0) then {" \n + " 'epochserver' callExtension format['820|%1|EpochMod.com Autoban #R2', _puid];" \n + " ['ahb', format['%1 (%2): Player not Authenticated', name _player, _puid]] call EPOCH_fnc_server_hiveLog;" \n + " } else {" \n + " ['ahl', format['%1 (%2): Player not Authenticated', name _player, _puid]] call EPOCH_fnc_server_hiveLog;" \n + " };" \n + " };" \n + " } else {" \n + " _player setVariable[""LAST_AUTH_CHECK"", nil];" \n + " };" \n + " };" \n + "};" \n + "" \n + "_cleanIt = {" \n + " if !(isNull _this) then {" \n + " private _lastCheck = _this getVariable ""LAST_CHECK"";" \n + " if (isNil ""_lastCheck"") then {" \n + " _this setVariable[""LAST_CHECK"", diag_tickTime];" \n + " _lastCheck = diag_tickTime;" \n + " };" \n + " if (diag_tickTime - _lastCheck > 1200) then {" \n + " private _list = (_this nearEntities [[""Epoch_Male_F"",""Epoch_Female_F"",""LandVehicle"",""Ship"",""Air"",""Tank""], 45]) select {isPlayer _x};" \n + " if (_list isEqualTo []) then {" \n + " _this setVariable [""LAST_CHECK"",nil];" \n + " //diag_log format[""DEBUG: _cleanIT del %1"", _this];" \n + " deleteVehicle _this;" \n + " };" \n + " };" \n + " };" \n + "};" \n + "" \n + "_cleanIt2 = {" \n + " if !(isNull _this) then {" \n + " private _removed = false;" \n + " private _lastCheck = _this getVariable ""LAST_CHECK"";" \n + " if (isNil ""_lastCheck"") then {" \n + " _this setVariable[""LAST_CHECK"", diag_tickTime];" \n + " _lastCheck = diag_tickTime;" \n + " };" \n + " if (diag_tickTime - _lastCheck > 1200) then {" \n + " private _list = (_this nearEntities [[""Epoch_Male_F"",""Epoch_Female_F"",""LandVehicle"",""Ship"",""Air"",""Tank""], 45]) select {isPlayer _x};" \n + " if (_list isEqualTo []) then {" \n + " {" \n + " deleteVehicle _x;" \n + " }forEach ((nearestObjects [_this, [""WeaponHolder""], 2]) select {!(_x iskindof ""Constructions_lockedstatic_F"" || _x iskindof ""Buildable_Storage"")});" \n + " _this setVariable [""LAST_CHECK"",nil];" \n + " //diag_log format[""DEBUG: _cleanIT2 del %1"", _this];" \n + " deleteVehicle _this;" \n + " _removed = true;" \n + " };" \n + " };" \n + " if !(_removed) then {" \n + " EPOCH_cleanupQueue pushBack _this;" \n + " };" \n + " };" \n + "};" \n + "" \n + "_cleanLoot = {" \n + " if ((_this getvariable [""Epoch_LootCleanup"",diag_ticktime]) > diag_ticktime) exitwith {" \n + " Epoch_LootedBuildings pushBackUnique _this;" \n + " };" \n + " if !((_this nearEntities [[""Epoch_Male_F"", ""Epoch_Female_F""], 50]) isEqualTo []) exitwith {" \n + " Epoch_LootedBuildings pushBackUnique _this;" \n + " };" \n + " _Loots = _this getvariable [""Epoch_BuildingLoot"",[]];" \n + " {" \n + " deletevehicle _x;" \n + " } foreach _Loots;" \n + " _this setvariable [""Epoch_BuildingLoot"",nil];" \n + " _this setvariable [""Epoch_LootCleanup"",nil];" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 1; + priority = 0.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Process + { + name = "Process"; + itemno = 2; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class CMD_queue + { + itemno = 4; + priority = 10.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_cmdRun && ((diag_tickTime - _delayTimeCMD) > _cmdDelay)"/*%FSM*/; + action=/*%FSM*/"_delayTimeCMD = diag_tickTime;" \n + "" \n + "// Execute next item from CMD queue" \n + "_response = ""epochserver"" callExtension format[""600|%1"",_instanceID];" \n + "if (_response != '[1,""""]') then { " \n + " _output = call compile _response; " \n + " if (_output select 0 == 1 && _output select 1 != """") then {" \n + " 0 spawn compile (_output select 1);" \n + " };" \n + "};" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Loot_Cleanup + { + itemno = 14; + priority = 8.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _lastLootCleanup) > 0.5)"/*%FSM*/; + action=/*%FSM*/"" \n + "_lastLootCleanup = diag_tickTime;" \n + "if !(Epoch_LootedBuildings isEqualTo []) then {" \n + " (Epoch_LootedBuildings deleteAt 0) call _cleanLoot;" \n + "};" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Cleanup + { + itemno = 6; + priority = 8.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _lastObjectCleanup1) > 1)"/*%FSM*/; + action=/*%FSM*/"_lastObjectCleanup1 = diag_tickTime;" \n + "" \n + "if !(_cleanupItems isEqualTo []) then {" \n + " (_cleanupItems deleteAt 0) call _cleanIt;" \n + "};" \n + "if !(EPOCH_cleanupQueue isEqualTo []) then {" \n + " (EPOCH_cleanupQueue deleteAt 0) call _cleanIt2;" \n + "};"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Cleanup_Handler + { + itemno = 9; + priority = 8.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _lastObjectCleanup) > 300)"/*%FSM*/; + action=/*%FSM*/"_lastObjectCleanup = diag_tickTime;" \n + "" \n + "// TODO need better way allMissionObjects is not performant" \n + "if (_cleanupItems isEqualTo []) then {" \n + " _cleanupItems = allMissionObjects ""groundWeaponHolder"" + entities ""WeaponHolderSimulated"";" \n + "};"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Save_Vehicles + { + itemno = 8; + priority = 4.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _delayTimeSaveVeh) > 1)"/*%FSM*/; + action=/*%FSM*/"_delayTimeSaveVeh = diag_tickTime;" \n + "if !(EPOCH_saveVehQueue isEqualTo []) then {" \n + " _saveVehicle = EPOCH_saveVehQueue deleteAt 0;" \n + " if !(isNull _saveVehicle) then {" \n + " _saveVehicle call EPOCH_server_save_vehicle;" \n + " };" \n + "};" \n + "if !(EPOCH_saveStorQueue isEqualTo []) then {" \n + " _saveStorage = EPOCH_saveStorQueue deleteAt 0;" \n + " if !(isNull _saveStorage) then {" \n + " _saveStorage call EPOCH_server_save_storage;" \n + " };" \n + "};" \n + "if !(EPOCH_saveBuildQueue isEqualTo []) then {" \n + " _saveBuilding = EPOCH_saveBuildQueue deleteAt 0;" \n + " if !(isNull _saveBuilding) then {" \n + " _saveBuilding call EPOCH_saveBuilding;" \n + " };" \n + "};"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Save_Players + { + itemno = 5; + priority = 3.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_players isEqualTo _prevPlayers)"/*%FSM*/; + action=/*%FSM*/"_prevPlayers = _players;" \n + "" \n + "if (_savePlayerList) then {" \n + " [""PLAYERS"", (call EPOCH_fn_InstanceID), _players] call EPOCH_fnc_server_hiveSET;" \n + "};" \n + "// Group cleanup" \n + "{if (units _x isEqualTo []) then {deleteGroup _x}}forEach allGroups"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Vehicle_and_Player + { + itemno = 3; + priority = 1.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _delayTimeSim) > 5)"/*%FSM*/; + action=/*%FSM*/"_delayTimeSim = diag_tickTime;" \n + "_playersTemp = [];" \n + "{" \n + " private _vehicle = vehicle _x;" \n + " // if player is inside a vehicle check vehicle is in allowed safe vehicles list." \n + " if (_vehicle != _x && {!(typeOf _vehicle in _safeVehicles)}) then {" \n + " // check if vehicle has token set server side and ignore vehicle if was spawned by a Curator (zeus)" \n + " if ((objectCurators _vehicle) isEqualTo [] && {!(_vehicle call EPOCH_server_getVToken)} && !(_vehicle iskindof ""Ejection_Seat_Base_F"")) then {" \n + " diag_log format[""ADMIN: Invalid Vehicle detected and deleted %1 with %2 driving"",_vehicle,_x];" \n + " deleteVehicle _vehicle;" \n + " };" \n + " };" \n + "" \n + " private _pUID = getPlayerUID _x;" \n + " // Add all player UIDs to array for use later." \n + " if (_pUID != """") then { _playersTemp pushBack _pUID; };" \n + "" \n + " // If player is not admin check perform checks." \n + " if !(_x call EPOCH_server_isPAdmin) then {" \n + " // check if player is hidden and if so force back visable." \n + " if (isObjectHidden _x) then {" \n + " _x hideObjectGlobal false;" \n + " diag_log format[""ADMIN: Warning!!! player was hidden and forced visable %1"",_x];" \n + " };" \n + " // check player has authenticated with reverse token check." \n + " if (_pUID != """") then {" \n + " [_pUID, _x] call _checkAuth;" \n + " };" \n + " };" \n + "" \n + "}forEach allPlayers;" \n + "_players = _playersTemp;" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Forced_Restart + { + itemno = 11; + priority = 0.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _forcedrestartTimer) > 20)"/*%FSM*/; + action=/*%FSM*/"// restart script" \n + "_forcedrestartTimer = diag_tickTime;" \n + "if (_scriptBasedRestart) then {" \n + " if (diag_tickTime >= _forceRestartTimeWarning) then {" \n + " if (!_serverLocked) then {" \n + " diag_log ""server shutdown: locked"";" \n + " _serverLocked = true;" \n + " [""lock""] call EPOCH_serverCommand;" \n + " } else {" \n + " if (allPlayers isEqualTo []) then {" \n + " [""shutdown""] call EPOCH_serverCommand;" \n + " diag_log ""server shutdown: now"";" \n + " };" \n + " };" \n + " _restartIn = round((_forceRestartTime-diag_tickTime)/60);" \n + " if (_prevRestartIn != _restartIn) then {" \n + " _prevRestartIn = _restartIn;" \n + " if (_restartIn > 1) then {" \n + " [""message"", format[""Server restart in %1 minutes"",_restartIn]] call EPOCH_serverCommand;" \n + " } else {" \n + " [""message"", format[""Server restart in %1 minute"",1]] call EPOCH_serverCommand;" \n + " };" \n + " };" \n + " };" \n + " // kick all remaining players before shutdown to force player save" \n + " if (diag_tickTime >= _forceRestartTime) then {" \n + " if (_serverRestarting) then {" \n + " [""shutdown""] call EPOCH_serverCommand;" \n + " diag_log ""server shutdown: now"";" \n + " } else {" \n + " {" \n + " [""kick"", _x , ""Server Restarting""] call EPOCH_serverCommand;" \n + " } forEach allPlayers;" \n + " _serverRestarting = true;" \n + " };" \n + " };" \n + "};" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Events_Monitor + { + itemno = 12; + priority = 0.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _pvemTime) > 5)"/*%FSM*/; + action=/*%FSM*/"// Epoch Events Monitor" \n + "_pvemTime = diag_tickTime;" \n + "_events2Check append (missionNamespace getVariable [""EPOCH_RunningEvents"", []]);" \n + "missionNamespace setVariable [""EPOCH_RunningEvents"", nil];" \n + "_newEventsArray = [];" \n + "{" \n + " _x params [""_position"", ""_objs"", ""_extraObjs"", ""_countName"", ""_timeStamp"", ""_decayTime"", ""_showMarkers"", ""_markers"", ""_originalColors"", ""_decayColor"", ""_interactedColor""];" \n + " _formatted = format[""EPOCH_%1"",_countName];" \n + " _current = missionNameSpace getVariable[_formatted,0];" \n + " // check objects" \n + " _objsLeft = [];" \n + " _nearPlayers = (count (_position nearEntities[[""Epoch_Male_F"", ""Epoch_Female_F""], 500]) > 0);" \n + " {" \n + " _isOpenLid = (_x animationPhase 'open_lid' > 0.5); " \n + " _isEPOCH_looted = (_x getVariable [""EPOCH_Loot"",false]);" \n + " _isOpenDoor = (_x animationPhase 'Door_1_rot' > 0.5);" \n + " if(!isNull _x)then{" \n + " _objsLeft pushBack _x;" \n + " };" \n + " if(!(_nearPlayers) && !(_objsLeft isEqualTo []))then{" \n + " if(((_x iskindof 'container_epoch') && {_isOpenLid || _isEPOCH_looted}) || ((_x iskindof 'Cargo_Container') && {_isOpenDoor || _isEPOCH_looted}) || (damage _x isEqualTo 1))then{" \n + " _objsLeft = _objsLeft - [_x];" \n + " };" \n + " };" \n + " }forEach _objs;" \n + " // check event" \n + " if (!(_nearPlayers) && {_objsLeft isEqualTo [] || (diag_tickTime - _timeStamp) > _decayTime}) then {" \n + " // event ends" \n + " missionNameSpace setVariable[_formatted,(_current - 1)];" \n + " if (_showMarkers) then{" \n + " [_markers] call EPOCH_server_deleteGlobalMarkerSet;" \n + " };" \n + " {deleteVehicle _x} forEach _objs;" \n + " {deleteVehicle _x} forEach _extraObjs;" \n + " }else{" \n + " // event continues" \n + " _newEventsArray pushBack _x;" \n + " // check for compromised objs or area" \n + " if (_showMarkers) then{" \n + " if((count(_objsLeft) != count(_objs)) || (count (_position nearEntities[[""Epoch_Male_F"", ""Epoch_Female_F""], 150]) > 0)) then {" \n + " if !((getMarkerColor (_markers select 0)) isEqualTo _interactedColor) then {" \n + " (_markers select 0) setMarkerColor _interactedColor;" \n + " };" \n + " }else{" \n + " if ((getMarkerColor (_markers select 0)) isEqualTo _interactedColor) then {" \n + " if !((diag_tickTime - _timeStamp) > (_decayTime/2)) then {" \n + " (_markers select 0) setMarkerColor (_originalColors select 0);" \n + " }else{" \n + " (_markers select 0) setMarkerColor _decayColor;" \n + " };" \n + " };" \n + " };" \n + " // check for decay and change to configured preset decay color" \n + " if ((diag_tickTime - _timeStamp) > (_decayTime/2)) then {" \n + " if !((getMarkerColor (_markers select 2)) isEqualTo _decayColor) then {" \n + " {" \n + " _x setMarkerColor _decayColor;" \n + " }forEach _markers;" \n + " };" \n + " };" \n + " };" \n + " };" \n + "} forEach _events2Check;" \n + "// remove expired events" \n + "_events2Check = _newEventsArray;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Server_FPS + { + itemno = 10; + priority = 0.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _serverFpsTime) > 30) && _serverFPSCheckFine"/*%FSM*/; + action=/*%FSM*/"_serverFpsTime = diag_tickTime;" \n + "" \n + "if (_oldFPS isEqualTo EPOCH_diag_fps) then {" \n + " _currentFPS = round(diag_fps);" \n + " if !(_oldFPS isEqualTo _currentFPS) then {" \n + " missionNamespace setVariable [""EPOCH_diag_fps"",_currentFPS,true];" \n + " _oldFPS = _currentFPS;" \n + " };" \n + "} else {" \n + " missionNamespace setVariable [""EPOCH_diag_fps"", compileFinal """",true];" \n + " _serverFPSCheckFine = false;" \n + "};" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Events_Manager + { + itemno = 7; + priority = 0.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _pvehTime) > 1)"/*%FSM*/; + action=/*%FSM*/"// Epoch Events" \n + "_pvehTime = diag_tickTime;" \n + "_events append (missionNamespace getVariable [""EPOCH_dynamicEvents"", []]);" \n + "missionNamespace setVariable [""EPOCH_dynamicEvents"", nil];" \n + "_newEvents = [];" \n + "{" \n + " _x params [""_time"", ""_scriptName"", [""_runAtStart"",0], [""_usePrePostfix"",1], [""_runNumTimes"",-1], [""_input"",[]], [""_disallowedWorlds"",[]] ];" \n + " _scriptParams = [];" \n + " _scriptcmdMode = ""execVM"";" \n + " if (_scriptName isEqualType []) then {" \n + " _scriptParams = _scriptName param [0,[]];" \n + " _scriptcmdMode = _scriptName param [1,""call""];" \n + " _scriptName = _scriptName param [2,""""];" \n + " };" \n + " _eventKey = format[""EPOCH_EVENT_%1"", _scriptName];" \n + " _eventCounter = format[""EPOCH_EVENT_COUNTER_%1"", _scriptName];" \n + " _lastTime = missionNamespace getVariable _eventKey;" \n + " _counter = missionNamespace getVariable [_eventCounter,0];" \n + " if (isNil ""_lastTime"") then {" \n + " _startTime = diag_tickTime;" \n + " if (_runAtStart isEqualTo 1) then {" \n + " _startTime = diag_tickTime - _time;" \n + " };" \n + " missionNamespace setVariable[_eventKey, _startTime];" \n + " _lastTime = _startTime;" \n + " };" \n + " if ((_counter >= _runNumTimes && _runNumTimes != -1) || worldName in _disallowedWorlds) then {" \n + " diag_log format[""DEBUG: server event removed %1"", _scriptName];" \n + " missionNamespace setVariable[_eventKey, nil];" \n + " missionNamespace setVariable[_eventCounter, nil];" \n + " } else {" \n + " _newEvents pushBack _x;" \n + " if ((diag_tickTime - _lastTime) >= _time) then {" \n + " missionNamespace setVariable[_eventKey, diag_tickTime];" \n + " _preFix = """";" \n + " _postFix = """";" \n + " if (_usePrePostfix in [1,2]) then {" \n + " _preFix = ""\epoch_server_events\EpochEvents\"";" \n + " _postFix = "".sqf"";" \n + " };" \n + " switch (_scriptcmdMode) do {" \n + " case (""call""): {" \n + " // call" \n + " _scriptParams call (missionNamespace getVariable [_scriptName, {}]);" \n + " };" \n + " case (""spawn""): {" \n + " // spawn" \n + " _scriptParams spawn (missionNamespace getVariable [_scriptName, {}]);" \n + " };" \n + " default {" \n + " // execVM" \n + " _handle = _input execVM format[""%1%2%3"",_preFix,_scriptName,_postFix];" \n + " };" \n + " };" \n + " _counter = _counter + 1;" \n + " missionNamespace setVariable[_eventCounter, _counter];" \n + " diag_log format[""DEBUG: server event %1"", _scriptName];" \n + " };" \n + " };" \n + "} forEach _events;" \n + "// remove expired events" \n + "_events = _newEvents;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="Init"; + finalStates[] = + { + }; +}; +/*%FSM*/ \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server/treeView.txt b/Server/@epochhive/addons/epoch_server/treeView.txt new file mode 100644 index 0000000..6f9b91b Binary files /dev/null and b/Server/@epochhive/addons/epoch_server/treeView.txt differ diff --git a/Server/@epochhive/addons/epoch_server_core/$PREFIX$ b/Server/@epochhive/addons/epoch_server_core/$PREFIX$ new file mode 100644 index 0000000..f9403e4 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/$PREFIX$ @@ -0,0 +1 @@ +epoch_server_core \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_core/BIS_AddonInfo.hpp b/Server/@epochhive/addons/epoch_server_core/BIS_AddonInfo.hpp new file mode 100644 index 0000000..c1095cb --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/BIS_AddonInfo.hpp @@ -0,0 +1,5 @@ +class BIS_AddonInfo +{ + author=""; + timepacked="1521065978"; +}; diff --git a/Server/@epochhive/addons/epoch_server_core/README.md b/Server/@epochhive/addons/epoch_server_core/README.md new file mode 100644 index 0000000..6968705 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/README.md @@ -0,0 +1,23 @@ +**Epoch Mod** +================ + +Arma 3 Epoch Mod +Server Framework Core +http://epochmod.com/ + +-------------------------- +Developers +-------------------------- +* Aaron Clark - [VB]AWOL - Game Design, Code +* Florian Kinder - Fank - DLL Code +* Denis Erygin - devd - Linux DLL Support + +--------------------------- +Install Notes +--------------------------- +Hive DLL requires vs2013 redist: http://www.microsoft.com/en-us/download/details.aspx?id=40784 + +--------------------------- +Resources +--------------------------- +* MSOpenTech - https://github.com/MSOpenTech/Redis diff --git a/Server/@epochhive/addons/epoch_server_core/build.hpp b/Server/@epochhive/addons/epoch_server_core/build.hpp new file mode 100644 index 0000000..ebdd628 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/build.hpp @@ -0,0 +1 @@ +build=826; diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/README.md b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/README.md new file mode 100644 index 0000000..1434779 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/README.md @@ -0,0 +1,226 @@ +**EPOCH_fnc_server_hiveSET** + +Permanent storage of value with given prefix:key + +_Uses Hive Call: (**101, 111) or (100, 110)**_ + +_Input: Key Prefix, Unique Key, Value_ + +_Returns: Nothing_ + +``` +// get reference to player and get playerUID to use as unique key + +_playerUID = getPlayerUID _playerObject; + +// Fill your Array with data +_VAL = [damage _playerObject]; + +// Save value to database with given prefix:key +["PlayerMYCustomKey", _playerUID, _VAL] call EPOCH_fnc_server_hiveSET; + +``` + +**EPOCH_fnc_server_hiveSETEX** + +Semi-Permanent storage of value with given prefix:key. This command is very useful at preventing long term data bloat in the database and should be used for storing data that does not need to be stored forever. + +_Uses Hive Call: (**101, 121) or (100, 120)**_ + +_Input: Key Prefix, Unique Key, Expires in # seconds, Value_ + +_Returns: Nothing_ + +``` +// get reference to player and get playerUID to use as unique key +_playerUID = getPlayerUID _playerObject; + +// string (time in seconds) the key should last. +_expires = "2592000"; // 30 days + +// Fill your array with data +_VAL = [damage _playerObject]; + +// Save value to database with given prefix:key and expiration. +["PlayerMYCustomKey", _playerUID, _expires, _VAL] call EPOCH_fnc_server_hiveSETEX; +``` + +**EPOCH_fnc_server_hiveEXPIRE** + +Set a timeout on key. After the timeout has expired, the key will automatically be deleted. + +_Uses Hive Call: (**131) or (130)**_ + +_Input: Key Prefix, Unique Key, Expires in # seconds_ + +_Returns: Nothing_ + +``` +// get reference to player and get playerUID to use as unique key. +_playerUID = getPlayerUID _playerObject; + +// string (time in seconds) the key should last. +_expires = "2592000"; // 30 days + +// Set expiration on given prefix:key. +["PlayerMYCustomKey", _playerUID, _expires] call EPOCH_fnc_server_hiveEXPIRE;  +``` + +**EPOCH_fnc_server_hiveSETBIT** + +Permanent storage of bit value with given prefix:key + +_Uses Hive Call: **141**_ + +_Input: Key Prefix, Unique Key, Bit Index, Value_ + +_Returns: Nothing_ + +``` +// get reference to player and get playerUID to use as unique key +_playerUID = getPlayerUID _playerObject; + +// index to get bit value +_index = 0; + +// 1 = true, 0 = false +_value = 1; + +// Set bit at given index for prefix:key +["PlayerMYCustomBitKey", _playerUID, _index, _value] call EPOCH_fnc_server_hiveSETBIT; +``` + +**EPOCH_fnc_server_hiveGET** + +Made to exceed the character limits of callextension within the dll using extra c++ and sqf logic. The GETRANGE function has proven to be more reliable to use for data sets that are known to exceed 8k chars. + +_Uses Hive Call: **200**_ + +_Input: Key Prefix, Unique Key_ + +_Returns: Array(Status, Array)_ + +``` +// get reference to player and get playerUID to use as unique key +_playerUID = getPlayerUID _playerObject; + +// Get data using prefix:key. "PlayerMYCustomKey" is the prefix and "_playerUID" unique key. +_response = ["PlayerMYCustomKey", _playerUID] call EPOCH_fnc_server_hiveGET; + +if ((_response select 0) == 1 && (_response select 1) isEqualType []) then { + _status = _response select 0; + _arr = _response select 1; + // do something with _arr data here +}; +``` + +**EPOCH_fnc_server_hiveGETTTL** + +Made to exceed the character limits of callextension within the dll using extra c++ and sqf logic. Also, returns the ttl or expire time in seconds. + +_Uses Hive Call: **200, 210**_ + +_Input: Key Prefix, Unique Key_ + +_Returns: Array(Status, Array,TTL)_ + +``` +// get reference to player and get playerUID to use as unique key +_playerUID = getPlayerUID _playerObject; + +// Get data and ttl using prefix:key. "PlayerMYCustomKey" is the prefix and "_playerUID" unique key. +_response = ["PlayerMYCustomKey", _playerUID] call EPOCH_fnc_server_hiveGETTTL; + +if ((_response select 0) == 1 && (_response select 1) isEqualType [] && !((_response select 1) isEqualTo [])) then { + _status = _response select 0; + _arr = _response select 1; + _ttl = _response select 2; + + // do something with data here +} +``` + +**EPOCH_fnc_server_hiveGETBIT** + +Returns the bit value at offset in the string value stored at key. + +_Uses Hive Call: **240**_ + +_Input: Key Prefix, Unique Key, Bit Index_ + +_Returns: Bool(true|false)_ + +``` +// get reference to player and get playerUID to use as unique key +_playerUID = getPlayerUID _playerObject; + +// index to get bit value +_index = 0; + +// Get bit value with given index at prefix:key +_return = ["PlayerMYCustomBitKey", _playerUID, _index] call EPOCH_fnc_server_hiveGETBIT; + +if (_return) then { + // do something if true +}; +``` + +**EPOCH_fnc_server_hiveGETRANGE** + +Made to exceed the character limits of callextension by using the redis command GETRANGE and sqf logic. + +_Uses Hive Call: **220**_ + +_Input: Key Prefix, Unique Key_ + +_Returns: Array(Status, Array)_ + +``` +// get reference to player and get playerUID to use as unique key +_playerUID = getPlayerUID _playerObject; + +// PlayerMYCustomKey is the prefix and _playerUID unique key +_response = ["PlayerMYCustomKey", _playerUID] call EPOCH_fnc_server_hiveGETRANGE; + +if ((_response select 0) == 1 && (_response select 1) isEqualType []) then { + _status = _response select 0; + _arr = _response select 1; + // do something with data here +}; +``` + +**EPOCH_fnc_server_hiveDEL** + +Removes the specified key. + +_Uses Hive Call: **400**_ + +_Input: Key Prefix, Unique Key_ + +_Returns: Nothing_ + +``` +// get reference to player and get playerUID to use as unique key +_playerUID = getPlayerUID _playerObject; + +// Remove key +["PlayerMYCustomKey", _playerUID] call EPOCH_fnc_server_hiveDEL; +``` + +**EPOCH_fnc_server_hiveLog** + +Removes the specified key. + +_Uses Hive Call: **700**_ + +_Input: Key Prefix, Message_ + +_Returns: Nothing_ + +``` +// get reference to player and get playerUID to use as unique key +_playerUID = getPlayerUID _playerObject; + +// Log to database, This data can be access via the database and can be found with the key "MyCustomLog-LOG" +['MyCustomLog', format["%1 (%2) at %3", _playerObject, _playerUID, getPosATL _playerObject]] call EPOCH_fnc_server_hiveLog; +``` diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveDEL.sqf b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveDEL.sqf new file mode 100644 index 0000000..91ce47c --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveDEL.sqf @@ -0,0 +1,16 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Hive Delete by Key + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveDEL.sqf +*/ +params ["_prefix","_key"]; +"epochserver" callExtension format["400|%1:%2", _prefix, _key]; diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveEXPIRE.sqf b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveEXPIRE.sqf new file mode 100644 index 0000000..a2a6c68 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveEXPIRE.sqf @@ -0,0 +1,16 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Hive Expire 130 sync, 131 async + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveEXPIRE.sqf +*/ +params ["_prefix","_key","_expires"]; +"epochserver" callExtension format ["%1|%2:%3|%4", 131, _prefix, _key, _expires]; diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveGET.sqf b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveGET.sqf new file mode 100644 index 0000000..129e55d --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveGET.sqf @@ -0,0 +1,43 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Hive Get Data + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGET.sqf +*/ + +//[[[cog import generate_private_arrays ]]] +private ["_hiveMessage","_hiveResponse","_hiveStatus"]; +//[[[end]]] +params ["_prefix","_key"]; + +_hiveStatus = -1; +_hiveMessage = ""; + +while {_hiveStatus < 0 || _hiveStatus == 2} do { + _hiveResponse = "epochserver" callExtension format ["200|%1:%2", _prefix, _key]; + _hiveStatus = 0; + if (_hiveResponse != "") then { + _hiveResponse = call compile _hiveResponse; + _hiveResponse params [ + ["_status", 0], + ["_data", ""] + ]; + _hiveStatus = _status; + if (_hiveStatus >= 1) then { + _hiveMessage = _hiveMessage + _data; + }; + }; +}; + +// note: removed check for null in array _hiveMessage find "" == -1 +_hiveMessage = if (_hiveMessage isEqualTo "") then {[]} else {parseSimpleArray _hiveMessage}; + +[_hiveStatus, _hiveMessage] diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveGETBIT.sqf b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveGETBIT.sqf new file mode 100644 index 0000000..93b6ff3 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveGETBIT.sqf @@ -0,0 +1,32 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Hive Get Getbit + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETBIT.sqf +*/ + +//[[[cog import generate_private_arrays ]]] +private ["_hiveMessage","_hiveResponse"]; +//[[[end]]] +params ["_prefix","_key","_bit"]; +_hiveMessage = false; +_hiveResponse = "epochserver" callExtension format["240|%1:%2|%3", _prefix, _key, _bit]; +if !(_hiveResponse isEqualTo "") then { + _hiveResponse = parseSimpleArray _hiveResponse; + _hiveResponse params [ + ["_status", 0], + ["_data", "0"] + ]; + if (_status == 1) then { + _hiveMessage = (_data isEqualTo "1"); + }; +}; +_hiveMessage diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveGETRANGE.sqf b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveGETRANGE.sqf new file mode 100644 index 0000000..961836f --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveGETRANGE.sqf @@ -0,0 +1,52 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Hive Get Getrange + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETRANGE.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_currentIndex","_currentIndexMax","_hiveCharCount","_hiveMakeCall","_hiveMessage","_hiveResponse","_hiveStatus"]; +//[[[end]]] +params ["_prefix","_key"]; + +_hiveMessage = ""; +_hiveStatus = 0; +_currentIndex = 0; +_hiveMakeCall = true; +_hiveCharCount = 10000; // get 10k chars +while {_hiveMakeCall} do { + _hiveMakeCall = false; + // get 10k chars + _currentIndexMax = _currentIndex + _hiveCharCount; + _hiveResponse = "epochserver" callExtension format["220|%1:%2|%3|%4", _prefix, _key, _currentIndex, (_currentIndexMax-1)]; + if !(_hiveResponse isEqualTo "") then { + _hiveResponse = call compile _hiveResponse; + _hiveResponse params [ + ["_status", 0], + ["_data", []] + ]; + if (_status isEqualTo 1 && !(_data isEqualTo [])) then{ + // add data to string + _hiveStatus = _status; + _hiveMessage = _hiveMessage + _data; + // if data returned matches exactly _hiveCharCount then we likely need to make another call + if (count _data == _hiveCharCount) then{ + _currentIndex = _currentIndexMax; + _hiveMakeCall = true; + }; + }; + }; +}; + +// avoid parse if data is blank and return empty array +_hiveMessage = if (_hiveMessage isEqualTo "") then {[]} else {parseSimpleArray _hiveMessage}; + +[_hiveStatus, _hiveMessage] diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveGETTTL.sqf b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveGETTTL.sqf new file mode 100644 index 0000000..be5b4c9 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveGETTTL.sqf @@ -0,0 +1,58 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Florian Kinder + + Description: + Hive Get w/ TTL + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETTTL.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_hiveMessage","_hiveResponse","_hiveStatus","_hiveTTL","_whileCount"]; +//[[[end]]] +params ["_prefix","_key"]; + +_hiveStatus = -1; +_hiveMessage = ""; +_hiveTTL = -1; +_hiveResponse = ""; +_whileCount = 0; +while {_hiveStatus < 0 || _hiveStatus == 2} do { + if (_whileCount == 0) then { + _hiveResponse = "epochserver" callExtension format ["210|%1:%2", _prefix, _key]; + } + else { + _hiveResponse = "epochserver" callExtension format ["200|%1:%2", _prefix, _key]; + }; + + _hiveStatus = 0; + if (_hiveResponse != "") then { + _hiveResponse = call compile _hiveResponse; + if !(isNil "_hiveResponse") then { + if (_hiveResponse isEqualType [] && !(_hiveResponse isEqualTo [])) then { + _hiveStatus = _hiveResponse select 0; + if (_hiveStatus >= 1) then { + if (_whileCount == 0) then { + _hiveTTL = _hiveResponse select 1; + _hiveMessage = _hiveMessage + (_hiveResponse select 2); + } + else { + _hiveMessage = _hiveMessage + (_hiveResponse select 1); + }; + }; + }; + }; + }; + + _whileCount = _whileCount + 1; +}; + +// removed check for null in array _hiveMessage find "" == -1 +_hiveMessage = if (_hiveMessage isEqualTo "") then {[]} else {parseSimpleArray _hiveMessage}; + +[_hiveStatus, _hiveMessage, _hiveTTL] diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveLog.sqf b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveLog.sqf new file mode 100644 index 0000000..83044fc --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveLog.sqf @@ -0,0 +1,16 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Hive Log + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveLog.sqf +*/ +params ["_prefix","_val"]; +"epochserver" callExtension ([701, _prefix, _val] joinString "|") diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveMD5.sqf b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveMD5.sqf new file mode 100644 index 0000000..39210a1 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveMD5.sqf @@ -0,0 +1,30 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: md5 hash function + Returns md5 hash if only one string is given as input. + Returns array of md5 hashes if input was an array. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveMD5.sqf + + Usage Examples: + _hash = "Hello World" call EPOCH_fnc_server_hiveMD5; + // _hash = "b10a8db164e0754105b7a99be72e3fe5" + or multiple: + _hashes = ["Hello World","Lorem Ipsum"] call EPOCH_fnc_server_hiveMD5; + // _hashes = ["b10a8db164e0754105b7a99be72e3fe5", "6dbd01b4309de2c22b027eb35a3ce18b"] + +*/ +params ["_val"]; +if (_this isEqualType []) then { + _val = _this joinString "|"; + parseSimpleArray ("epochserver" callExtension ([840,_val] joinString "|")); +} else { + (parseSimpleArray ("epochserver" callExtension ([840,_val] joinString "|"))) select 0; +} diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveSET.sqf b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveSET.sqf new file mode 100644 index 0000000..c9f7a3c --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveSET.sqf @@ -0,0 +1,16 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Florian Kinder + + Description: + Hive SET 110 sync, 111 async + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSET.sqf +*/ +params ["_prefix","_key","_value"]; +"epochserver" callExtension ([111,([_prefix,_key] joinString ":"),"",_value] joinString "|") diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveSETBIT.sqf b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveSETBIT.sqf new file mode 100644 index 0000000..4b92368 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveSETBIT.sqf @@ -0,0 +1,16 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Hive SETBit + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETBIT.sqf +*/ +params ["_prefix","_key","_bitIndex","_value"]; +"epochserver" callExtension format["141|%1:%2|%3|%4", _prefix, _key, _bitIndex, _value]; diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveSETEX.sqf b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveSETEX.sqf new file mode 100644 index 0000000..2bc935b --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveSETEX.sqf @@ -0,0 +1,16 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Florian Kinder + + Description: + Hive SETEX 120 sync, 121 async + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETEX.sqf +*/ +params ["_prefix","_key","_expires","_value"]; +"epochserver" callExtension ([121,([_prefix,_key] joinString ":"),_expires,"",_value] joinString "|") diff --git a/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveUnitTest.sqf b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveUnitTest.sqf new file mode 100644 index 0000000..75bc718 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/compile/epoch_hive/fn_server_hiveUnitTest.sqf @@ -0,0 +1,155 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + For testing callExtension and other DB related updates. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveUnitTest.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_charCheck","_expires","_hashes","_payload","_payload_64k","_payload_64k_count","_response","_startTime","_testID"]; +//[[[end]]] +_testID = "1234567890"; +_payload = "32D1ECB8511569B43A5CC39DF4261CACDA912C798B066EE1E1EE06E2F09D02073C1B3FC638F091D58E7691DA7D0F7E1F01371CB58346572A015F6F93429F3BDC"; +_expires = "600"; // 10 minutes +_payload_64k = ""; +_startTime = diag_tickTime; +for "_i" from 1 to 512 do +{ + _payload_64k = _payload_64k + _payload; +}; +_payload_64k_count = count _payload_64k; +diag_log format["DEBUG UNITTEST INIT: _payload count %1",count _payload, (diag_tickTime-_startTime)]; +diag_log format["DEBUG UNITTEST INIT: _payload_64k count %1",_payload_64k_count, (diag_tickTime-_startTime)]; + +_startTime = diag_tickTime; +_response = "epochserver" callExtension ""; +diag_log format ["Epoch UnitTest: version Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; + +// server config instanceID +_startTime = diag_tickTime; +_response = "epochserver" callExtension "000"; +diag_log format ["Epoch UnitTest: 000 Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; + +// time +_startTime = diag_tickTime; +_response = "epochserver" callExtension "510"; +diag_log format ["Epoch UnitTest: 510 Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; + + +// SET +_startTime = diag_tickTime; +_response = ["TEST_DATA", _testID, [_payload]] call EPOCH_fnc_server_hiveSET; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveSET Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; +// SET 64k +_startTime = diag_tickTime; +_response = ["TEST_DATA_64", _testID, [_payload_64k]] call EPOCH_fnc_server_hiveSET; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveSET 64k Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; + +// SETBIT true +_startTime = diag_tickTime; +_response = ["TEST_BIT_DATA", _testID, 0, 1] call EPOCH_fnc_server_hiveSETBIT; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveSETBIT Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; +// SETBIT false +_startTime = diag_tickTime; +_response = ["TEST_BIT_DATA", _testID, 1, 0] call EPOCH_fnc_server_hiveSETBIT; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveSETBIT Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; + +// GETBIT true +_startTime = diag_tickTime; +_response = ["TEST_BIT_DATA", _testID, 0] call EPOCH_fnc_server_hiveGETBIT; +_charCheck = true isEqualTo _response; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveGETBIT Time: %2 : %1 ", ["isOK:",_charCheck], (diag_tickTime-_startTime)]; +// GETBIT false +_startTime = diag_tickTime; +_response = ["TEST_BIT_DATA", _testID, 1] call EPOCH_fnc_server_hiveGETBIT; +_charCheck = false isEqualTo _response; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveGETBIT Time: %2 : %1 ", ["isOK:",_charCheck], (diag_tickTime-_startTime)]; + +// SETEX +_startTime = diag_tickTime; +_response = ["TEST_EXPIRES_DATA", _testID, _expires, [_payload]] call EPOCH_fnc_server_hiveSETEX; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveSETEX Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; +// SETEX 64k +_startTime = diag_tickTime; +_response = ["TEST_EXPIRES_DATA_64", _testID, _expires, [_payload_64k]] call EPOCH_fnc_server_hiveSETEX; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveSETEX 64k Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; + +// GET +_startTime = diag_tickTime; +_response = ["TEST_DATA", _testID] call EPOCH_fnc_server_hiveGET; +_response params ["_status","_data"]; +_charCheck = [_payload] isEqualTo _data; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveGET Time: %2 : %1 ", ["isOK:",_charCheck], (diag_tickTime-_startTime)]; +// GET 64k +_startTime = diag_tickTime; +_response = ["TEST_DATA_64", _testID] call EPOCH_fnc_server_hiveGET; +_response params ["_status","_data"]; +_charCheck = [_payload_64k] isEqualTo _data; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveGET 64k Time: %2 : %1 ", ["isOK:",_charCheck], (diag_tickTime-_startTime)]; + +// GETRANGE +_startTime = diag_tickTime; +_response = ["TEST_DATA", _testID] call EPOCH_fnc_server_hiveGETRANGE; +_response params ["_status","_data"]; +_charCheck = [_payload] isEqualTo _data; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveGETRANGE Time: %2 : %1 ", ["isOK:",_charCheck], (diag_tickTime-_startTime)]; +// GETRANGE 64k +_startTime = diag_tickTime; +_response = ["TEST_DATA_64", _testID] call EPOCH_fnc_server_hiveGETRANGE; +_response params ["_status","_data"]; +_charCheck = [_payload_64k] isEqualTo _data; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveGETRANGE 64k Time: %2 : %1 ", ["isOK:",_charCheck], (diag_tickTime-_startTime)]; + +// Expire +_startTime = diag_tickTime; +_response = ["TEST_DATA", _testID, _expires] call EPOCH_fnc_server_hiveEXPIRE; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveEXPIRE Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; + +// GETTTL +_startTime = diag_tickTime; +_response = ["TEST_EXPIRES_DATA", _testID] call EPOCH_fnc_server_hiveGETTTL; +_response params ["_status","_data"]; +_charCheck = [_payload] isEqualTo _data; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveGETTTL Time: %2 : %1 ", ["isOK:",_charCheck], (diag_tickTime-_startTime)]; + +// GETTTL 64k +_startTime = diag_tickTime; +_response = ["TEST_EXPIRES_DATA_64", _testID] call EPOCH_fnc_server_hiveGETTTL; +_response params ["_status","_data"]; +_charCheck = [_payload_64k] isEqualTo _data; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveGETTTL 64k Time: %2 : %1 ", ["isOK:",_charCheck], (diag_tickTime-_startTime)]; + +// Del +_startTime = diag_tickTime; +_response = ["TEST_DATA", _testID] call EPOCH_fnc_server_hiveDEL; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveDEL TEST_DATA Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; +_startTime = diag_tickTime; +_response = ["TEST_DATA_64", _testID] call EPOCH_fnc_server_hiveDEL; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveDEL TEST_DATA_64 Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; +_startTime = diag_tickTime; +_response = ["TEST_EXPIRES_DATA", _testID] call EPOCH_fnc_server_hiveDEL; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveDEL TEST_EXPIRES_DATA Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; +_startTime = diag_tickTime; +_response = ["TEST_EXPIRES_DATA_64", _testID] call EPOCH_fnc_server_hiveDEL; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveDEL TEST_EXPIRES_DATA_64 Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; + +// HIVELOG +_startTime = diag_tickTime; +_response = ['TEST_LOG', _payload] call EPOCH_fnc_server_hiveLog; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveLog Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; +_startTime = diag_tickTime; +_response = ['TEST_LOG', _payload_64k] call EPOCH_fnc_server_hiveLog; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveLog 64k Time: %2 : %1 ", _response, (diag_tickTime-_startTime)]; + +// MD5 HASH +_hashes = ["Hello World","Lorem Ipsum"] call EPOCH_fnc_server_hiveMD5; +// _hashes = ["b10a8db164e0754105b7a99be72e3fe5", "6dbd01b4309de2c22b027eb35a3ce18b"] +_charCheck = _hashes isEqualTo ["b10a8db164e0754105b7a99be72e3fe5", "6dbd01b4309de2c22b027eb35a3ce18b"]; +diag_log format ["Epoch UnitTest: EPOCH_fnc_server_hiveMD5 Time: %2 : %1 ", ["isOK:",_charCheck], (diag_tickTime-_startTime)]; diff --git a/Server/@epochhive/addons/epoch_server_core/config.cpp b/Server/@epochhive/addons/epoch_server_core/config.cpp new file mode 100644 index 0000000..75de838 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/config.cpp @@ -0,0 +1,48 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Server Core Config + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/config.hpp +*/ + +#define _ARMA_ +class CfgPatches { + class A3_epoch_server_core { + units[] = {}; + weapons[] = {}; + requiredVersion = 0.1; + requiredAddons[] = {}; + #include "build.hpp" + }; +}; +class cfgFunctions +{ + class A3E_CORE + { + tag = "EPOCH"; + file = "\epoch_server_core\compile"; + class epoch_hive { + file = "\epoch_server_core\compile\epoch_hive"; + class server_hiveSET {}; + class server_hiveSETBIT {}; + class server_hiveSETEX {}; + class server_hiveEXPIRE {}; + class server_hiveGET {}; + class server_hiveGETRANGE {}; + class server_hiveGETBIT {}; + class server_hiveGETTTL {}; + class server_hiveDEL {}; + class server_hiveLog {}; + class server_hiveUnitTest {}; + class server_hiveMD5 {}; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_core/license.txt b/Server/@epochhive/addons/epoch_server_core/license.txt new file mode 100644 index 0000000..35440e4 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_core/license.txt @@ -0,0 +1,9 @@ +Epoch Mod for Arma 3 +http://epochmod.com +by Epoch Mod Team +https://github.com/EpochModTeam/Epoch + +The contents of this pbo are under the following license: +http://www.bistudio.com/community/licenses/arma-public-license-share-alike + +Keep this file and file headers with attribution intact for proper use. \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_core/treeView.txt b/Server/@epochhive/addons/epoch_server_core/treeView.txt new file mode 100644 index 0000000..526063b Binary files /dev/null and b/Server/@epochhive/addons/epoch_server_core/treeView.txt differ diff --git a/Server/@epochhive/addons/epoch_server_debris_event/$PREFIX$ b/Server/@epochhive/addons/epoch_server_debris_event/$PREFIX$ new file mode 100644 index 0000000..062bf2d --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_debris_event/$PREFIX$ @@ -0,0 +1 @@ +epoch_server_debris_event \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_debris_event/BIS_AddonInfo.hpp b/Server/@epochhive/addons/epoch_server_debris_event/BIS_AddonInfo.hpp new file mode 100644 index 0000000..bba4f82 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_debris_event/BIS_AddonInfo.hpp @@ -0,0 +1,5 @@ +class BIS_AddonInfo +{ + author=""; + timepacked="1521065979"; +}; diff --git a/Server/@epochhive/addons/epoch_server_debris_event/EpochEvents/DynamicDebris.sqf b/Server/@epochhive/addons/epoch_server_debris_event/EpochEvents/DynamicDebris.sqf new file mode 100644 index 0000000..94a5a11 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_debris_event/EpochEvents/DynamicDebris.sqf @@ -0,0 +1,137 @@ +/* + Author/s: + Aaron Clark - EpochMod.com + + Description: + Spawns Debris Dynamically on Roadways. + + Improvements and or bugfixes and other contributions are welcome via the github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_debris_event/EpochEvents/DebrisSpawner.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_allRoads","_allowDebris","_debris","_debrisCounter","_debrisLocations","_debrisLocationsKey","_debrisLocationsTMP","_debug","_disallowedLocations","_expiresDebris","_export","_instanceID","_intersections","_marker","_maxDebrisLimit","_nearbyLocations","_newDebrisCounter","_object","_offsetX","_offsetY","_position","_response","_rng","_rngChance","_scriptHiveKey","_seed","_selectedDebris","_upperPos","_worldSize"]; +//[[[end]]] +// exit if already ran once. +if !(isNil "EPOCH_DynamicDebrisEnabled") exitWith {}; +EPOCH_DynamicDebrisEnabled = true; +_debug = false; +_expiresDebris = 604800; +_debris = [ + "Land_GarbageBags_F", + "Land_GarbagePallet_F", + "Land_GarbageWashingMachine_F", + "Land_GarbageHeap_01_F", + "Land_GarbageHeap_03_F", + "Land_GarbageHeap_04_F", + "Land_Wreck_Skodovka_F", + "Land_Wreck_CarDismantled_F", + "Land_Wreck_Truck_F", + "Land_Wreck_Car2_F", + "Land_Wreck_Car_F", + "Land_Wreck_Car3_F", + "Land_Wreck_Hunter_F", + "Land_Wreck_Van_F", + "Land_Wreck_Offroad_F", + "Land_Wreck_UAZ_F", + "Land_Wreck_Ural_F", + "Land_Wreck_Truck_dropside_F", + "Land_Wreck_HMMWV_F" +]; +_disallowedLocations = ["Airport"]; + +_debrisCounter = 0; +_newDebrisCounter = 0; +_worldSize = worldSize/2; +_instanceID = call EPOCH_fn_InstanceID; + +_maxDebrisLimit = 500; // max total objects to spawn +_rngChance = 0.95; // Lower this to spawn more positions +_scriptHiveKey = "EPOCH:DynamicDebris789"; // change this to force a new seed to be generated. + +_debrisLocationsKey = format ["%1:%2", _instanceID, worldname]; +_response = [_scriptHiveKey, _debrisLocationsKey] call EPOCH_fnc_server_hiveGETRANGE; + +_response params [["_status",0],["_data",[]] ]; +_debrisLocations = []; +_debrisLocationsTMP = []; +if (_status == 1 && _data isEqualType [] && !(_data isEqualTo [])) then { + _debrisLocations = _data; +} else { + diag_log format["DEBUG: Generating new Debris Locations... this is only done once every %1 days.",(_expiresDebris/86400)]; + _allRoads = [_worldSize,_worldSize] nearRoads _worldSize; + _allRoads = _allRoads call BIS_fnc_arrayShuffle; + + _seed = random 999999; + diag_log format["DEBUG: Generating new Debris Locations... with seed %1.",_seed]; + { + if (_newDebrisCounter >= _maxDebrisLimit) exitWith {}; + _position = getPosASL _x; + _position params ["_posX","_posY"]; + _rng = _seed random [_posX,_posY]; + if (_rng > _rngChance) then { + + _nearbyLocations = nearestLocations [_position, _disallowedLocations, 100]; + if (_nearbyLocations isEqualTo []) then { + + if (_debug) then { + _marker = createMarker[str(_position), _position]; + _marker setMarkerShape "ICON"; + _marker setMarkerType "waypoint"; + _marker setMarkerColor "ColorGreen"; + }; + _selectedDebris = selectRandom _debris; + _offsetX = (random 10) - 5; + _offsetY = (random 10) - 5; + + _position set [0,(_position select 0) + _offsetX]; + _position set [1,(_position select 1) + _offsetY]; + _position set [2,(_position select 2) - 1]; + + _upperPos = +_position; + _upperPos set [2,(_position select 2) + 3]; + + _intersections = lineIntersectsSurfaces [_upperPos, _position, objNull, objNull, true, 1]; + if !(_intersections isEqualTo []) then { + (_intersections select 0) params ["_intersectPosASL","_surfaceNormal","_intersectObject","_parentObject"]; + _allowDebris = true; + if !(isNull _intersectObject) then { + _allowDebris = !((typeOf _intersectObject) in _debris); + }; + if (_allowDebris) then { + _allowDebris = ((ASLtoATL _intersectPosASL) nearentities [["Landvehicle","SHIP","AIR","TANK"],15]) isequalto []; + }; + if (_allowDebris) then { + _object = createSimpleObject [_selectedDebris, _intersectPosASL]; + _object setDir random 360; + _object setVectorUp _surfaceNormal; + _object setPosASL _intersectPosASL; + _export = [_selectedDebris,getPosWorld _object, vectorDir _object, vectorUp _object]; + _debrisLocationsTMP pushBack _export; + _newDebrisCounter = _newDebrisCounter + 1; + }; + }; + }; + }; + } forEach _allRoads; + [_scriptHiveKey, _debrisLocationsKey, _expiresDebris, _debrisLocationsTMP] call EPOCH_fnc_server_hiveSETEX; +}; + +{ + if (_debrisCounter >= _maxDebrisLimit) exitWith {}; + if (_x isEqualType [] && !(_x isEqualTo [])) then { + _x params ["_selectedDebris","_posWorld", "_vectorDir", "_vectorUp"]; + if (((ASLtoATL _posWorld) nearentities [["Landvehicle","SHIP","AIR","TANK"],15]) isequalto []) then { + _object = createSimpleObject [_selectedDebris, _posWorld]; + _object setPosWorld _posWorld; + _object setVectorDirAndUp [_vectorDir,_vectorUp]; + _debrisCounter = _debrisCounter + 1; + }; + }; +} forEach _debrisLocations; + +if (_debug) then { + diag_log format["DEBUG: Spawned %1 Existing Debris",_debrisCounter]; + if (_newDebrisCounter > 0) then { + diag_log format["DEBUG: Spawned %1 New Debris.",_newDebrisCounter]; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_debris_event/build.hpp b/Server/@epochhive/addons/epoch_server_debris_event/build.hpp new file mode 100644 index 0000000..ebdd628 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_debris_event/build.hpp @@ -0,0 +1 @@ +build=826; diff --git a/Server/@epochhive/addons/epoch_server_debris_event/config.cpp b/Server/@epochhive/addons/epoch_server_debris_event/config.cpp new file mode 100644 index 0000000..91a0eae --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_debris_event/config.cpp @@ -0,0 +1,38 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Server Event (DynamicDebris) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_debris_event/config.cpp +*/ + +#define _ARMA_ + +class CfgPatches { + class A3_server_debris_event { + requiredVersion = 0.1; + requiredAddons[] = {"A3_server_events"}; + #include "build.hpp" + }; +}; + +// import settings +class CfgEpochServerEvents +{ + class DynamicDebris { + delay = 120; // delay in seconds between executions , + script = "\epoch_server_debris_event\EpochEvents\DynamicDebris.sqf"; // script: name or full path if usePrefix is set to 0 + runOnStart = 1; // runOnStart: 1 = run script at startup, 0 normal delay + usePrefix = 0; // usePrefix: 1 = pre/postfix path (use if file is inside epoch settings pbo EpochEvents folder), 2 = pre/postfix path (use if file inside epoch events pbo EpochEvents folder), 0 = use full file path + runNumTimes = 1; // runNumTimes: -1 = no limit, 0 = disabled, 1+ = number of times to execute before removing event. + input[] = {}; // array input to execVM at time of run and accessed with _this inside of script. + disallowedWorlds[] = {"VR"}; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_debris_event/license.txt b/Server/@epochhive/addons/epoch_server_debris_event/license.txt new file mode 100644 index 0000000..35440e4 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_debris_event/license.txt @@ -0,0 +1,9 @@ +Epoch Mod for Arma 3 +http://epochmod.com +by Epoch Mod Team +https://github.com/EpochModTeam/Epoch + +The contents of this pbo are under the following license: +http://www.bistudio.com/community/licenses/arma-public-license-share-alike + +Keep this file and file headers with attribution intact for proper use. \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_debris_event/treeView.txt b/Server/@epochhive/addons/epoch_server_debris_event/treeView.txt new file mode 100644 index 0000000..07354a7 Binary files /dev/null and b/Server/@epochhive/addons/epoch_server_debris_event/treeView.txt differ diff --git a/Server/@epochhive/addons/epoch_server_events/$PREFIX$ b/Server/@epochhive/addons/epoch_server_events/$PREFIX$ new file mode 100644 index 0000000..fcb99dc --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/$PREFIX$ @@ -0,0 +1 @@ +epoch_server_events \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_events/BIS_AddonInfo.hpp b/Server/@epochhive/addons/epoch_server_events/BIS_AddonInfo.hpp new file mode 100644 index 0000000..5dcfb7f --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/BIS_AddonInfo.hpp @@ -0,0 +1,5 @@ +class BIS_AddonInfo +{ + author=""; + timepacked="1521065980"; +}; diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/AirDrop.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/AirDrop.sqf new file mode 100644 index 0000000..a7fed7c --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/AirDrop.sqf @@ -0,0 +1,29 @@ +/* + Trigger Air drop client side via randomly selected player. + by Aaron Clark - EpochMod.com + + Improvements and or bugfixes and other contributions are welcome via the github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/AirDrop.sqf +*/ +// 50% chance every 45 minutes by default +//[[[cog import generate_private_arrays ]]] +private ["_chance","_player","_players"]; +//[[[end]]] +_chance = 50; +if (random 100 < _chance) then { + + // get all alive players + _players = allPlayers select {alive _x}; + + // continue if players found alive + if !(_players isEqualTo []) then { + + // select random player + _player = selectRandom _players; + + // Trigger air drop via player + ["B_Heli_Transport_01_F", _player, true] remoteExec ['EPOCH_unitSpawn',_player]; + + diag_log format["Epoch: Air Drop Triggered on %1", _player]; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/CarnivalSpawner.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/CarnivalSpawner.sqf new file mode 100644 index 0000000..d759dce --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/CarnivalSpawner.sqf @@ -0,0 +1,94 @@ +/* + Carnival Event + by Aaron Clark - EpochMod.com + + Improvements and or bugfixes and other contributions are welcome via the github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/CarnivalSpawner.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgEpoch", "_debug", "_showMarkers", "_limit", "_counter", "_others", "_distFromOthers", "_position", "_goodPos", "_objs","_item", "_lootPos", "_loot", "_debugMkr", "_markers", "_originalColors", "_decayMarkerColor", "_compromisedColor", "_decayTime", "_serverSettingsConfig", "_timeMultiplier", "_rEvents", "_thisEvent"]; +//[[[end]]] +_cfgEpoch = configFile >> "CfgEpoch" >> worldname; +_debug = if(getNumber(_cfgEpoch >> "debugCarnivalSpawner") isEqualTo 1)then{true}else{false}; +_limit = getNumber(_cfgEpoch >> "maxCarnivalSpawns"); +_counter = missionNameSpace getVariable["EPOCH_carnivalCounter",0]; +_others = missionNameSpace getVariable["EPOCH_carnivals", [[0,0,0]] ]; +_distFromOthers = getNumber(_cfgEpoch >> "distFromOtherCarnivals"); + +//STOP THE SCRIPT AND EXIT IF THE COUNTER IS TOO HIGH. +if (_counter >= _limit) exitWith { + if (_debug) then {diag_log "DEBUG: suppressed carnival spawn over limit"}; +}; + +for "_i" from 0 to 100 step 1 do { + _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 1000, 0] call BIS_fnc_findSafePos; + _goodPos = true; + + _goodPos = [_position, true, true, true, _others, _distFromOthers] call EPOCH_server_isNearChecks; + + if(_goodPos)then{ + _i = 100; + }else{ + _position = []; + }; +}; + +_objs = []; +if ((count _position) == 2) then{ + // CREATE THE CARNIVAL AREA AND LOOT + _item = createVehicle["ferrisWheel_EPOCH", _position, [], 0.0, "CAN_COLLIDE"]; + _objs pushBack _item; + _lootPos = [_position,1,20,3,1,20,0] call BIS_fnc_findSafePos; + _loot = createVehicle["container_epoch", _lootPos, [], 0.0, "CAN_COLLIDE"]; + _loot setMass 220; + _loot setVariable["EPOCH_Loot",false,true]; + + if(_debug)then{ + _debugMkr = createMarker [str(_lootPos),_lootPos]; + _debugMkr setMarkerShape "ICON"; + _debugMkr setMarkerType "mil_dot"; + _debugMkr setMarkerColor "ColorRed"; + }; + + { + _item = createVehicle[_x, _position, [], 80, "NONE"]; + _objs pushBack _item; + sleep 1; + } forEach (getArray(_cfgEpoch >> "carnivalSpawnedObjects")); + + // SET UP THE MARKER. + _markers = []; + _originalColors = []; + _showMarkers = if(getNumber(_cfgEpoch >> "showCarnivalMarkers") isEqualTo 1)then{true}else{false}; + _decayMarkerColor = getText(_cfgEpoch >> "carnivalDecayMarkerColor"); + _compromisedColor = getText(_cfgEpoch >> "carnivalCompromisedColor"); + if (_showMarkers) then{ + _markers = ["Carnival",_position] call EPOCH_server_createGlobalMarkerSet; + { + _originalColors pushBack (getMarkerColor _x); + }forEach _markers; + + // Check for HeightenedPlayerVsPlayer false and remove comprimised coloring + if!(getNumber(_cfgEpoch >> "HeightenedPlayerVsPlayer") isEqualTo 1)then{ + _compromisedColor = getMarkerColor (_markers select 0); + }; + }; + + // TICK COUNTER + 1 SPAWNED PLANT PATCH. + _counter = _counter + 1; + missionNameSpace setVariable["EPOCH_carnivalCounter",_counter]; + + // ADD POSITION TO OTHERS ARRAY + missionNameSpace setVariable["EPOCH_carnivals", _others + [_position]]; + + // SEND EVENT TO MONITOR + _decayTime = getNumber(_cfgEpoch >> "carnivalDecayTime"); + _serverSettingsConfig = configFile >> "CfgEpochServer"; + _timeMultiplier = ([_serverSettingsConfig, "timeMultiplier", 1] call EPOCH_fnc_returnConfigEntry); + _rEvents = missionNameSpace getVariable["EPOCH_RunningEvents",[]]; + _thisEvent = [_lootPos, [_loot], _objs,"carnivalCounter", diag_tickTime, (_decayTime * _timeMultiplier), _showMarkers, _markers, _originalColors, _decayMarkerColor, _compromisedColor]; + missionNameSpace setVariable["EPOCH_RunningEvents",_rEvents + [_thisEvent]]; + if (_debug) then { + diag_log format["EPOCHDebug: carnivalSpawner-%1", missionNameSpace getVariable["EPOCH_RunningEvents",[]]]; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/ChangeWeather.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/ChangeWeather.sqf new file mode 100644 index 0000000..98f2189 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/ChangeWeather.sqf @@ -0,0 +1,75 @@ + +private ["_Changetime","_randomNightTemp","_randomNightRainTemp","_randomDayTemp","_randomDayRainTemp","_WeatherSettings","_selectedweather","_temp"]; + +_Changetime = 120; +_randomNightTemp = [-5,50,85]; +_randomNightRainTemp = [-10,50,70]; +_randomDayTemp = [20,75,100]; +_randomDayRainTemp = [15,75,85]; +_WeatherSettings = [ + [// Sun + [0, 0.2, 5], // Fog + 0.2, // Overcast + 0.2, // Waves + 0.25, // Wind + 0.1, // Gust + 0, // Rain + 0, // Lightnings + 0 // Rainbow + ], + [// Mid + [0.05, 0.1, 5], + 0.5, + 0.4, + 0.25, + 0.3, + 0.1, + 0.1, + 1 + ], + [// Rain + [0.1, 0.2, 5], + 0.7, + 0.5, + 0.25, + 0.5, + 0.3, + 0.5, + 0.5 + ], + [// Rain+ + [0.15, 0.2, 5], + 1, + 1, + 0.25, + 0.5, + 1, + 1, + 0.5 + ] +]; + +_selectedweather = _WeatherSettings selectRandomWeighted EPOCH_WeatherChances; +_selectedweather params ["_fog","_overcast","_waves","_windstr","_gusts","_rain","_lightnings","_rainbow"]; + +// cooler at night / rain +if (_rain > 0.1) then { + _randomNightTemp = _randomNightRainTemp; + _randomDayTemp = _randomDayRainTemp; +}; +_temp = if (sunOrMoon < 1) then {random _randomNightTemp} else {random _randomDayTemp}; +_temp = round _temp; +// push temp to all players and JIP. +missionNamespace setVariable ["EPOCH_CURRENT_WEATHER",_temp, true]; + +_Changetime setFog _fog; +_Changetime setOvercast _overcast; +_Changetime setWaves _waves; +_Changetime setWindStr _windstr; +_Changetime setGusts _gusts; +_Changetime setRain _rain; +_Changetime setLightnings _lightnings; +_Changetime setRainbow _rainbow; + +diag_log format["Epoch: Weather Change - temp: %1 | fog: %2 | overcast: %3 | waves: %4 | windstr: %5 | gusts: %6 | rain: %7 | Lightnings: %8 | rainbow: %9",_temp, _fog, _overcast, _waves, _windstr, _gusts, _rain, _lightnings, _rainbow]; + diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/ContainerSpawner.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/ContainerSpawner.sqf new file mode 100644 index 0000000..e6dcb8c --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/ContainerSpawner.sqf @@ -0,0 +1,83 @@ +/* + Shipping Containter Event + by Aaron Clark - EpochMod.com + + Improvements and or bugfixes and other contributions are welcome via the github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/ContainterSpawner.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgEpoch", "_debug", "_limit", "_counter", "_others", "_distFromOthers", "_position", "_goodPos", "_item", "_debugMkr", "_markers", "_originalColors", "_showMarkers", "_decayMarkerColor", "_compromisedColor", "_decayTime", "_serverSettingsConfig", "_timeMultiplier", "_rEvents", "_thisEvent"]; +//[[[end]]] +_cfgEpoch = configFile >> "CfgEpoch" >> worldname; +_debug = if(getNumber(_cfgEpoch >> "debugContainerSpawner") isEqualTo 1)then{true}else{false}; +_limit = getNumber(_cfgEpoch >> "maxContainerSpawns"); +_counter = missionNameSpace getVariable["EPOCH_containerCounter",0]; +_others = missionNameSpace getVariable["EPOCH_containers", [[0,0,0]] ]; +_distFromOthers = getNumber(_cfgEpoch >> "distFromOtherContainers"); + +//STOP THE SCRIPT AND EXIT IF THE COUNTER IS TOO HIGH. +if (_counter >= _limit) exitWith { + if (_debug) then {diag_log "DEBUG: suppressed CONTAINER spawn over limit"}; +}; + +// FIND A POSITION +for "_i" from 0 to 100 step 1 do { + _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 4000, 1] call BIS_fnc_findSafePos; + _goodPos = true; + + _goodPos = [_position, true, true, true, _others, _distFromOthers] call EPOCH_server_isNearChecks; + + if(_goodPos)then{ + _i = 100; + }else{ + _position = []; + }; +}; + +if ((count _position) == 2) then{ + // CREATE THE CARGO CONTAINER + _item = createVehicle["Cargo_Container", _position, [], 0.0, "CAN_COLLIDE"]; + if(_debug)then{ + _debugMkr = createMarker [str(_position), _position]; + _debugMkr setMarkerShape "ICON"; + _debugMkr setMarkerType "mil_dot"; + _debugMkr setMarkerColor "ColorRed"; + }; + + // SET UP THE MARKER. + _markers = []; + _originalColors = []; + _showMarkers = if(getNumber(_cfgEpoch >> "showContainerMarkers") isEqualTo 1)then{true}else{false}; + _decayMarkerColor = getText(_cfgEpoch >> "containerDecayMarkerColor"); + _compromisedColor = getText(_cfgEpoch >> "containerCompromisedColor"); + if (_showMarkers) then{ + _markers = ["Container",_position] call EPOCH_server_createGlobalMarkerSet; + { + _originalColors pushBack (getMarkerColor _x); + }forEach _markers; + + // Check for HeightenedPlayerVsPlayer false and remove comprimised coloring + if!(getNumber(_cfgEpoch >> "HeightenedPlayerVsPlayer") isEqualTo 1)then{ + _compromisedColor = getMarkerColor (_markers select 0); + }; + }; + + // TICK COUNTER + 1 + _counter = _counter + 1; + missionNameSpace setVariable["EPOCH_containerCounter",_counter]; + + // ADD POSITION TO OTHERS ARRAY + missionNameSpace setVariable["EPOCH_containers", _others + [_position]]; + + // SEND EVENT TO MONITOR + _decayTime = getNumber(_cfgEpoch >> "containerDecayTime"); + _serverSettingsConfig = configFile >> "CfgEpochServer"; + _timeMultiplier = ([_serverSettingsConfig, "timeMultiplier", 1] call EPOCH_fnc_returnConfigEntry); + _rEvents = missionNameSpace getVariable["EPOCH_RunningEvents",[]]; + _thisEvent = [_position, [_item], [], "containerCounter", diag_tickTime, (_decayTime * _timeMultiplier), _showMarkers, _markers, _originalColors, _decayMarkerColor, _compromisedColor]; + missionNameSpace setVariable["EPOCH_RunningEvents",_rEvents + [_thisEvent]]; + if (_debug) then { + diag_log format["EPOCHDebug: containerSpawner-%1", missionNameSpace getVariable["EPOCH_RunningEvents",[]]]; + }; +}; +// END SCRIPT. \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/EarthQuake.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/EarthQuake.sqf new file mode 100644 index 0000000..7754774 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/EarthQuake.sqf @@ -0,0 +1,95 @@ +/* + Earthquake and Mineral Deposit Event + by Aaron Clark - EpochMod.com + + Events Overhaul by DirtySanchez + + Improvements and or bugfixes and other contributions are welcome via the github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/Earthquake.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgEpoch", "_debug", "_limit", "_counter", "_others", "_distFromOthers", "_position", "_goodPos", "_playersNearEpicenter", "_chance", "_minerals", "_item", "_debugMkr", "_markers", "_originalColors", "_showMarkers", "_decayMarkerColor", "_compromisedColor", "_spawned", "_decayTime", "_serverSettingsConfig", "_timeMultiplier", "_rEvents", "_thisEvent"]; +//[[[end]]] +_cfgEpoch = configFile >> "CfgEpoch" >> worldname; +_debug = if(getNumber(_cfgEpoch >> "debugEarthquakeSpawner") isEqualTo 1)then{true}else{false}; +_limit = getNumber(_cfgEpoch >> "maxEarthquakeSpawns"); +_counter = missionNameSpace getVariable["EPOCH_earthquakeCounter",0]; +_others = missionNameSpace getVariable["EPOCH_earthquakes", [[0,0,0]] ]; +_distFromOthers = getNumber(_cfgEpoch >> "distFromOtherEarthquakes"); + +//STOP THE SCRIPT AND EXIT IF THE COUNTER IS TOO HIGH. +if (_counter >= _limit) exitWith { + if (_debug) then {diag_log "DEBUG: suppressed EARTHQUAKE spawn over limit"}; +}; + +for "_i" from 0 to 100 step 1 do { + _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 1000, 0] call BIS_fnc_findSafePos; + _goodPos = true; + + _goodPos = [_position, true, true, false, _others, _distFromOthers] call EPOCH_server_isNearChecks; + + if(_goodPos)then{ + _i = 100; + }else{ + _position = []; + }; +}; + +if ((count _position) == 2) then{ + _playersNearEpicenter = _position nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 1000]; + // decrease chance with more players + _chance = linearConversion [1, 100, (count allPlayers), 0, 0.5, true]; + if ((random 1) > _chance) then { + + if !(_playersNearEpicenter isEqualTo[]) then{ + // send earthquake to each player in zone + [_position] remoteExec ['EPOCH_client_earthQuake',_playersNearEpicenter]; + }; + + // Mineral veins + _minerals = getArray(_cfgEpoch >> "availableMinerals"); + _item = createVehicle[(selectRandom _minerals), _position, [], 0.0, "CAN_COLLIDE"]; + if(_debug)then{ + _debugMkr = createMarker [str(_position), _position]; + _debugMkr setMarkerShape "ICON"; + _debugMkr setMarkerType "mil_dot"; + _debugMkr setMarkerColor "ColorRed"; + }; + + // Place markers and get decay, compromised and original colors + _markers = []; + _originalColors = []; + _showMarkers = if(getNumber(_cfgEpoch >> "showEarthquakeMarkers") isEqualTo 1)then{true}else{false}; + _decayMarkerColor = getText(_cfgEpoch >> "earthquakeDecayMarkerColor"); + _compromisedColor = getText(_cfgEpoch >> "earthquakeCompromisedColor"); + if (_showMarkers) then{ + _markers = ["EarthQuake",_position] call EPOCH_server_createGlobalMarkerSet; + { + _originalColors pushBack (getMarkerColor _x); + }forEach _markers; + + // Check for HeightenedPlayerVsPlayer false and remove comprimised coloring + if!(getNumber(_cfgEpoch >> "HeightenedPlayerVsPlayer") isEqualTo 1)then{ + _compromisedColor = getMarkerColor (_markers select 0); + }; + }; + + // Tick Counter +1 + _counter = _counter + 1; + missionNameSpace setVariable["EPOCH_earthquakeCounter",_counter]; + + // ADD POSITION TO OTHERS ARRAY + missionNameSpace setVariable["EPOCH_earthquakes", _others + [_position]]; + + // SEND EVENT TO MONITOR + _decayTime = getNumber(_cfgEpoch >> "earthquakeDecayTime"); + _serverSettingsConfig = configFile >> "CfgEpochServer"; + _timeMultiplier = ([_serverSettingsConfig, "timeMultiplier", 1] call EPOCH_fnc_returnConfigEntry); + _rEvents = missionNameSpace getVariable["EPOCH_RunningEvents",[]]; + _thisEvent = [_position, [_item], [], "earthquakeCounter", diag_tickTime, (_decayTime * _timeMultiplier), _showMarkers, _markers, _originalColors, _decayMarkerColor, _compromisedColor]; + missionNameSpace setVariable["EPOCH_RunningEvents",_rEvents + [_thisEvent]]; + if (_debug) then { + diag_log format["EPOCHDebug: earthquakeSpawner-%1", missionNameSpace getVariable["EPOCH_RunningEvents",[]]]; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/FastNights.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/FastNights.sqf new file mode 100644 index 0000000..ab6d0c0 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/FastNights.sqf @@ -0,0 +1,6 @@ +params [["_nightmulti",48],["_daymulti",4]]; +if (sunOrMoon < 0.99) then { // adjust this lower to change sooner. Note: "0.99 value, the twilight is still quite dark" https://community.bistudio.com/wiki/sunOrMoon + setTimeMultiplier _nightmulti // [0.1 ... 120] adjust this value for slower or faster night cycle ( 24 hours will take 0.5 hours ) +} else { + setTimeMultiplier _daymulti // adjust this value for slower or faster day cycle ( 24 hours will take 6 hours ) +}; diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/GardenManager.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/GardenManager.sqf new file mode 100644 index 0000000..3ff48c1 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/GardenManager.sqf @@ -0,0 +1,74 @@ +/* + Garden Manager + by Aaron Clark - EpochMod.com + + Improvements and or bugfixes and other contributions are welcome via the github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/GardenManager.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_babies","_babyClasses","_cargo","_garden","_mature","_matureClasses","_modifiedGardens","_seedClasses","_seeds","_spoil","_teenClasses","_teens"]; +//[[[end]]] + +_seedClasses = ["SeedPacket_GoldenSeal","SeedPacket_Hemp","SeedPacket_Poppy","SeedPacket_Pumpkin","SeedPacket_Sunflower"]; +_babyClasses = ["Sapling_GoldenSeal","Sapling_Hemp","Sapling_Poppy","Sapling_Pumpkin","Sapling_Sunflower"]; +_teenClasses = ["SaplingTeen_GoldenSeal","SaplingTeen_Hemp","SaplingTeen_Poppy","SaplingTeen_Pumpkin","SaplingTeen_Sunflower"]; +_matureClasses = ["Goldenseal","Hemp","Poppy","Pumpkin","Sunflower"]; +_spoil = false; + +// init var if not set +if (isNil "EPOCH_activeGardens") then {EPOCH_activeGardens = []}; +// remove any null objects +EPOCH_activeGardens = EPOCH_activeGardens - [objNull]; + +_modifiedGardens = []; +{ + _garden = _x; + _cargo = magazineCargo _x; + // find all seeds + _seeds = _cargo select {_x in _seedClasses}; + // find all baby plants + _babies = _cargo select {_x in _babyClasses}; + // find all teen plants + _teens = _cargo select {_x in _teenClasses}; + // find all mature plants + _mature = _cargo select {_x in _matureClasses}; + + // normalize storage + clearWeaponCargoGlobal _x; + clearMagazineCargoGlobal _x; + clearBackpackCargoGlobal _x; + clearItemCargoGlobal _x; + + // convert seeds to baby plants. + { + _garden addMagazineCargoGlobal [(_babyClasses param [_seedClasses find _x, _x]), 1]; + } forEach _seeds; + + // convert baby plants to teen + { + _garden addMagazineCargoGlobal [(_teenClasses param [_babyClasses find _x, _x]), 1]; + } forEach _babies; + + // convert teen plants to mature + { + _garden addMagazineCargoGlobal [(_matureClasses param [_teenClasses find _x, _x]), 1]; + } forEach _teens; + + // readd mature plants if spoil == false + if !(_spoil) then { + { + _garden addMagazineCargoGlobal [_x, 1]; + } forEach _mature; + }; + + // push to temp array for save + if !((magazineCargo _garden) isEqualTo _cargo) then { + _modifiedGardens pushBack _garden; + }; + +} forEach EPOCH_activeGardens; + +// force all modified gardens to save via queue +if !(_modifiedGardens isEqualTo []) then { + [_modifiedGardens] call EPOCH_server_save_vehicles; +}; diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/HeliCrash.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/HeliCrash.sqf new file mode 100644 index 0000000..5cc7a19 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/HeliCrash.sqf @@ -0,0 +1,141 @@ +_cfgEpoch = configFile >> "CfgEpoch" >> worldname; +_debug = if(getNumber(_cfgEpoch >> "debugHeliCrashes") isEqualTo 1)then{true}else{false}; +_limit = getNumber(_cfgEpoch >> "maxSpawnedHeliCrashes"); +_counter = missionNameSpace getVariable["EPOCH_HeliCrashCounter",0]; +_others = missionNameSpace getVariable["EPOCH_HeliCrashes", [[0,0,0]] ]; +_distFromOthers = getNumber(_cfgEpoch >> "distFromOtherHeliCrashes"); + +//STOP THE SCRIPT AND EXIT IF THE COUNTER IS TOO HIGH. +if (_counter >= _limit) exitWith { + if (_debug) then {diag_log "DEBUG: suppressed HELICRASH spawn over limit"}; +}; + +// decrease chance with more players +if (count (allplayers select {alive _x}) == 0) exitwith {}; +_chance = 0.1 + (linearConversion [1, 100, (count allPlayers), 0, 0.5, true]); +if ((random 1) < _chance) then { + _position = [0,0,0]; + for "_i" from 0 to 100 step 1 do { + _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 5, 0, 1000, 0] call BIS_fnc_findSafePos; + _goodPos = true; + _goodPos = [_position, true, true, false, _others, _distFromOthers] call EPOCH_server_isNearChecks; + if(_goodPos)then{ + _i = 100; + }else{ + _position = []; + }; + }; + + if ((count _position) == 2) then{ + _values = getArray(_cfgEpoch >> "availableHeliCrashes"); + if (_values isEqualTo []) exitwith { + if (_debug) then {diag_log "DEBUG: suppressed HELICRASH no HeliClasses defined"}; + }; + _veharray = selectrandom _values; + _startpos = [_position, 0, 3000, 5, 0, 1000, 0] call BIS_fnc_findSafePos; + if ((count _startpos) > 2) then { + _startpos = [3000,3000]; + }; + _startpos set [2,600]; + _veh = createVehicle [_veharray select 0, _startpos, [], 0, "FLY"]; + _veh setpos _startpos; + _veh call EPOCH_server_setVToken; + _group = creategroup east; + _unit = _group createUnit["I_Soldier_EPOCH", [0,0,0], [], 0, "FORM"]; + _unit moveInDriver _veh; + _veh flyinheight 200; + for '_i' from 0 to 3 do { + _group move _position; + uisleep 30; + }; + _time = diag_ticktime; + waituntil {uisleep 0.5; !(surfaceiswater (getpos _veh)) || diag_ticktime - _time > 60}; + deletevehicle _unit; + uisleep 2; + _veh setdamage 1; + _starttime = diag_ticktime; + waituntil {uisleep 0.25; ((getpos _veh) select 2) < 2 || diag_ticktime > _starttime+30}; + _pos = getposatl _veh; + _pos set [2,0]; + deletevehicle _veh; + uisleep 0.5; + if !(surfaceiswater _pos) then { + _veh = createVehicle [_veharray select 1, _pos, [], 0, "CAN_COLLIDE"]; + _veh setVectorUp surfaceNormal _pos; + _veh setPosatl _pos; + _LootWHs = [objnull,"HeliCrash",false,_pos,[true,[6,12]]] call EPOCH_serverLootObject; + // Place markers and get decay, compromised and original colors + _markers = []; + _originalColors = []; + _showMarkers = if(getNumber(_cfgEpoch >> "showHeliCrashMarkers") isEqualTo 1)then{true}else{false}; + _decayMarkerColor = getText(_cfgEpoch >> "heliCrashDecayMarkerColor"); + _compromisedColor = getText(_cfgEpoch >> "heliCrashCompromisedColor"); + if (_showMarkers) then{ + _markers = ["HeliCrash",_pos] call EPOCH_server_createGlobalMarkerSet; + { + _originalColors pushBack (getMarkerColor _x); + }forEach _markers; + + // Check for HeightenedPlayerVsPlayer false and remove comprimised coloring + if!(getNumber(_cfgEpoch >> "HeightenedPlayerVsPlayer") isEqualTo 1)then{ + _compromisedColor = getMarkerColor (_markers select 0); + }; + }; + + // Tick Counter +1 + _counter = _counter + 1; + missionNameSpace setVariable["EPOCH_HeliCrashCounter",_counter]; + + // ADD POSITION TO OTHERS ARRAY + missionNameSpace setVariable["EPOCH_HeliCrashes", _others + [_pos]]; + + // SEND EVENT TO MONITOR + _decayTime = getNumber(_cfgEpoch >> "HeliCrashDecayTime"); + _serverSettingsConfig = configFile >> "CfgEpochServer"; + _timeMultiplier = ([_serverSettingsConfig, "timeMultiplier", 1] call EPOCH_fnc_returnConfigEntry); + _rEvents = missionNameSpace getVariable["EPOCH_RunningEvents",[]]; + _thisEvent = [_pos, [_veh], _LootWHs, "EPOCH_HeliCrashCounter", diag_tickTime, (_decayTime * _timeMultiplier), _showMarkers, _markers, _originalColors, _decayMarkerColor, _compromisedColor]; + missionNameSpace setVariable["EPOCH_RunningEvents",_rEvents + [_thisEvent]]; + + _effects = []; + { + _x params ["_distance","_effect","_sleep"]; + { + if (!isnull _x) then { + deletevehicle _x; + }; + } foreach _effects; + if (isnull _veh) exitwith {}; + _effects = []; + _fireArray = switch _effect do { + case "FIRE_BIG": { + ["BigDestructionFire","BigDestructionSmoke"] + }; + case "SMOKE_MID": { + ["","MediumSmoke"] + }; + case "SMOKE_BIG": { + ["","BigDestructionSmoke"] + }; + default {[]}; + }; + if !(_fireArray isEqualTo []) then { + _fireArray params ["_fire","_smoke"]; + if (_fire != "") then { + _eFire = "#particlesource" createVehicle (position _veh) ; + _eFire setParticleClass _fire; + _eFire attachto [_veh, [0,0,-1]]; + _effects pushback _eFire; + }; + if (_smoke != "") then { + _eSmoke = "#particlesource" createVehicle (position _veh); + _eSmoke setParticleClass _smoke; + _eSmoke attachto [_veh, [0,0,-1]]; + _effects pushback _eSmoke; + }; + }; + waituntil {uisleep _sleep; !((_pos nearentities _distance) select {isplayer _x} isequalto []) || isnull _veh}; + } foreach [[200,"FIRE_BIG",15],[100,"SMOKE_BIG",5],[50,"SMOKE_MID",2]]; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/MessageServer.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/MessageServer.sqf new file mode 100644 index 0000000..3c60b3a --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/MessageServer.sqf @@ -0,0 +1,14 @@ +// Random Messages +/* +_messages = [ +"Message 1", +"Message 2", +"Message 3", +"Message 4", +]; +["message", _messages param [floor(random (count _messages))]] call EPOCH_serverCommand; +*/ + +// Restart time +private _restartIn = round((EPOCH_forceRestartTime-diag_tickTime)/60); +["message", format["Welcome to Epoch Mod, server wlll restart in %1 minutes",_restartIn]] call EPOCH_serverCommand; diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/MoneyDrop.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/MoneyDrop.sqf new file mode 100644 index 0000000..7ad4ede --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/MoneyDrop.sqf @@ -0,0 +1,103 @@ +/* + Money Drop Event + by He-Man - EpochMod.com + + Improvements and or bugfixes and other contributions are welcome via the github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/MoneyDrop.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgEpoch", "_debug", "_limit", "_counter", "_others", "_distFromOthers", "_position", "_goodPos", "_playersNearEpicenter", "_chance", "_values","_spawncount" ,"_scatter" ,"_packs" ,"_packPos" , "_item", "_debugMkr", "_markers", "_originalColors", "_showMarkers", "_decayMarkerColor", "_compromisedColor", "_spawned", "_decayTime", "_serverSettingsConfig", "_timeMultiplier", "_rEvents", "_thisEvent"]; +//[[[end]]] +_cfgEpoch = configFile >> "CfgEpoch" >> worldname; +_debug = if(getNumber(_cfgEpoch >> "debugMoneyDrop") isEqualTo 1)then{true}else{false}; +_limit = getNumber(_cfgEpoch >> "maxMoneyDrops"); +_counter = missionNameSpace getVariable["EPOCH_MoneyDropCounter",0]; +_others = missionNameSpace getVariable["EPOCH_MoneyDrops", [[0,0,0]] ]; +_distFromOthers = getNumber(_cfgEpoch >> "distFromOtherMoneyDrops"); + +//STOP THE SCRIPT AND EXIT IF THE COUNTER IS TOO HIGH. +if (_counter >= _limit) exitWith { + if (_debug) then {diag_log "DEBUG: suppressed MONEYDROP spawn over limit"}; +}; + +for "_i" from 0 to 100 step 1 do { + _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 1000, 0] call BIS_fnc_findSafePos; + _goodPos = true; + + _goodPos = [_position, true, true, false, _others, _distFromOthers] call EPOCH_server_isNearChecks; + + if(_goodPos)then{ + _i = 100; + }else{ + _position = []; + }; +}; + +if ((count _position) == 2) then{ + _playersNearEpicenter = _position nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 1000]; + // decrease chance with more players + _chance = 0.1 + (linearConversion [1, 100, (count allPlayers), 0, 0.5, true]); + if ((random 1) < _chance) then { + + _values = getArray(_cfgEpoch >> "MoneyDropValues"); + _values params ["_PacksArr","_ValueArr"]; + _PacksArr params ["_packsmin","_packsmax"]; + _ValueArr params ["_minvalue","_maxvalue"]; + + _spawncount = round (_packsmin + random (_packsmax-_packsmin)); + + // Spawn Scattered Money + _scatter = 10; + _packs = []; + for "_i" from 0 to (_spawncount - 1) step 1 do { + _value = round (_minvalue + random (_maxvalue-_minvalue)); + _item = createVehicle["Land_Money_F", _position, [], _scatter, "NONE"]; + _item setVariable ["Crypto",_value,true]; + _item setVariable ["RemoveOnTake",true]; + _packs pushBack _item; + if(_debug)then{ + _packPos = getPosATL _item; + _debugMkr = createMarker [str(_packPos), _packPos]; + _debugMkr setMarkerShape "ICON"; + _debugMkr setMarkerType "mil_dot"; + _debugMkr setMarkerColor "ColorRed"; + }; + }; + + // Place markers and get decay, compromised and original colors + _markers = []; + _originalColors = []; + _showMarkers = if(getNumber(_cfgEpoch >> "showMoneyMarkers") isEqualTo 1)then{true}else{false}; + _decayMarkerColor = getText(_cfgEpoch >> "MoneyDropDecayMarkerColor"); + _compromisedColor = getText(_cfgEpoch >> "MoneyDropCompromisedColor"); + if (_showMarkers) then{ + _markers = ["MoneyDrop",_position] call EPOCH_server_createGlobalMarkerSet; + { + _originalColors pushBack (getMarkerColor _x); + }forEach _markers; + + // Check for HeightenedPlayerVsPlayer false and remove comprimised coloring + if!(getNumber(_cfgEpoch >> "HeightenedPlayerVsPlayer") isEqualTo 1)then{ + _compromisedColor = getMarkerColor (_markers select 0); + }; + }; + + // Tick Counter +1 + _counter = _counter + 1; + missionNameSpace setVariable["EPOCH_MoneyDropCounter",_counter]; + + // ADD POSITION TO OTHERS ARRAY + missionNameSpace setVariable["EPOCH_MoneyDrops", _others + [_position]]; + + // SEND EVENT TO MONITOR + _decayTime = getNumber(_cfgEpoch >> "MoneyDropDecayTime"); + _serverSettingsConfig = configFile >> "CfgEpochServer"; + _timeMultiplier = ([_serverSettingsConfig, "timeMultiplier", 1] call EPOCH_fnc_returnConfigEntry); + _rEvents = missionNameSpace getVariable["EPOCH_RunningEvents",[]]; + _thisEvent = [_position, _packs, [], "MoneyDropCounter", diag_tickTime, (_decayTime * _timeMultiplier), _showMarkers, _markers, _originalColors, _decayMarkerColor, _compromisedColor]; + missionNameSpace setVariable["EPOCH_RunningEvents",_rEvents + [_thisEvent]]; + if (_debug) then { + diag_log format["EPOCHDebug: earthquakeSpawner-%1", missionNameSpace getVariable["EPOCH_RunningEvents",[]]]; + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/PaydayEvent.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/PaydayEvent.sqf new file mode 100644 index 0000000..a028312 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/PaydayEvent.sqf @@ -0,0 +1,11 @@ +/* + Give everyone alive on the server 100 Crypto. + by Aaron Clark - EpochMod.com + + Improvements and or bugfixes and other contributions are welcome via the github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/PaydayEvent.sqf +*/ + +{[_x,100] call EPOCH_server_effectCrypto;} forEach (allPlayers select {alive _x}); + +// Add on screen notification large crypto symbol and maybe audio clip CHA-CHING, configurable option for hosts diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/PlantSpawner.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/PlantSpawner.sqf new file mode 100644 index 0000000..e68b54d --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/PlantSpawner.sqf @@ -0,0 +1,135 @@ +/* + Author/s: + Redbeard Actual + Aaron Clark - EpochMod.com + + Events Overhaul by DirtySanchez + + Description: + Improved Plant Spawner - Plant Patch Spawner + Event spawns a random number of plants based on plant type. + Prefers "Hill" locations and restricts Jammers and Protected Trader Zones. + Plants now decay after 20 minutes and marker will change to brown at 50%. + Plant patch marker will turn red after one plant is picked + Plants and marker will cleanup after all plants in a patch are picked or die due to decay. + + Improvements and or bugfixes and other contributions are welcome via the github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/PlantSpawner.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgEpoch", "_debug", "_limit", "_counter", "_others", "_distFromOthers", "_nearbyLocations", "_position", "_selectedLocation", "_goodPos", "_plantsArray", "_plant", "_plantCount", "_scatter", "_plants", "_plantPos", "_debugMkr", "_markers", "_originalColors", "_showMarkers", "_decayMarkerColor", "_compromisedColor", "_decayTime", "_serverSettingsConfig", "_timeMultiplier", "_rEvents","_thisEvent"]; +//[[[end]]] +_cfgEpoch = configFile >> "CfgEpoch" >> worldname; +_debug = if(getNumber(_cfgEpoch >> "debugPlantSpawner") isEqualTo 1)then{true}else{false}; +_limit = getNumber(_cfgEpoch >> "maxPlantSpawns"); +_counter = missionNameSpace getVariable["EPOCH_plantCounter",0]; +_others = missionNameSpace getVariable["EPOCH_plants", [[0,0,0]] ]; +_distFromOthers = getNumber(_cfgEpoch >> "distFromOtherPlants"); + +//STOP THE SCRIPT AND EXIT IF THE COUNTER IS TOO HIGH. +if (_counter >= _limit) exitWith { + if (_debug) then {diag_log "DEBUG: suppressed plant spawn over limit"}; +}; + +// FIND A POSITION FOR PLANT PATCH prefer Hills and Vineyards +_nearbyLocations = nearestLocations [epoch_centerMarkerPosition,["VegetationVineyard","Hill"],EPOCH_dynamicVehicleArea]; +for "_i" from 0 to 100 step 1 do { + if (_nearbyLocations isEqualTo []) then { + _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 4000, 0] call BIS_fnc_findSafePos; + } else { + _selectedLocation = locationPosition (selectRandom _nearbyLocations); + _position = [_selectedLocation, 0, 1000, 10, 0, 4000, 0] call BIS_fnc_findSafePos; + }; + _goodPos = true; + + _goodPos = [_position, true, true, true, _others, _distFromOthers] call EPOCH_server_isNearChecks; + + if(_goodPos)then{ + _i = 100; + }else{ + _position = []; + }; +}; + +// IF WE MADE IT THIS FAR, WE CAN SPAWN SOME SHIT. +if ((count _position) == 2) then{ + // select a plant type to spawn + _plantsArray = getArray(_cfgEpoch >> "availablePlants"); + _plant = selectRandom _plantsArray; + + // vary plant count and scatter by plant type + _plantCount = (floor(random(2))); + _scatter = 10; + switch _plant do { + case "Goldenseal_EPOCH": { + _plantCount = (floor(random(4)))+3; + _scatter = 10; + }; + case "Poppy_EPOCH": { + _plantCount = (floor(random(2)))+3; + _scatter = 15; + }; + case "Pumpkin_EPOCH": { + _plantCount = (floor(random(3)))+5; + _scatter = 20; + }; + case "HempPlant_EPOCH": { + _plantCount = (floor(random(2)))+1; + _scatter = 20; + }; + case "SunflowerPlant_EPOCH": { + _plantCount = (floor(random(2)))+1; + _scatter = 20; + }; + }; + + _plants = []; + // CREATE THE PATCH OF PLANTS. + for "_i" from 0 to (_plantCount - 1) step 1 do { + _plants pushBack createVehicle[_plant, _position, [], _scatter, "NONE"]; + if(_debug)then{ + _plantPos = getPosATL (_plants select _i); + _debugMkr = createMarker [str(_plantPos), _plantPos]; + _debugMkr setMarkerShape "ICON"; + _debugMkr setMarkerType "mil_dot"; + _debugMkr setMarkerColor "ColorRed"; + }; + }; + + // SET UP THE MARKER. + _markers = []; + _originalColors = []; + _showMarkers = if(getNumber(_cfgEpoch >> "showPlantMarkers") isEqualTo 1)then{true}else{false}; + _decayMarkerColor = getText(_cfgEpoch >> "plantDecayMarkerColor"); + _compromisedColor = getText(_cfgEpoch >> "plantCompromisedColor"); + if (_showMarkers) then{ + _markers = ["PlantSpawn",_position] call EPOCH_server_createGlobalMarkerSet; + { + _originalColors pushBack (getMarkerColor _x); + }forEach _markers; + + // Check for HeightenedPlayerVsPlayer false and remove comprimised coloring + if!(getNumber(_cfgEpoch >> "HeightenedPlayerVsPlayer") isEqualTo 1)then{ + _compromisedColor = getMarkerColor (_markers select 0); + }; + }; + + // TICK COUNTER + 1 + _counter = _counter + 1; + missionNameSpace setVariable["EPOCH_plantCounter",_counter]; + + // ADD POSITION TO OTHERS ARRAY + missionNameSpace setVariable["EPOCH_plants", _others + [_position]]; + + // SEND EVENT TO MONITOR + _decayTime = getNumber(_cfgEpoch >> "plantDecayTime"); + _serverSettingsConfig = configFile >> "CfgEpochServer"; + _timeMultiplier = ([_serverSettingsConfig, "timeMultiplier", 1] call EPOCH_fnc_returnConfigEntry); + _rEvents = missionNameSpace getVariable["EPOCH_RunningEvents",[]]; + _thisEvent = [_position, _plants, [], "plantCounter", diag_tickTime, (_decayTime * _timeMultiplier), _showMarkers, _markers, _originalColors, _decayMarkerColor, _compromisedColor]; + missionNameSpace setVariable["EPOCH_RunningEvents",_rEvents + [_thisEvent]]; + if (_debug) then { + diag_log format["EPOCHDebug: plantSpawner-EPOCH_PlantSpawns:%1", missionNameSpace getVariable["EPOCH_RunningEvents",[]]]; + }; +}; +// END SCRIPT. \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/Satellite.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/Satellite.sqf new file mode 100644 index 0000000..79d8b8b --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/Satellite.sqf @@ -0,0 +1,84 @@ +/* + Crashed Satellite Event + by Aaron Clark - EpochMod.com + + Improvements and or bugfixes and other contributions are welcome via the github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/Satellite.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgEpoch", "_debug", "_limit", "_counter", "_others", "_distFromOthers", "_position", "_goodPos", "_satellites", "_satellite", "_debugMkr", "_markers", "_originalColors", "_showMarkers", "_decayMarkerColor", "_compromisedColor", "_decayTime", "_serverSettingsConfig", "_timeMultiplier", "_rEvents","_thisEvent"]; +//[[[end]]] +_cfgEpoch = configFile >> "CfgEpoch" >> worldname; +_debug = if(getNumber(_cfgEpoch >> "debugSatelliteSpawner") isEqualTo 1)then{true}else{false}; +_limit = getNumber(_cfgEpoch >> "maxSatelliteSpawns"); +_counter = missionNameSpace getVariable["EPOCH_satelliteCounter",0]; +_others = missionNameSpace getVariable["EPOCH_satellites", [[0,0,0]] ]; +_distFromOthers = getNumber(_cfgEpoch >> "distFromOtherSatellites"); + +//STOP THE SCRIPT AND EXIT IF THE COUNTER IS TOO HIGH. +if (_counter >= _limit) exitWith { + if (_debug) then {diag_log "DEBUG: suppressed SATELLITE spawn over limit"}; +}; + +// FIND A POSITION +for "_i" from 0 to 100 step 1 do { + _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 1000, 0] call BIS_fnc_findSafePos; + _goodPos = true; + + _goodPos = [_position, true, true, true, _others, _distFromOthers] call EPOCH_server_isNearChecks; + + if(_goodPos)then{ + _i = 100; + }else{ + _position = []; + }; +}; + +if ((count _position) == 2) then{ + // select a Satellite type to spawn + _satellites = getArray(_cfgEpoch >> "availableSatellites"); + _satellite = createVehicle[(selectRandom _satellites), _position, [], 0.0, "CAN_COLLIDE"]; + if(_debug)then{ + _debugMkr = createMarker [str(_position), _position]; + _debugMkr setMarkerShape "ICON"; + _debugMkr setMarkerType "mil_dot"; + _debugMkr setMarkerColor "ColorRed"; + }; + + // SET UP THE MARKER. + _markers = []; + _originalColors = []; + _showMarkers = if(getNumber(_cfgEpoch >> "showSatelliteMarkers") isEqualTo 1)then{true}else{false}; + _decayMarkerColor = getText(_cfgEpoch >> "satelliteDecayMarkerColor"); + _compromisedColor = getText(_cfgEpoch >> "satelliteCompromisedColor"); + if (_showMarkers) then{ + _markers = ["Satellite",_position] call EPOCH_server_createGlobalMarkerSet; + { + _originalColors pushBack (getMarkerColor _x); + }forEach _markers; + + // Check for HeightenedPlayerVsPlayer false and remove comprimised coloring + if!(getNumber(_cfgEpoch >> "HeightenedPlayerVsPlayer") isEqualTo 1)then{ + _compromisedColor = getMarkerColor (_markers select 0); + }; + }; + + // TICK COUNTER + 1 + _counter = _counter + 1; + missionNameSpace setVariable["EPOCH_satelliteCounter",_counter]; + + // ADD POSITION TO OTHERS ARRAY + missionNameSpace setVariable["EPOCH_satellites", _others + [_position]]; + + // SEND EVENT TO MONITOR + _decayTime = getNumber(_cfgEpoch >> "satelliteDecayTime"); + _serverSettingsConfig = configFile >> "CfgEpochServer"; + _timeMultiplier = ([_serverSettingsConfig, "timeMultiplier", 1] call EPOCH_fnc_returnConfigEntry); + _rEvents = missionNameSpace getVariable["EPOCH_RunningEvents",[]]; + _thisEvent = [_position, [_satellite], [], "satelliteCounter", diag_tickTime, (_decayTime * _timeMultiplier), _showMarkers, _markers, _originalColors, _decayMarkerColor, _compromisedColor]; + missionNameSpace setVariable["EPOCH_RunningEvents",_rEvents + [_thisEvent]]; + if (_debug) then { + diag_log format["EPOCHDebug: satelliteSpawner-%1", missionNameSpace getVariable["EPOCH_RunningEvents",[]]]; + }; +}; +// END SCRIPT. \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_events/EpochEvents/SolarChargerManager.sqf b/Server/@epochhive/addons/epoch_server_events/EpochEvents/SolarChargerManager.sqf new file mode 100644 index 0000000..97f009f --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/EpochEvents/SolarChargerManager.sqf @@ -0,0 +1,56 @@ +/* + Garden Manager + by Aaron Clark - EpochMod.com + + Improvements and or bugfixes and other contributions are welcome via the github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/GardenManager.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_ChargeClasses","_MaxRounds","_ChargeValue","_modifiedSolars","_changed","_solar","_chargeables","_idx","_MaxRoundsTmp"]; +//[[[end]]] + +_ChargeClasses = ["EnergyPack","EnergyPackLg"]; +_MaxRounds = []; +{ + _MaxRounds pushback (getnumber (configfile >> "cfgMagazines" >> _x >> "count")); +} foreach _ChargeClasses; + +_ChargeValue = 1; + +if (isNil "EPOCH_activeSolars") then {EPOCH_activeSolars = []}; +EPOCH_activeSolars = EPOCH_activeSolars - [objNull]; + +_modifiedSolars = []; +{ + _changed = false; + _solar = _x; + _chargeables = (magazinesAmmoCargo _solar) select {(_x select 0) in _ChargeClasses}; + if !(_chargeables isequalto []) then { + _return = []; + { + _x params ["_type","_rounds"]; + _idx = _ChargeClasses find _type; + if (_idx > -1) then { + _MaxRoundsTmp = _MaxRounds select _idx; + if (_MaxRoundsTmp > _rounds) then { + _changed = true; + _x set [1, (_rounds + _ChargeValue) min _MaxRoundsTmp]; + }; + }; + } foreach _chargeables; + if (_changed) then { + clearWeaponCargoGlobal _solar; + clearMagazineCargoGlobal _solar; + clearBackpackCargoGlobal _solar; + clearItemCargoGlobal _solar; + { + _solar addmagazineammocargo [_x select 0,1,_x select 1]; + } foreach _chargeables; + _modifiedSolars pushBack _solar; + }; + }; +} forEach EPOCH_activeSolars; + +if !(_modifiedSolars isEqualTo []) then { + [_modifiedSolars] call EPOCH_server_save_vehicles; +}; diff --git a/Server/@epochhive/addons/epoch_server_events/build.hpp b/Server/@epochhive/addons/epoch_server_events/build.hpp new file mode 100644 index 0000000..ebdd628 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/build.hpp @@ -0,0 +1 @@ +build=826; diff --git a/Server/@epochhive/addons/epoch_server_events/config.cpp b/Server/@epochhive/addons/epoch_server_events/config.cpp new file mode 100644 index 0000000..1d9d43f --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/config.cpp @@ -0,0 +1,47 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + BASE Epoch Server Events !!!DO NOT EDIT THIS FILE!!! Copy the epoch_server_debris_event to make new ones. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/config.cpp +*/ + +#define _ARMA_ + +class CfgPatches { + class A3_server_events { + requiredVersion = 0.1; + requiredAddons[] = {}; + #include "build.hpp" + }; +}; + +// import settings +class CfgEpochServerEvents +{ + /* EXAMPLES ONLY !!! DO NOT EDIT THIS FILE make a copy of the Dynamic Debris Event !!! + class ContainerSpawner { + delay = 1200; // delay in seconds between executions , + script = "\epoch_server_events\EpochEvents\ContainerSpawner.sqf"; // script: name or full path if usePrefix is set to 0 + runOnStart = 0; // runOnStart: 1 = run script at startup, 0 normal delay + usePrefix = 0; // usePrefix: 1 = use pre/postfix path (inside epoch settings pbo EpochEvents folder) 0 = use full file path + runNumTimes = -1; // runNumTimes: -1 = no limit, 0 = disabled, 1+ = number of times to execute before removing event. + input[] = {}; // array input to execVM at time of run and accessed with _this inside of script. + }; + class AirDrop { + delay = 2700; // delay in seconds between executions , + script = "AirDrop"; // script: name or full path if usePrefix is set to 0 + runOnStart = 0; // runOnStart: 1 = run script at startup, 0 normal delay + usePrefix = 2; // usePrefix: 1 = use pre/postfix path (inside epoch settings pbo EpochEvents folder) 0 = use full file path + runNumTimes = -1; // runNumTimes: -1 = no limit, 0 = disabled, 1+ = number of times to execute before removing event. + input[] = {}; // array input to execVM at time of run and accessed with _this inside of script. + }; + */ +}; diff --git a/Server/@epochhive/addons/epoch_server_events/license.txt b/Server/@epochhive/addons/epoch_server_events/license.txt new file mode 100644 index 0000000..35440e4 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_events/license.txt @@ -0,0 +1,9 @@ +Epoch Mod for Arma 3 +http://epochmod.com +by Epoch Mod Team +https://github.com/EpochModTeam/Epoch + +The contents of this pbo are under the following license: +http://www.bistudio.com/community/licenses/arma-public-license-share-alike + +Keep this file and file headers with attribution intact for proper use. \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_events/treeView.txt b/Server/@epochhive/addons/epoch_server_events/treeView.txt new file mode 100644 index 0000000..803c022 Binary files /dev/null and b/Server/@epochhive/addons/epoch_server_events/treeView.txt differ diff --git a/Server/@epochhive/addons/epoch_server_settings/$PREFIX$ b/Server/@epochhive/addons/epoch_server_settings/$PREFIX$ new file mode 100644 index 0000000..e006d07 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/$PREFIX$ @@ -0,0 +1 @@ +epoch_server_settings \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_settings/BIS_AddonInfo.hpp b/Server/@epochhive/addons/epoch_server_settings/BIS_AddonInfo.hpp new file mode 100644 index 0000000..b5d7fc0 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/BIS_AddonInfo.hpp @@ -0,0 +1,5 @@ +class BIS_AddonInfo +{ + author=""; + timepacked="1521065982"; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/build.hpp b/Server/@epochhive/addons/epoch_server_settings/build.hpp new file mode 100644 index 0000000..ebdd628 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/build.hpp @@ -0,0 +1 @@ +build=826; diff --git a/Server/@epochhive/addons/epoch_server_settings/config.cpp b/Server/@epochhive/addons/epoch_server_settings/config.cpp new file mode 100644 index 0000000..4b914e3 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/config.cpp @@ -0,0 +1,476 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Server Settings Config + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/config.cpp +*/ + +#define _ARMA_ + +class CfgPatches { + class A3_server_settings { + units[] = {}; + weapons[] = {}; + requiredVersion = 0.1; + epochVersion = "1.3.2"; + requiredAddons[] = {}; + #include "build.hpp" + }; +}; + +// inport loot tables +#include "configs\CfgMainTable.h" +#include "configs\CfgLootTable.h" +#include "configs\CfgLootTable_CUP.h" +#include "configs\CfgLootTable_MAD.h" +#include "configs\CfgLootTable_MADCUP.h" +// vehicle textures +#include "configs\CfgEpochVehicles.h" +// security checks +#include "configs\security\security_checks.h" +// props template +#include "configs\templates\CfgPropTemplate.h" + +// import settings +class CfgEpochServer +{ + #include "\@epochhive\epochah.hpp" + #include "\@epochhive\epochconfig.hpp" +}; + +// map config +class CfgEpoch +{ + class Default + { +// worldSize = 12000; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5} + }; + + // Radiation System + radioactiveLocations[] = {"NameCityCapital", "NameCity", "Airport"}; + radioactiveLocationsCount = 3; + + // BlackList radioactive locations spawn by object and distance + radioactiveLocBLObjects[] = {}; // PlotPoles are already blacklisted by script + radioactiveLocBLDistance = 500; + + // Custom Locations for Radiation + customRadioactiveLocations[] = { + // {{position , intensity , object}, + // {{11650,11900,0}, 500, "Land_Device_assembled_F"}, + // {{0,0,0}, 0, ""} //any of these will throw an error in the rpt + }; + + // Traders + traderBlds[] = {"Building"}; + traderHomes[] = {"Building"}; + traderUniforms[] = {"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_Chav_EPOCH"}; +// TraderMinDistance = 1500; // Min distance between Traders. If not defined, Server will calculate it by MapSize + traderblockblds[] = {"pier","bridge","fireescape","medevac_house","pillboxbunker","containerine"}; // If a building include this chars in the classname (tolower!!!) they will be blocked for Traders + + // Debug Box + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { -0.286865,8.17383,-10.3098, 0}, "", "north" }, // Trader city 1 + { "TP_Booth_s_EPOCH", { -0.415527,-7.05298,-10.3098, 180}, "", "south" }, // Trader city 2 + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", "west" }, // Trader city 3 + { "TP_Booth_e_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "east" } // Trader city 4 + }; + lightPos[] = { + {-16.623,-8.50195,-10.5417}, + {15.0352,-9.08594,-10.5417} + }; + debugBoxClass = "Debug_static_F"; + cloneClasses[] = {"clone_empty_static_F", "clone_male_static_F", "clone_female_static_F"}; + + // Settings for Events, Missions, etc + spawnDistanceFromPlayers = 500; + spawnDistanceFromJammers = 1000; + spawnDistanceFromTraders = 2000; + HeightenedPlayerVsPlayer = 1; // 0 = OFF + + // Shipwrecks Loot Box Spawner + shipwreckLootEnabled = 1; // 0 = OFF + debugShipwreckLoot = 0; // 1 = ON + showBoatLootMarkers = 1; + maxSpawnedShipwrecks = 12; + distFromOtherShipwrecks = 750; + shipwreckDecayMarkerColor = "ColorBrown"; // decay changes icon (_markers select 2) + shipwreckCompromisedColor = "ColorRed"; // compromised changes active surround (_markers select 0) + shipwreckCustomWrecks[] = {"Land_UWreck_FishingBoat_F", "Land_UWreck_Heli_Attack_02_F", "Land_UWreck_MV22_F"}; + shipwreckCustomLocs[] = {}; + + // Plant Spawner + debugPlantSpawner = 0; + showPlantMarkers = 1; + maxPlantSpawns = 5; + distFromOtherPlants = 2500; + plantDecayTime = 1200; //Half this time results in decayMarkerColor marker + plantDecayMarkerColor = "ColorBrown"; + plantCompromisedColor = "ColorRed"; + availablePlants[] = {"Goldenseal_EPOCH", "Goldenseal_EPOCH", "Goldenseal_EPOCH", "Poppy_EPOCH", "Poppy_EPOCH", "Pumpkin_EPOCH", "Pumpkin_EPOCH", "HempPlant_EPOCH","SunflowerPlant_EPOCH"}; + + // Carnival and Loot Box Spawner + debugCarnivalSpawner = 0; + showCarnivalMarkers = 1; + maxCarnivalSpawns = 2; + distFromOtherCarnivals = 5000; + carnivalDecayTime = 3600; + carnivalDecayMarkerColor = "ColorBrown"; + carnivalCompromisedColor = "ColorRed"; + carnivalSpawnedObjects[] = {"Carnival_Tent", "Land_Slide_F", "Carnival_Tent", "Land_Carousel_01_F", "Carnival_Tent", "Carnival_Tent"}; + + // EarthQuake and Mineral Deposit Spawner + debugEarthquakeSpawner = 0; + showEarthquakeMarkers = 1; + maxEarthquakeSpawns = 3; + distFromOtherEarthquakes = 1500; + earthquakeDecayTime = 2400; + earthquakeDecayMarkerColor = "ColorBrown"; + earthquakeCompromisedColor = "ColorRed"; + availableMinerals[] = {"MineralDepositCopper_EPOCH", "MineralDepositGold_EPOCH", "MineralDepositSilver_EPOCH"}; + + // MoneyDrop + debugMoneyDrop = 0; + showMoneyMarkers = 1; + maxMoneyDrops = 3; + distFromOtherMoneyDrops = 1500; + MoneyDropDecayTime = 2400; + MoneyDropDecayMarkerColor = "ColorBrown"; + MoneyDropCompromisedColor = "ColorRed"; + MoneyDropValues[] = {{3,6},{50,120}}; // {{min money lumps, max money lumps},{min crypto per lump, max crypto per lump}} + + // Container Spawner + debugContainerSpawner = 0; + showContainerMarkers = 1; + maxContainerSpawns = 5; + distFromOtherContainers = 3500; + containerDecayTime = 1200; + containerDecayMarkerColor = "ColorBrown"; + containerCompromisedColor = "ColorRed"; + + // Satellite Crash Spawner + debugSatelliteSpawner = 0; + showSatelliteMarkers = 1; + maxSatelliteSpawns = 5; + distFromOtherSatellites = 2500; + satelliteDecayTime = 2700; + satelliteDecayMarkerColor = "ColorBrown"; + satelliteCompromisedColor = "ColorRed"; + availableSatellites[] = {"Land_Wreck_Satellite_EPOCH"}; + + // HeliCrashes and Loot Box Spawner + HeliCrashesEnabled = 1; // 0 = OFF + debugHeliCrashes = 0; // 1 = ON + showHeliCrashMarkers = 1; + maxSpawnedHeliCrashes = 4; + distFromOtherHeliCrashes = 2000; + HeliCrashDecayTime = 2400; + heliCrashDecayMarkerColor = "ColorBrown"; // decay changes icon (_markers select 2) + heliCrashCompromisedColor = "ColorRed"; // compromised changes active surround (_markers select 0) + availableHeliCrashes[] = {{"O_Heli_Attack_02_F","Land_Wreck_Heli_Attack_02_F"},{"B_Heli_Attack_01_F","Land_Wreck_Heli_Attack_01_F"}}; + heliCrashCustomLocs[] = {}; + + propsPos[] = { + // Will accept several variations of this entry to place objects on the map + // _className - STRING - Class name of the object to spawn + // _position - ARRAY - posATL of the object placement + // _direction - NUMBER or ARRAY - Accepts direction 0-360 or accepts Vector Direction and UP array + // _deSimulate - BOOLEAN - Turns simulation off at spawn to save on performance + // _dynamicSimulation(OPTIONAL) - BOOLEAN - Add the object to arma3 dynamic sim system + // _destruction(OPTIONAL) - BOOLEAN - Setting this to true will allow damage to the object + // _damage(OPTIONAL) - NUMBER - Preset damage limited to maximum 0.75 (75% damaged) + + // EXAMPLES: + // {_classname, _position, _direction, _deSimulate, _dynamicSimulation, _destruction, _damage}, + // 1 {"Land_MarketShelter_F", { 13315.3, 14512.4, 0.0361125 }, 119.966, true}, + // 2 {"Land_MarketShelter_F", { 13315.3, 14512.4, 0.0361125 }, {{0,0,0},{0,0,1}}, true}, + // 3 {"Land_MarketShelter_F", { 13315.3, 14512.4, 0.0361125 }, {{0,0,0},{0,0,1}}, true, true, false, 0}, + }; + staticNpcPos[] = {}; + allowedVehiclesList[] = { + {"C_Offroad_01_EPOCH",8}, + {"C_Quadbike_01_EPOCH",8}, + {"C_Hatchback_01_EPOCH",10}, + {"C_Hatchback_02_EPOCH",10}, + {"C_SUV_01_EPOCH",10}, + {"C_Rubberboat_EPOCH",2}, + {"C_Rubberboat_02_EPOCH",2}, + {"C_Rubberboat_03_EPOCH",2}, + {"C_Rubberboat_04_EPOCH",2}, + {"C_Van_01_box_EPOCH",8}, + {"C_Van_01_transport_EPOCH",9}, + {"C_Boat_Civil_01_EPOCH",2}, + {"C_Boat_Civil_01_police_EPOCH",2}, + {"C_Boat_Civil_01_rescue_EPOCH",2}, + {"B_Heli_Light_01_EPOCH",2}, + {"B_SDV_01_EPOCH",2}, + {"B_MRAP_01_EPOCH",3}, + {"I_MRAP_03_EPOCH", 3}, + {"B_Truck_01_transport_EPOCH",1}, + {"B_Truck_01_covered_EPOCH",2}, + {"B_Truck_01_mover_EPOCH",1}, + {"B_Truck_01_box_EPOCH",1}, + {"O_Truck_02_covered_EPOCH",2}, + {"O_Truck_02_transport_EPOCH",1}, + {"O_Truck_03_covered_EPOCH",1}, + {"O_Truck_02_box_EPOCH",1}, + {"I_Heli_light_03_unarmed_EPOCH",1}, + {"O_Heli_Light_02_unarmed_EPOCH",1}, + {"I_Heli_Transport_02_EPOCH",1}, + {"O_Heli_Transport_04_EPOCH",1}, + {"O_Heli_Transport_04_bench_EPOCH",1}, + {"O_Heli_Transport_04_box_EPOCH",1}, + {"O_Heli_Transport_04_covered_EPOCH",1}, + {"B_Heli_Transport_03_unarmed_EPOCH",1}, + {"jetski_epoch",2}, + {"MBK_01_EPOCH",2}, + {"hoverboard_epoch_1",1}, + {"hoverboard_epoch_cargo",1}, + {"hoverboard_epoch_bttf",1}, + {"hoverboard_epoch_a3",1}, + {"K01",2}, + {"K02",2}, + {"K03",2}, + {"K04",2}, + {"ebike_epoch",7}, + {"mosquito_epoch",5}, + {"C_Heli_Light_01_civil_EPOCH",5}, + + // A2 Vehicles + {"A2_Golf_EPOCH",3}, + {"A2_HMMWV_EPOCH",3}, + {"A2_HMMWV_load_EPOCH",3}, + {"A2_Lada_EPOCH",3}, + {"A2_SUV_EPOCH",3}, + {"A2_SUV_load_EPOCH",3}, + {"A2_SUV_armed_EPOCH",2}, + {"A2_UAZ_EPOCH",3}, + {"A2_UAZ_Open_EPOCH",3}, + {"A2_Ural_EPOCH",3}, + {"A2_Vodnik_EPOCH",3}, + {"A2_Volha_EPOCH",3}, + + {"a2_mi8_EPOCH",1}, + {"a2_ch47f_EPOCH",1}, + {"a2_ch47f_armed_EPOCH",1}, + {"a2_ch47f_armed_plus_EPOCH",1}, + {"uh1h_Epoch",1}, + {"uh1h_armed_EPOCH",1}, + {"uh1h_armed_plus_EPOCH",1}, + {"C_Heli_Light_01_armed_EPOCH",1}, + {"C_Heli_Light_01_armed_plus_EPOCH",1} + }; + allowedVehiclesList_CUP[] = { + {"C_Offroad_01_EPOCH",4}, + {"C_Quadbike_01_EPOCH",4}, + {"C_Hatchback_01_EPOCH",5}, + {"C_Hatchback_02_EPOCH",5}, + {"C_SUV_01_EPOCH",5}, + {"C_Rubberboat_EPOCH",2}, + {"C_Rubberboat_02_EPOCH",2}, + {"C_Rubberboat_03_EPOCH",2}, + {"C_Rubberboat_04_EPOCH",2}, + {"C_Van_01_box_EPOCH",4}, + {"C_Van_01_transport_EPOCH",4}, + {"C_Boat_Civil_01_EPOCH",2}, + {"C_Boat_Civil_01_police_EPOCH",2}, + {"C_Boat_Civil_01_rescue_EPOCH",2}, + {"B_Heli_Light_01_EPOCH",2}, + {"B_SDV_01_EPOCH",2}, + {"B_MRAP_01_EPOCH",2}, + {"I_MRAP_03_EPOCH", 2}, + {"B_Truck_01_transport_EPOCH",1}, + {"B_Truck_01_covered_EPOCH",2}, + {"B_Truck_01_mover_EPOCH",1}, + {"B_Truck_01_box_EPOCH",1}, + {"O_Truck_02_covered_EPOCH",2}, + {"O_Truck_02_transport_EPOCH",1}, + {"O_Truck_03_covered_EPOCH",1}, + {"O_Truck_02_box_EPOCH",1}, + {"I_Heli_light_03_unarmed_EPOCH",1}, + {"O_Heli_Light_02_unarmed_EPOCH",1}, + {"I_Heli_Transport_02_EPOCH",1}, + {"O_Heli_Transport_04_EPOCH",1}, + {"O_Heli_Transport_04_bench_EPOCH",1}, + {"O_Heli_Transport_04_box_EPOCH",1}, + {"O_Heli_Transport_04_covered_EPOCH",1}, + {"B_Heli_Transport_03_unarmed_EPOCH",1}, + {"jetski_epoch",2}, + {"K01",1}, + {"K02",1}, + {"K03",1}, + {"K04",1}, + {"ebike_epoch",3}, + {"mosquito_epoch",3}, + {"C_Heli_Light_01_civil_EPOCH",2}, + {"CUP_C_Fishing_Boat_Chernarus",2}, + {"CUP_C_LR_Transport_CTK",2}, + {"CUP_B_Zodiac_USMC",2}, + {"CUP_C_Skoda_Red_CIV",2}, + {"CUP_C_Skoda_White_CIV",2}, + {"CUP_C_Skoda_Blue_CIV",2}, + {"CUP_C_Skoda_Green_CIV",2}, + {"CUP_C_SUV_CIV",2}, + {"CUP_B_HMMWV_Transport_USA",2}, + {"CUP_B_HMMWV_Unarmed_USA",2}, + {"CUP_C_SUV_TK",2}, + {"CUP_B_LR_Transport_CZ_D",2}, + {"CUP_C_Datsun_Covered",2}, + {"CUP_C_Datsun_Plain",2}, + {"CUP_C_Datsun_Tubeframe",2}, + {"CUP_C_Datsun_4seat",2}, + {"CUP_C_Datsun",2}, + {"CUP_C_Golf4_green_Civ",2}, + {"CUP_C_Golf4_red_Civ",2}, + {"CUP_C_Golf4_blue_Civ",2}, + {"CUP_C_Golf4_black_Civ",2}, + {"CUP_C_Golf4_kitty_Civ",2}, + {"CUP_C_Golf4_reptile_Civ",2}, + {"CUP_C_Golf4_camodigital_Civ",2}, + {"CUP_C_Golf4_camodark_Civ",2}, + {"CUP_C_Golf4_camo_Civ",2}, + {"CUP_B_M1030",2}, + {"CUP_C_Ural_Civ_03",2}, + {"CUP_C_Ural_Open_Civ_03",2}, + {"CUP_C_Ural_Civ_02",2}, + {"CUP_B_TowingTractor_USMC",2}, + {"CUP_C_C47_CIV",2}, + {"CUP_B_LR_Transport_CZ_W",2}, + {"CUP_C_Golf4_white_Civ",2}, + {"CUP_C_Golf4_whiteblood_Civ",2}, + {"CUP_C_Golf4_yellow_Civ",2}, + {"CUP_C_Octavia_CIV",2}, + {"CUP_C_Ural_Civ_01",2}, + {"CUP_C_Ural_Open_Civ_01",2}, + {"CUP_B_Ural_CDF",2}, + {"CUP_B_Ural_Open_CDF",2}, + {"CUP_C_Ural_Open_Civ_02",2}, + {"CUP_B_HMMWV_Ambulance_USA",2}, + {"CUP_C_UAZ_Unarmed_TK_CIV",2}, + {"CUP_C_UAZ_Open_TK_CIV",2}, + {"CUP_B_UAZ_Unarmed_CDF",2}, + {"CUP_B_Ural_Empty_CDF",2}, + {"CUP_C_DC3_CIV",2}, + + // A2 Vehicles + {"A2_Golf_EPOCH",3}, + {"A2_HMMWV_EPOCH",3}, + {"A2_HMMWV_load_EPOCH",3}, + {"A2_Lada_EPOCH",3}, + {"A2_SUV_EPOCH",3}, + {"A2_SUV_load_EPOCH",3}, + {"A2_SUV_armed_EPOCH",2}, + {"A2_UAZ_EPOCH",3}, + {"A2_UAZ_Open_EPOCH",3}, + {"A2_Ural_EPOCH",3}, + {"A2_Vodnik_EPOCH",3}, + {"A2_Volha_EPOCH",3}, + + {"a2_mi8_EPOCH",1}, + {"a2_ch47f_EPOCH",1}, + {"a2_ch47f_armed_EPOCH",1}, + {"a2_ch47f_armed_plus_EPOCH",1}, + {"uh1h_Epoch",1}, + {"uh1h_armed_EPOCH",1}, + {"uh1h_armed_plus_EPOCH",1}, + {"C_Heli_Light_01_armed_EPOCH",1}, + {"C_Heli_Light_01_armed_plus_EPOCH",1} + }; + allowedVehiclesList_MAD[] = { + {"jetski_epoch",5}, + {"ebike_epoch",5}, + {"mosquito_epoch",5}, + {"chums_buggy_1",10}, + {"plymouth_rock_1",5}, + {"warrig_black",5}, + {"nux_car_1",10}, + {"interceptor_1",5} + }; + allowedVehiclesList_MADCUP[] = { + {"jetski_epoch",3}, + {"ebike_epoch",1}, + {"mosquito_epoch",3}, + {"chums_buggy_1",7}, + {"plymouth_rock_1",4}, + {"warrig_black",4}, + {"nux_car_1",7}, + {"interceptor_1",4}, + {"CUP_C_Fishing_Boat_Chernarus",2}, + {"CUP_C_Skoda_Red_CIV",1}, + {"CUP_C_Skoda_White_CIV",1}, + {"CUP_C_Skoda_Blue_CIV",1}, + {"CUP_C_Skoda_Green_CIV",1}, + {"CUP_C_Datsun_Covered",1}, + {"CUP_C_Datsun_Plain",1}, + {"CUP_C_Datsun_Tubeframe",1}, + {"CUP_C_Datsun_4seat",1}, + {"CUP_C_Datsun",1}, + {"CUP_C_Golf4_green_Civ",1}, + {"CUP_C_Golf4_red_Civ",1}, + {"CUP_C_Golf4_blue_Civ",1}, + {"CUP_C_Golf4_black_Civ",1}, + {"CUP_C_Golf4_kitty_Civ",1}, + {"CUP_C_Golf4_reptile_Civ",1}, + {"CUP_C_Golf4_camodigital_Civ",1}, + {"CUP_C_Golf4_camodark_Civ",1}, + {"CUP_C_Golf4_camo_Civ",1}, + {"CUP_B_M1030",2}, + {"CUP_C_Golf4_white_Civ",1}, + {"CUP_C_Golf4_whiteblood_Civ",1}, + {"CUP_C_Golf4_yellow_Civ",1}, + {"CUP_C_Octavia_CIV",1} + }; + }; + #include "configs\maps\bornholm.h" + #include "configs\maps\stratis.h" + #include "configs\maps\altis.h" + #include "configs\maps\chernarus.h" + #include "configs\maps\chernarusredux.h" + #include "configs\maps\chernarus_summer.h" + #include "configs\maps\australia.h" + #include "configs\maps\takistan.h" + #include "configs\maps\Zargabad.h" + #include "configs\maps\esseker.h" + #include "configs\maps\Sara.h" + #include "configs\maps\SaraLite.h" + #include "configs\maps\Sara_dbe1.h" + #include "configs\maps\Bootcamp_ACR.h" + #include "configs\maps\Desert_E.h" + #include "configs\maps\Mountains_ACR.h" + #include "configs\maps\Porto.h" + #include "configs\maps\ProvingGrounds_PMC.h" + #include "configs\maps\Shapur_BAF.h" + #include "configs\maps\Utes.h" + #include "configs\maps\Woodland_ACR.h" + #include "configs\maps\Napf.h" + #include "configs\maps\tanoa.h" + #include "configs\maps\Malden.h" + #include "configs\maps\abramia.h" + #include "configs\maps\dingor.h" + #include "configs\maps\IslaDuala3.h" + #include "configs\maps\Kapaulio.h" + #include "configs\maps\lingor3.h" + #include "configs\maps\Panthera3.h" + #include "configs\maps\Winthera3.h" + #include "configs\maps\lythium.h" + #include "configs\maps\Enoch.h" +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/CfgEpochVehicles.h b/Server/@epochhive/addons/epoch_server_settings/configs/CfgEpochVehicles.h new file mode 100644 index 0000000..21dcc5e --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/CfgEpochVehicles.h @@ -0,0 +1,221 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Server side config to persist vehicle colors, these are also used to randomly colorize new spawns. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/CfgEpochVehicles.h +*/ +class CfgEpochVehicles +{ + class C_Hatchback_01_EPOCH { + textureSelectionIndex[] = {0}; + availableColors[] = { + { + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE01_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE02_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE03_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE04_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE05_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE06_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE07_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE08_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE09_CO.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Hatchback_01_ext_white_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Hatchback_01_ext_bluebright_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Hatchback_01_ext_darkbeige_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Hatchback_01_ext_darkblue_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Hatchback_01_ext_grey_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Hatchback_01_ext_orange_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Hatchback_01_ext_beige_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Hatchback_01_ext_tgreen_rusty.paa" + } + }; + }; + class C_Hatchback_01_EPOCH1: C_Hatchback_01_EPOCH{}; + class C_Hatchback_01_EPOCH2: C_Hatchback_01_EPOCH{}; + class C_Hatchback_01_EPOCH3: C_Hatchback_01_EPOCH{}; + class C_Hatchback_01_EPOCH4: C_Hatchback_01_EPOCH{}; + class C_Offroad_01_EPOCH { + textureSelectionIndex[] = {0,1}; + availableColors[] = { + { + "\A3\soft_F\Offroad_01\Data\Offroad_01_ext_co.paa", + "\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE01_CO.paa", + "\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE02_CO.paa", + "\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE03_CO.paa", + "\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE04_CO.paa", + "\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE05_CO.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Offroad_01_ext_beige_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Offroad_01_ext_blue_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Offroad_01_ext_red_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Offroad_01_ext_white_rusty.paa" + } + }; + }; + class C_Offroad_01_EPOCH1: C_Offroad_01_EPOCH{}; + class C_Offroad_01_EPOCH2: C_Offroad_01_EPOCH{}; + class C_Offroad_01_EPOCH3: C_Offroad_01_EPOCH{}; + class C_Offroad_01_EPOCH4: C_Offroad_01_EPOCH{}; + class C_SUV_01_EPOCH { + textureSelectionIndex[] = {0}; + availableColors[] = { + { + "\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_CO.paa", + "\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_02_CO.paa", + "\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_03_CO.paa", + "\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_04_CO.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\SUV_01_ext_02_black_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\SUV_01_ext_04_orange_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\SUV_01_ext_red_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\SUV_01_ext_rusty.paa" + } + }; + }; + class C_SUV_01_EPOCH1: C_SUV_01_EPOCH{}; + class C_SUV_01_EPOCH2: C_SUV_01_EPOCH{}; + class C_SUV_01_EPOCH3: C_SUV_01_EPOCH{}; + class C_SUV_01_EPOCH4: C_SUV_01_EPOCH{}; + class C_Van_01_transport_EPOCH { + textureSelectionIndex[] = {0}; + availableColors[] = { + { + "\A3\soft_f_gamma\van_01\Data\van_01_ext_CO.paa", + "\A3\soft_f_gamma\van_01\Data\van_01_ext_red_CO.paa" + } + }; + }; + class C_Van_01_transport_EPOCH1: C_Van_01_transport_EPOCH{}; + class C_Van_01_transport_EPOCH2: C_Van_01_transport_EPOCH{}; + class C_Van_01_transport_EPOCH3: C_Van_01_transport_EPOCH{}; + class C_Van_01_transport_EPOCH4: C_Van_01_transport_EPOCH{}; + class C_Hatchback_02_EPOCH { + textureSelectionIndex[] = {0}; + availableColors[] = { + { + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT01_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT02_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT03_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT04_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT05_CO.paa", + "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT06_CO.paa" + } + }; + }; + class C_Hatchback_02_EPOCH1: C_Hatchback_02_EPOCH{}; + class C_Hatchback_02_EPOCH2: C_Hatchback_02_EPOCH{}; + class C_Hatchback_02_EPOCH3: C_Hatchback_02_EPOCH{}; + class C_Hatchback_02_EPOCH4: C_Hatchback_02_EPOCH{}; + class C_Quadbike_01_EPOCH { + textureSelectionIndex[] = {0,1}; + availableColors[] = { + { + "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_BLACK_CO.paa", + "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_BLUE_CO.paa", + "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_RED_CO.paa", + "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_WHITE_CO.paa" + }, + { + "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVBLACK_CO.paa", + "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVBLUE_CO.paa", + "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVRED_CO.paa", + "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVWHITE_CO.paa" + } + }; + }; + class C_Van_01_box_EPOCH { + textureSelectionIndex[] = {0}; + availableColors[] = { + { + "\A3\soft_f_gamma\van_01\Data\van_01_ext_CO.paa", + "\A3\soft_f_gamma\van_01\Data\van_01_ext_red_CO.paa" + } + }; + }; + class C_Van_01_box_EPOCH1: C_Van_01_box_EPOCH{}; + class C_Van_01_box_EPOCH2: C_Van_01_box_EPOCH{}; + class C_Van_01_box_EPOCH3: C_Van_01_box_EPOCH{}; + class C_Van_01_box_EPOCH4: C_Van_01_box_EPOCH{}; + class C_Heli_Light_01_civil_EPOCH { + textureSelectionIndex[] = {0}; + availableColors[] = { + { + "A3\Air_f\Heli_Light_01\Data\Heli_Light_01_ext_co.paa", + "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_blue_co.paa", + "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_co.paa", + "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_ion_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_blueLine_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_digital_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_elliptical_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_furious_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_graywatcher_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_jeans_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_light_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_shadow_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_sheriff_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_speedy_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_sunset_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_vrana_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_wasp_co.paa", + "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_wave_co.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Heli_Light_01_ext_blue_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Heli_Light_01_ext_ION_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Heli_Light_01_ext_white_rusty.paa" + } + }; + }; + class C_Heli_Light_01_civil_2seat_EPOCH: C_Heli_Light_01_civil_EPOCH{}; + class C_Heli_Light_01_civil_4seat_EPOCH: C_Heli_Light_01_civil_EPOCH{}; + class C_Plane_Civil_01_F { + textureSelectionIndex[] = {0,1}; + availableColors[] = { + { + "A3\Air_F_Exp\Plane_Civil_01\Data\btt_ext_01_RedLine_co.paa", + "A3\Air_F_Exp\Plane_Civil_01\Data\btt_ext_01_Wave_co.paa", + "A3\Air_F_Exp\Plane_Civil_01\Data\btt_ext_01_Tribal_co.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\btt_ext_01_RedLine_brownblack_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\btt_ext_01_Tribal_brownblack_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\btt_ext_01_white_brownblack_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\btt_ext_01_white_browngreen_rusty.paa" + }, + { + "A3\Air_F_Exp\Plane_Civil_01\Data\btt_ext_02_RedLine_co.paa", + "A3\Air_F_Exp\Plane_Civil_01\Data\btt_ext_02_Wave_co.paa", + "A3\Air_F_Exp\Plane_Civil_01\Data\btt_ext_02_Tribal_co.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\btt_ext_02_RedLine_brownblack_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\btt_ext_02_Tribal_brownblack_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\btt_ext_02_white_brownblack_rusty.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\btt_ext_02_white_browngreen_rusty.paa" + } + }; + }; + class I_Heli_Light_03_unarmed_EPOCH { + textureSelectionIndex[] = {0}; + availableColors[] = { + { + "A3\air_f_epb\Heli_Light_03\data\Heli_Light_03_base_CO.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\Heli_Light_03_base_rusty.paa" + } + }; + }; + class C_Plane_Civil_01_racing_F { + textureSelectionIndex[] = {0,1}; + availableColors[] = { + { + "A3\Air_F_Exp\Plane_Civil_01\Data\btt_ext_01_Racer_co.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\btt_ext_01_Racer_brownblack_rusty.paa" + }, + { + "A3\Air_F_Exp\Plane_Civil_01\Data\btt_ext_02_Racer_co.paa", + "\x\addons\a3_epoch_community\textures\vehicle_customskins\btt_ext_02_Racer_brownblack_rusty.paa" + } + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/CfgLootTable.h b/Server/@epochhive/addons/epoch_server_settings/configs/CfgLootTable.h new file mode 100644 index 0000000..ac15c31 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/CfgLootTable.h @@ -0,0 +1,2041 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Server side loot table configs + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/CfgLootTable.h +*/ +class CfgLootTable +{ +// DLC/Mod Related from here + class Scopes + { + items[] = { + { { "Scopes_Vanilla", "CfgLootTable" }, 5 }, + { { "Scopes_MarkDLC", "CfgLootTable" }, 1 }, + { { "Scopes_CUP", "CfgLootTable" }, 0 } + }; + }; + class Bipods + { + items[] = { + { { "Bipods_Vanilla", "CfgLootTable" }, 5 }, + { { "Bipods_CUP", "CfgLootTable" }, 0 } + }; + }; + class Muzzles + { + items[] = { + { { "Muzzles_Vanilla", "CfgLootTable" }, 15 }, + { { "Muzzles_MarkDLC", "CfgLootTable" }, 8 }, + { { "Muzzles_CUP", "CfgLootTable" }, 0 }, + { { "Muzzles_MultiGun", "CfgLootTable" }, 1 } + }; + }; + class WpnFlashLights + { + items[] = { + { { "WpnFlashLights_Vanilla", "CfgLootTable" }, 5 }, + { { "WpnFlashLights_CUP", "CfgLootTable" }, 0 }, + { { "SniperCamo_CUP", "CfgLootTable" }, 0 } + }; + }; + class Pistols + { + items[] = { + { { "Pistols_Vanilla", "CfgLootTable" }, 20 }, + { { "NL_Pistols", "CfgLootTable" }, 2 }, + { { "Pistols_CUP", "CfgLootTable" }, 0 }, + { { "Pistols_MAD", "CfgLootTable" }, 0 } + }; + }; + class PistolAmmo + { + items[] = { + { { "PistolAmmo_Vanilla", "CfgLootTable" }, 15 }, + { { "NL_PistolAmmo", "CfgLootTable" }, 3 }, + { { "PistolAmmo_CUP", "CfgLootTable" }, 0 } + }; + }; + class Rifle + { + items[] = { + { { "Rifle_Vanilla", "CfgLootTable" }, 10 }, + { { "A2_Rifle", "CfgLootTable" }, 10 }, + { { "NL_Rifle", "CfgLootTable" }, 2 }, + { { "Rifle_CUP", "CfgLootTable" }, 0 }, + { { "Rifle_MAD", "CfgLootTable" }, 0 } + }; + }; + class RifleAmmo + { + items[] = { + { { "RifleAmmo_Vanilla", "CfgLootTable" }, 20 }, + { { "NL_RifleAmmo", "CfgLootTable" }, 6 }, + { { "A2_RifleAmmo", "CfgLootTable" }, 20 }, + { { "RifleAmmo_CUP", "CfgLootTable" }, 0 }, + { { "RifleAmmo_MAD", "CfgLootTable" }, 0 } + }; + }; + class SniperRifle + { + items[] = { + { { "SniperRifle_Vanilla", "CfgLootTable" }, 5 }, + { { "SniperRifleMarkDLC", "CfgLootTable" }, 1 }, + { { "SniperRifle_CUP", "CfgLootTable" }, 0 } + }; + }; + class SniperRifleAmmo + { + items[] = { + { { "SniperRifleAmmo_Vanilla", "CfgLootTable" }, 5 }, + { { "SniperRifleAmmoMarkDLC", "CfgLootTable" }, 1 }, + { { "SniperRifleAmmo_CUP", "CfgLootTable" }, 0 } + }; + }; + class Machinegun + { + items[] = { + { { "Machinegun_Vanilla", "CfgLootTable" }, 5 }, + { { "MachinegunMarkDLC", "CfgLootTable" }, 1 }, + { { "Machinegun_CUP", "CfgLootTable" }, 0 } + }; + }; + class MachinegunAmmo + { + items[] = { + { { "MachinegunAmmo_Vanilla", "CfgLootTable" }, 5 }, + { { "MachinegunAmmoMarkDLC", "CfgLootTable" }, 1 }, + { { "MachinegunAmmo_CUP", "CfgLootTable" }, 0 } + }; + }; + class Uniforms_Male_Civ + { + items[] = { + { { "Uniforms_Male_Civ_Vanilla", "CfgLootTable" }, 8 }, + { { "Uniforms_Male_KartDLC", "CfgLootTable" }, 1 }, + { { "Uniforms_Male_IdapDLC", "CfgLootTable" }, 1 } + }; + }; + class Uniforms_Male_Mil + { + items[] = { + { { "Uniforms_Male_Mil_Vanilla", "CfgLootTable" }, 8 }, + { { "Uniforms_Male_WetSuit", "CfgLootTable" }, 1 }, + { { "Uniforms_Male_MarksDLC", "CfgLootTable" }, 1 }, + { { "Uniforms_Male_ApexDLC", "CfgLootTable" }, 1 } + }; + }; + class Uniforms_Female_Civ + { + items[] = { + { { "Uniforms_Female_Civ_Epoch", "CfgLootTable" }, 1 } + }; + }; + class Uniforms_Female_Mil + { + items[] = { + { { "Uniforms_Female_Mil_Epoch", "CfgLootTable" }, 8 }, + { { "Uniforms_Female_WetSuit_Epoch", "CfgLootTable" }, 1 } + }; + }; + class Vests_Low + { + items[] = { + { { "Vests_Low_Vanilla", "CfgLootTable" }, 1 } + }; + }; + class Vests_High + { + items[] = { + { { "Vests_High_Vanilla", "CfgLootTable" }, 8 }, + { { "Vests_Rebreather_Epoch", "CfgLootTable" }, 1 }, + { { "Vests_ApexDLC", "CfgLootTable" }, 1 } + }; + }; + class BackPacks_Low + { + items[] = { + { { "Backpacks_Low_Base", "CfgLootTable" }, 1 } + }; + }; + class BackPacks_High + { + items[] = { + { { "Backpacks_High_Base", "CfgLootTable" }, 10 }, + { { "Backpacks_UAV", "CfgLootTable" }, 1 } + }; + }; +// DLC/Mod Related end + + class HeadgearNoArmor + { + items[] = { + { { "H_11_EPOCH", "item" }, 1 }, + { { "H_28_EPOCH", "item" }, 1 }, + { { "H_34_EPOCH", "item" }, 1 }, + { { "H_39_EPOCH", "item" }, 1 }, + { { "H_40_EPOCH", "item" }, 1 }, + { { "H_41_EPOCH", "item" }, 1 }, + { { "H_42_EPOCH", "item" }, 1 }, + { { "H_43_EPOCH", "item" }, 1 }, + { { "H_44_EPOCH", "item" }, 1 }, + { { "H_45_EPOCH", "item" }, 1 }, + { { "H_46_EPOCH", "item" }, 1 }, + { { "H_47_EPOCH", "item" }, 1 }, + { { "H_48_EPOCH", "item" }, 1 }, + { { "H_49_EPOCH", "item" }, 1 }, + { { "H_50_EPOCH", "item" }, 1 }, + { { "H_51_EPOCH", "item" }, 1 }, + { { "H_52_EPOCH", "item" }, 1 }, + { { "H_53_EPOCH", "item" }, 1 }, + { { "H_54_EPOCH", "item" }, 1 }, + { { "H_55_EPOCH", "item" }, 1 }, + { { "H_56_EPOCH", "item" }, 1 }, + { { "H_57_EPOCH", "item" }, 1 }, + { { "H_58_EPOCH", "item" }, 1 }, + { { "H_59_EPOCH", "item" }, 1 }, + { { "H_60_EPOCH", "item" }, 1 }, + { { "H_61_EPOCH", "item" }, 1 }, + { { "H_62_EPOCH", "item" }, 1 }, + { { "H_63_EPOCH", "item" }, 1 }, + { { "H_64_EPOCH", "item" }, 1 }, + { { "H_65_EPOCH", "item" }, 1 }, + { { "H_66_EPOCH", "item" }, 1 }, + { { "H_67_EPOCH", "item" }, 1 }, + { { "H_68_EPOCH", "item" }, 1 }, + { { "H_69_EPOCH", "item" }, 1 }, + { { "H_70_EPOCH", "item" }, 1 }, + { { "H_71_EPOCH", "item" }, 1 }, + { { "H_72_EPOCH", "item" }, 1 }, + { { "H_73_EPOCH", "item" }, 1 }, + { { "H_74_EPOCH", "item" }, 1 }, + { { "H_75_EPOCH", "item" }, 1 }, + { { "H_76_EPOCH", "item" }, 1 }, + { { "H_77_EPOCH", "item" }, 1 }, + { { "H_78_EPOCH", "item" }, 1 }, + { { "H_79_EPOCH", "item" }, 1 }, + { { "H_80_EPOCH", "item" }, 1 }, + { { "H_81_EPOCH", "item" }, 1 }, + { { "H_82_EPOCH", "item" }, 1 }, + { { "H_83_EPOCH", "item" }, 1 }, + { { "H_84_EPOCH", "item" }, 1 }, + { { "H_85_EPOCH", "item" }, 1 }, + { { "H_86_EPOCH", "item" }, 1 }, + { { "H_87_EPOCH", "item" }, 1 }, + { { "H_88_EPOCH", "item" }, 1 }, + { { "H_89_EPOCH", "item" }, 1 }, + { { "H_90_EPOCH", "item" }, 1 }, + { { "H_91_EPOCH", "item" }, 1 }, + { { "H_92_EPOCH", "item" }, 1 }, + { { "H_104_EPOCH", "item" }, 1 }, + { { "H_105_EPOCH", "item" }, 1 }, + { { "thor_mask_epoch", "item" }, 1, }, + { { "iron_mask_epoch", "item" }, 1, }, + { { "wolf_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "pkin_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "clown_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "hockey_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "plague_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "ghostface_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "skull_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "witch_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "radiation_mask_epoch", "item" }, 1 } + }; + }; + class HeadgearArmored + { + items[] = { + { { "H_1_EPOCH", "item" }, 2 }, + { { "H_2_EPOCH", "item" }, 2 }, + { { "H_3_EPOCH", "item" }, 2 }, + { { "H_4_EPOCH", "item" }, 2 }, + { { "H_5_EPOCH", "item" }, 2 }, + { { "H_6_EPOCH", "item" }, 2 }, + { { "H_7_EPOCH", "item" }, 2 }, + { { "H_8_EPOCH", "item" }, 2 }, + { { "H_9_EPOCH", "item" }, 2 }, + { { "H_10_EPOCH", "item" }, 2 }, + { { "H_12_EPOCH", "item" }, 2 }, + { { "H_13_EPOCH", "item" }, 2 }, + { { "H_14_EPOCH", "item" }, 2 }, + { { "H_15_EPOCH", "item" }, 2 }, + { { "H_16_EPOCH", "item" }, 2 }, + { { "H_17_EPOCH", "item" }, 2 }, + { { "H_18_EPOCH", "item" }, 2 }, + { { "H_19_EPOCH", "item" }, 2 }, + { { "H_20_EPOCH", "item" }, 2 }, + { { "H_21_EPOCH", "item" }, 2 }, + { { "H_22_EPOCH", "item" }, 2 }, + { { "H_23_EPOCH", "item" }, 2 }, + { { "H_24_EPOCH", "item" }, 2 }, + { { "H_25_EPOCH", "item" }, 2 }, + { { "H_26_EPOCH", "item" }, 2 }, + { { "H_27_EPOCH", "item" }, 2 }, + { { "H_29_EPOCH", "item" }, 2 }, + { { "H_30_EPOCH", "item" }, 2 }, + { { "H_31_EPOCH", "item" }, 2 }, + { { "H_32_EPOCH", "item" }, 2 }, + { { "H_33_EPOCH", "item" }, 2 }, + { { "H_35_EPOCH", "item" }, 2 }, + { { "H_36_EPOCH", "item" }, 2 }, + { { "H_37_EPOCH", "item" }, 2 }, + { { "H_38_EPOCH", "item" }, 2 }, + { { "H_93_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_94_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_95_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_96_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_97_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_98_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_99_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_100_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_101_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_102_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_103_EPOCH", "item" }, 1 } // Race Hemlet + }; + }; + class Primitive + { + items[] = { + { { "ItemRock", "magazine" }, 5 }, + { { "ItemRope", "magazine" }, 2 }, + { { "ItemStick", "magazine" }, 5 }, + { { "ItemScraps", "magazine" }, 1 }, + { { "ItemCanvas", "magazine" }, 1 }, + { { "ItemBurlap", "magazine" }, 1 } + }; + }; + class BuildingItems + { + items[] = { + { { "ItemMixOil", "magazine" }, 4 }, + { { "CircuitParts", "magazine" }, 5 }, + { { "CinderBlocks", "magazine" }, 5 }, + { { "MortarBucket", "magazine" }, 15 }, + { { "ItemCorrugated", "magazine" }, 10 }, + { { "ItemCorrugatedLg", "magazine" }, 2 }, + { { "ItemBulb", "magazine" }, 2 }, + { { "ItemSolar", "magazine" }, 2 }, + { { "ItemBattery", "magazine" }, 3 }, + { { "ItemCables", "magazine" }, 3 }, + { { "ItemPipe", "magazine" }, 2 }, + { { "ItemBarrelE", "magazine" }, 1 }, + { { "jerrycan_epoch", "magazine" }, 1 }, + { { "jerrycanE_epoch", "magazine" }, 1 }, + { { "JackKit", "magazine" }, 0 } + }; + }; + class BuildingKits + { + items[] = { + { { "KitPlotPole", "magazine" }, 5 }, + { { "KitSolarGen", "magazine" }, 2 }, + + { { "KitStudWall", "magazine" }, 13 }, + { { "KitCinderWall", "magazine" }, 5 }, + + { { "KitWoodQuarterFloor", "magazine" }, 2 }, + { { "KitWoodHalfFloor", "magazine" }, 2 }, + { { "KitWoodFloor", "magazine" }, 8 }, + + { { "KitWoodStairs", "magazine" }, 9 }, + { { "KitWoodTower", "magazine" }, 5 }, + { { "KitWoodRamp", "magazine" }, 5 }, + { { "KitTankTrap", "magazine" }, 2 }, + { { "KitHesco3", "magazine" }, 1 }, + { { "KitWoodLadder", "magazine" }, 5 }, + { { "KitFirePlace", "magazine" }, 8 }, + { { "KitFoundation", "magazine" }, 5 }, + { { "KitWoodFoundation", "magazine" }, 14 } + }; + }; + class Storages + { + items[] = { + { { "KitWorkbench", "magazine" }, 25 }, + { { "KitShelf", "magazine" }, 20 }, + { { "KitTiPi", "magazine" }, 15 }, + { { "KitTentA", "magazine" }, 10 }, + { { "KitTentDome", "magazine" }, 10 }, + { { "ItemLockbox", "magazine" }, 10 }, + { { "ItemSafe", "magazine" }, 6 }, +// { { "ItemSafe_s", "magazine" }, 4 }, // Variant with less Load than the normal Safe + { { "ItemGunSafe", "magazine" }, 4 } + }; + }; + class Equipment + { + items[] = { + { { "ItemWatch", "item" }, 30 }, + { { "ItemCompass", "item" }, 20 }, + { { "Binocular", "item" }, 10 }, + { { "ItemGPS", "item" }, 9 }, + { { "B_UavTerminal", "item" }, 5 }, + { { "NVG_EPOCH", "item" }, 5 }, + { { "Rangefinder", "weapon" }, 2 }, + { { "EpochRadio0", "item" }, 2 }, + { { "EpochRadio1", "item" }, 2 }, + { { "EpochRadio2", "item" }, 2 }, + { { "EpochRadio3", "item" }, 2 }, + { { "EpochRadio4", "item" }, 2 }, + { { "EpochRadio5", "item" }, 1 }, + { { "EpochRadio6", "item" }, 1 }, + { { "EpochRadio7", "item" }, 1 }, + { { "EpochRadio8", "item" }, 1 }, + { { "EpochRadio9", "item" }, 1 }, + { { "ItemGeigerCounter_EPOCH", "item" }, 1 } + }; + }; + class Tools + { + items[] = { + { { "Hatchet", "weapon" }, 40 }, + { { "MeleeSledge", "weapon" }, 20 }, + { { "ChainSaw", "weapon" }, 10 }, + { { "Plunger", "weapon" }, 4 }, + { { "MeleeSword", "weapon" }, 2 }, + { { "Power_Sword", "weapon" }, 1 }, + { { "MeleeRod", "weapon" }, 2 }, + { { "lighter_epoch", "magazine" }, 1 }, + { { "SmeltingTools_EPOCH", "magazine" }, 10 }, + { { "ItemFireExtinguisher", "magazine" }, 1 } + }; + }; + class Repairs + { + items[] = { + { { "VehicleRepair", "magazine" }, 30 }, + { { "SpareTire", "magazine" }, 10 }, + { { "EngineParts", "magazine" }, 7 }, + { { "EngineBlock", "magazine" }, 3 }, + { { "ItemGlass", "magazine" }, 3 }, + { { "ItemDuctTape", "magazine" }, 10 }, + { { "FuelTank", "magazine" }, 3 }, + { { "ItemRotor", "magazine" }, 3 } + }; + }; + class VehicleDocs + { + items[] = { + { { "ItemDocument", "magazine" }, 20 }, + { { "ItemVehDoc1", "magazine" }, 20 }, + { { "ItemVehDoc2", "magazine" }, 15 }, + { { "ItemVehDoc3", "magazine" }, 5 }, + { { "ItemVehDoc4", "magazine" }, 2 } + }; + }; + class Seeds + { + items[] = { + { { "ItemSeedBag", "magazine" }, 10 }, + { { "SeedPacket_Hemp", "magazine" }, 1 }, + { { "SeedPacket_GoldenSeal", "magazine" }, 1 }, + { { "SeedPacket_Poppy", "magazine" }, 1 }, + { { "SeedPacket_Pumpkin", "magazine" }, 2 }, + { { "SeedPacket_Sunflower", "magazine" }, 2 } + }; + }; + class Drink + { + items[] = { + { { "ItemCanteen_Empty", "magazine" }, 5 }, + { { "ItemCanteen_Dirty", "magazine" }, 5 }, + { { "ItemCanteen_Clean", "magazine" }, 1 }, + { { "ItemBottlePlastic_Empty", "magazine" }, 5 }, + { { "ItemBottlePlastic_Dirty", "magazine" }, 5 }, + { { "ItemBottlePlastic_Clean", "magazine" }, 1 }, + { { "WhiskeyNoodle", "magazine" }, 5 }, + { { "ItemSodaOrangeSherbet", "magazine" }, 13 }, + { { "ItemSodaAlpineDude", "magazine" }, 6 }, + { { "ItemSodaPurple", "magazine" }, 13 }, + { { "ItemSodaMocha", "magazine" }, 12 }, + { { "ItemSodaBurst", "magazine" }, 15 }, + { { "ItemSodaRbull", "magazine" }, 13 }, + { { "FoodWalkNSons", "magazine" }, 13 }, + { { "ItemSodaEmpty", "magazine" }, 11 } + }; + }; + class Food + { + items[] = { + { { "ItemCoolerE", "magazine" }, 3 }, + { { "bluburger_epoch", "magazine" }, 4 }, + { { "redburger_epoch", "magazine" }, 4 }, + { { "gyro_wrap_epoch", "magazine" }, 4 }, + { { "icecream_epoch", "magazine" }, 3 }, + { { "ItemPowderMilk", "magazine" }, 3 }, + { { "ItemRicebox", "magazine" }, 3 }, + { { "ItemCereals", "magazine" }, 3 }, + { { "ItemVitamins", "magazine" }, 3 }, + { { "honey_epoch", "magazine" }, 5 }, + { { "emptyjar_epoch", "magazine" }, 13 }, + { { "water_epoch", "magazine" }, 3 }, + { { "clean_water_epoch", "magazine" }, 1 }, + { { "FoodBioMeat", "magazine" }, 11 }, + { { "sardines_epoch", "magazine" }, 11 }, + { { "meatballs_epoch", "magazine" }, 13 }, + { { "scam_epoch", "magazine" }, 14 }, + { { "sweetcorn_epoch", "magazine" }, 14 }, + { { "FoodSnooter", "magazine" }, 5 }, + { { "krypto_candy_epoch", "magazine" }, 4 }, + { { "TacticalBacon", "magazine" }, 5 }, + { { "FoodMeeps", "magazine" }, 1 }, + { { "ItemEmptyTin", "magazine" }, 5 }, + { { "ItemBakedBeans", "magazine" }, 3 }, + { { "HotAxeSauce_epoch", "magazine" }, 1 } + }; + }; + class Medical + { + items[] = { + { { "ItemDefibrillator", "magazine" }, 1 }, + { { "FAK", "magazine" }, 50 }, + { { "Soap_Epoch", "magazine" }, 3 }, + { { "atropine_epoch", "magazine" }, 6 }, + { { "adrenaline_epoch", "magazine" }, 5 }, + { { "morphine_epoch", "magazine" }, 3 }, + { { "caffeinepills_epoch", "magazine" }, 10 }, + { { "orlistat_epoch", "magazine" }, 5 }, + { { "nanite_cream_epoch", "magazine" }, 3 }, + { { "nanite_gun_epoch", "magazine" }, 1 }, + { { "nanite_pills_epoch", "magazine" }, 5 }, + { { "iodide_pills_epoch", "magazine" }, 5 }, + { { "ItemWaterPurificationTablets", "magazine" }, 5 }, + { { "HeatPack", "magazine" }, 1 }, + { { "ColdPack", "magazine" }, 1 }, + { { "Towelette", "magazine" }, 8 } + }; + }; + class PaintCans + { + items[] = { + { { "PaintCanClear", "magazine" }, 1 }, + { { "PaintCanBlk", "magazine" }, 1 }, + { { "PaintCanBlu", "magazine" }, 1 }, + { { "PaintCanBrn", "magazine" }, 1 }, + { { "PaintCanGrn", "magazine" }, 1 }, + { { "PaintCanOra", "magazine" }, 1 }, + { { "PaintCanPur", "magazine" }, 1 }, + { { "PaintCanRed", "magazine" }, 1 }, + { { "PaintCanTeal", "magazine" }, 1 }, + { { "PaintCanYel", "magazine" }, 1 } + }; + }; + class MetalBars + { + items[] = { + { { "ItemGoldBar10oz", "magazine" }, 1 }, + { { "ItemGoldBar", "magazine" }, 9 }, + { { "ItemSilverBar", "magazine" }, 20 }, + { { "ItemCopperBar", "magazine" }, 20 }, + { { "ItemAluminumBar", "magazine" }, 20 }, + { { "ItemTinBar", "magazine" }, 30 } + }; + }; + class Gems + { + items[] = { + { { "ItemJade", "magazine" }, 5 }, + { { "ItemRuby", "magazine" }, 8 }, + { { "ItemSapphire", "magazine" }, 9 }, + { { "ItemTopaz", "magazine" }, 10 }, + { { "ItemOnyx", "magazine" }, 10 }, + { { "ItemAmethyst", "magazine" }, 10 }, + { { "ItemEmerald", "magazine" }, 10 }, + { { "ItemCitrine", "magazine" }, 10 }, + { { "ItemGarnet", "magazine" }, 13 }, + { { "ItemQuartz", "magazine" }, 15 } + }; + }; + class Ore + { + items[] = { + { { "PartOreGold", "magazine" }, 20 }, + { { "PartOreSilver", "magazine" }, 30 }, + { { "PartOre", "magazine" }, 35 } + }; + }; + class Throw + { + items[] = { + { { "SmokeShell", "magazine" }, 1 }, + { { "SmokeShellYellow", "magazine" }, 1 }, + { { "SmokeShellGreen", "magazine" }, 1 }, + { { "SmokeShellToxic", "magazine" }, 1 }, + { { "SmokeShellRed", "magazine" }, 1 }, + { { "SmokeShellPurple", "magazine" }, 1 }, + { { "SmokeShellOrange", "magazine" }, 1 }, + { { "SmokeShellBlue", "magazine" }, 1 }, + { { "Chemlight_green", "magazine" }, 1 }, + { { "Chemlight_red", "magazine" }, 1 }, + { { "Chemlight_yellow", "magazine" }, 1 }, + { { "Chemlight_blue", "magazine" }, 1 } + }; + }; + class ThrowExplosive + { + items[] = { + { { "HandGrenade", "magazine" }, 25 }, + { { "MiniGrenade", "magazine" }, 25 } + }; + }; + class HighExplosives + { + items[] = { + { { "SatchelCharge_Remote_Mag", "magazine" }, 15 }, + { { "ATMine_Range_Mag", "magazine" }, 5 }, + { { "SLAMDirectionalMine_Wire_Mag", "magazine" }, 3 }, + { { "DemoCharge_Remote_Mag", "magazine" }, 6 }, + { { "ClaymoreDirectionalMine_Remote_Mag", "magazine" }, 10 }, + { { "APERSBoundingMine_Range_Mag", "magazine" }, 21 }, + { { "APERSTripMine_Wire_Mag", "magazine" }, 20 }, + { { "APERSMine_Range_Mag", "magazine" }, 20 } + }; + }; + class ShellFlares + { + items[] = { + { { "3Rnd_UGL_FlareWhite_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareGreen_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareRed_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareYellow_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareCIR_F", "magazine" }, 1 }, + { { "UGL_FlareWhite_F", "magazine" }, 1 }, + { { "UGL_FlareGreen_F", "magazine" }, 1 }, + { { "UGL_FlareRed_F", "magazine" }, 1 }, + { { "UGL_FlareYellow_F", "magazine" }, 1 }, + { { "UGL_FlareCIR_F", "magazine" }, 1 } + }; + }; + class ShellSmokes + { + items[] = { + { { "1Rnd_Smoke_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeRed_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeGreen_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeYellow_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokePurple_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeBlue_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeOrange_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_Smoke_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeRed_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeGreen_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeYellow_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokePurple_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeBlue_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeOrange_Grenade_shell", "magazine" }, 1 } + }; + }; + class ShellExplosives + { + items[] = { + { { "1Rnd_HE_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_HE_Grenade_shell", "magazine" }, 1 } + }; + }; + +// ########################################################################### Base Classes ########################################################################### + + class Scopes_Vanilla + { + items[] = { + { { "optic_NVS", "item" }, 1 }, + { { "optic_tws", "item" }, 1 }, + { { "optic_tws_mg", "item" }, 1 }, + { { "optic_SOS", "item" }, 2 }, + { { "optic_LRPS", "item" }, 2 }, + { { "optic_DMS", "item" }, 3 }, + { { "optic_Arco", "item" }, 4 }, + { { "optic_Hamr", "item" }, 5 }, + { { "Elcan_epoch", "item" }, 5 }, + { { "Elcan_reflex_epoch", "item" }, 5 }, + { { "optic_MRCO", "item" }, 6 }, + { { "optic_Holosight", "item" }, 6 }, + { { "optic_Holosight_smg", "item" }, 6 }, + { { "optic_Aco", "item" }, 7 }, + { { "optic_ACO_grn", "item" }, 7 }, + { { "optic_Aco_smg", "item" }, 7 }, + { { "optic_ACO_grn_smg", "item" }, 8 }, + { { "optic_Yorris", "item" }, 10 }, + { { "optic_MRD", "item" }, 10 } + }; + }; + class Scopes_MarkDLC + { + items[] = { + { { "optic_AMS", "item" }, 2 }, + { { "optic_AMS_khk", "item" }, 1 }, + { { "optic_AMS_snd", "item" }, 1 }, + { { "optic_KHS_blk", "item" }, 1 }, + { { "optic_KHS_hex", "item" }, 1 }, + { { "optic_KHS_old", "item" }, 2 }, + { { "optic_KHS_tan", "item" }, 1 } + }; + }; + class Scopes_CUP + { + items[] = { + { { "CUP_optic_PSO_1", "item" }, 1 }, + { { "CUP_optic_PSO_3", "item" }, 1 }, + { { "CUP_optic_Kobra", "item" }, 1 }, + { { "CUP_optic_GOSHAWK", "item" }, 1 }, + { { "CUP_optic_NSPU", "item" }, 1 }, + { { "CUP_optic_PechenegScope", "item" }, 1 }, + { { "CUP_optic_SB_3_12x50_PMII", "item" }, 1 }, + { { "CUP_optic_AN_PAS_13c2", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4", "item" }, 1 }, + { { "CUP_optic_HoloBlack", "item" }, 1 }, + { { "CUP_optic_HoloWdl", "item" }, 1 }, + { { "CUP_optic_HoloDesert", "item" }, 1 }, + { { "CUP_optic_Eotech533", "item" }, 1 }, + { { "CUP_optic_Eotech533Grey", "item" }, 1 }, + { { "CUP_optic_CompM4", "item" }, 1 }, + { { "CUP_optic_SUSAT", "item" }, 1 }, + { { "CUP_optic_ACOG", "item" }, 1 }, + { { "CUP_optic_CWS", "item" }, 1 }, + { { "CUP_optic_Leupold_VX3", "item" }, 1 }, + { { "CUP_optic_AN_PVS_10", "item" }, 1 }, + { { "CUP_optic_CompM2_Black", "item" }, 1 }, + { { "CUP_optic_CompM2_Woodland", "item" }, 1 }, + { { "CUP_optic_CompM2_Woodland2", "item" }, 1 }, + { { "CUP_optic_CompM2_Desert", "item" }, 1 }, + { { "CUP_optic_RCO", "item" }, 1 }, + { { "CUP_optic_RCO_desert", "item" }, 1 }, + { { "CUP_optic_LeupoldM3LR", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_10x40_LRT_Desert", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_10x40_LRT_Woodland", "item" }, 1 }, + { { "CUP_optic_ElcanM145", "item" }, 1 }, + { { "CUP_optic_AN_PAS_13c1", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_CQ_T", "item" }, 1 }, + { { "CUP_optic_ELCAN_SpecterDR", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_MRT_tan", "item" }, 1 }, + { { "CUP_optic_SB_11_4x20_PM", "item" }, 1 }, + { { "CUP_optic_ZDDot", "item" }, 1 }, + { { "CUP_optic_MRad", "item" }, 1 }, + { { "CUP_optic_TrijiconRx01_desert", "item" }, 1 }, + { { "CUP_optic_TrijiconRx01_black", "item" }, 1 }, + { { "CUP_optic_AN_PVS_4", "item" }, 1 } + }; + }; + class Bipods_Vanilla + { + items[] = { + { { "bipod_01_F_snd", "item" }, 1 }, + { { "bipod_01_F_blk", "item" }, 1 }, + { { "bipod_01_F_mtp", "item" }, 1 }, + { { "bipod_02_F_blk", "item" }, 1 }, + { { "bipod_02_F_tan", "item" }, 1 }, + { { "bipod_02_F_hex", "item" }, 1 }, + { { "bipod_03_F_blk", "item" }, 1 }, + { { "bipod_03_F_oli", "item" }, 1 } + }; + }; + class Bipods_CUP + { + items[] = { + { { "CUP_bipod_Harris_1A2_L", "item" }, 1 }, + { { "CUP_bipod_VLTOR_Modpod", "item" }, 1 } + }; + }; + class Muzzles_Vanilla + { + items[] = { + { { "muzzle_sr25S_epoch", "item" }, 1 }, + { { "muzzle_snds_H", "item" }, 1 }, + { { "muzzle_snds_M", "item" }, 1 }, + { { "muzzle_snds_L", "item" }, 1 }, + { { "muzzle_snds_B", "item" }, 1 }, + { { "muzzle_snds_H_MG", "item" }, 1 }, + { { "muzzle_snds_acp", "item" }, 1 }, + { { "Muzzles_MultiGun", "CfgLootTable" }, 1 } + }; + }; + class Muzzles_MarkDLC + { + items[] = { + { { "muzzle_snds_570", "item" }, 1 }, + { { "muzzle_snds_338_black", "item" }, 1 }, + { { "muzzle_snds_338_green", "item" }, 1 }, + { { "muzzle_snds_338_sand", "item" }, 1 }, + { { "muzzle_snds_93mmg", "item" }, 1 }, + { { "muzzle_snds_93mmg_tan", "item" }, 1 } + }; + }; + class Muzzles_CUP + { + items[] = { + { { "CUP_muzzle_snds_M110", "item" }, 1 }, + { { "CUP_muzzle_snds_M14", "item" }, 1 }, + { { "CUP_muzzle_PBS4", "item" }, 1 }, + { { "CUP_muzzle_PB6P9", "item" }, 1 }, + { { "CUP_muzzle_Bizon", "item" }, 1 }, + { { "CUP_muzzle_snds_M9", "item" }, 1 }, + { { "CUP_muzzle_snds_MicroUzi", "item" }, 1 }, + { { "CUP_muzzle_snds_AWM", "item" }, 1 }, + { { "CUP_muzzle_snds_G36_black", "item" }, 1 }, + { { "CUP_muzzle_snds_G36_desert", "item" }, 1 }, + { { "CUP_muzzle_snds_L85", "item" }, 1 }, + { { "CUP_muzzle_snds_M16_camo", "item" }, 1 }, + { { "CUP_muzzle_snds_M16", "item" }, 1 }, + { { "CUP_muzzle_snds_SCAR_L", "item" }, 1 }, + { { "CUP_muzzle_mfsup_SCAR_L", "item" }, 1 }, + { { "CUP_muzzle_snds_SCAR_H", "item" }, 1 }, + { { "CUP_muzzle_mfsup_SCAR_H", "item" }, 1 }, + { { "CUP_muzzle_snds_XM8", "item" }, 1 } + }; + }; + class Muzzles_MultiGun + { + items[] = { + { { "Heal_EPOCH", "item" }, 1 }, + { { "Defib_EPOCH", "item" }, 1 }, + { { "Repair_EPOCH", "item" }, 1 } + }; + }; + class WpnFlashLights_Vanilla + { + items[] = { + { { "acc_flashlight", "item" }, 1 }, + { { "acc_flashlight_pistol", "item" }, 1 }, + { { "acc_pointer_IR", "item" }, 1 } + }; + }; + class WpnFlashLights_CUP + { + items[] = { + { { "CUP_acc_Glock17_Flashlight", "item" }, 1 }, + { { "CUP_acc_ANPEQ_15", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2", "item" }, 1 }, + { { "CUP_acc_Flashlight", "item" }, 1 }, + { { "CUP_acc_Flashlight_wdl", "item" }, 1 }, + { { "CUP_acc_Flashlight_desert", "item" }, 1 }, + { { "CUP_acc_XM8_light_module", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2_camo", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2_desert", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2_grey", "item" }, 1 }, + { { "CUP_acc_CZ_M3X", "item" }, 1 } + }; + }; + class SniperCamo_CUP + { + items[] = { + { { "CUP_Mxx_camo", "item" }, 1 }, + { { "CUP_Mxx_camo_half", "item" }, 1 }, + { { "CUP_SVD_camo_g", "item" }, 1 }, + { { "CUP_SVD_camo_g_half", "item" }, 1 }, + { { "CUP_SVD_camo_d", "item" }, 1 }, + { { "CUP_SVD_camo_d_half", "item" }, 1 } + + }; + }; + class Pistols_Vanilla + { + items[] = { + { { "Hgun_Pistol_Signal_F", "weapon" }, 4 }, + { { "MultiGun", "weapon" }, 5 }, + { { "hgun_Pistol_heavy_01_F", "weapon" }, 9 }, + { { "hgun_P07_F", "weapon" }, 10 }, + { { "hgun_Rook40_F", "weapon" }, 11 }, + { { "hgun_Pistol_heavy_02_F", "weapon" }, 13 }, + { { "1911_pistol_epoch", "weapon" }, 14 }, + { { "hgun_ACPC2_F", "weapon" }, 16 }, + { { "ruger_pistol_epoch", "weapon" }, 18 } + }; + }; + class NL_Pistols + { + items[] = { + { { "hgun_Pistol_tranq_01", "weapon" }, 1 } + }; + }; + class PistolAmmo_Vanilla + { + items[] = { + { { "EnergyPack", "magazine" }, 4 }, + { { "6Rnd_RedSignal_F", "magazine" }, 2 }, + { { "6Rnd_GreenSignal_F", "magazine" }, 2 }, + { { "30Rnd_9x21_Mag", "magazine" }, 10 }, + { { "6Rnd_45ACP_Cylinder", "magazine" }, 11 }, + { { "16Rnd_9x21_Mag", "magazine" }, 11 }, + { { "11Rnd_45ACP_Mag", "magazine" }, 12 }, + { { "9Rnd_45ACP_Mag", "magazine" }, 16 }, + { { "9rnd_45X88_magazine", "magazine" }, 16 }, + { { "10rnd_22X44_magazine", "magazine" }, 16 } + }; + }; + class NL_PistolAmmo + { + items[] = { + { { "tranq_dart_mag", "magazine" }, 1 } + }; + }; + class Pistols_CUP + { + items[] = { + { { "CUP_hgun_Compact", "weapon" }, 1 }, + { { "CUP_hgun_Duty", "weapon" }, 1 }, + { { "CUP_hgun_Phantom", "weapon" }, 1 }, + { { "CUP_hgun_Glock17", "weapon" }, 1 }, + { { "CUP_hgun_Makarov", "weapon" }, 1 }, + { { "CUP_hgun_MicroUzi", "weapon" }, 1 }, + { { "CUP_hgun_TaurusTracker455", "weapon" }, 1 }, + { { "CUP_hgun_PB6P9", "weapon" }, 1 }, + { { "CUP_hgun_SA61", "weapon" }, 1 }, + { { "CUP_hgun_M9", "weapon" }, 1 }, + { { "CUP_hgun_TaurusTracker455_gold", "weapon" }, 1 }, + { { "CUP_hgun_Colt1911", "weapon" }, 1 } + }; + }; + class PistolAmmo_CUP + { + items[] = { + { { "CUP_10Rnd_9x19_Compact", "magazine" }, 2 }, + { { "CUP_18Rnd_9x19_Phantom", "magazine" }, 1 }, + { { "CUP_17Rnd_9x19_glock17", "magazine" }, 1 }, + { { "CUP_8Rnd_9x18_Makarov_M", "magazine" }, 2 }, + { { "CUP_8Rnd_9x18_MakarovSD_M", "magazine" }, 2 }, + { { "CUP_30Rnd_9x19_UZI", "magazine" }, 1 }, + { { "CUP_6Rnd_45ACP_M", "magazine" }, 3 }, + { { "CUP_20Rnd_B_765x17_Ball_M", "magazine" }, 1 }, + { { "CUP_15Rnd_9x19_M9", "magazine" }, 1 }, + { { "CUP_7Rnd_45ACP_1911", "magazine" }, 2 } + }; + }; + class Pistols_MAD + { + items[] = { + { { "revolver01", "weapon" }, 17 } + }; + }; + class Rifle_Vanilla + { + items[] = { + { { "AKM_EPOCH", "weapon" }, 3 }, + { { "sr25_epoch", "weapon" }, 4 }, + + { { "arifle_Katiba_GL_F", "weapon" }, 2 }, + { { "arifle_Katiba_C_F", "weapon" }, 3 }, + { { "arifle_Katiba_F", "weapon" }, 5 }, + + { { "arifle_MX_GL_F", "weapon" }, 3 }, + { { "arifle_MX_GL_Black_F", "weapon" }, 2 }, + { { "arifle_MXM_Black_F", "weapon" }, 2 }, + { { "arifle_MXC_Black_F", "weapon" }, 3 }, + { { "arifle_MX_Black_F", "weapon" }, 2 }, + { { "arifle_MXM_F", "weapon" }, 3 }, + { { "arifle_MXC_F", "weapon" }, 3 }, + { { "arifle_MX_F", "weapon" }, 3 }, + + { { "l85a2_epoch", "weapon" }, 1 }, + { { "l85a2_pink_epoch", "weapon" }, 1 }, + { { "l85a2_ugl_epoch", "weapon" }, 1 }, + + { { "m4a3_EPOCH", "weapon" }, 7 }, + + { { "m16_EPOCH", "weapon" }, 2 }, + { { "m16Red_EPOCH", "weapon" }, 1 }, + + { { "arifle_Mk20_GL_F", "weapon" }, 12 }, + { { "arifle_Mk20_GL_plain_F", "weapon" }, 12 }, + { { "arifle_Mk20C_F", "weapon" }, 16 }, + { { "arifle_Mk20C_plain_F", "weapon" }, 18 }, + { { "arifle_Mk20_F", "weapon" }, 20 }, + { { "arifle_Mk20_plain_F", "weapon" }, 22 }, + + { { "arifle_TRG21_GL_F", "weapon" }, 2 }, + { { "arifle_TRG21_F", "weapon" }, 3 }, + { { "arifle_TRG20_F", "weapon" }, 5 }, + + { { "arifle_SDAR_F", "weapon" }, 9 }, + { { "Rollins_F", "weapon" }, 9 }, + { { "SMG_01_F", "weapon" }, 9 }, + { { "SMG_02_F", "weapon" }, 9 }, + + { { "SMG_03_TR_black", "weapon" }, 1 }, + { { "SMG_03_TR_camo", "weapon" }, 1 }, + { { "SMG_03_TR_khaki", "weapon" }, 1 }, + { { "SMG_03_TR_hex", "weapon" }, 1 }, + { { "SMG_03C_TR_black", "weapon" }, 1 }, + { { "SMG_03C_TR_camo", "weapon" }, 1 }, + { { "SMG_03C_TR_khaki", "weapon" }, 1 }, + { { "SMG_03C_TR_hex", "weapon" }, 1 }, + { { "SMG_03_black", "weapon" }, 1 }, + { { "SMG_03_camo", "weapon" }, 1 }, + { { "SMG_03_khaki", "weapon" }, 1 }, + { { "SMG_03_hex", "weapon" }, 1 }, + { { "SMG_03C_black", "weapon" }, 1 }, + { { "SMG_03C_camo", "weapon" }, 1 }, + { { "SMG_03C_khaki", "weapon" }, 1 }, + { { "SMG_03C_hex", "weapon" }, 1 }, + + { { "hgun_PDW2000_F", "weapon" }, 10 }, + { { "speargun_epoch", "weapon" }, 5 } + }; + }; + class RifleAmmo_Vanilla + { + items[] = { + { { "30Rnd_762x39_Mag", "magazine" }, 8 }, + + { { "30Rnd_65x39_caseless_mag", "magazine" }, 3 }, + { { "30Rnd_65x39_caseless_mag_Tracer", "magazine" }, 2 }, + { { "30Rnd_65x39_caseless_green", "magazine" }, 3 }, + { { "30Rnd_65x39_caseless_green_mag_Tracer", "magazine" }, 2 }, + + { { "20Rnd_556x45_UW_mag", "magazine" }, 12 }, + + { { "30Rnd_556x45_Stanag", "magazine" }, 4 }, + { { "30Rnd_556x45_Stanag_Tracer_Red", "magazine" }, 2 }, + { { "30Rnd_556x45_Stanag_Tracer_Green", "magazine" }, 2 }, + { { "30Rnd_556x45_Stanag_Tracer_Yellow", "magazine" }, 2 }, + + { { "30Rnd_45ACP_Mag_SMG_01", "magazine" }, 5 }, + { { "30Rnd_45ACP_Mag_SMG_01_Tracer_Green", "magazine" }, 5 }, + + { { "30Rnd_9x21_Mag", "magazine" }, 10 }, + { { "5Rnd_rollins_mag", "magazine" }, 10 }, + { { "50Rnd_570x28_SMG_03", "magazine" }, 10 }, + + { { "spear_magazine", "magazine" }, 2 } + }; + }; + class NL_RifleAmmo + { + items[] = { + { { "NL_pvc_bb_mag", "magazine" }, 5 }, + { { "NL_shot_bb_mag", "magazine" }, 5 }, + { { "xbow_mag_bolt", "magazine" }, 5 }, + { { "xbow_mag_tranq", "magazine" }, 5 }, + { { "xbow_mag_exp", "magazine" }, 2 } + }; + }; + class A2_Rifle + { + items[] = { + { { "a2_ak47s_gold_EPOCH", "weapon" }, 1 }, + { { "a2_AK107_EPOCH", "weapon" }, 1 }, + { { "a2_bizon_epoch", "weapon" }, 1 }, + { { "a2_dmr_epoch", "weapon" }, 1 }, + { { "a2_dmr_epoch_scoped", "weapon" }, 1 }, + { { "a2_fnfal_epoch", "weapon" }, 1 }, + { { "a2_G36_C_epoch", "weapon" }, 1 }, + { { "a2_Mg36_epoch", "weapon" }, 1 }, + { { "a2_leeenfield_epoch", "weapon" }, 1 }, + { { "a2_m110_epoch", "weapon" }, 1 }, + { { "a2_mk16_epoch", "weapon" }, 1 }, + { { "a2_mk17_epoch", "weapon" }, 1 }, + { { "a2_svd_epoch", "weapon" }, 1 }, + { { "a2_VSS_vintorez_epoch", "weapon" }, 1 }, + { { "a2_aks74un_EPOCH", "weapon" }, 1 } + }; + }; + class NL_Rifle + { + items[] = { + { { "pvcrifle_01_F", "weapon" }, 1 }, + { { "nl_Shotgun", "weapon" }, 1 }, + { { "nl_auto_xbow", "weapon" }, 1 } + }; + }; + class A2_RifleAmmo + { + items[] = { + { { "Bizon_64Rnd_9x18", "magazine" }, 2 }, + { { "20Rnd_762x51_DMR", "magazine" }, 2 }, + { { "20Rnd_762x51_FNFAL", "magazine" }, 2 }, + { { "30Rnd_556x45_G36", "magazine" }, 2 }, + { { "10Rnd_303", "magazine" }, 2 }, + { { "100Rnd_556x45_BetaCMag", "magazine" }, 2 }, + { { "10Rnd_762x54_SVD", "magazine" }, 2 }, + { { "10Rnd_9x39_SP5_VSS", "magazine" }, 2 } + }; + }; + class Rifle_CUP + { + items[] = { + { { "CUP_smg_bizon", "weapon" }, 1 }, + { { "CUP_smg_EVO", "weapon" }, 1 }, + { { "CUP_smg_MP5SD6", "weapon" }, 1 }, + { { "CUP_smg_MP5A5", "weapon" }, 1 }, + + { { "CUP_sgun_AA12", "weapon" }, 1 }, + { { "CUP_sgun_M1014", "weapon" }, 1 }, + { { "CUP_sgun_Saiga12K", "weapon" }, 1 }, + + { { "CUP_arifle_AK74", "weapon" }, 1 }, + { { "CUP_arifle_AK74M", "weapon" }, 1 }, + { { "CUP_arifle_AK74M_GL", "weapon" }, 1 }, + { { "CUP_arifle_AK74_GL", "weapon" }, 1 }, + { { "CUP_arifle_AK74_GL_kobra", "weapon" }, 1 }, + { { "CUP_arifle_AKS", "weapon" }, 1 }, + { { "CUP_arifle_AKS_Gold", "weapon" }, 1 }, + { { "CUP_arifle_AKS74", "weapon" }, 1 }, + { { "CUP_arifle_AKS74U", "weapon" }, 1 }, + { { "CUP_arifle_AK107", "weapon" }, 1 }, + { { "CUP_arifle_AK107_GL", "weapon" }, 1 }, + { { "CUP_arifle_AKM", "weapon" }, 1 }, + + { { "CUP_arifle_CZ805_A1", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_GL", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_A2", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_B", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_B_GL", "weapon" }, 1 }, + + { { "CUP_arifle_FNFAL", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL_railed", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL5061", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL5062", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL_OSW", "weapon" }, 1 }, + + { { "CUP_arifle_G36A", "weapon" }, 1 }, + { { "CUP_arifle_G36A_camo", "weapon" }, 1 }, + { { "CUP_arifle_G36K", "weapon" }, 1 }, + { { "CUP_arifle_G36K_camo", "weapon" }, 1 }, + { { "CUP_arifle_G36C", "weapon" }, 1 }, + { { "CUP_arifle_G36C_camo", "weapon" }, 1 }, + + { { "CUP_arifle_L85A2", "weapon" }, 1 }, + { { "CUP_arifle_L85A2_GL", "weapon" }, 1 }, + + { { "CUP_arifle_M16A2", "weapon" }, 1 }, + { { "CUP_arifle_M16A2_GL", "weapon" }, 1 }, + { { "CUP_arifle_M16A4_Base", "weapon" }, 1 }, + { { "CUP_arifle_M16A4_GL", "weapon" }, 1 }, + + { { "CUP_arifle_M4A1_BUIS_GL", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_BUIS_camo_GL", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_BUIS_desert_GL", "weapon" }, 1 }, + { { "CUP_arifle_M4A1", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_camo", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_black", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_desert", "weapon" }, 1 }, + { { "CUP_arifle_M4A3_desert", "weapon" }, 1 }, + + { { "CUP_arifle_Sa58P", "weapon" }, 1 }, + { { "CUP_arifle_Sa58V", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS1", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS2", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS2_gl", "weapon" }, 1 }, + { { "CUP_arifle_Sa58P_des", "weapon" }, 1 }, + { { "CUP_arifle_Sa58V_camo", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS1_des", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS2_camo", "weapon" }, 1 }, + + { { "CUP_arifle_Mk16_STD", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_STD_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_STD_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_STD_EGLM", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC_EGLM", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_SV", "weapon" }, 1 }, + + { { "CUP_arifle_Mk17_CQC", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_CQC_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_CQC_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_CQC_EGLM", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD_EGLM", "weapon" }, 1 }, + + { { "CUP_arifle_Mk20", "weapon" }, 1 }, + + { { "CUP_arifle_XM8_Carbine", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Carbine_GL", "weapon" }, 1 }, + { { "CUP_arifle_xm8_sharpshooter", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Compact", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Compact_Rail", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Railed", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Carbine_FG", "weapon" }, 1 }, + { { "CUP_arifle_xm8_SAW", "weapon" }, 1 }, + + { { "CUP_arifle_AK47", "weapon" }, 1 }, + { { "CUP_arifle_RPK74", "weapon" }, 1 }, + { { "CUP_arifle_MG36", "weapon" }, 1 }, + { { "CUP_arifle_RPK74_45", "weapon" }, 1 }, + { { "CUP_arifle_RPK74M", "weapon" }, 1 }, + { { "CUP_arifle_MG36_camo", "weapon" }, 1 }, + { { "CUP_arifle_L86A2", "weapon" }, 1 } + }; + }; + class RifleAmmo_CUP + { + items[] = { + { { "CUP_30Rnd_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Green_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Red_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_White_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Yellow_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_45Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_762x39_AK47_M", "magazine" }, 1 }, + { { "CUP_75Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Red_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Green_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Yellow_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_100Rnd_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Red_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Green_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Yellow_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_20Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_FNFAL_M", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_B_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M_TracerG", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M_TracerR", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M_TracerY", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M", "magazine" }, 1 }, + + { { "CUP_20Rnd_B_AA12_Pellets", "magazine" }, 3 }, + { { "CUP_20Rnd_B_AA12_74Slug", "magazine" }, 2 }, + { { "CUP_20Rnd_B_AA12_HE", "magazine" }, 1 }, + { { "CUP_8Rnd_B_Beneli_74Slug", "magazine" }, 2 }, + { { "CUP_8Rnd_B_Beneli_74Pellets", "magazine" }, 3 }, + { { "CUP_8Rnd_B_Saiga12_74Slug_M", "magazine" }, 2 }, + { { "CUP_8Rnd_B_Saiga12_74Pellets_M", "magazine" }, 3 } + }; + }; + class Rifle_MAD + { + items[] = { + { { "VG_sawed_off_01", "weapon" }, 1 }, + { { "Devastator_01", "weapon" }, 1 } + }; + }; + class RifleAmmo_MAD + { + items[] = { + { { "in005_1Rnd_12Gauge_Pellets", "magazine" }, 1 }, + { { "in005_1Rnd_12Gauge_Slug", "magazine" }, 1 } + }; + }; + class SniperRifle_Vanilla + { + items[] = { + { { "m107_EPOCH", "weapon" }, 1 }, + { { "m107Tan_EPOCH", "weapon" }, 1 }, + + { { "srifle_LRR_F", "weapon" }, 11 }, + { { "srifle_GM6_F", "weapon" }, 16 }, + + { { "M14_EPOCH", "weapon" }, 1 }, + { { "M14Grn_EPOCH", "weapon" }, 1 }, + + { { "srifle_EBR_F", "weapon" }, 20 }, + + { { "srifle_DMR_01_F", "weapon" }, 17 } + }; + }; + class SniperRifleAmmo_Vanilla + { + items[] = { + { { "5Rnd_127x108_Mag", "magazine" }, 1 }, + { { "5Rnd_127x108_APDS_Mag", "magazine" }, 1 }, + { { "7Rnd_408_Mag", "magazine" }, 1 }, + { { "20Rnd_762x51_Mag", "magazine" }, 1 }, + { { "10Rnd_762x54_Mag", "magazine" }, 1 } + }; + }; + class SniperRifleMarkDLC + { + items[] = { + { { "srifle_DMR_02_F", "weapon" }, 1 }, + { { "srifle_DMR_02_camo_F", "weapon" }, 1 }, + { { "srifle_DMR_02_sniper_F", "weapon" }, 1 }, + { { "srifle_DMR_03_F", "weapon" }, 1 }, + { { "srifle_DMR_03_khaki_F", "weapon" }, 1 }, + { { "srifle_DMR_03_tan_F", "weapon" }, 1 }, + { { "srifle_DMR_03_multicam_F", "weapon" }, 1 }, + { { "srifle_DMR_03_woodland_F", "weapon" }, 1 }, + { { "srifle_DMR_04_F", "weapon" }, 1 }, + { { "srifle_DMR_04_Tan_F", "weapon" }, 1 }, + { { "srifle_DMR_05_blk_F", "weapon" }, 1 }, + { { "srifle_DMR_05_hex_F", "weapon" }, 1 }, + { { "srifle_DMR_05_tan_f", "weapon" }, 1 }, + { { "srifle_DMR_06_camo_F", "weapon" }, 1 }, + { { "srifle_DMR_06_olive_F", "weapon" }, 1 } + }; + }; + class SniperRifleAmmoMarkDLC + { + items[] = { + { { "10Rnd_338_Mag", "magazine" }, 1 }, // DMR_02 + { { "10Rnd_127x54_Mag", "magazine" }, 1 }, // DMR_04 + { { "10Rnd_93x64_DMR_05_Mag", "magazine" }, 1 } // DMR_05 + + }; + }; + class SniperRifle_CUP + { + items[] = { + { { "CUP_srifle_AS50", "weapon" }, 1 }, + { { "CUP_srifle_LeeEnfield", "weapon" }, 1 }, + { { "CUP_srifle_LeeEnfield_rail", "weapon" }, 1 }, + { { "CUP_srifle_M107_Base", "weapon" }, 1 }, + { { "CUP_srifle_M110", "weapon" }, 1 }, + { { "CUP_srifle_M14", "weapon" }, 1 }, + { { "CUP_srifle_M14_DMR", "weapon" }, 1 }, + { { "CUP_srifle_Mk12SPR", "weapon" }, 1 }, + { { "CUP_srifle_M24_des", "weapon" }, 1 }, + { { "CUP_srifle_M40A3", "weapon" }, 1 }, + { { "CUP_srifle_ksvk", "weapon" }, 1 }, + { { "CUP_srifle_SVD", "weapon" }, 1 }, + { { "CUP_srifle_VSSVintorez", "weapon" }, 1 }, + { { "CUP_srifle_CZ750", "weapon" }, 1 }, + { { "CUP_srifle_CZ550", "weapon" }, 1 }, + { { "CUP_srifle_CZ550_rail", "weapon" }, 1 }, + { { "CUP_srifle_M24_wdl", "weapon" }, 1 }, + { { "CUP_srifle_SVD_des", "weapon" }, 1 }, + { { "CUP_srifle_AWM_des", "weapon" }, 1 }, + { { "CUP_srifle_AWM_wdl", "weapon" }, 1 }, + { { "CUP_srifle_G22_des", "weapon" }, 1 } + }; + }; + class SniperRifleAmmo_CUP + { + items[] = { + { { "CUP_5Rnd_127x99_as50_M", "magazine" }, 1 }, + { { "CUP_10x_303_M", "magazine" }, 1 }, + { { "CUP_10Rnd_127x99_m107", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_B_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Red_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Green_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Yellow_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_100Rnd_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Red_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Green_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Yellow_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_5Rnd_762x51_M24", "magazine" }, 1 }, + { { "CUP_5Rnd_127x108_KSVK_M", "magazine" }, 1 }, + { { "CUP_10Rnd_762x54_SVD_M", "magazine" }, 1 }, + { { "CUP_10Rnd_9x39_SP5_VSS_M", "magazine" }, 1 }, + { { "CUP_20Rnd_9x39_SP5_VSS_M", "magazine" }, 1 }, + { { "CUP_10Rnd_762x51_CZ750_Tracer", "magazine" }, 1 }, + { { "CUP_10Rnd_762x51_CZ750", "magazine" }, 1 }, + { { "CUP_5x_22_LR_17_HMR_M", "magazine" }, 1 }, + { { "CUP_5Rnd_86x70_L115A1", "magazine" }, 1 }, + { { "CUP_5Rnd_762x67_G22", "magazine" }, 1 } + }; + }; + class Machinegun_Vanilla + { + items[] = { + { { "LMG_Zafir_F", "weapon" }, 2 }, + + { { "arifle_MX_SW_F", "weapon" }, 4 }, + { { "arifle_MX_SW_Black_F", "weapon" }, 2 }, + + { { "LMG_Mk200_F", "weapon" }, 6 }, + + { { "m249_EPOCH", "weapon" }, 1 }, + { { "m249Tan_EPOCH", "weapon" }, 1 } + }; + }; + class MachinegunAmmo_Vanilla + { + items[] = { + { { "100Rnd_65x39_caseless_mag", "magazine" }, 2 }, + { { "100Rnd_65x39_caseless_mag_Tracer", "magazine" }, 1 }, + + { { "150Rnd_762x54_Box", "magazine" }, 2 }, + { { "150Rnd_762x54_Box_Tracer", "magazine" }, 1 }, + + { { "200Rnd_556x45_M249", "magazine" }, 19 }, + + { { "200Rnd_65x39_cased_Box", "magazine" }, 2 }, + { { "200Rnd_65x39_cased_Box_Tracer", "magazine" }, 1 } + }; + }; + class MachinegunMarkDLC + { + items[] = { + { { "MMG_01_hex_F", "weapon" }, 1 }, + { { "MMG_01_tan_F", "weapon" }, 1 }, + { { "MMG_02_camo_F", "weapon" }, 1 }, + { { "MMG_02_black_F", "weapon" }, 1 }, + { { "MMG_02_sand_F", "weapon" }, 1 } + }; + }; + class MachinegunAmmoMarkDLC + { + items[] = { + { { "150Rnd_93x64_Mag", "magazine" }, 1 }, + { { "130Rnd_338_Mag", "magazine" }, 1 } + }; + }; + class Machinegun_CUP + { + items[] = { + { { "CUP_lmg_L110A1", "weapon" }, 1 }, + { { "CUP_lmg_M240", "weapon" }, 1 }, + { { "CUP_lmg_minimipara", "weapon" }, 1 }, + { { "CUP_lmg_minimi", "weapon" }, 1 }, + { { "CUP_lmg_m249_para", "weapon" }, 1 }, + { { "CUP_lmg_M249_E2", "weapon" }, 1 }, + { { "CUP_lmg_minimi_railed", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip1", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip4", "weapon" }, 1 }, + { { "CUP_lmg_L7A2", "weapon" }, 1 }, + { { "CUP_lmg_PKM", "weapon" }, 1 }, + { { "CUP_lmg_Pecheneg", "weapon" }, 1 }, + { { "CUP_lmg_UK59", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip2", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip3", "weapon" }, 1 }, + { { "CUP_lmg_m249_SQuantoon", "weapon" }, 1 }, + { { "CUP_lmg_M60E4", "weapon" }, 1 }, + { { "CUP_lmg_Mk48_des", "weapon" }, 1 }, + { { "CUP_lmg_Mk48_wdl", "weapon" }, 1 } + }; + }; + class MachinegunAmmo_CUP + { + items[] = { + { { "CUP_200Rnd_TE4_Red_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Yellow_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_200Rnd_TE1_Red_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_Green_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_Red_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_Yellow_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Green_Tracer_556x45_L110A1", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Red_Tracer_556x45_L110A1", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Yellow_Tracer_556x45_L110A1", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_G36", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_LRT4_White_Tracer_762x51_Belt_M", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_LRT4_Red_Tracer_762x51_Belt_M", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Green_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_LRT4_762x54_PK_Tracer_Green_M", "magazine" }, 1 }, + { { "CUP_50Rnd_UK59_762x54R_Tracer", "magazine" }, 1 }, + + { { "CUP_64Rnd_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_Green_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_Red_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_White_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_Yellow_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_30Rnd_9x19_EVO", "magazine" }, 1 }, + { { "CUP_30Rnd_9x19_MP5", "magazine" }, 1 } + }; + }; + class Uniforms_Male_Civ_Vanilla + { + items[] = { + { { "U_C_Poloshirt_stripped", "item" }, 1 }, + { { "U_C_Poloshirt_blue", "item" }, 1 }, + { { "U_C_Poloshirt_burgundy", "item" }, 1 }, + { { "U_C_Poloshirt_tricolour", "item" }, 1 }, + { { "U_C_Poloshirt_salmon", "item" }, 1 }, + { { "U_C_Poloshirt_redwhite", "item" }, 1 }, + { { "U_C_Commoner1_1", "item" }, 1 }, + { { "U_C_Poor_2", "item" }, 1 }, + { { "U_C_HunterBody_grn", "item" }, 1 }, + { { "U_C_Poor_shorts_1", "item" }, 1 }, + { { "U_NikosBody", "item" }, 1 }, + { { "U_NikosAgedBody", "item" }, 1 }, + { { "U_Marshal", "item" }, 1 }, + { { "U_C_man_sport_1_F", "item" }, 1 }, + { { "U_C_man_sport_2_F", "item" }, 1 }, + { { "U_C_man_sport_3_F", "item" }, 1 }, + { { "U_C_Man_casual_1_F", "item" }, 1 }, + { { "U_C_Man_casual_2_F", "item" }, 1 }, + { { "U_C_Man_casual_3_F", "item" }, 1 }, + { { "U_C_Man_casual_4_F", "item" }, 1 }, + { { "U_C_Man_casual_5_F", "item" }, 1 }, + { { "U_C_Man_casual_6_F", "item" }, 1 }, + { { "U_C_Poor_1", "item" }, 1 }, + { { "U_C_WorkerCoveralls", "item" }, 1 }, + { { "U_C_Journalist", "item" }, 1 }, + { { "U_C_Scientist", "item" }, 1 }, + { { "U_OrestesBody", "item" }, 1 }, + { { "U_C_Commoner_shorts", "item" }, 1 }, + { { "U_C_ShirtSurfer_shorts", "item" }, 1 }, + { { "U_C_TeeSurfer_shorts_1", "item" }, 1 }, + { { "U_C_TeeSurfer_shorts_2", "item" }, 1 } + + }; + }; + class Uniforms_Male_Mil_Vanilla + { + items[] = { + { { "U_OG_Guerilla1_1", "item" }, 1 }, + { { "U_OG_Guerilla2_1", "item" }, 1 }, + { { "U_OG_Guerilla2_2", "item" }, 1 }, + { { "U_OG_Guerilla2_3", "item" }, 1 }, + { { "U_OG_Guerilla3_1", "item" }, 1 }, + { { "U_OG_Guerilla3_2", "item" }, 1 }, + { { "U_OG_leader", "item" }, 1 }, + { { "U_O_CombatUniform_ocamo", "item" }, 1 }, + { { "U_O_GhillieSuit", "item" }, 1 }, + { { "U_O_PilotCoveralls", "item" }, 1 }, + { { "U_IG_Guerilla1_1", "item" }, 1 }, + { { "U_IG_leader", "item" }, 1 }, + { { "U_IG_Guerilla2_1", "item" }, 1 }, + { { "U_IG_Guerilla2_3", "item" }, 1 }, + { { "U_IG_Guerilla2_2", "item" }, 1 }, + { { "U_IG_Guerilla3_1", "item" }, 1 }, + { { "U_IG_Guerrilla_6_1", "item" }, 1 }, + { { "U_OG_Guerrilla_6_1", "item" }, 1 }, + { { "U_I_CombatUniform", "item" }, 1 }, + { { "U_I_CombatUniform_shortsleeve", "item" }, 1 }, + { { "U_I_HeliPilotCoveralls", "item" }, 1 }, + { { "U_I_pilotCoveralls", "item" }, 1 }, + { { "U_I_OfficerUniform", "item" }, 1 }, + { { "U_I_GhillieSuit", "item" }, 1 }, + { { "U_I_CombatUniform_tshirt", "item" }, 1 }, + { { "U_O_OfficerUniform_ocamo", "item" }, 1 }, + { { "U_O_SpecopsUniform_ocamo", "item" }, 1 }, + { { "U_O_CombatUniform_oucamo", "item" }, 1 }, + { { "U_I_C_Soldier_Para_1_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_2_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_3_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_4_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_5_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_1_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_2_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_3_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_4_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_5_F", "item" }, 1 }, + { { "U_I_C_Soldier_Camo_F", "item" }, 1 }, + { { "U_O_T_Soldier_F", "item" }, 1 }, + { { "U_O_T_Officer_F", "item" }, 1 }, + { { "U_O_T_Sniper_F", "item" }, 1 }, + { { "U_RadiationSuit_M_uniform", "item" }, 1 } + }; + }; + class Uniforms_Male_WetSuit + { + items[] = { + { { "U_O_Wetsuit", "item" }, 1 }, + { { "U_I_Wetsuit", "item" }, 1 } + }; + }; + class Uniforms_Male_MarksDLC + { + items[] = { + { { "U_O_T_FullGhillie_tna_F", "item" }, 1 }, + { { "U_O_FullGhillie_lsh", "item" }, 1 }, + { { "U_O_FullGhillie_sard", "item" }, 1 }, + { { "U_O_FullGhillie_ard", "item" }, 1 }, + { { "U_I_FullGhillie_lsh", "item" }, 1 }, + { { "U_I_FullGhillie_sard", "item" }, 1 }, + { { "U_I_FullGhillie_ard", "item" }, 1 } + }; + }; + class Uniforms_Male_KartDLC + { + items[] = { + { { "U_C_Driver_1", "item" }, 1 }, + { { "U_C_Driver_2", "item" }, 1 }, + { { "U_C_Driver_3", "item" }, 1 }, + { { "U_C_Driver_4", "item" }, 1 }, + { { "U_C_Driver_1_black", "item" }, 1 }, + { { "U_C_Driver_1_blue", "item" }, 1 }, + { { "U_C_Driver_1_green", "item" }, 1 }, + { { "U_C_Driver_1_red", "item" }, 1 }, + { { "U_C_Driver_1_white", "item" }, 1 }, + { { "U_C_Driver_1_yellow", "item" }, 1 }, + { { "U_C_Driver_1_orange", "item" }, 1 }, + { { "U_C_Driver_1_red", "item" }, 1 } + }; + }; + class Uniforms_Male_IdapDLC + { + items[] = { + { { "U_C_ConstructionCoverall_Red_F", "item" }, 1 }, + { { "U_C_ConstructionCoverall_vrana_F", "item" }, 1 }, + { { "U_C_ConstructionCoverall_Black_F", "item" }, 1 }, + { { "U_C_ConstructionCoverall_Blue_F", "item" }, 1 }, + { { "U_C_Paramedic_01_F", "item" }, 1 }, + { { "U_C_Mechanic_01_F", "item" }, 1 } + }; + }; + class Uniforms_Male_ApexDLC + { + items[] = { + { { "U_O_V_Soldier_Viper_hex_F", "item" }, 1 }, + { { "U_O_V_Soldier_Viper_F", "item" }, 1 } + }; + }; + class Uniforms_Female_Civ_Epoch + { + items[] = { + { { "U_JeansBlack1_uniform", "item" }, 1 }, + { { "U_JeansBlack2_uniform", "item" }, 1 }, + { { "U_JeansBlack3_uniform", "item" }, 1 }, + { { "U_JeansBlack4_uniform", "item" }, 1 }, + { { "U_JeansBlack5_uniform", "item" }, 1 }, + { { "U_JeansBlack6_uniform", "item" }, 1 }, + { { "U_JeansBlack7_uniform", "item" }, 1 }, + { { "U_JeansBlack8_uniform", "item" }, 1 }, + { { "U_JeansBlack9_uniform", "item" }, 1 }, + { { "U_JeansBlack10_uniform", "item" }, 1 }, + { { "U_JeansBlack11_uniform", "item" }, 1 }, + { { "U_JeansBlack12_uniform", "item" }, 1 }, + { { "U_JeansBlack13_uniform", "item" }, 1 }, + { { "U_JeansBlack14_uniform", "item" }, 1 }, + { { "U_JeansBlack15_uniform", "item" }, 1 }, + { { "U_JeansBlack16_uniform", "item" }, 1 }, + { { "U_JeansBlack17_uniform", "item" }, 1 }, + { { "U_JeansBlack18_uniform", "item" }, 1 }, + { { "U_JeansBlack19_uniform", "item" }, 1 }, + { { "U_JeansBlack20_uniform", "item" }, 1 }, + { { "U_JeansBlack21_uniform", "item" }, 1 }, + { { "U_JeansArBrn1_uniform", "item" }, 1 }, + { { "U_JeansArBrn2_uniform", "item" }, 1 }, + { { "U_JeansArBrn3_uniform", "item" }, 1 }, + { { "U_JeansArBrn4_uniform", "item" }, 1 }, + { { "U_JeansArBrn5_uniform", "item" }, 1 }, + { { "U_JeansArBrn6_uniform", "item" }, 1 }, + { { "U_JeansArBrn7_uniform", "item" }, 1 }, + { { "U_JeansArBrn8_uniform", "item" }, 1 }, + { { "U_JeansArBrn9_uniform", "item" }, 1 }, + { { "U_JeansArBrn10_uniform", "item" }, 1 }, + { { "U_JeansArBrn11_uniform", "item" }, 1 }, + { { "U_JeansArBrn12_uniform", "item" }, 1 }, + { { "U_JeansArBrn13_uniform", "item" }, 1 }, + { { "U_JeansArBrn14_uniform", "item" }, 1 }, + { { "U_JeansArBrn15_uniform", "item" }, 1 }, + { { "U_JeansArBrn16_uniform", "item" }, 1 }, + { { "U_JeansArBrn17_uniform", "item" }, 1 }, + { { "U_JeansArBrn18_uniform", "item" }, 1 }, + { { "U_JeansArBrn19_uniform", "item" }, 1 }, + { { "U_JeansArBrn20_uniform", "item" }, 1 }, + { { "U_JeansArBrn21_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn1_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn2_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn3_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn4_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn5_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn6_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn7_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn8_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn9_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn10_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn11_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn12_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn13_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn14_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn15_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn16_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn17_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn18_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn19_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn20_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn21_uniform", "item" }, 1 }, + { { "U_JeansPatched1_uniform", "item" }, 1 }, + { { "U_JeansPatched2_uniform", "item" }, 1 }, + { { "U_JeansPatched3_uniform", "item" }, 1 }, + { { "U_JeansPatched4_uniform", "item" }, 1 }, + { { "U_JeansPatched5_uniform", "item" }, 1 }, + { { "U_JeansPatched6_uniform", "item" }, 1 }, + { { "U_JeansPatched7_uniform", "item" }, 1 }, + { { "U_JeansPatched8_uniform", "item" }, 1 }, + { { "U_JeansPatched9_uniform", "item" }, 1 }, + { { "U_JeansPatched10_uniform", "item" }, 1 }, + { { "U_JeansPatched11_uniform", "item" }, 1 }, + { { "U_JeansPatched12_uniform", "item" }, 1 }, + { { "U_JeansPatched13_uniform", "item" }, 1 }, + { { "U_JeansPatched14_uniform", "item" }, 1 }, + { { "U_JeansPatched15_uniform", "item" }, 1 }, + { { "U_JeansPatched16_uniform", "item" }, 1 }, + { { "U_JeansPatched17_uniform", "item" }, 1 }, + { { "U_JeansPatched18_uniform", "item" }, 1 }, + { { "U_JeansPatched19_uniform", "item" }, 1 }, + { { "U_JeansPatched20_uniform", "item" }, 1 }, + { { "U_JeansPatched21_uniform", "item" }, 1 } + }; + }; + class Uniforms_Female_WetSuit_Epoch + { + items[] = { + { { "U_Wetsuit_uniform", "item" }, 1 }, + { { "U_Wetsuit_White", "item" }, 1 }, + { { "U_Wetsuit_Blue", "item" }, 1 }, + { { "U_Wetsuit_Purp", "item" }, 1 }, + { { "U_Wetsuit_Camo", "item" }, 1 } + }; + }; + class Uniforms_Female_Mil_Epoch + { + items[] = { + { { "U_CamoRed_uniform", "item" }, 1 }, + { { "U_CamoAloha_uniform", "item" }, 1 }, + { { "U_CamoBiker_uniform", "item" }, 1 }, + { { "U_CamoBubblegum_uniform", "item" }, 1 }, + { { "U_CamoLumberjack_uniform", "item" }, 1 }, + { { "U_CamoOutback_uniform", "item" }, 1 }, + { { "U_CamoPink_uniform", "item" }, 1 }, + { { "U_CamoPinkPolka_uniform", "item" }, 1 }, + { { "U_CamoBrn_uniform", "item" }, 1 }, + { { "U_CamoBlue_uniform", "item" }, 1 }, + { { "U_Camo_uniform", "item" }, 1 }, + { { "U_ghillie1_uniform", "item" }, 1 }, + { { "U_ghillie2_uniform", "item" }, 1 }, + { { "U_ghillie3_uniform", "item" }, 1 }, + { { "U_RadiationSuit_F_uniform", "item" }, 1 } + }; + }; + class Vests_Low_Vanilla + { + items[] = { + { { "V_Press_F", "item" }, 1 }, + + { { "V_1_EPOCH", "item" }, 1 }, + { { "V_2_EPOCH", "item" }, 1 }, + { { "V_3_EPOCH", "item" }, 1 }, + { { "V_4_EPOCH", "item" }, 1 }, + { { "V_5_EPOCH", "item" }, 1 }, + { { "V_6_EPOCH", "item" }, 1 }, + { { "V_7_EPOCH", "item" }, 1 }, + { { "V_8_EPOCH", "item" }, 1 }, + { { "V_9_EPOCH", "item" }, 1 }, + { { "V_10_EPOCH", "item" }, 1 }, + { { "V_11_EPOCH", "item" }, 1 }, + { { "V_12_EPOCH", "item" }, 1 }, + { { "V_13_EPOCH", "item" }, 1 }, + { { "V_14_EPOCH", "item" }, 1 }, + { { "V_15_EPOCH", "item" }, 1 }, + { { "V_16_EPOCH", "item" }, 1 }, + { { "V_17_EPOCH", "item" }, 1 }, + { { "V_18_EPOCH", "item" }, 1 }, + { { "V_21_EPOCH", "item" }, 1 }, + { { "V_22_EPOCH", "item" }, 1 }, + { { "V_23_EPOCH", "item" }, 1 }, + { { "V_24_EPOCH", "item" }, 1 }, + { { "V_25_EPOCH", "item" }, 1 }, + { { "V_26_EPOCH", "item" }, 1 }, + { { "V_27_EPOCH", "item" }, 1 }, + { { "V_28_EPOCH", "item" }, 1 }, + { { "V_29_EPOCH", "item" }, 1 }, + { { "V_30_EPOCH", "item" }, 1 }, + { { "V_31_EPOCH", "item" }, 1 }, + { { "V_32_EPOCH", "item" }, 1 }, + { { "V_33_EPOCH", "item" }, 1 }, + { { "V_34_EPOCH", "item" }, 1 }, + { { "V_35_EPOCH", "item" }, 1 }, + { { "V_37_EPOCH", "item" }, 1 }, + { { "V_38_EPOCH", "item" }, 1 }, + { { "V_39_EPOCH", "item" }, 1 }, + { { "V_40_EPOCH", "item" }, 1 } + }; + }; + class Vests_High_Vanilla + { + items[] = { + { { "V_PlateCarrier1_tna_F", "item" }, 1 }, + { { "V_PlateCarrierSpec_tna_F", "item" }, 1 }, + { { "V_PlateCarrierSpec_blk", "item" }, 1 }, + { { "V_HarnessO_ghex_F", "item" }, 1 }, + { { "V_HarnessOGL_ghex_F", "item" }, 1 }, + { { "V_PlateCarroer2_tna_F", "item" }, 1 }, + { { "V_PlateCarrierGL_tna_F", "item" }, 1 } + }; + }; + class Vests_Rebreather_Epoch + { + items[] = { + { { "V_19_EPOCH", "item" }, 1 }, + { { "V_20_EPOCH", "item" }, 1 }, + { { "V_36_EPOCH", "item" }, 1 } + }; + }; + class Vests_ApexDLC + { + items[] = { + { { "V_TacChestrig_grn_F", "item" }, 1 }, + { { "V_TacChestrig_oli_F", "item" }, 1 }, + { { "V_TacChestrig_cbr_F", "item" }, 1 } + }; + }; + class Backpacks_Low_Base + { + items[] = { + { { "B_ViperLightHarness_blk_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_ghex_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_hex_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_khk_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_oli_F", "backpack" }, 2 }, // 260 + + { { "Assault_Pack_Epoch", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_blk_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_ghex_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_hex_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_khk_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_oli_F", "backpack" }, 1 }, // 300 + { { "Patrol_Pack_Epoch", "backpack" }, 1 }, // 300 + { { "TK_RPG_Backpack_Epoch", "backpack" }, 1 }, // 300 + + { { "CZ_VestPouch_Epoch", "backpack" }, 3 } // 340 + }; + }; + class Backpacks_High_Base + { + items[] = { + { { "B_AssaultPack_cbr", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_dgtl", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_khk", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_mcamo", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_ocamo", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_rgr", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_sgg", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_blk", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_tna_F", "backpack" }, 5 }, // 360 + + { { "B_FieldPack_blk", "backpack" }, 4 }, // 400 + { { "B_FieldPack_cbr", "backpack" }, 4 }, // 400 + { { "B_FieldPack_khk", "backpack" }, 4 }, // 400 + { { "B_FieldPack_ocamo", "backpack" }, 4 }, // 400 + { { "B_FieldPack_oli", "backpack" }, 4 }, // 400 + { { "B_FieldPack_oucamo", "backpack" }, 4 }, // 400 + { { "civil_assault_pack_Epoch", "backpack" }, 4 }, // 400 + + { { "S_Gunbag_Epoch", "backpack" }, 4 }, // 420 + + { { "smallbackpack_red_epoch", "backpack" }, 4 }, // 460 + { { "smallbackpack_green_epoch", "backpack" }, 4 }, // 460 + { { "smallbackpack_teal_epoch", "backpack" }, 4 }, // 460 + { { "smallbackpack_pink_epoch", "backpack" }, 4 }, // 460 + + { { "B_TacticalPack_blk", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_mcamo", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_ocamo", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_oli", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_rgr", "backpack" }, 2 }, // 480 + { { "ALICE_Pack_Epoch", "backpack" }, 2 }, // 480 + + { { "US_Backpack_Epoch", "backpack" }, 2 }, // 500 + + { { "B_Kitbag_cbr", "backpack" }, 2 }, // 520 + { { "B_Kitbag_mcamo", "backpack" }, 2 }, // 520 + { { "B_Kitbag_rgr", "backpack" }, 2 }, // 520 + { { "B_Kitbag_sgg", "backpack" }, 2 }, // 520 + { { "CZ_Backpack_Epoch", "backpack" }, 1 }, // 520 + + { { "B_Carryall_cbr", "backpack" }, 1 }, // 550 + { { "B_Carryall_khk", "backpack" }, 1 }, // 550 + { { "B_Carryall_mcamo", "backpack" }, 1 }, // 550 + { { "B_Carryall_ocamo", "backpack" }, 1 }, // 550 + { { "B_Carryall_oli", "backpack" }, 1 }, // 550 + { { "B_Carryall_oucamo", "backpack" }, 1 }, // 550 + + { { "L_Gunbag_Epoch", "backpack" }, 3 }, // 580 + + { { "B_Parachute", "backpack" }, 1 } + }; + }; + class Backpacks_UAV + { + items[] = { + { { "I_UAV_01_backpack_F", "backpack" }, 1 }, + { { "C_IDAP_UAV_06_backpack_F", "backpack" }, 1 }, + { { "C_IDAP_UAV_06_antimine_backpack_F", "backpack" }, 1 }, + { { "B_UAV_06_medical_backpack_F", "backpack" }, 1 } + }; + }; + +// ########################################################################### Special Loot ########################################################################### + class Tree + { + items[] = { + { { "WoodLog_EPOCH", "magazine" }, 1 } + }; + }; + class Rock + { + items[] = { + { { "PartOre", "magazine" }, 1 }, + { { "ItemRock", "magazine" }, 2 } + }; + }; + class Cinder + { + items[] = { + { { "CinderBlocks", "magazine" }, 1 } + }; + }; + class Wreck + { + items[] = { + { { "ItemScraps", "magazine" }, 1 } + }; + }; + class Bush + { + items[] = { + { { "ItemStick", "magazine" }, 1 } + }; + }; + class Sheep_random_EPOCH + { + items[] = { + { { "SheepCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Goat_random_EPOCH + { + items[] = { + { { "GoatCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Fin_random_EPOCH + { + items[] = { + { { "DogCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Alsatian_Random_EPOCH + { + items[] = { + { { "DogCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Hen_random_EPOCH + { + items[] = { + { { "ChickenCarcass_EPOCH", "magazine" }, 1 } + }; + }; + class Rabbit_EPOCH + { + items[] = { + { { "RabbitCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class EPOCH_RyanZombie_1 + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 5 }, + { { "WhiskeyNoodle", "magazine" }, 5 }, + { { "Throw", "CfgLootTable" }, 10 }, + { { "ThrowExplosive", "CfgLootTable" }, 10 }, + { { "Medical", "CfgLootTable" }, 20 }, + { { "PistolAmmo", "CfgLootTable" }, 20 }, + { { "Pelt_EPOCH", "magazine" }, 10 } + }; + }; + class GreatWhite_F + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 9 }, + { { "ItemBriefcaseGold100oz", "magazine" }, 1 } + }; + }; + class Epoch_Sapper_F + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 6 }, + { { "WhiskeyNoodle", "magazine" }, 11 }, + { { "ItemKiloHemp", "magazine" }, 16 }, + { { "ItemSilverBar", "magazine" }, 18 }, + { { "Medical", "CfgLootTable" }, 18 }, + { { "Pelt_EPOCH", "magazine" }, 31 } + }; + }; + class Cock_random_EPOCH + { + items[] = { + { { "ChickenCarcass_EPOCH", "magazine" }, 1 } + }; + }; + class Epoch_SapperB_F + { + items[] = { + { { "ItemGoldBar", "magazine" }, 9 }, + { { "WhiskeyNoodle", "magazine" }, 13 }, + { { "ItemKiloHemp", "magazine" }, 15 }, + { { "ItemSilverBar", "magazine" }, 17 }, + { { "Medical", "CfgLootTable" }, 17 }, + { { "Pelt_EPOCH", "magazine" }, 29 } + }; + }; + class Epoch_SapperG_F + { + items[] = { + { { "SmokeShellToxic", "magazine" }, 9 }, + { { "WhiskeyNoodle", "magazine" }, 13 }, + { { "ItemKiloHemp", "magazine" }, 15 }, + { { "ItemSilverBar", "magazine" }, 17 }, + { { "Medical", "CfgLootTable" }, 17 }, + { { "Pelt_EPOCH", "magazine" }, 29 } + }; + }; + class Snake_random_EPOCH + { + items[] = { + { { "SnakeCarcass_EPOCH", "magazine" }, 1 }, + { { "Venom_EPOCH", "magazine" }, 1 } + }; + }; + class I_UAV_01_F + { + items[] = { + { { "CircuitParts", "magazine" }, 1 } + }; + }; + class Epoch_Cloak_F + { + items[] = { + { { "Gems", "CfgLootTable" }, 10 }, + { { "Throw", "CfgLootTable" }, 11 }, + { { "ThrowExplosive", "magazine" }, 12 }, + { { "MiniGrenade", "magazine" }, 20 }, + { { "Medical", "CfgLootTable" }, 21 }, + { { "Venom_EPOCH", "magazine" }, 26 } + }; + }; + class SeaFood + { + items[] = { + { { "ItemTrout", "magazine" }, 3 }, + { { "ItemSeaBass", "magazine" }, 2 }, + { { "ItemTuna", "magazine" }, 1 } + }; + }; + class Satellite + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 5 }, + { { "CircuitParts", "magazine" }, 1 }, + { { "Gems", "CfgLootTable" }, 3 }, + { { "ItemScraps", "magazine" }, 1 }, + { { "ItemCorrugated", "magazine" }, 2 }, + { { "ItemSolar", "magazine" }, 1 }, + { { "ItemBattery", "magazine" }, 1 }, + { { "ItemCables", "magazine" }, 1 } + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/CfgLootTable_CUP.h b/Server/@epochhive/addons/epoch_server_settings/configs/CfgLootTable_CUP.h new file mode 100644 index 0000000..0091245 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/CfgLootTable_CUP.h @@ -0,0 +1,2045 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Server side loot table configs + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/CfgLootTable.h +*/ +class CfgLootTable_CUP +{ +// DLC/Mod Related from here + class Scopes + { + items[] = { + { { "Scopes_Vanilla", "CfgLootTable" }, 5 }, + { { "Scopes_MarkDLC", "CfgLootTable" }, 1 }, + { { "Scopes_CUP", "CfgLootTable" }, 3 } + }; + }; + class Bipods + { + items[] = { + { { "Bipods_Vanilla", "CfgLootTable" }, 5 }, + { { "Bipods_CUP", "CfgLootTable" }, 3 } + }; + }; + class Muzzles + { + items[] = { + { { "Muzzles_Vanilla", "CfgLootTable" }, 15 }, + { { "Muzzles_MarkDLC", "CfgLootTable" }, 8 }, + { { "Muzzles_CUP", "CfgLootTable" }, 10 }, + { { "Muzzles_MultiGun", "CfgLootTable" }, 1 } + }; + }; + class WpnFlashLights + { + items[] = { + { { "WpnFlashLights_Vanilla", "CfgLootTable" }, 5 }, + { { "WpnFlashLights_CUP", "CfgLootTable" }, 3 }, + { { "SniperCamo_CUP", "CfgLootTable" }, 1 } + }; + }; + class Pistols + { + items[] = { + { { "Pistols_Vanilla", "CfgLootTable" }, 20 }, + { { "NL_Pistols", "CfgLootTable" }, 2 }, + { { "Pistols_CUP", "CfgLootTable" }, 15 }, + { { "Pistols_MAD", "CfgLootTable" }, 0 } + }; + }; + class PistolAmmo + { + items[] = { + { { "PistolAmmo_Vanilla", "CfgLootTable" }, 15 }, + { { "NL_PistolAmmo", "CfgLootTable" }, 3 }, + { { "PistolAmmo_CUP", "CfgLootTable" }, 10 } + }; + }; + class Rifle + { + items[] = { + { { "Rifle_Vanilla", "CfgLootTable" }, 10 }, + { { "A2_Rifle", "CfgLootTable" }, 10 }, + { { "NL_Rifle", "CfgLootTable" }, 2 }, + { { "Rifle_CUP", "CfgLootTable" }, 10 }, + { { "Rifle_MAD", "CfgLootTable" }, 0 } + }; + }; + class RifleAmmo + { + items[] = { + { { "RifleAmmo_Vanilla", "CfgLootTable" }, 20 }, + { { "NL_RifleAmmo", "CfgLootTable" }, 6 }, + { { "A2_RifleAmmo", "CfgLootTable" }, 20 }, + { { "RifleAmmo_CUP", "CfgLootTable" }, 20 }, + { { "RifleAmmo_MAD", "CfgLootTable" }, 0 } + }; + }; + class SniperRifle + { + items[] = { + { { "SniperRifle_Vanilla", "CfgLootTable" }, 5 }, + { { "SniperRifleMarkDLC", "CfgLootTable" }, 1 }, + { { "SniperRifle_CUP", "CfgLootTable" }, 5 } + }; + }; + class SniperRifleAmmo + { + items[] = { + { { "SniperRifleAmmo_Vanilla", "CfgLootTable" }, 5 }, + { { "SniperRifleAmmoMarkDLC", "CfgLootTable" }, 1 }, + { { "SniperRifleAmmo_CUP", "CfgLootTable" }, 5 } + }; + }; + class Machinegun + { + items[] = { + { { "Machinegun_Vanilla", "CfgLootTable" }, 5 }, + { { "MachinegunMarkDLC", "CfgLootTable" }, 1 }, + { { "Machinegun_CUP", "CfgLootTable" }, 5 } + }; + }; + class MachinegunAmmo + { + items[] = { + { { "MachinegunAmmo_Vanilla", "CfgLootTable" }, 5 }, + { { "MachinegunAmmoMarkDLC", "CfgLootTable" }, 1 }, + { { "MachinegunAmmo_CUP", "CfgLootTable" }, 5 } + }; + }; + class Uniforms_Male_Civ + { + items[] = { + { { "Uniforms_Male_Civ_Vanilla", "CfgLootTable" }, 8 }, + { { "Uniforms_Male_KartDLC", "CfgLootTable" }, 1 }, + { { "Uniforms_Male_IdapDLC", "CfgLootTable" }, 1 } + }; + }; + class Uniforms_Male_Mil + { + items[] = { + { { "Uniforms_Male_Mil_Vanilla", "CfgLootTable" }, 8 }, + { { "Uniforms_Male_WetSuit", "CfgLootTable" }, 1 }, + { { "Uniforms_Male_MarksDLC", "CfgLootTable" }, 1 }, + { { "Uniforms_Male_ApexDLC", "CfgLootTable" }, 1 } + }; + }; + class Uniforms_Female_Civ + { + items[] = { + { { "Uniforms_Female_Civ_Epoch", "CfgLootTable" }, 1 } + }; + }; + class Uniforms_Female_Mil + { + items[] = { + { { "Uniforms_Female_Mil_Epoch", "CfgLootTable" }, 8 }, + { { "Uniforms_Female_WetSuit_Epoch", "CfgLootTable" }, 1 } + }; + }; + class Vests_Low + { + items[] = { + { { "Vests_Low_Vanilla", "CfgLootTable" }, 1 } + }; + }; + class Vests_High + { + items[] = { + { { "Vests_High_Vanilla", "CfgLootTable" }, 8 }, + { { "Vests_Rebreather_Epoch", "CfgLootTable" }, 1 }, + { { "Vests_ApexDLC", "CfgLootTable" }, 1 } + }; + }; + class BackPacks_Low + { + items[] = { + { { "Backpacks_Low_Base", "CfgLootTable" }, 1 } + }; + }; + class BackPacks_High + { + items[] = { + { { "Backpacks_High_Base", "CfgLootTable" }, 10 }, + { { "Backpacks_UAV", "CfgLootTable" }, 1 } + }; + }; +// DLC/Mod Related end + + class HeadgearNoArmor + { + items[] = { + { { "H_11_EPOCH", "item" }, 1 }, + { { "H_28_EPOCH", "item" }, 1 }, + { { "H_34_EPOCH", "item" }, 1 }, + { { "H_39_EPOCH", "item" }, 1 }, + { { "H_40_EPOCH", "item" }, 1 }, + { { "H_41_EPOCH", "item" }, 1 }, + { { "H_42_EPOCH", "item" }, 1 }, + { { "H_43_EPOCH", "item" }, 1 }, + { { "H_44_EPOCH", "item" }, 1 }, + { { "H_45_EPOCH", "item" }, 1 }, + { { "H_46_EPOCH", "item" }, 1 }, + { { "H_47_EPOCH", "item" }, 1 }, + { { "H_48_EPOCH", "item" }, 1 }, + { { "H_49_EPOCH", "item" }, 1 }, + { { "H_50_EPOCH", "item" }, 1 }, + { { "H_51_EPOCH", "item" }, 1 }, + { { "H_52_EPOCH", "item" }, 1 }, + { { "H_53_EPOCH", "item" }, 1 }, + { { "H_54_EPOCH", "item" }, 1 }, + { { "H_55_EPOCH", "item" }, 1 }, + { { "H_56_EPOCH", "item" }, 1 }, + { { "H_57_EPOCH", "item" }, 1 }, + { { "H_58_EPOCH", "item" }, 1 }, + { { "H_59_EPOCH", "item" }, 1 }, + { { "H_60_EPOCH", "item" }, 1 }, + { { "H_61_EPOCH", "item" }, 1 }, + { { "H_62_EPOCH", "item" }, 1 }, + { { "H_63_EPOCH", "item" }, 1 }, + { { "H_64_EPOCH", "item" }, 1 }, + { { "H_65_EPOCH", "item" }, 1 }, + { { "H_66_EPOCH", "item" }, 1 }, + { { "H_67_EPOCH", "item" }, 1 }, + { { "H_68_EPOCH", "item" }, 1 }, + { { "H_69_EPOCH", "item" }, 1 }, + { { "H_70_EPOCH", "item" }, 1 }, + { { "H_71_EPOCH", "item" }, 1 }, + { { "H_72_EPOCH", "item" }, 1 }, + { { "H_73_EPOCH", "item" }, 1 }, + { { "H_74_EPOCH", "item" }, 1 }, + { { "H_75_EPOCH", "item" }, 1 }, + { { "H_76_EPOCH", "item" }, 1 }, + { { "H_77_EPOCH", "item" }, 1 }, + { { "H_78_EPOCH", "item" }, 1 }, + { { "H_79_EPOCH", "item" }, 1 }, + { { "H_80_EPOCH", "item" }, 1 }, + { { "H_81_EPOCH", "item" }, 1 }, + { { "H_82_EPOCH", "item" }, 1 }, + { { "H_83_EPOCH", "item" }, 1 }, + { { "H_84_EPOCH", "item" }, 1 }, + { { "H_85_EPOCH", "item" }, 1 }, + { { "H_86_EPOCH", "item" }, 1 }, + { { "H_87_EPOCH", "item" }, 1 }, + { { "H_88_EPOCH", "item" }, 1 }, + { { "H_89_EPOCH", "item" }, 1 }, + { { "H_90_EPOCH", "item" }, 1 }, + { { "H_91_EPOCH", "item" }, 1 }, + { { "H_92_EPOCH", "item" }, 1 }, + { { "H_104_EPOCH", "item" }, 1 }, + { { "H_105_EPOCH", "item" }, 1 }, + { { "thor_mask_epoch", "item" }, 1, }, + { { "iron_mask_epoch", "item" }, 1, }, + { { "wolf_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "pkin_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "clown_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "hockey_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "plague_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "ghostface_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "skull_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "witch_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "radiation_mask_epoch", "item" }, 1 } + }; + }; + class HeadgearArmored + { + items[] = { + { { "H_1_EPOCH", "item" }, 2 }, + { { "H_2_EPOCH", "item" }, 2 }, + { { "H_3_EPOCH", "item" }, 2 }, + { { "H_4_EPOCH", "item" }, 2 }, + { { "H_5_EPOCH", "item" }, 2 }, + { { "H_6_EPOCH", "item" }, 2 }, + { { "H_7_EPOCH", "item" }, 2 }, + { { "H_8_EPOCH", "item" }, 2 }, + { { "H_9_EPOCH", "item" }, 2 }, + { { "H_10_EPOCH", "item" }, 2 }, + { { "H_12_EPOCH", "item" }, 2 }, + { { "H_13_EPOCH", "item" }, 2 }, + { { "H_14_EPOCH", "item" }, 2 }, + { { "H_15_EPOCH", "item" }, 2 }, + { { "H_16_EPOCH", "item" }, 2 }, + { { "H_17_EPOCH", "item" }, 2 }, + { { "H_18_EPOCH", "item" }, 2 }, + { { "H_19_EPOCH", "item" }, 2 }, + { { "H_20_EPOCH", "item" }, 2 }, + { { "H_21_EPOCH", "item" }, 2 }, + { { "H_22_EPOCH", "item" }, 2 }, + { { "H_23_EPOCH", "item" }, 2 }, + { { "H_24_EPOCH", "item" }, 2 }, + { { "H_25_EPOCH", "item" }, 2 }, + { { "H_26_EPOCH", "item" }, 2 }, + { { "H_27_EPOCH", "item" }, 2 }, + { { "H_29_EPOCH", "item" }, 2 }, + { { "H_30_EPOCH", "item" }, 2 }, + { { "H_31_EPOCH", "item" }, 2 }, + { { "H_32_EPOCH", "item" }, 2 }, + { { "H_33_EPOCH", "item" }, 2 }, + { { "H_35_EPOCH", "item" }, 2 }, + { { "H_36_EPOCH", "item" }, 2 }, + { { "H_37_EPOCH", "item" }, 2 }, + { { "H_38_EPOCH", "item" }, 2 }, + { { "H_93_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_94_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_95_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_96_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_97_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_98_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_99_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_100_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_101_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_102_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_103_EPOCH", "item" }, 1 } // Race Hemlet + }; + }; + class Primitive + { + items[] = { + { { "ItemRock", "magazine" }, 5 }, + { { "ItemRope", "magazine" }, 2 }, + { { "ItemStick", "magazine" }, 5 }, + { { "ItemScraps", "magazine" }, 1 }, + { { "ItemCanvas", "magazine" }, 1 }, + { { "ItemBurlap", "magazine" }, 1 } + }; + }; + class BuildingItems + { + items[] = { + { { "ItemMixOil", "magazine" }, 4 }, + { { "CircuitParts", "magazine" }, 5 }, + { { "CinderBlocks", "magazine" }, 5 }, + { { "MortarBucket", "magazine" }, 15 }, + { { "ItemCorrugated", "magazine" }, 10 }, + { { "ItemCorrugatedLg", "magazine" }, 2 }, + { { "ItemBulb", "magazine" }, 2 }, + { { "ItemSolar", "magazine" }, 2 }, + { { "ItemBattery", "magazine" }, 3 }, + { { "ItemCables", "magazine" }, 3 }, + { { "ItemPipe", "magazine" }, 2 }, + { { "ItemBarrelE", "magazine" }, 1 }, + { { "jerrycan_epoch", "magazine" }, 1 }, + { { "jerrycanE_epoch", "magazine" }, 1 }, + { { "JackKit", "magazine" }, 0 } + }; + }; + class BuildingKits + { + items[] = { + { { "KitPlotPole", "magazine" }, 5 }, + { { "KitSolarGen", "magazine" }, 2 }, + + { { "KitStudWall", "magazine" }, 13 }, + { { "KitCinderWall", "magazine" }, 5 }, + + { { "KitWoodQuarterFloor", "magazine" }, 2 }, + { { "KitWoodHalfFloor", "magazine" }, 2 }, + { { "KitWoodFloor", "magazine" }, 8 }, + + { { "KitWoodStairs", "magazine" }, 9 }, + { { "KitWoodTower", "magazine" }, 5 }, + { { "KitWoodRamp", "magazine" }, 5 }, + { { "KitTankTrap", "magazine" }, 2 }, + { { "KitHesco3", "magazine" }, 1 }, + { { "KitWoodLadder", "magazine" }, 5 }, + { { "KitFirePlace", "magazine" }, 8 }, + { { "KitFoundation", "magazine" }, 5 }, + { { "KitWoodFoundation", "magazine" }, 14 } + }; + }; + class Storages + { + items[] = { + { { "KitWorkbench", "magazine" }, 25 }, + { { "KitShelf", "magazine" }, 20 }, + { { "KitTiPi", "magazine" }, 15 }, + { { "KitTentA", "magazine" }, 10 }, + { { "KitTentDome", "magazine" }, 10 }, + { { "ItemLockbox", "magazine" }, 10 }, + { { "ItemSafe", "magazine" }, 6 }, +// { { "ItemSafe_s", "magazine" }, 4 }, // Variant with less Load than the normal Safe + { { "ItemGunSafe", "magazine" }, 4 } + }; + }; + class Equipment + { + items[] = { + { { "ItemWatch", "item" }, 30 }, + { { "ItemCompass", "item" }, 20 }, + { { "Binocular", "item" }, 10 }, + { { "ItemGPS", "item" }, 9 }, + { { "B_UavTerminal", "item" }, 5 }, + { { "NVG_EPOCH", "item" }, 5 }, + { { "Rangefinder", "weapon" }, 2 }, + { { "EpochRadio0", "item" }, 2 }, + { { "EpochRadio1", "item" }, 2 }, + { { "EpochRadio2", "item" }, 2 }, + { { "EpochRadio3", "item" }, 2 }, + { { "EpochRadio4", "item" }, 2 }, + { { "EpochRadio5", "item" }, 1 }, + { { "EpochRadio6", "item" }, 1 }, + { { "EpochRadio7", "item" }, 1 }, + { { "EpochRadio8", "item" }, 1 }, + { { "EpochRadio9", "item" }, 1 }, + { { "ItemGeigerCounter_EPOCH", "item" }, 1 } + }; + }; + class Tools + { + items[] = { + { { "Hatchet", "weapon" }, 40 }, + { { "MeleeSledge", "weapon" }, 20 }, + { { "ChainSaw", "weapon" }, 10 }, + { { "Plunger", "weapon" }, 4 }, + { { "MeleeSword", "weapon" }, 2 }, + { { "Power_Sword", "weapon" }, 1 }, + { { "MeleeRod", "weapon" }, 2 }, + { { "lighter_epoch", "magazine" }, 1 }, + { { "SmeltingTools_EPOCH", "magazine" }, 10 }, + { { "ItemFireExtinguisher", "magazine" }, 1 } + }; + }; + class Repairs + { + items[] = { + { { "VehicleRepair", "magazine" }, 30 }, + { { "SpareTire", "magazine" }, 10 }, + { { "EngineParts", "magazine" }, 7 }, + { { "EngineBlock", "magazine" }, 3 }, + { { "ItemGlass", "magazine" }, 3 }, + { { "ItemDuctTape", "magazine" }, 10 }, + { { "FuelTank", "magazine" }, 3 }, + { { "ItemRotor", "magazine" }, 3 } + }; + }; + class VehicleDocs + { + items[] = { + { { "ItemDocument", "magazine" }, 20 }, + { { "ItemVehDoc1", "magazine" }, 20 }, + { { "ItemVehDoc2", "magazine" }, 15 }, + { { "ItemVehDoc3", "magazine" }, 5 }, + { { "ItemVehDoc4", "magazine" }, 2 } + }; + }; + class Seeds + { + items[] = { + { { "ItemSeedBag", "magazine" }, 10 }, + { { "SeedPacket_Hemp", "magazine" }, 1 }, + { { "SeedPacket_GoldenSeal", "magazine" }, 1 }, + { { "SeedPacket_Poppy", "magazine" }, 1 }, + { { "SeedPacket_Pumpkin", "magazine" }, 2 }, + { { "SeedPacket_Sunflower", "magazine" }, 2 } + }; + }; + class Drink + { + items[] = { + { { "ItemCanteen_Empty", "magazine" }, 5 }, + { { "ItemCanteen_Dirty", "magazine" }, 5 }, + { { "ItemCanteen_Clean", "magazine" }, 1 }, + { { "ItemBottlePlastic_Empty", "magazine" }, 5 }, + { { "ItemBottlePlastic_Dirty", "magazine" }, 5 }, + { { "ItemBottlePlastic_Clean", "magazine" }, 1 }, + { { "WhiskeyNoodle", "magazine" }, 5 }, + { { "ItemSodaOrangeSherbet", "magazine" }, 13 }, + { { "ItemSodaAlpineDude", "magazine" }, 6 }, + { { "ItemSodaPurple", "magazine" }, 13 }, + { { "ItemSodaMocha", "magazine" }, 12 }, + { { "ItemSodaBurst", "magazine" }, 15 }, + { { "ItemSodaRbull", "magazine" }, 13 }, + { { "FoodWalkNSons", "magazine" }, 13 }, + { { "ItemSodaEmpty", "magazine" }, 11 } + }; + }; + class Food + { + items[] = { + { { "ItemCoolerE", "magazine" }, 3 }, + { { "bluburger_epoch", "magazine" }, 4 }, + { { "redburger_epoch", "magazine" }, 4 }, + { { "gyro_wrap_epoch", "magazine" }, 4 }, + { { "icecream_epoch", "magazine" }, 3 }, + { { "ItemPowderMilk", "magazine" }, 3 }, + { { "ItemRicebox", "magazine" }, 3 }, + { { "ItemCereals", "magazine" }, 3 }, + { { "ItemVitamins", "magazine" }, 3 }, + { { "honey_epoch", "magazine" }, 5 }, + { { "emptyjar_epoch", "magazine" }, 13 }, + { { "water_epoch", "magazine" }, 3 }, + { { "clean_water_epoch", "magazine" }, 1 }, + { { "FoodBioMeat", "magazine" }, 11 }, + { { "sardines_epoch", "magazine" }, 11 }, + { { "meatballs_epoch", "magazine" }, 13 }, + { { "scam_epoch", "magazine" }, 14 }, + { { "sweetcorn_epoch", "magazine" }, 14 }, + { { "FoodSnooter", "magazine" }, 5 }, + { { "krypto_candy_epoch", "magazine" }, 4 }, + { { "TacticalBacon", "magazine" }, 5 }, + { { "FoodMeeps", "magazine" }, 1 }, + { { "ItemEmptyTin", "magazine" }, 5 }, + { { "ItemBakedBeans", "magazine" }, 3 }, + { { "HotAxeSauce_epoch", "magazine" }, 1 } + }; + }; + class Medical + { + items[] = { + { { "ItemDefibrillator", "magazine" }, 1 }, + { { "FAK", "magazine" }, 50 }, + { { "Soap_Epoch", "magazine" }, 3 }, + { { "atropine_epoch", "magazine" }, 6 }, + { { "adrenaline_epoch", "magazine" }, 5 }, + { { "morphine_epoch", "magazine" }, 3 }, + { { "caffeinepills_epoch", "magazine" }, 10 }, + { { "orlistat_epoch", "magazine" }, 5 }, + { { "nanite_cream_epoch", "magazine" }, 3 }, + { { "nanite_gun_epoch", "magazine" }, 1 }, + { { "nanite_pills_epoch", "magazine" }, 5 }, + { { "iodide_pills_epoch", "magazine" }, 5 }, + { { "ItemWaterPurificationTablets", "magazine" }, 5 }, + { { "HeatPack", "magazine" }, 1 }, + { { "ColdPack", "magazine" }, 1 }, + { { "Towelette", "magazine" }, 8 } + }; + }; + class PaintCans + { + items[] = { + { { "PaintCanClear", "magazine" }, 1 }, + { { "PaintCanBlk", "magazine" }, 1 }, + { { "PaintCanBlu", "magazine" }, 1 }, + { { "PaintCanBrn", "magazine" }, 1 }, + { { "PaintCanGrn", "magazine" }, 1 }, + { { "PaintCanOra", "magazine" }, 1 }, + { { "PaintCanPur", "magazine" }, 1 }, + { { "PaintCanRed", "magazine" }, 1 }, + { { "PaintCanTeal", "magazine" }, 1 }, + { { "PaintCanYel", "magazine" }, 1 } + }; + }; + class MetalBars + { + items[] = { + { { "ItemGoldBar10oz", "magazine" }, 1 }, + { { "ItemGoldBar", "magazine" }, 9 }, + { { "ItemSilverBar", "magazine" }, 20 }, + { { "ItemCopperBar", "magazine" }, 20 }, + { { "ItemAluminumBar", "magazine" }, 20 }, + { { "ItemTinBar", "magazine" }, 30 } + }; + }; + class Gems + { + items[] = { + { { "ItemJade", "magazine" }, 5 }, + { { "ItemRuby", "magazine" }, 8 }, + { { "ItemSapphire", "magazine" }, 9 }, + { { "ItemTopaz", "magazine" }, 10 }, + { { "ItemOnyx", "magazine" }, 10 }, + { { "ItemAmethyst", "magazine" }, 10 }, + { { "ItemEmerald", "magazine" }, 10 }, + { { "ItemCitrine", "magazine" }, 10 }, + { { "ItemGarnet", "magazine" }, 13 }, + { { "ItemQuartz", "magazine" }, 15 } + }; + }; + class Ore + { + items[] = { + { { "PartOreGold", "magazine" }, 20 }, + { { "PartOreSilver", "magazine" }, 30 }, + { { "PartOre", "magazine" }, 35 } + }; + }; + class Throw + { + items[] = { + { { "SmokeShell", "magazine" }, 1 }, + { { "SmokeShellYellow", "magazine" }, 1 }, + { { "SmokeShellGreen", "magazine" }, 1 }, + { { "SmokeShellToxic", "magazine" }, 1 }, + { { "SmokeShellRed", "magazine" }, 1 }, + { { "SmokeShellPurple", "magazine" }, 1 }, + { { "SmokeShellOrange", "magazine" }, 1 }, + { { "SmokeShellBlue", "magazine" }, 1 }, + { { "Chemlight_green", "magazine" }, 1 }, + { { "Chemlight_red", "magazine" }, 1 }, + { { "Chemlight_yellow", "magazine" }, 1 }, + { { "Chemlight_blue", "magazine" }, 1 } + }; + }; + class ThrowExplosive + { + items[] = { + { { "HandGrenade", "magazine" }, 25 }, + { { "MiniGrenade", "magazine" }, 25 } + }; + }; + class HighExplosives + { + items[] = { + { { "SatchelCharge_Remote_Mag", "magazine" }, 15 }, + { { "ATMine_Range_Mag", "magazine" }, 5 }, + { { "SLAMDirectionalMine_Wire_Mag", "magazine" }, 3 }, + { { "DemoCharge_Remote_Mag", "magazine" }, 6 }, + { { "ClaymoreDirectionalMine_Remote_Mag", "magazine" }, 10 }, + { { "APERSBoundingMine_Range_Mag", "magazine" }, 21 }, + { { "APERSTripMine_Wire_Mag", "magazine" }, 20 }, + { { "APERSMine_Range_Mag", "magazine" }, 20 } + }; + }; + class ShellFlares + { + items[] = { + { { "3Rnd_UGL_FlareWhite_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareGreen_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareRed_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareYellow_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareCIR_F", "magazine" }, 1 }, + { { "UGL_FlareWhite_F", "magazine" }, 1 }, + { { "UGL_FlareGreen_F", "magazine" }, 1 }, + { { "UGL_FlareRed_F", "magazine" }, 1 }, + { { "UGL_FlareYellow_F", "magazine" }, 1 }, + { { "UGL_FlareCIR_F", "magazine" }, 1 } + }; + }; + class ShellSmokes + { + items[] = { + { { "1Rnd_Smoke_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeRed_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeGreen_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeYellow_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokePurple_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeBlue_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeOrange_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_Smoke_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeRed_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeGreen_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeYellow_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokePurple_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeBlue_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeOrange_Grenade_shell", "magazine" }, 1 } + }; + }; + class ShellExplosives + { + items[] = { + { { "1Rnd_HE_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_HE_Grenade_shell", "magazine" }, 1 } + }; + }; + +// ########################################################################### Base Classes ########################################################################### + + class Scopes_Vanilla + { + items[] = { + { { "optic_NVS", "item" }, 1 }, + { { "optic_tws", "item" }, 1 }, + { { "optic_tws_mg", "item" }, 1 }, + { { "optic_SOS", "item" }, 2 }, + { { "optic_LRPS", "item" }, 2 }, + { { "optic_DMS", "item" }, 3 }, + { { "optic_Arco", "item" }, 4 }, + { { "optic_Hamr", "item" }, 5 }, + { { "Elcan_epoch", "item" }, 5 }, + { { "Elcan_reflex_epoch", "item" }, 5 }, + { { "optic_MRCO", "item" }, 6 }, + { { "optic_Holosight", "item" }, 6 }, + { { "optic_Holosight_smg", "item" }, 6 }, + { { "optic_Aco", "item" }, 7 }, + { { "optic_ACO_grn", "item" }, 7 }, + { { "optic_Aco_smg", "item" }, 7 }, + { { "optic_ACO_grn_smg", "item" }, 8 }, + { { "optic_Yorris", "item" }, 10 }, + { { "optic_MRD", "item" }, 10 } + }; + }; + class Scopes_MarkDLC + { + items[] = { + { { "optic_AMS", "item" }, 2 }, + { { "optic_AMS_khk", "item" }, 1 }, + { { "optic_AMS_snd", "item" }, 1 }, + { { "optic_KHS_blk", "item" }, 1 }, + { { "optic_KHS_hex", "item" }, 1 }, + { { "optic_KHS_old", "item" }, 2 }, + { { "optic_KHS_tan", "item" }, 1 } + }; + }; + class Scopes_CUP + { + items[] = { + { { "CUP_optic_PSO_1", "item" }, 1 }, + { { "CUP_optic_PSO_3", "item" }, 1 }, + { { "CUP_optic_Kobra", "item" }, 1 }, + { { "CUP_optic_GOSHAWK", "item" }, 1 }, + { { "CUP_optic_NSPU", "item" }, 1 }, + { { "CUP_optic_PechenegScope", "item" }, 1 }, + { { "CUP_optic_SB_3_12x50_PMII", "item" }, 1 }, + { { "CUP_optic_AN_PAS_13c2", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4", "item" }, 1 }, + { { "CUP_optic_HoloBlack", "item" }, 1 }, + { { "CUP_optic_HoloWdl", "item" }, 1 }, + { { "CUP_optic_HoloDesert", "item" }, 1 }, + { { "CUP_optic_Eotech533", "item" }, 1 }, + { { "CUP_optic_Eotech533Grey", "item" }, 1 }, + { { "CUP_optic_CompM4", "item" }, 1 }, + { { "CUP_optic_SUSAT", "item" }, 1 }, + { { "CUP_optic_ACOG", "item" }, 1 }, + { { "CUP_optic_CWS", "item" }, 1 }, + { { "CUP_optic_Leupold_VX3", "item" }, 1 }, + { { "CUP_optic_AN_PVS_10", "item" }, 1 }, + { { "CUP_optic_CompM2_Black", "item" }, 1 }, + { { "CUP_optic_CompM2_Woodland", "item" }, 1 }, + { { "CUP_optic_CompM2_Woodland2", "item" }, 1 }, + { { "CUP_optic_CompM2_Desert", "item" }, 1 }, + { { "CUP_optic_RCO", "item" }, 1 }, + { { "CUP_optic_RCO_desert", "item" }, 1 }, + { { "CUP_optic_LeupoldM3LR", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_10x40_LRT_Desert", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_10x40_LRT_Woodland", "item" }, 1 }, + { { "CUP_optic_ElcanM145", "item" }, 1 }, + { { "CUP_optic_AN_PAS_13c1", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_CQ_T", "item" }, 1 }, + { { "CUP_optic_ELCAN_SpecterDR", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_MRT_tan", "item" }, 1 }, + { { "CUP_optic_SB_11_4x20_PM", "item" }, 1 }, + { { "CUP_optic_ZDDot", "item" }, 1 }, + { { "CUP_optic_MRad", "item" }, 1 }, + { { "CUP_optic_TrijiconRx01_desert", "item" }, 1 }, + { { "CUP_optic_TrijiconRx01_black", "item" }, 1 }, + { { "CUP_optic_AN_PVS_4", "item" }, 1 } + }; + }; + class Bipods_Vanilla + { + items[] = { + { { "bipod_01_F_snd", "item" }, 1 }, + { { "bipod_01_F_blk", "item" }, 1 }, + { { "bipod_01_F_mtp", "item" }, 1 }, + { { "bipod_02_F_blk", "item" }, 1 }, + { { "bipod_02_F_tan", "item" }, 1 }, + { { "bipod_02_F_hex", "item" }, 1 }, + { { "bipod_03_F_blk", "item" }, 1 }, + { { "bipod_03_F_oli", "item" }, 1 } + }; + }; + class Bipods_CUP + { + items[] = { + { { "CUP_bipod_Harris_1A2_L", "item" }, 1 }, + { { "CUP_bipod_VLTOR_Modpod", "item" }, 1 } + }; + }; + class Muzzles_Vanilla + { + items[] = { + { { "muzzle_sr25S_epoch", "item" }, 1 }, + { { "muzzle_snds_H", "item" }, 1 }, + { { "muzzle_snds_M", "item" }, 1 }, + { { "muzzle_snds_L", "item" }, 1 }, + { { "muzzle_snds_B", "item" }, 1 }, + { { "muzzle_snds_H_MG", "item" }, 1 }, + { { "muzzle_snds_acp", "item" }, 1 }, + { { "Muzzles_MultiGun", "CfgLootTable" }, 1 } + }; + }; + class Muzzles_MarkDLC + { + items[] = { + { { "muzzle_snds_570", "item" }, 1 }, + { { "muzzle_snds_338_black", "item" }, 1 }, + { { "muzzle_snds_338_green", "item" }, 1 }, + { { "muzzle_snds_338_sand", "item" }, 1 }, + { { "muzzle_snds_93mmg", "item" }, 1 }, + { { "muzzle_snds_93mmg_tan", "item" }, 1 } + }; + }; + class Muzzles_CUP + { + items[] = { + { { "CUP_muzzle_snds_M110", "item" }, 1 }, + { { "CUP_muzzle_snds_M14", "item" }, 1 }, + { { "CUP_muzzle_PBS4", "item" }, 1 }, + { { "CUP_muzzle_PB6P9", "item" }, 1 }, + { { "CUP_muzzle_Bizon", "item" }, 1 }, + { { "CUP_muzzle_snds_M9", "item" }, 1 }, + { { "CUP_muzzle_snds_MicroUzi", "item" }, 1 }, + { { "CUP_muzzle_snds_AWM", "item" }, 1 }, + { { "CUP_muzzle_snds_G36_black", "item" }, 1 }, + { { "CUP_muzzle_snds_G36_desert", "item" }, 1 }, + { { "CUP_muzzle_snds_L85", "item" }, 1 }, + { { "CUP_muzzle_snds_M16_camo", "item" }, 1 }, + { { "CUP_muzzle_snds_M16", "item" }, 1 }, + { { "CUP_muzzle_snds_SCAR_L", "item" }, 1 }, + { { "CUP_muzzle_mfsup_SCAR_L", "item" }, 1 }, + { { "CUP_muzzle_snds_SCAR_H", "item" }, 1 }, + { { "CUP_muzzle_mfsup_SCAR_H", "item" }, 1 }, + { { "CUP_muzzle_snds_XM8", "item" }, 1 } + }; + }; + class Muzzles_MultiGun + { + items[] = { + { { "Heal_EPOCH", "item" }, 1 }, + { { "Defib_EPOCH", "item" }, 1 }, + { { "Repair_EPOCH", "item" }, 1 } + }; + }; + class WpnFlashLights_Vanilla + { + items[] = { + { { "acc_flashlight", "item" }, 1 }, + { { "acc_flashlight_pistol", "item" }, 1 }, + { { "acc_pointer_IR", "item" }, 1 } + }; + }; + class WpnFlashLights_CUP + { + items[] = { + { { "CUP_acc_Glock17_Flashlight", "item" }, 1 }, + { { "CUP_acc_ANPEQ_15", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2", "item" }, 1 }, + { { "CUP_acc_Flashlight", "item" }, 1 }, + { { "CUP_acc_Flashlight_wdl", "item" }, 1 }, + { { "CUP_acc_Flashlight_desert", "item" }, 1 }, + { { "CUP_acc_XM8_light_module", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2_camo", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2_desert", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2_grey", "item" }, 1 }, + { { "CUP_acc_CZ_M3X", "item" }, 1 } + }; + }; + class SniperCamo_CUP + { + items[] = { + { { "CUP_Mxx_camo", "item" }, 1 }, + { { "CUP_Mxx_camo_half", "item" }, 1 }, + { { "CUP_SVD_camo_g", "item" }, 1 }, + { { "CUP_SVD_camo_g_half", "item" }, 1 }, + { { "CUP_SVD_camo_d", "item" }, 1 }, + { { "CUP_SVD_camo_d_half", "item" }, 1 } + + }; + }; + class Pistols_Vanilla + { + items[] = { + { { "Hgun_Pistol_Signal_F", "weapon" }, 4 }, + { { "MultiGun", "weapon" }, 5 }, + { { "hgun_Pistol_heavy_01_F", "weapon" }, 9 }, + { { "hgun_P07_F", "weapon" }, 10 }, + { { "hgun_Rook40_F", "weapon" }, 11 }, + { { "hgun_Pistol_heavy_02_F", "weapon" }, 13 }, + { { "1911_pistol_epoch", "weapon" }, 14 }, + { { "hgun_ACPC2_F", "weapon" }, 16 }, + { { "ruger_pistol_epoch", "weapon" }, 18 } + }; + }; + class NL_Pistols + { + items[] = { + { { "hgun_Pistol_tranq_01", "weapon" }, 1 } + }; + }; + class PistolAmmo_Vanilla + { + items[] = { + { { "EnergyPack", "magazine" }, 4 }, + { { "6Rnd_RedSignal_F", "magazine" }, 2 }, + { { "6Rnd_GreenSignal_F", "magazine" }, 2 }, + { { "30Rnd_9x21_Mag", "magazine" }, 10 }, + { { "6Rnd_45ACP_Cylinder", "magazine" }, 11 }, + { { "16Rnd_9x21_Mag", "magazine" }, 11 }, + { { "11Rnd_45ACP_Mag", "magazine" }, 12 }, + { { "9Rnd_45ACP_Mag", "magazine" }, 16 }, + { { "9rnd_45X88_magazine", "magazine" }, 16 }, + { { "10rnd_22X44_magazine", "magazine" }, 16 } + }; + }; + class NL_PistolAmmo + { + items[] = { + { { "tranq_dart_mag", "magazine" }, 1 } + }; + }; + class Pistols_CUP + { + items[] = { + { { "CUP_hgun_Compact", "weapon" }, 1 }, + { { "CUP_hgun_Duty", "weapon" }, 1 }, + { { "CUP_hgun_Phantom", "weapon" }, 1 }, + { { "CUP_hgun_Glock17", "weapon" }, 1 }, + { { "CUP_hgun_Makarov", "weapon" }, 1 }, + { { "CUP_hgun_MicroUzi", "weapon" }, 1 }, + { { "CUP_hgun_TaurusTracker455", "weapon" }, 1 }, + { { "CUP_hgun_PB6P9", "weapon" }, 1 }, + { { "CUP_hgun_SA61", "weapon" }, 1 }, + { { "CUP_hgun_M9", "weapon" }, 1 }, + { { "CUP_hgun_TaurusTracker455_gold", "weapon" }, 1 }, + { { "CUP_hgun_Colt1911", "weapon" }, 1 } + }; + }; + class PistolAmmo_CUP + { + items[] = { + { { "CUP_10Rnd_9x19_Compact", "magazine" }, 2 }, + { { "CUP_18Rnd_9x19_Phantom", "magazine" }, 1 }, + { { "CUP_17Rnd_9x19_glock17", "magazine" }, 1 }, + { { "CUP_8Rnd_9x18_Makarov_M", "magazine" }, 2 }, + { { "CUP_8Rnd_9x18_MakarovSD_M", "magazine" }, 2 }, + { { "CUP_30Rnd_9x19_UZI", "magazine" }, 1 }, + { { "CUP_6Rnd_45ACP_M", "magazine" }, 3 }, + { { "CUP_20Rnd_B_765x17_Ball_M", "magazine" }, 1 }, + { { "CUP_15Rnd_9x19_M9", "magazine" }, 1 }, + { { "CUP_7Rnd_45ACP_1911", "magazine" }, 2 } + }; + }; + class Pistols_MAD + { + items[] = { + { { "revolver01", "weapon" }, 17 } + }; + }; + class Rifle_Vanilla + { + items[] = { + { { "AKM_EPOCH", "weapon" }, 3 }, + { { "sr25_epoch", "weapon" }, 4 }, + + { { "arifle_Katiba_GL_F", "weapon" }, 2 }, + { { "arifle_Katiba_C_F", "weapon" }, 3 }, + { { "arifle_Katiba_F", "weapon" }, 5 }, + + { { "arifle_MX_GL_F", "weapon" }, 3 }, + { { "arifle_MX_GL_Black_F", "weapon" }, 2 }, + { { "arifle_MXM_Black_F", "weapon" }, 2 }, + { { "arifle_MXC_Black_F", "weapon" }, 3 }, + { { "arifle_MX_Black_F", "weapon" }, 2 }, + { { "arifle_MXM_F", "weapon" }, 3 }, + { { "arifle_MXC_F", "weapon" }, 3 }, + { { "arifle_MX_F", "weapon" }, 3 }, + + { { "l85a2_epoch", "weapon" }, 1 }, + { { "l85a2_pink_epoch", "weapon" }, 1 }, + { { "l85a2_ugl_epoch", "weapon" }, 1 }, + + { { "m4a3_EPOCH", "weapon" }, 7 }, + + { { "m16_EPOCH", "weapon" }, 2 }, + { { "m16Red_EPOCH", "weapon" }, 1 }, + + { { "arifle_Mk20_GL_F", "weapon" }, 12 }, + { { "arifle_Mk20_GL_plain_F", "weapon" }, 12 }, + { { "arifle_Mk20C_F", "weapon" }, 16 }, + { { "arifle_Mk20C_plain_F", "weapon" }, 18 }, + { { "arifle_Mk20_F", "weapon" }, 20 }, + { { "arifle_Mk20_plain_F", "weapon" }, 22 }, + + { { "arifle_TRG21_GL_F", "weapon" }, 2 }, + { { "arifle_TRG21_F", "weapon" }, 3 }, + { { "arifle_TRG20_F", "weapon" }, 5 }, + + { { "arifle_SDAR_F", "weapon" }, 9 }, + { { "Rollins_F", "weapon" }, 9 }, + { { "SMG_01_F", "weapon" }, 9 }, + { { "SMG_02_F", "weapon" }, 9 }, + + { { "SMG_03_TR_black", "weapon" }, 1 }, + { { "SMG_03_TR_camo", "weapon" }, 1 }, + { { "SMG_03_TR_khaki", "weapon" }, 1 }, + { { "SMG_03_TR_hex", "weapon" }, 1 }, + { { "SMG_03C_TR_black", "weapon" }, 1 }, + { { "SMG_03C_TR_camo", "weapon" }, 1 }, + { { "SMG_03C_TR_khaki", "weapon" }, 1 }, + { { "SMG_03C_TR_hex", "weapon" }, 1 }, + { { "SMG_03_black", "weapon" }, 1 }, + { { "SMG_03_camo", "weapon" }, 1 }, + { { "SMG_03_khaki", "weapon" }, 1 }, + { { "SMG_03_hex", "weapon" }, 1 }, + { { "SMG_03C_black", "weapon" }, 1 }, + { { "SMG_03C_camo", "weapon" }, 1 }, + { { "SMG_03C_khaki", "weapon" }, 1 }, + { { "SMG_03C_hex", "weapon" }, 1 }, + + { { "hgun_PDW2000_F", "weapon" }, 10 }, + { { "speargun_epoch", "weapon" }, 5 } + }; + }; + class RifleAmmo_Vanilla + { + items[] = { + { { "30Rnd_762x39_Mag", "magazine" }, 8 }, + + { { "30Rnd_65x39_caseless_mag", "magazine" }, 3 }, + { { "30Rnd_65x39_caseless_mag_Tracer", "magazine" }, 2 }, + { { "30Rnd_65x39_caseless_green", "magazine" }, 3 }, + { { "30Rnd_65x39_caseless_green_mag_Tracer", "magazine" }, 2 }, + + { { "20Rnd_556x45_UW_mag", "magazine" }, 12 }, + + { { "30Rnd_556x45_Stanag", "magazine" }, 4 }, + { { "30Rnd_556x45_Stanag_Tracer_Red", "magazine" }, 2 }, + { { "30Rnd_556x45_Stanag_Tracer_Green", "magazine" }, 2 }, + { { "30Rnd_556x45_Stanag_Tracer_Yellow", "magazine" }, 2 }, + + { { "30Rnd_45ACP_Mag_SMG_01", "magazine" }, 5 }, + { { "30Rnd_45ACP_Mag_SMG_01_Tracer_Green", "magazine" }, 5 }, + + { { "30Rnd_9x21_Mag", "magazine" }, 10 }, + { { "5Rnd_rollins_mag", "magazine" }, 10 }, + { { "50Rnd_570x28_SMG_03", "magazine" }, 10 }, + + { { "spear_magazine", "magazine" }, 2 } + }; + }; + class NL_RifleAmmo + { + items[] = { + { { "NL_pvc_bb_mag", "magazine" }, 5 }, + { { "NL_shot_bb_mag", "magazine" }, 5 }, + { { "xbow_mag_bolt", "magazine" }, 5 }, + { { "xbow_mag_tranq", "magazine" }, 5 }, + { { "xbow_mag_exp", "magazine" }, 2 } + }; + }; + class A2_Rifle + { + items[] = { + { { "a2_ak47s_gold_EPOCH", "weapon" }, 1 }, + { { "a2_AK107_EPOCH", "weapon" }, 1 }, + { { "a2_bizon_epoch", "weapon" }, 1 }, + { { "a2_dmr_epoch", "weapon" }, 1 }, + { { "a2_dmr_epoch_scoped", "weapon" }, 1 }, + { { "a2_fnfal_epoch", "weapon" }, 1 }, + { { "a2_G36_C_epoch", "weapon" }, 1 }, + { { "a2_Mg36_epoch", "weapon" }, 1 }, + { { "a2_leeenfield_epoch", "weapon" }, 1 }, + { { "a2_m110_epoch", "weapon" }, 1 }, + { { "a2_mk16_epoch", "weapon" }, 1 }, + { { "a2_mk17_epoch", "weapon" }, 1 }, + { { "a2_svd_epoch", "weapon" }, 1 }, + { { "a2_VSS_vintorez_epoch", "weapon" }, 1 }, + { { "a2_aks74un_EPOCH", "weapon" }, 1 } + }; + }; + class NL_Rifle + { + items[] = { + { { "pvcrifle_01_F", "weapon" }, 1 }, + { { "nl_Shotgun", "weapon" }, 1 }, + { { "nl_auto_xbow", "weapon" }, 1 } + }; + }; + class A2_RifleAmmo + { + items[] = { + { { "Bizon_64Rnd_9x18", "magazine" }, 2 }, + { { "20Rnd_762x51_DMR", "magazine" }, 2 }, + { { "20Rnd_762x51_FNFAL", "magazine" }, 2 }, + { { "30Rnd_556x45_G36", "magazine" }, 2 }, + { { "10Rnd_303", "magazine" }, 2 }, + { { "100Rnd_556x45_BetaCMag", "magazine" }, 2 }, + { { "10Rnd_762x54_SVD", "magazine" }, 2 }, + { { "10Rnd_9x39_SP5_VSS", "magazine" }, 2 } + }; + }; + class Rifle_CUP + { + items[] = { + { { "CUP_smg_bizon", "weapon" }, 1 }, + { { "CUP_smg_EVO", "weapon" }, 1 }, + { { "CUP_smg_MP5SD6", "weapon" }, 1 }, + { { "CUP_smg_MP5A5", "weapon" }, 1 }, + + { { "CUP_sgun_AA12", "weapon" }, 1 }, + { { "CUP_sgun_M1014", "weapon" }, 1 }, + { { "CUP_sgun_Saiga12K", "weapon" }, 1 }, + + { { "CUP_arifle_AK74", "weapon" }, 1 }, + { { "CUP_arifle_AK74M", "weapon" }, 1 }, + { { "CUP_arifle_AK74M_GL", "weapon" }, 1 }, + { { "CUP_arifle_AK74_GL", "weapon" }, 1 }, + { { "CUP_arifle_AK74_GL_kobra", "weapon" }, 1 }, + { { "CUP_arifle_AKS", "weapon" }, 1 }, + { { "CUP_arifle_AKS_Gold", "weapon" }, 1 }, + { { "CUP_arifle_AKS74", "weapon" }, 1 }, + { { "CUP_arifle_AKS74U", "weapon" }, 1 }, + { { "CUP_arifle_AK107", "weapon" }, 1 }, + { { "CUP_arifle_AK107_GL", "weapon" }, 1 }, + { { "CUP_arifle_AKM", "weapon" }, 1 }, + + { { "CUP_arifle_CZ805_A1", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_GL", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_A2", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_B", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_B_GL", "weapon" }, 1 }, + + { { "CUP_arifle_FNFAL", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL_railed", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL5061", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL5062", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL_OSW", "weapon" }, 1 }, + + { { "CUP_arifle_G36A", "weapon" }, 1 }, + { { "CUP_arifle_G36A_camo", "weapon" }, 1 }, + { { "CUP_arifle_G36K", "weapon" }, 1 }, + { { "CUP_arifle_G36K_camo", "weapon" }, 1 }, + { { "CUP_arifle_G36C", "weapon" }, 1 }, + { { "CUP_arifle_G36C_camo", "weapon" }, 1 }, + + { { "CUP_arifle_L85A2", "weapon" }, 1 }, + { { "CUP_arifle_L85A2_GL", "weapon" }, 1 }, + + { { "CUP_arifle_M16A2", "weapon" }, 1 }, + { { "CUP_arifle_M16A2_GL", "weapon" }, 1 }, + { { "CUP_arifle_M16A4_Base", "weapon" }, 1 }, + { { "CUP_arifle_M16A4_GL", "weapon" }, 1 }, + + { { "CUP_arifle_M4A1_BUIS_GL", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_BUIS_camo_GL", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_BUIS_desert_GL", "weapon" }, 1 }, + { { "CUP_arifle_M4A1", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_camo", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_black", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_desert", "weapon" }, 1 }, + { { "CUP_arifle_M4A3_desert", "weapon" }, 1 }, + + { { "CUP_arifle_Sa58P", "weapon" }, 1 }, + { { "CUP_arifle_Sa58V", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS1", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS2", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS2_gl", "weapon" }, 1 }, + { { "CUP_arifle_Sa58P_des", "weapon" }, 1 }, + { { "CUP_arifle_Sa58V_camo", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS1_des", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS2_camo", "weapon" }, 1 }, + + { { "CUP_arifle_Mk16_STD", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_STD_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_STD_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_STD_EGLM", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC_EGLM", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_SV", "weapon" }, 1 }, + + { { "CUP_arifle_Mk17_CQC", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_CQC_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_CQC_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_CQC_EGLM", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD_EGLM", "weapon" }, 1 }, + + { { "CUP_arifle_Mk20", "weapon" }, 1 }, + + { { "CUP_arifle_XM8_Carbine", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Carbine_GL", "weapon" }, 1 }, + { { "CUP_arifle_xm8_sharpshooter", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Compact", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Compact_Rail", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Railed", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Carbine_FG", "weapon" }, 1 }, + { { "CUP_arifle_xm8_SAW", "weapon" }, 1 }, + + { { "CUP_arifle_AK47", "weapon" }, 1 }, + { { "CUP_arifle_RPK74", "weapon" }, 1 }, + { { "CUP_arifle_MG36", "weapon" }, 1 }, + { { "CUP_arifle_RPK74_45", "weapon" }, 1 }, + { { "CUP_arifle_RPK74M", "weapon" }, 1 }, + { { "CUP_arifle_MG36_camo", "weapon" }, 1 }, + { { "CUP_arifle_L86A2", "weapon" }, 1 } + }; + }; + class RifleAmmo_CUP + { + items[] = { + { { "CUP_30Rnd_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Green_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Red_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_White_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Yellow_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_45Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_762x39_AK47_M", "magazine" }, 1 }, + { { "CUP_75Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Red_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Green_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Yellow_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_100Rnd_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Red_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Green_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Yellow_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_20Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_FNFAL_M", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_B_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M_TracerG", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M_TracerR", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M_TracerY", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M", "magazine" }, 1 }, + + { { "CUP_20Rnd_B_AA12_Pellets", "magazine" }, 3 }, + { { "CUP_20Rnd_B_AA12_74Slug", "magazine" }, 2 }, + { { "CUP_20Rnd_B_AA12_HE", "magazine" }, 1 }, + { { "CUP_8Rnd_B_Beneli_74Slug", "magazine" }, 2 }, + { { "CUP_8Rnd_B_Beneli_74Pellets", "magazine" }, 3 }, + { { "CUP_8Rnd_B_Saiga12_74Slug_M", "magazine" }, 2 }, + { { "CUP_8Rnd_B_Saiga12_74Pellets_M", "magazine" }, 3 } + }; + }; + class Rifle_MAD + { + items[] = { + { { "VG_sawed_off_01", "weapon" }, 1 }, + { { "Devastator_01", "weapon" }, 1 } + }; + }; + class RifleAmmo_MAD + { + items[] = { + { { "in005_1Rnd_12Gauge_Pellets", "magazine" }, 1 }, + { { "in005_1Rnd_12Gauge_Slug", "magazine" }, 1 } + }; + }; + class SniperRifle_Vanilla + { + items[] = { + { { "m107_EPOCH", "weapon" }, 1 }, + { { "m107Tan_EPOCH", "weapon" }, 1 }, + + { { "srifle_LRR_F", "weapon" }, 11 }, + { { "srifle_GM6_F", "weapon" }, 16 }, + + { { "M14_EPOCH", "weapon" }, 1 }, + { { "M14Grn_EPOCH", "weapon" }, 1 }, + + { { "srifle_EBR_F", "weapon" }, 20 }, + + { { "srifle_DMR_01_F", "weapon" }, 17 } + }; + }; + class SniperRifleAmmo_Vanilla + { + items[] = { + { { "5Rnd_127x108_Mag", "magazine" }, 1 }, + { { "5Rnd_127x108_APDS_Mag", "magazine" }, 1 }, + { { "7Rnd_408_Mag", "magazine" }, 1 }, + { { "20Rnd_762x51_Mag", "magazine" }, 1 }, + { { "10Rnd_762x54_Mag", "magazine" }, 1 } + }; + }; + class SniperRifleMarkDLC + { + items[] = { + { { "srifle_DMR_02_F", "weapon" }, 1 }, + { { "srifle_DMR_02_camo_F", "weapon" }, 1 }, + { { "srifle_DMR_02_sniper_F", "weapon" }, 1 }, + { { "srifle_DMR_03_F", "weapon" }, 1 }, + { { "srifle_DMR_03_khaki_F", "weapon" }, 1 }, + { { "srifle_DMR_03_tan_F", "weapon" }, 1 }, + { { "srifle_DMR_03_multicam_F", "weapon" }, 1 }, + { { "srifle_DMR_03_woodland_F", "weapon" }, 1 }, + { { "srifle_DMR_04_F", "weapon" }, 1 }, + { { "srifle_DMR_04_Tan_F", "weapon" }, 1 }, + { { "srifle_DMR_05_blk_F", "weapon" }, 1 }, + { { "srifle_DMR_05_hex_F", "weapon" }, 1 }, + { { "srifle_DMR_05_tan_f", "weapon" }, 1 }, + { { "srifle_DMR_06_camo_F", "weapon" }, 1 }, + { { "srifle_DMR_06_olive_F", "weapon" }, 1 } + }; + }; + class SniperRifleAmmoMarkDLC + { + items[] = { + { { "10Rnd_338_Mag", "magazine" }, 1 }, // DMR_02 + { { "10Rnd_127x54_Mag", "magazine" }, 1 }, // DMR_04 + { { "10Rnd_93x64_DMR_05_Mag", "magazine" }, 1 } // DMR_05 + + }; + }; + class SniperRifle_CUP + { + items[] = { + { { "CUP_srifle_AS50", "weapon" }, 1 }, + { { "CUP_srifle_LeeEnfield", "weapon" }, 1 }, + { { "CUP_srifle_LeeEnfield_rail", "weapon" }, 1 }, + { { "CUP_srifle_M107_Base", "weapon" }, 1 }, + { { "CUP_srifle_M110", "weapon" }, 1 }, + { { "CUP_srifle_M14", "weapon" }, 1 }, + { { "CUP_srifle_M14_DMR", "weapon" }, 1 }, + { { "CUP_srifle_Mk12SPR", "weapon" }, 1 }, + { { "CUP_srifle_M24_des", "weapon" }, 1 }, + { { "CUP_srifle_M40A3", "weapon" }, 1 }, + { { "CUP_srifle_ksvk", "weapon" }, 1 }, + { { "CUP_srifle_SVD", "weapon" }, 1 }, + { { "CUP_srifle_VSSVintorez", "weapon" }, 1 }, + { { "CUP_srifle_CZ750", "weapon" }, 1 }, + { { "CUP_srifle_CZ550", "weapon" }, 1 }, + { { "CUP_srifle_CZ550_rail", "weapon" }, 1 }, + { { "CUP_srifle_M24_wdl", "weapon" }, 1 }, + { { "CUP_srifle_SVD_des", "weapon" }, 1 }, + { { "CUP_srifle_AWM_des", "weapon" }, 1 }, + { { "CUP_srifle_AWM_wdl", "weapon" }, 1 }, + { { "CUP_srifle_G22_des", "weapon" }, 1 } + }; + }; + class SniperRifleAmmo_CUP + { + items[] = { + { { "CUP_5Rnd_127x99_as50_M", "magazine" }, 1 }, + { { "CUP_10x_303_M", "magazine" }, 1 }, + { { "CUP_10Rnd_127x99_m107", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_B_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Red_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Green_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Yellow_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_100Rnd_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Red_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Green_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Yellow_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_5Rnd_762x51_M24", "magazine" }, 1 }, + { { "CUP_5Rnd_127x108_KSVK_M", "magazine" }, 1 }, + { { "CUP_10Rnd_762x54_SVD_M", "magazine" }, 1 }, + { { "CUP_10Rnd_9x39_SP5_VSS_M", "magazine" }, 1 }, + { { "CUP_20Rnd_9x39_SP5_VSS_M", "magazine" }, 1 }, + { { "CUP_10Rnd_762x51_CZ750_Tracer", "magazine" }, 1 }, + { { "CUP_10Rnd_762x51_CZ750", "magazine" }, 1 }, + { { "CUP_5x_22_LR_17_HMR_M", "magazine" }, 1 }, + { { "CUP_5Rnd_86x70_L115A1", "magazine" }, 1 }, + { { "CUP_5Rnd_762x67_G22", "magazine" }, 1 } + }; + }; + class Machinegun_Vanilla + { + items[] = { + { { "LMG_Zafir_F", "weapon" }, 2 }, + + { { "arifle_MX_SW_F", "weapon" }, 4 }, + { { "arifle_MX_SW_Black_F", "weapon" }, 2 }, + + { { "LMG_Mk200_F", "weapon" }, 6 }, + + { { "m249_EPOCH", "weapon" }, 1 }, + { { "m249Tan_EPOCH", "weapon" }, 1 } + }; + }; + class MachinegunAmmo_Vanilla + { + items[] = { + { { "100Rnd_65x39_caseless_mag", "magazine" }, 2 }, + { { "100Rnd_65x39_caseless_mag_Tracer", "magazine" }, 1 }, + + { { "150Rnd_762x54_Box", "magazine" }, 2 }, + { { "150Rnd_762x54_Box_Tracer", "magazine" }, 1 }, + + { { "200Rnd_556x45_M249", "magazine" }, 19 }, + + { { "200Rnd_65x39_cased_Box", "magazine" }, 2 }, + { { "200Rnd_65x39_cased_Box_Tracer", "magazine" }, 1 } + }; + }; + class MachinegunMarkDLC + { + items[] = { + { { "MMG_01_hex_F", "weapon" }, 1 }, + { { "MMG_01_tan_F", "weapon" }, 1 }, + { { "MMG_02_camo_F", "weapon" }, 1 }, + { { "MMG_02_black_F", "weapon" }, 1 }, + { { "MMG_02_sand_F", "weapon" }, 1 } + }; + }; + class MachinegunAmmoMarkDLC + { + items[] = { + { { "150Rnd_93x64_Mag", "magazine" }, 1 }, + { { "130Rnd_338_Mag", "magazine" }, 1 } + }; + }; + class Machinegun_CUP + { + items[] = { + { { "CUP_lmg_L110A1", "weapon" }, 1 }, + { { "CUP_lmg_M240", "weapon" }, 1 }, + { { "CUP_lmg_minimipara", "weapon" }, 1 }, + { { "CUP_lmg_minimi", "weapon" }, 1 }, + { { "CUP_lmg_m249_para", "weapon" }, 1 }, + { { "CUP_lmg_M249_E2", "weapon" }, 1 }, + { { "CUP_lmg_minimi_railed", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip1", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip4", "weapon" }, 1 }, + { { "CUP_lmg_L7A2", "weapon" }, 1 }, + { { "CUP_lmg_PKM", "weapon" }, 1 }, + { { "CUP_lmg_Pecheneg", "weapon" }, 1 }, + { { "CUP_lmg_UK59", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip2", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip3", "weapon" }, 1 }, + { { "CUP_lmg_m249_SQuantoon", "weapon" }, 1 }, + { { "CUP_lmg_M60E4", "weapon" }, 1 }, + { { "CUP_lmg_Mk48_des", "weapon" }, 1 }, + { { "CUP_lmg_Mk48_wdl", "weapon" }, 1 } + }; + }; + class MachinegunAmmo_CUP + { + items[] = { + { { "CUP_200Rnd_TE4_Red_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Yellow_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_200Rnd_TE1_Red_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_Green_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_Red_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_Yellow_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Green_Tracer_556x45_L110A1", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Red_Tracer_556x45_L110A1", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Yellow_Tracer_556x45_L110A1", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_G36", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_LRT4_White_Tracer_762x51_Belt_M", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_LRT4_Red_Tracer_762x51_Belt_M", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Green_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_LRT4_762x54_PK_Tracer_Green_M", "magazine" }, 1 }, + { { "CUP_50Rnd_UK59_762x54R_Tracer", "magazine" }, 1 }, + + { { "CUP_64Rnd_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_Green_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_Red_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_White_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_Yellow_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_30Rnd_9x19_EVO", "magazine" }, 1 }, + { { "CUP_30Rnd_9x19_MP5", "magazine" }, 1 } + }; + }; + class Uniforms_Male_Civ_Vanilla + { + items[] = { + { { "U_C_Poloshirt_stripped", "item" }, 1 }, + { { "U_C_Poloshirt_blue", "item" }, 1 }, + { { "U_C_Poloshirt_burgundy", "item" }, 1 }, + { { "U_C_Poloshirt_tricolour", "item" }, 1 }, + { { "U_C_Poloshirt_salmon", "item" }, 1 }, + { { "U_C_Poloshirt_redwhite", "item" }, 1 }, + { { "U_C_Commoner1_1", "item" }, 1 }, + { { "U_C_Poor_2", "item" }, 1 }, + { { "U_C_HunterBody_grn", "item" }, 1 }, + { { "U_C_Poor_shorts_1", "item" }, 1 }, + { { "U_NikosBody", "item" }, 1 }, + { { "U_NikosAgedBody", "item" }, 1 }, + { { "U_Marshal", "item" }, 1 }, + { { "U_C_man_sport_1_F", "item" }, 1 }, + { { "U_C_man_sport_2_F", "item" }, 1 }, + { { "U_C_man_sport_3_F", "item" }, 1 }, + { { "U_C_Man_casual_1_F", "item" }, 1 }, + { { "U_C_Man_casual_2_F", "item" }, 1 }, + { { "U_C_Man_casual_3_F", "item" }, 1 }, + { { "U_C_Man_casual_4_F", "item" }, 1 }, + { { "U_C_Man_casual_5_F", "item" }, 1 }, + { { "U_C_Man_casual_6_F", "item" }, 1 }, + { { "U_C_Poor_1", "item" }, 1 }, + { { "U_C_WorkerCoveralls", "item" }, 1 }, + { { "U_C_Journalist", "item" }, 1 }, + { { "U_C_Scientist", "item" }, 1 }, + { { "U_OrestesBody", "item" }, 1 }, + { { "U_C_Commoner_shorts", "item" }, 1 }, + { { "U_C_ShirtSurfer_shorts", "item" }, 1 }, + { { "U_C_TeeSurfer_shorts_1", "item" }, 1 }, + { { "U_C_TeeSurfer_shorts_2", "item" }, 1 } + + }; + }; + class Uniforms_Male_Mil_Vanilla + { + items[] = { + { { "U_OG_Guerilla1_1", "item" }, 1 }, + { { "U_OG_Guerilla2_1", "item" }, 1 }, + { { "U_OG_Guerilla2_2", "item" }, 1 }, + { { "U_OG_Guerilla2_3", "item" }, 1 }, + { { "U_OG_Guerilla3_1", "item" }, 1 }, + { { "U_OG_Guerilla3_2", "item" }, 1 }, + { { "U_OG_leader", "item" }, 1 }, + { { "U_O_CombatUniform_ocamo", "item" }, 1 }, + { { "U_O_GhillieSuit", "item" }, 1 }, + { { "U_O_PilotCoveralls", "item" }, 1 }, + { { "U_IG_Guerilla1_1", "item" }, 1 }, + { { "U_IG_leader", "item" }, 1 }, + { { "U_IG_Guerilla2_1", "item" }, 1 }, + { { "U_IG_Guerilla2_3", "item" }, 1 }, + { { "U_IG_Guerilla2_2", "item" }, 1 }, + { { "U_IG_Guerilla3_1", "item" }, 1 }, + { { "U_IG_Guerrilla_6_1", "item" }, 1 }, + { { "U_OG_Guerrilla_6_1", "item" }, 1 }, + { { "U_I_CombatUniform", "item" }, 1 }, + { { "U_I_CombatUniform_shortsleeve", "item" }, 1 }, + { { "U_I_HeliPilotCoveralls", "item" }, 1 }, + { { "U_I_pilotCoveralls", "item" }, 1 }, + { { "U_I_OfficerUniform", "item" }, 1 }, + { { "U_I_GhillieSuit", "item" }, 1 }, + { { "U_I_CombatUniform_tshirt", "item" }, 1 }, + { { "U_O_OfficerUniform_ocamo", "item" }, 1 }, + { { "U_O_SpecopsUniform_ocamo", "item" }, 1 }, + { { "U_O_CombatUniform_oucamo", "item" }, 1 }, + { { "U_I_C_Soldier_Para_1_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_2_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_3_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_4_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_5_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_1_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_2_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_3_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_4_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_5_F", "item" }, 1 }, + { { "U_I_C_Soldier_Camo_F", "item" }, 1 }, + { { "U_O_T_Soldier_F", "item" }, 1 }, + { { "U_O_T_Officer_F", "item" }, 1 }, + { { "U_O_T_Sniper_F", "item" }, 1 }, + { { "U_RadiationSuit_M_uniform", "item" }, 1 } + }; + }; + class Uniforms_Male_WetSuit + { + items[] = { + { { "U_O_Wetsuit", "item" }, 1 }, + { { "U_I_Wetsuit", "item" }, 1 } + }; + }; + class Uniforms_Male_MarksDLC + { + items[] = { + { { "U_O_T_FullGhillie_tna_F", "item" }, 1 }, + { { "U_O_FullGhillie_lsh", "item" }, 1 }, + { { "U_O_FullGhillie_sard", "item" }, 1 }, + { { "U_O_FullGhillie_ard", "item" }, 1 }, + { { "U_I_FullGhillie_lsh", "item" }, 1 }, + { { "U_I_FullGhillie_sard", "item" }, 1 }, + { { "U_I_FullGhillie_ard", "item" }, 1 } + }; + }; + class Uniforms_Male_KartDLC + { + items[] = { + { { "U_C_Driver_1", "item" }, 1 }, + { { "U_C_Driver_2", "item" }, 1 }, + { { "U_C_Driver_3", "item" }, 1 }, + { { "U_C_Driver_4", "item" }, 1 }, + { { "U_C_Driver_1_black", "item" }, 1 }, + { { "U_C_Driver_1_blue", "item" }, 1 }, + { { "U_C_Driver_1_green", "item" }, 1 }, + { { "U_C_Driver_1_red", "item" }, 1 }, + { { "U_C_Driver_1_white", "item" }, 1 }, + { { "U_C_Driver_1_yellow", "item" }, 1 }, + { { "U_C_Driver_1_orange", "item" }, 1 }, + { { "U_C_Driver_1_red", "item" }, 1 } + }; + }; + class Uniforms_Male_IdapDLC + { + items[] = { + { { "U_C_ConstructionCoverall_Red_F", "item" }, 1 }, + { { "U_C_ConstructionCoverall_vrana_F", "item" }, 1 }, + { { "U_C_ConstructionCoverall_Black_F", "item" }, 1 }, + { { "U_C_ConstructionCoverall_Blue_F", "item" }, 1 }, + { { "U_C_Paramedic_01_F", "item" }, 1 }, + { { "U_C_Mechanic_01_F", "item" }, 1 } + }; + }; + class Uniforms_Male_ApexDLC + { + items[] = { + { { "U_O_V_Soldier_Viper_hex_F", "item" }, 1 }, + { { "U_O_V_Soldier_Viper_F", "item" }, 1 } + }; + }; + class Uniforms_Female_Civ_Epoch + { + items[] = { + { { "U_JeansBlack1_uniform", "item" }, 1 }, + { { "U_JeansBlack2_uniform", "item" }, 1 }, + { { "U_JeansBlack3_uniform", "item" }, 1 }, + { { "U_JeansBlack4_uniform", "item" }, 1 }, + { { "U_JeansBlack5_uniform", "item" }, 1 }, + { { "U_JeansBlack6_uniform", "item" }, 1 }, + { { "U_JeansBlack7_uniform", "item" }, 1 }, + { { "U_JeansBlack8_uniform", "item" }, 1 }, + { { "U_JeansBlack9_uniform", "item" }, 1 }, + { { "U_JeansBlack10_uniform", "item" }, 1 }, + { { "U_JeansBlack11_uniform", "item" }, 1 }, + { { "U_JeansBlack12_uniform", "item" }, 1 }, + { { "U_JeansBlack13_uniform", "item" }, 1 }, + { { "U_JeansBlack14_uniform", "item" }, 1 }, + { { "U_JeansBlack15_uniform", "item" }, 1 }, + { { "U_JeansBlack16_uniform", "item" }, 1 }, + { { "U_JeansBlack17_uniform", "item" }, 1 }, + { { "U_JeansBlack18_uniform", "item" }, 1 }, + { { "U_JeansBlack19_uniform", "item" }, 1 }, + { { "U_JeansBlack20_uniform", "item" }, 1 }, + { { "U_JeansBlack21_uniform", "item" }, 1 }, + { { "U_JeansArBrn1_uniform", "item" }, 1 }, + { { "U_JeansArBrn2_uniform", "item" }, 1 }, + { { "U_JeansArBrn3_uniform", "item" }, 1 }, + { { "U_JeansArBrn4_uniform", "item" }, 1 }, + { { "U_JeansArBrn5_uniform", "item" }, 1 }, + { { "U_JeansArBrn6_uniform", "item" }, 1 }, + { { "U_JeansArBrn7_uniform", "item" }, 1 }, + { { "U_JeansArBrn8_uniform", "item" }, 1 }, + { { "U_JeansArBrn9_uniform", "item" }, 1 }, + { { "U_JeansArBrn10_uniform", "item" }, 1 }, + { { "U_JeansArBrn11_uniform", "item" }, 1 }, + { { "U_JeansArBrn12_uniform", "item" }, 1 }, + { { "U_JeansArBrn13_uniform", "item" }, 1 }, + { { "U_JeansArBrn14_uniform", "item" }, 1 }, + { { "U_JeansArBrn15_uniform", "item" }, 1 }, + { { "U_JeansArBrn16_uniform", "item" }, 1 }, + { { "U_JeansArBrn17_uniform", "item" }, 1 }, + { { "U_JeansArBrn18_uniform", "item" }, 1 }, + { { "U_JeansArBrn19_uniform", "item" }, 1 }, + { { "U_JeansArBrn20_uniform", "item" }, 1 }, + { { "U_JeansArBrn21_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn1_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn2_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn3_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn4_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn5_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn6_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn7_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn8_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn9_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn10_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn11_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn12_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn13_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn14_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn15_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn16_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn17_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn18_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn19_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn20_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn21_uniform", "item" }, 1 }, + { { "U_JeansPatched1_uniform", "item" }, 1 }, + { { "U_JeansPatched2_uniform", "item" }, 1 }, + { { "U_JeansPatched3_uniform", "item" }, 1 }, + { { "U_JeansPatched4_uniform", "item" }, 1 }, + { { "U_JeansPatched5_uniform", "item" }, 1 }, + { { "U_JeansPatched6_uniform", "item" }, 1 }, + { { "U_JeansPatched7_uniform", "item" }, 1 }, + { { "U_JeansPatched8_uniform", "item" }, 1 }, + { { "U_JeansPatched9_uniform", "item" }, 1 }, + { { "U_JeansPatched10_uniform", "item" }, 1 }, + { { "U_JeansPatched11_uniform", "item" }, 1 }, + { { "U_JeansPatched12_uniform", "item" }, 1 }, + { { "U_JeansPatched13_uniform", "item" }, 1 }, + { { "U_JeansPatched14_uniform", "item" }, 1 }, + { { "U_JeansPatched15_uniform", "item" }, 1 }, + { { "U_JeansPatched16_uniform", "item" }, 1 }, + { { "U_JeansPatched17_uniform", "item" }, 1 }, + { { "U_JeansPatched18_uniform", "item" }, 1 }, + { { "U_JeansPatched19_uniform", "item" }, 1 }, + { { "U_JeansPatched20_uniform", "item" }, 1 }, + { { "U_JeansPatched21_uniform", "item" }, 1 } + }; + }; + class Uniforms_Female_WetSuit_Epoch + { + items[] = { + { { "U_Wetsuit_uniform", "item" }, 1 }, + { { "U_Wetsuit_White", "item" }, 1 }, + { { "U_Wetsuit_Blue", "item" }, 1 }, + { { "U_Wetsuit_Purp", "item" }, 1 }, + { { "U_Wetsuit_Camo", "item" }, 1 } + }; + }; + class Uniforms_Female_Mil_Epoch + { + items[] = { + { { "U_CamoRed_uniform", "item" }, 1 }, + { { "U_CamoAloha_uniform", "item" }, 1 }, + { { "U_CamoBiker_uniform", "item" }, 1 }, + { { "U_CamoBubblegum_uniform", "item" }, 1 }, + { { "U_CamoLumberjack_uniform", "item" }, 1 }, + { { "U_CamoOutback_uniform", "item" }, 1 }, + { { "U_CamoPink_uniform", "item" }, 1 }, + { { "U_CamoPinkPolka_uniform", "item" }, 1 }, + { { "U_CamoBrn_uniform", "item" }, 1 }, + { { "U_CamoBlue_uniform", "item" }, 1 }, + { { "U_Camo_uniform", "item" }, 1 }, + { { "U_ghillie1_uniform", "item" }, 1 }, + { { "U_ghillie2_uniform", "item" }, 1 }, + { { "U_ghillie3_uniform", "item" }, 1 }, + { { "U_RadiationSuit_F_uniform", "item" }, 1 } + }; + }; + class Vests_Low_Vanilla + { + items[] = { + { { "V_Press_F", "item" }, 1 }, + + { { "V_1_EPOCH", "item" }, 1 }, + { { "V_2_EPOCH", "item" }, 1 }, + { { "V_3_EPOCH", "item" }, 1 }, + { { "V_4_EPOCH", "item" }, 1 }, + { { "V_5_EPOCH", "item" }, 1 }, + { { "V_6_EPOCH", "item" }, 1 }, + { { "V_7_EPOCH", "item" }, 1 }, + { { "V_8_EPOCH", "item" }, 1 }, + { { "V_9_EPOCH", "item" }, 1 }, + { { "V_10_EPOCH", "item" }, 1 }, + { { "V_11_EPOCH", "item" }, 1 }, + { { "V_12_EPOCH", "item" }, 1 }, + { { "V_13_EPOCH", "item" }, 1 }, + { { "V_14_EPOCH", "item" }, 1 }, + { { "V_15_EPOCH", "item" }, 1 }, + { { "V_16_EPOCH", "item" }, 1 }, + { { "V_17_EPOCH", "item" }, 1 }, + { { "V_18_EPOCH", "item" }, 1 }, + { { "V_21_EPOCH", "item" }, 1 }, + { { "V_22_EPOCH", "item" }, 1 }, + { { "V_23_EPOCH", "item" }, 1 }, + { { "V_24_EPOCH", "item" }, 1 }, + { { "V_25_EPOCH", "item" }, 1 }, + { { "V_26_EPOCH", "item" }, 1 }, + { { "V_27_EPOCH", "item" }, 1 }, + { { "V_28_EPOCH", "item" }, 1 }, + { { "V_29_EPOCH", "item" }, 1 }, + { { "V_30_EPOCH", "item" }, 1 }, + { { "V_31_EPOCH", "item" }, 1 }, + { { "V_32_EPOCH", "item" }, 1 }, + { { "V_33_EPOCH", "item" }, 1 }, + { { "V_34_EPOCH", "item" }, 1 }, + { { "V_35_EPOCH", "item" }, 1 }, + { { "V_37_EPOCH", "item" }, 1 }, + { { "V_38_EPOCH", "item" }, 1 }, + { { "V_39_EPOCH", "item" }, 1 }, + { { "V_40_EPOCH", "item" }, 1 } + }; + }; + class Vests_High_Vanilla + { + items[] = { + { { "V_PlateCarrier1_tna_F", "item" }, 1 }, + { { "V_PlateCarrierSpec_tna_F", "item" }, 1 }, + { { "V_PlateCarrierSpec_blk", "item" }, 1 }, + { { "V_HarnessO_ghex_F", "item" }, 1 }, + { { "V_HarnessOGL_ghex_F", "item" }, 1 }, + { { "V_PlateCarroer2_tna_F", "item" }, 1 }, + { { "V_PlateCarrierGL_tna_F", "item" }, 1 } + }; + }; + class Vests_Rebreather_Epoch + { + items[] = { + { { "V_19_EPOCH", "item" }, 1 }, + { { "V_20_EPOCH", "item" }, 1 }, + { { "V_36_EPOCH", "item" }, 1 } + }; + }; + class Vests_ApexDLC + { + items[] = { + { { "V_TacChestrig_grn_F", "item" }, 1 }, + { { "V_TacChestrig_oli_F", "item" }, 1 }, + { { "V_TacChestrig_cbr_F", "item" }, 1 }, + { { "V_TacChestrig_grn_F", "item" }, 1 }, + { { "V_TacChestrig_grn_F", "item" }, 1 }, + { { "V_TacChestrig_grn_F", "item" }, 1 } + }; + }; + class Backpacks_Low_Base + { + items[] = { + { { "B_ViperLightHarness_blk_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_ghex_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_hex_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_khk_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_oli_F", "backpack" }, 2 }, // 260 + + { { "Assault_Pack_Epoch", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_blk_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_ghex_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_hex_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_khk_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_oli_F", "backpack" }, 1 }, // 300 + { { "Patrol_Pack_Epoch", "backpack" }, 1 }, // 300 + + { { "TK_RPG_Backpack_Epoch", "backpack" }, 1 }, // 300 + + { { "CZ_VestPouch_Epoch", "backpack" }, 3 } // 340 + }; + }; + class Backpacks_High_Base + { + items[] = { + { { "B_AssaultPack_cbr", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_dgtl", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_khk", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_mcamo", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_ocamo", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_rgr", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_sgg", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_blk", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_tna_F", "backpack" }, 5 }, // 360 + + { { "B_FieldPack_blk", "backpack" }, 4 }, // 400 + { { "B_FieldPack_cbr", "backpack" }, 4 }, // 400 + { { "B_FieldPack_khk", "backpack" }, 4 }, // 400 + { { "B_FieldPack_ocamo", "backpack" }, 4 }, // 400 + { { "B_FieldPack_oli", "backpack" }, 4 }, // 400 + { { "B_FieldPack_oucamo", "backpack" }, 4 }, // 400 + { { "civil_assault_pack_Epoch", "backpack" }, 4 }, // 400 + + { { "S_Gunbag_Epoch", "backpack" }, 4 }, // 420 + + { { "smallbackpack_red_epoch", "backpack" }, 4 }, // 460 + { { "smallbackpack_green_epoch", "backpack" }, 4 }, // 460 + { { "smallbackpack_teal_epoch", "backpack" }, 4 }, // 460 + { { "smallbackpack_pink_epoch", "backpack" }, 4 }, // 460 + + { { "B_TacticalPack_blk", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_mcamo", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_ocamo", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_oli", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_rgr", "backpack" }, 2 }, // 480 + { { "ALICE_Pack_Epoch", "backpack" }, 2 }, // 480 + + { { "US_Backpack_Epoch", "backpack" }, 2 }, // 500 + + { { "B_Kitbag_cbr", "backpack" }, 2 }, // 520 + { { "B_Kitbag_mcamo", "backpack" }, 2 }, // 520 + { { "B_Kitbag_rgr", "backpack" }, 2 }, // 520 + { { "B_Kitbag_sgg", "backpack" }, 2 }, // 520 + { { "CZ_Backpack_Epoch", "backpack" }, 1 }, // 520 + + { { "B_Carryall_cbr", "backpack" }, 1 }, // 550 + { { "B_Carryall_khk", "backpack" }, 1 }, // 550 + { { "B_Carryall_mcamo", "backpack" }, 1 }, // 550 + { { "B_Carryall_ocamo", "backpack" }, 1 }, // 550 + { { "B_Carryall_oli", "backpack" }, 1 }, // 550 + { { "B_Carryall_oucamo", "backpack" }, 1 }, // 550 + + { { "L_Gunbag_Epoch", "backpack" }, 3 }, // 580 + + { { "B_Parachute", "backpack" }, 1 } + }; + }; + class Backpacks_UAV + { + items[] = { + { { "I_UAV_01_backpack_F", "backpack" }, 1 }, + { { "C_IDAP_UAV_06_backpack_F", "backpack" }, 1 }, + { { "C_IDAP_UAV_06_antimine_backpack_F", "backpack" }, 1 }, + { { "B_UAV_06_medical_backpack_F", "backpack" }, 1 } + }; + }; + +// ########################################################################### Special Loot ########################################################################### + class Tree + { + items[] = { + { { "WoodLog_EPOCH", "magazine" }, 1 } + }; + }; + class Rock + { + items[] = { + { { "PartOre", "magazine" }, 1 }, + { { "ItemRock", "magazine" }, 2 } + }; + }; + class Cinder + { + items[] = { + { { "CinderBlocks", "magazine" }, 1 } + }; + }; + class Wreck + { + items[] = { + { { "ItemScraps", "magazine" }, 1 } + }; + }; + class Bush + { + items[] = { + { { "ItemStick", "magazine" }, 1 } + }; + }; + class Sheep_random_EPOCH + { + items[] = { + { { "SheepCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Goat_random_EPOCH + { + items[] = { + { { "GoatCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Fin_random_EPOCH + { + items[] = { + { { "DogCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Alsatian_Random_EPOCH + { + items[] = { + { { "DogCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Hen_random_EPOCH + { + items[] = { + { { "ChickenCarcass_EPOCH", "magazine" }, 1 } + }; + }; + class Rabbit_EPOCH + { + items[] = { + { { "RabbitCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class EPOCH_RyanZombie_1 + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 5 }, + { { "WhiskeyNoodle", "magazine" }, 5 }, + { { "Throw", "CfgLootTable" }, 10 }, + { { "ThrowExplosive", "CfgLootTable" }, 10 }, + { { "Medical", "CfgLootTable" }, 20 }, + { { "PistolAmmo", "CfgLootTable" }, 20 }, + { { "Pelt_EPOCH", "magazine" }, 10 } + }; + }; + class GreatWhite_F + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 9 }, + { { "ItemBriefcaseGold100oz", "magazine" }, 1 } + }; + }; + class Epoch_Sapper_F + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 6 }, + { { "WhiskeyNoodle", "magazine" }, 11 }, + { { "ItemKiloHemp", "magazine" }, 16 }, + { { "ItemSilverBar", "magazine" }, 18 }, + { { "Medical", "CfgLootTable" }, 18 }, + { { "Pelt_EPOCH", "magazine" }, 31 } + }; + }; + class Cock_random_EPOCH + { + items[] = { + { { "ChickenCarcass_EPOCH", "magazine" }, 1 } + }; + }; + class Epoch_SapperB_F + { + items[] = { + { { "ItemGoldBar", "magazine" }, 9 }, + { { "WhiskeyNoodle", "magazine" }, 13 }, + { { "ItemKiloHemp", "magazine" }, 15 }, + { { "ItemSilverBar", "magazine" }, 17 }, + { { "Medical", "CfgLootTable" }, 17 }, + { { "Pelt_EPOCH", "magazine" }, 29 } + }; + }; + class Epoch_SapperG_F + { + items[] = { + { { "SmokeShellToxic", "magazine" }, 9 }, + { { "WhiskeyNoodle", "magazine" }, 13 }, + { { "ItemKiloHemp", "magazine" }, 15 }, + { { "ItemSilverBar", "magazine" }, 17 }, + { { "Medical", "CfgLootTable" }, 17 }, + { { "Pelt_EPOCH", "magazine" }, 29 } + }; + }; + class Snake_random_EPOCH + { + items[] = { + { { "SnakeCarcass_EPOCH", "magazine" }, 1 }, + { { "Venom_EPOCH", "magazine" }, 1 } + }; + }; + class I_UAV_01_F + { + items[] = { + { { "CircuitParts", "magazine" }, 1 } + }; + }; + class Epoch_Cloak_F + { + items[] = { + { { "Gems", "CfgLootTable" }, 10 }, + { { "Throw", "CfgLootTable" }, 11 }, + { { "ThrowExplosive", "magazine" }, 12 }, + { { "MiniGrenade", "magazine" }, 20 }, + { { "Medical", "CfgLootTable" }, 21 }, + { { "Venom_EPOCH", "magazine" }, 26 } + }; + }; + class SeaFood + { + items[] = { + { { "ItemTrout", "magazine" }, 3 }, + { { "ItemSeaBass", "magazine" }, 2 }, + { { "ItemTuna", "magazine" }, 1 } + }; + }; + class Satellite + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 5 }, + { { "CircuitParts", "magazine" }, 1 }, + { { "Gems", "CfgLootTable" }, 3 }, + { { "ItemScraps", "magazine" }, 1 }, + { { "ItemCorrugated", "magazine" }, 2 }, + { { "ItemSolar", "magazine" }, 1 }, + { { "ItemBattery", "magazine" }, 1 }, + { { "ItemCables", "magazine" }, 1 } + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/CfgLootTable_MAD.h b/Server/@epochhive/addons/epoch_server_settings/configs/CfgLootTable_MAD.h new file mode 100644 index 0000000..d80e7db --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/CfgLootTable_MAD.h @@ -0,0 +1,2044 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Server side loot table configs + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/CfgLootTable.h +*/ +class CfgLootTable_MAD +{ +// DLC/Mod Related from here + class Scopes + { + items[] = { + { { "Scopes_Vanilla", "CfgLootTable" }, 5 }, + { { "Scopes_MarkDLC", "CfgLootTable" }, 1 }, + { { "Scopes_CUP", "CfgLootTable" }, 0 } + }; + }; + class Bipods + { + items[] = { + { { "Bipods_Vanilla", "CfgLootTable" }, 5 }, + { { "Bipods_CUP", "CfgLootTable" }, 0 } + }; + }; + class Muzzles + { + items[] = { + { { "Muzzles_Vanilla", "CfgLootTable" }, 15 }, + { { "Muzzles_MarkDLC", "CfgLootTable" }, 8 }, + { { "Muzzles_CUP", "CfgLootTable" }, 0 }, + { { "Muzzles_MultiGun", "CfgLootTable" }, 1 } + }; + }; + class WpnFlashLights + { + items[] = { + { { "WpnFlashLights_Vanilla", "CfgLootTable" }, 5 }, + { { "WpnFlashLights_CUP", "CfgLootTable" }, 0 }, + { { "SniperCamo_CUP", "CfgLootTable" }, 0 } + }; + }; + class Pistols + { + items[] = { + { { "Pistols_Vanilla", "CfgLootTable" }, 20 }, + { { "NL_Pistols", "CfgLootTable" }, 2 }, + { { "Pistols_CUP", "CfgLootTable" }, 0 }, + { { "Pistols_MAD", "CfgLootTable" }, 2 } + }; + }; + class PistolAmmo + { + items[] = { + { { "PistolAmmo_Vanilla", "CfgLootTable" }, 15 }, + { { "NL_PistolAmmo", "CfgLootTable" }, 3 }, + { { "PistolAmmo_CUP", "CfgLootTable" }, 0 } + }; + }; + class Rifle + { + items[] = { + { { "Rifle_Vanilla", "CfgLootTable" }, 10 }, + { { "A2_Rifle", "CfgLootTable" }, 10 }, + { { "NL_Rifle", "CfgLootTable" }, 2 }, + { { "Rifle_CUP", "CfgLootTable" }, 0 }, + { { "Rifle_MAD", "CfgLootTable" }, 5 } + }; + }; + class RifleAmmo + { + items[] = { + { { "RifleAmmo_Vanilla", "CfgLootTable" }, 20 }, + { { "NL_RifleAmmo", "CfgLootTable" }, 6 }, + { { "A2_RifleAmmo", "CfgLootTable" }, 20 }, + { { "RifleAmmo_CUP", "CfgLootTable" }, 0 }, + { { "RifleAmmo_MAD", "CfgLootTable" }, 5 } + }; + }; + class SniperRifle + { + items[] = { + { { "SniperRifle_Vanilla", "CfgLootTable" }, 5 }, + { { "SniperRifleMarkDLC", "CfgLootTable" }, 1 }, + { { "SniperRifle_CUP", "CfgLootTable" }, 0 } + }; + }; + class SniperRifleAmmo + { + items[] = { + { { "SniperRifleAmmo_Vanilla", "CfgLootTable" }, 5 }, + { { "SniperRifleAmmoMarkDLC", "CfgLootTable" }, 1 }, + { { "SniperRifleAmmo_CUP", "CfgLootTable" }, 0 } + }; + }; + class Machinegun + { + items[] = { + { { "Machinegun_Vanilla", "CfgLootTable" }, 5 }, + { { "MachinegunMarkDLC", "CfgLootTable" }, 1 }, + { { "Machinegun_CUP", "CfgLootTable" }, 0 } + }; + }; + class MachinegunAmmo + { + items[] = { + { { "MachinegunAmmo_Vanilla", "CfgLootTable" }, 5 }, + { { "MachinegunAmmoMarkDLC", "CfgLootTable" }, 1 }, + { { "MachinegunAmmo_CUP", "CfgLootTable" }, 0 } + }; + }; + class Uniforms_Male_Civ + { + items[] = { + { { "Uniforms_Male_Civ_Vanilla", "CfgLootTable" }, 8 }, + { { "Uniforms_Male_KartDLC", "CfgLootTable" }, 1 }, + { { "Uniforms_Male_IdapDLC", "CfgLootTable" }, 1 } + }; + }; + class Uniforms_Male_Mil + { + items[] = { + { { "Uniforms_Male_Mil_Vanilla", "CfgLootTable" }, 8 }, + { { "Uniforms_Male_WetSuit", "CfgLootTable" }, 1 }, + { { "Uniforms_Male_MarksDLC", "CfgLootTable" }, 1 }, + { { "Uniforms_Male_ApexDLC", "CfgLootTable" }, 1 } + }; + }; + class Uniforms_Female_Civ + { + items[] = { + { { "Uniforms_Female_Civ_Epoch", "CfgLootTable" }, 1 } + }; + }; + class Uniforms_Female_Mil + { + items[] = { + { { "Uniforms_Female_Mil_Epoch", "CfgLootTable" }, 8 }, + { { "Uniforms_Female_WetSuit_Epoch", "CfgLootTable" }, 1 } + }; + }; + class Vests_Low + { + items[] = { + { { "Vests_Low_Vanilla", "CfgLootTable" }, 1 } + }; + }; + class Vests_High + { + items[] = { + { { "Vests_High_Vanilla", "CfgLootTable" }, 8 }, + { { "Vests_Rebreather_Epoch", "CfgLootTable" }, 1 }, + { { "Vests_ApexDLC", "CfgLootTable" }, 1 } + }; + }; + class BackPacks_Low + { + items[] = { + { { "Backpacks_Low_Base", "CfgLootTable" }, 1 } + }; + }; + class BackPacks_High + { + items[] = { + { { "Backpacks_High_Base", "CfgLootTable" }, 10 }, + { { "Backpacks_UAV", "CfgLootTable" }, 1 } + }; + }; +// DLC/Mod Related end + + class HeadgearNoArmor + { + items[] = { + { { "H_11_EPOCH", "item" }, 1 }, + { { "H_28_EPOCH", "item" }, 1 }, + { { "H_34_EPOCH", "item" }, 1 }, + { { "H_39_EPOCH", "item" }, 1 }, + { { "H_40_EPOCH", "item" }, 1 }, + { { "H_41_EPOCH", "item" }, 1 }, + { { "H_42_EPOCH", "item" }, 1 }, + { { "H_43_EPOCH", "item" }, 1 }, + { { "H_44_EPOCH", "item" }, 1 }, + { { "H_45_EPOCH", "item" }, 1 }, + { { "H_46_EPOCH", "item" }, 1 }, + { { "H_47_EPOCH", "item" }, 1 }, + { { "H_48_EPOCH", "item" }, 1 }, + { { "H_49_EPOCH", "item" }, 1 }, + { { "H_50_EPOCH", "item" }, 1 }, + { { "H_51_EPOCH", "item" }, 1 }, + { { "H_52_EPOCH", "item" }, 1 }, + { { "H_53_EPOCH", "item" }, 1 }, + { { "H_54_EPOCH", "item" }, 1 }, + { { "H_55_EPOCH", "item" }, 1 }, + { { "H_56_EPOCH", "item" }, 1 }, + { { "H_57_EPOCH", "item" }, 1 }, + { { "H_58_EPOCH", "item" }, 1 }, + { { "H_59_EPOCH", "item" }, 1 }, + { { "H_60_EPOCH", "item" }, 1 }, + { { "H_61_EPOCH", "item" }, 1 }, + { { "H_62_EPOCH", "item" }, 1 }, + { { "H_63_EPOCH", "item" }, 1 }, + { { "H_64_EPOCH", "item" }, 1 }, + { { "H_65_EPOCH", "item" }, 1 }, + { { "H_66_EPOCH", "item" }, 1 }, + { { "H_67_EPOCH", "item" }, 1 }, + { { "H_68_EPOCH", "item" }, 1 }, + { { "H_69_EPOCH", "item" }, 1 }, + { { "H_70_EPOCH", "item" }, 1 }, + { { "H_71_EPOCH", "item" }, 1 }, + { { "H_72_EPOCH", "item" }, 1 }, + { { "H_73_EPOCH", "item" }, 1 }, + { { "H_74_EPOCH", "item" }, 1 }, + { { "H_75_EPOCH", "item" }, 1 }, + { { "H_76_EPOCH", "item" }, 1 }, + { { "H_77_EPOCH", "item" }, 1 }, + { { "H_78_EPOCH", "item" }, 1 }, + { { "H_79_EPOCH", "item" }, 1 }, + { { "H_80_EPOCH", "item" }, 1 }, + { { "H_81_EPOCH", "item" }, 1 }, + { { "H_82_EPOCH", "item" }, 1 }, + { { "H_83_EPOCH", "item" }, 1 }, + { { "H_84_EPOCH", "item" }, 1 }, + { { "H_85_EPOCH", "item" }, 1 }, + { { "H_86_EPOCH", "item" }, 1 }, + { { "H_87_EPOCH", "item" }, 1 }, + { { "H_88_EPOCH", "item" }, 1 }, + { { "H_89_EPOCH", "item" }, 1 }, + { { "H_90_EPOCH", "item" }, 1 }, + { { "H_91_EPOCH", "item" }, 1 }, + { { "H_92_EPOCH", "item" }, 1 }, + { { "H_104_EPOCH", "item" }, 1 }, + { { "H_105_EPOCH", "item" }, 1 }, + { { "thor_mask_epoch", "item" }, 1, }, + { { "iron_mask_epoch", "item" }, 1, }, + { { "wolf_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "pkin_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "clown_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "hockey_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "plague_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "ghostface_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "skull_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "witch_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "radiation_mask_epoch", "item" }, 1 } + }; + }; + class HeadgearArmored + { + items[] = { + { { "H_1_EPOCH", "item" }, 2 }, + { { "H_2_EPOCH", "item" }, 2 }, + { { "H_3_EPOCH", "item" }, 2 }, + { { "H_4_EPOCH", "item" }, 2 }, + { { "H_5_EPOCH", "item" }, 2 }, + { { "H_6_EPOCH", "item" }, 2 }, + { { "H_7_EPOCH", "item" }, 2 }, + { { "H_8_EPOCH", "item" }, 2 }, + { { "H_9_EPOCH", "item" }, 2 }, + { { "H_10_EPOCH", "item" }, 2 }, + { { "H_12_EPOCH", "item" }, 2 }, + { { "H_13_EPOCH", "item" }, 2 }, + { { "H_14_EPOCH", "item" }, 2 }, + { { "H_15_EPOCH", "item" }, 2 }, + { { "H_16_EPOCH", "item" }, 2 }, + { { "H_17_EPOCH", "item" }, 2 }, + { { "H_18_EPOCH", "item" }, 2 }, + { { "H_19_EPOCH", "item" }, 2 }, + { { "H_20_EPOCH", "item" }, 2 }, + { { "H_21_EPOCH", "item" }, 2 }, + { { "H_22_EPOCH", "item" }, 2 }, + { { "H_23_EPOCH", "item" }, 2 }, + { { "H_24_EPOCH", "item" }, 2 }, + { { "H_25_EPOCH", "item" }, 2 }, + { { "H_26_EPOCH", "item" }, 2 }, + { { "H_27_EPOCH", "item" }, 2 }, + { { "H_29_EPOCH", "item" }, 2 }, + { { "H_30_EPOCH", "item" }, 2 }, + { { "H_31_EPOCH", "item" }, 2 }, + { { "H_32_EPOCH", "item" }, 2 }, + { { "H_33_EPOCH", "item" }, 2 }, + { { "H_35_EPOCH", "item" }, 2 }, + { { "H_36_EPOCH", "item" }, 2 }, + { { "H_37_EPOCH", "item" }, 2 }, + { { "H_38_EPOCH", "item" }, 2 }, + { { "H_93_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_94_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_95_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_96_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_97_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_98_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_99_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_100_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_101_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_102_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_103_EPOCH", "item" }, 1 } // Race Hemlet + }; + }; + class Primitive + { + items[] = { + { { "ItemRock", "magazine" }, 5 }, + { { "ItemRope", "magazine" }, 2 }, + { { "ItemStick", "magazine" }, 5 }, + { { "ItemScraps", "magazine" }, 1 }, + { { "ItemCanvas", "magazine" }, 1 }, + { { "ItemBurlap", "magazine" }, 1 } + }; + }; + class BuildingItems + { + items[] = { + { { "ItemMixOil", "magazine" }, 4 }, + { { "CircuitParts", "magazine" }, 5 }, + { { "CinderBlocks", "magazine" }, 5 }, + { { "MortarBucket", "magazine" }, 15 }, + { { "ItemCorrugated", "magazine" }, 10 }, + { { "ItemCorrugatedLg", "magazine" }, 2 }, + { { "ItemBulb", "magazine" }, 2 }, + { { "ItemSolar", "magazine" }, 2 }, + { { "ItemBattery", "magazine" }, 3 }, + { { "ItemCables", "magazine" }, 3 }, + { { "ItemPipe", "magazine" }, 2 }, + { { "ItemBarrelE", "magazine" }, 1 }, + { { "jerrycan_epoch", "magazine" }, 1 }, + { { "jerrycanE_epoch", "magazine" }, 1 }, + { { "JackKit", "magazine" }, 0 } + }; + }; + class BuildingKits + { + items[] = { + { { "KitPlotPole", "magazine" }, 5 }, + { { "KitSolarGen", "magazine" }, 2 }, + + { { "KitStudWall", "magazine" }, 13 }, + { { "KitCinderWall", "magazine" }, 5 }, + + { { "KitWoodQuarterFloor", "magazine" }, 2 }, + { { "KitWoodHalfFloor", "magazine" }, 2 }, + { { "KitWoodFloor", "magazine" }, 8 }, + + { { "KitWoodStairs", "magazine" }, 9 }, + { { "KitWoodTower", "magazine" }, 5 }, + { { "KitWoodRamp", "magazine" }, 5 }, + { { "KitTankTrap", "magazine" }, 2 }, + { { "KitHesco3", "magazine" }, 1 }, + { { "KitWoodLadder", "magazine" }, 5 }, + { { "KitFirePlace", "magazine" }, 8 }, + { { "KitFoundation", "magazine" }, 5 }, + { { "KitWoodFoundation", "magazine" }, 14 } + }; + }; + class Storages + { + items[] = { + { { "KitWorkbench", "magazine" }, 25 }, + { { "KitShelf", "magazine" }, 20 }, + { { "KitTiPi", "magazine" }, 15 }, + { { "KitTentA", "magazine" }, 10 }, + { { "KitTentDome", "magazine" }, 10 }, + { { "ItemLockbox", "magazine" }, 10 }, + { { "ItemSafe", "magazine" }, 6 }, +// { { "ItemSafe_s", "magazine" }, 4 }, // Variant with less Load than the normal Safe + { { "ItemGunSafe", "magazine" }, 4 } + }; + }; + class Equipment + { + items[] = { + { { "ItemWatch", "item" }, 30 }, + { { "ItemCompass", "item" }, 20 }, + { { "Binocular", "item" }, 10 }, + { { "ItemGPS", "item" }, 9 }, + { { "B_UavTerminal", "item" }, 5 }, + { { "NVG_EPOCH", "item" }, 5 }, + { { "Rangefinder", "weapon" }, 2 }, + { { "EpochRadio0", "item" }, 2 }, + { { "EpochRadio1", "item" }, 2 }, + { { "EpochRadio2", "item" }, 2 }, + { { "EpochRadio3", "item" }, 2 }, + { { "EpochRadio4", "item" }, 2 }, + { { "EpochRadio5", "item" }, 1 }, + { { "EpochRadio6", "item" }, 1 }, + { { "EpochRadio7", "item" }, 1 }, + { { "EpochRadio8", "item" }, 1 }, + { { "EpochRadio9", "item" }, 1 }, + { { "ItemGeigerCounter_EPOCH", "item" }, 1 } + }; + }; + class Tools + { + items[] = { + { { "Hatchet", "weapon" }, 40 }, + { { "MeleeSledge", "weapon" }, 20 }, + { { "ChainSaw", "weapon" }, 10 }, + { { "Plunger", "weapon" }, 4 }, + { { "MeleeSword", "weapon" }, 2 }, + { { "Power_Sword", "weapon" }, 1 }, + { { "MeleeRod", "weapon" }, 2 }, + { { "lighter_epoch", "magazine" }, 1 }, + { { "SmeltingTools_EPOCH", "magazine" }, 10 }, + { { "ItemFireExtinguisher", "magazine" }, 1 } + }; + }; + class Repairs + { + items[] = { + { { "VehicleRepair", "magazine" }, 30 }, + { { "SpareTire", "magazine" }, 10 }, + { { "EngineParts", "magazine" }, 7 }, + { { "EngineBlock", "magazine" }, 3 }, + { { "ItemGlass", "magazine" }, 3 }, + { { "ItemDuctTape", "magazine" }, 10 }, + { { "FuelTank", "magazine" }, 3 }, + { { "ItemRotor", "magazine" }, 3 } + }; + }; + class VehicleDocs + { + items[] = { + { { "ItemDocument", "magazine" }, 20 }, + { { "ItemVehDoc1", "magazine" }, 20 }, + { { "ItemVehDoc2", "magazine" }, 15 }, + { { "ItemVehDoc3", "magazine" }, 5 }, + { { "ItemVehDoc4", "magazine" }, 2 } + }; + }; + class Seeds + { + items[] = { + { { "ItemSeedBag", "magazine" }, 10 }, + { { "SeedPacket_Hemp", "magazine" }, 1 }, + { { "SeedPacket_GoldenSeal", "magazine" }, 1 }, + { { "SeedPacket_Poppy", "magazine" }, 1 }, + { { "SeedPacket_Pumpkin", "magazine" }, 2 }, + { { "SeedPacket_Sunflower", "magazine" }, 2 } + }; + }; + class Drink + { + items[] = { + { { "ItemCanteen_Empty", "magazine" }, 5 }, + { { "ItemCanteen_Dirty", "magazine" }, 5 }, + { { "ItemCanteen_Clean", "magazine" }, 1 }, + { { "ItemBottlePlastic_Empty", "magazine" }, 5 }, + { { "ItemBottlePlastic_Dirty", "magazine" }, 5 }, + { { "ItemBottlePlastic_Clean", "magazine" }, 1 }, + { { "WhiskeyNoodle", "magazine" }, 5 }, + { { "ItemSodaOrangeSherbet", "magazine" }, 13 }, + { { "ItemSodaAlpineDude", "magazine" }, 6 }, + { { "ItemSodaPurple", "magazine" }, 13 }, + { { "ItemSodaMocha", "magazine" }, 12 }, + { { "ItemSodaBurst", "magazine" }, 15 }, + { { "ItemSodaRbull", "magazine" }, 13 }, + { { "FoodWalkNSons", "magazine" }, 13 }, + { { "ItemSodaEmpty", "magazine" }, 11 } + }; + }; + class Food + { + items[] = { + { { "ItemCoolerE", "magazine" }, 3 }, + { { "bluburger_epoch", "magazine" }, 4 }, + { { "redburger_epoch", "magazine" }, 4 }, + { { "gyro_wrap_epoch", "magazine" }, 4 }, + { { "icecream_epoch", "magazine" }, 3 }, + { { "ItemPowderMilk", "magazine" }, 3 }, + { { "ItemRicebox", "magazine" }, 3 }, + { { "ItemCereals", "magazine" }, 3 }, + { { "ItemVitamins", "magazine" }, 3 }, + { { "honey_epoch", "magazine" }, 5 }, + { { "emptyjar_epoch", "magazine" }, 13 }, + { { "water_epoch", "magazine" }, 3 }, + { { "clean_water_epoch", "magazine" }, 1 }, + { { "FoodBioMeat", "magazine" }, 11 }, + { { "sardines_epoch", "magazine" }, 11 }, + { { "meatballs_epoch", "magazine" }, 13 }, + { { "scam_epoch", "magazine" }, 14 }, + { { "sweetcorn_epoch", "magazine" }, 14 }, + { { "FoodSnooter", "magazine" }, 5 }, + { { "krypto_candy_epoch", "magazine" }, 4 }, + { { "TacticalBacon", "magazine" }, 5 }, + { { "FoodMeeps", "magazine" }, 1 }, + { { "ItemEmptyTin", "magazine" }, 5 }, + { { "ItemBakedBeans", "magazine" }, 3 }, + { { "HotAxeSauce_epoch", "magazine" }, 1 } + }; + }; + class Medical + { + items[] = { + { { "ItemDefibrillator", "magazine" }, 1 }, + { { "FAK", "magazine" }, 50 }, + { { "Soap_Epoch", "magazine" }, 3 }, + { { "atropine_epoch", "magazine" }, 6 }, + { { "adrenaline_epoch", "magazine" }, 5 }, + { { "morphine_epoch", "magazine" }, 3 }, + { { "caffeinepills_epoch", "magazine" }, 10 }, + { { "orlistat_epoch", "magazine" }, 5 }, + { { "nanite_cream_epoch", "magazine" }, 3 }, + { { "nanite_gun_epoch", "magazine" }, 1 }, + { { "nanite_pills_epoch", "magazine" }, 5 }, + { { "iodide_pills_epoch", "magazine" }, 5 }, + { { "ItemWaterPurificationTablets", "magazine" }, 5 }, + { { "HeatPack", "magazine" }, 1 }, + { { "ColdPack", "magazine" }, 1 }, + { { "Towelette", "magazine" }, 5 } + }; + }; + class PaintCans + { + items[] = { + { { "PaintCanClear", "magazine" }, 1 }, + { { "PaintCanBlk", "magazine" }, 1 }, + { { "PaintCanBlu", "magazine" }, 1 }, + { { "PaintCanBrn", "magazine" }, 1 }, + { { "PaintCanGrn", "magazine" }, 1 }, + { { "PaintCanOra", "magazine" }, 1 }, + { { "PaintCanPur", "magazine" }, 1 }, + { { "PaintCanRed", "magazine" }, 1 }, + { { "PaintCanTeal", "magazine" }, 1 }, + { { "PaintCanYel", "magazine" }, 1 } + }; + }; + class MetalBars + { + items[] = { + { { "ItemGoldBar10oz", "magazine" }, 1 }, + { { "ItemGoldBar", "magazine" }, 9 }, + { { "ItemSilverBar", "magazine" }, 20 }, + { { "ItemCopperBar", "magazine" }, 20 }, + { { "ItemAluminumBar", "magazine" }, 20 }, + { { "ItemTinBar", "magazine" }, 30 } + }; + }; + class Gems + { + items[] = { + { { "ItemJade", "magazine" }, 5 }, + { { "ItemRuby", "magazine" }, 8 }, + { { "ItemSapphire", "magazine" }, 9 }, + { { "ItemTopaz", "magazine" }, 10 }, + { { "ItemOnyx", "magazine" }, 10 }, + { { "ItemAmethyst", "magazine" }, 10 }, + { { "ItemEmerald", "magazine" }, 10 }, + { { "ItemCitrine", "magazine" }, 10 }, + { { "ItemGarnet", "magazine" }, 13 }, + { { "ItemQuartz", "magazine" }, 15 } + }; + }; + class Ore + { + items[] = { + { { "PartOreGold", "magazine" }, 20 }, + { { "PartOreSilver", "magazine" }, 30 }, + { { "PartOre", "magazine" }, 35 } + }; + }; + class Throw + { + items[] = { + { { "SmokeShell", "magazine" }, 1 }, + { { "SmokeShellYellow", "magazine" }, 1 }, + { { "SmokeShellGreen", "magazine" }, 1 }, + { { "SmokeShellToxic", "magazine" }, 1 }, + { { "SmokeShellRed", "magazine" }, 1 }, + { { "SmokeShellPurple", "magazine" }, 1 }, + { { "SmokeShellOrange", "magazine" }, 1 }, + { { "SmokeShellBlue", "magazine" }, 1 }, + { { "Chemlight_green", "magazine" }, 1 }, + { { "Chemlight_red", "magazine" }, 1 }, + { { "Chemlight_yellow", "magazine" }, 1 }, + { { "Chemlight_blue", "magazine" }, 1 } + }; + }; + class ThrowExplosive + { + items[] = { + { { "HandGrenade", "magazine" }, 25 }, + { { "MiniGrenade", "magazine" }, 25 } + }; + }; + class HighExplosives + { + items[] = { + { { "SatchelCharge_Remote_Mag", "magazine" }, 15 }, + { { "ATMine_Range_Mag", "magazine" }, 5 }, + { { "SLAMDirectionalMine_Wire_Mag", "magazine" }, 3 }, + { { "DemoCharge_Remote_Mag", "magazine" }, 6 }, + { { "ClaymoreDirectionalMine_Remote_Mag", "magazine" }, 10 }, + { { "APERSBoundingMine_Range_Mag", "magazine" }, 21 }, + { { "APERSTripMine_Wire_Mag", "magazine" }, 20 }, + { { "APERSMine_Range_Mag", "magazine" }, 20 } + }; + }; + class ShellFlares + { + items[] = { + { { "3Rnd_UGL_FlareWhite_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareGreen_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareRed_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareYellow_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareCIR_F", "magazine" }, 1 }, + { { "UGL_FlareWhite_F", "magazine" }, 1 }, + { { "UGL_FlareGreen_F", "magazine" }, 1 }, + { { "UGL_FlareRed_F", "magazine" }, 1 }, + { { "UGL_FlareYellow_F", "magazine" }, 1 }, + { { "UGL_FlareCIR_F", "magazine" }, 1 } + }; + }; + class ShellSmokes + { + items[] = { + { { "1Rnd_Smoke_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeRed_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeGreen_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeYellow_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokePurple_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeBlue_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeOrange_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_Smoke_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeRed_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeGreen_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeYellow_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokePurple_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeBlue_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeOrange_Grenade_shell", "magazine" }, 1 } + }; + }; + class ShellExplosives + { + items[] = { + { { "1Rnd_HE_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_HE_Grenade_shell", "magazine" }, 1 } + }; + }; + +// ########################################################################### Base Classes ########################################################################### + + class Scopes_Vanilla + { + items[] = { + { { "optic_NVS", "item" }, 1 }, + { { "optic_tws", "item" }, 1 }, + { { "optic_tws_mg", "item" }, 1 }, + { { "optic_SOS", "item" }, 2 }, + { { "optic_LRPS", "item" }, 2 }, + { { "optic_DMS", "item" }, 3 }, + { { "optic_Arco", "item" }, 4 }, + { { "optic_Hamr", "item" }, 5 }, + { { "Elcan_epoch", "item" }, 5 }, + { { "Elcan_reflex_epoch", "item" }, 5 }, + { { "optic_MRCO", "item" }, 6 }, + { { "optic_Holosight", "item" }, 6 }, + { { "optic_Holosight_smg", "item" }, 6 }, + { { "optic_Aco", "item" }, 7 }, + { { "optic_ACO_grn", "item" }, 7 }, + { { "optic_Aco_smg", "item" }, 7 }, + { { "optic_ACO_grn_smg", "item" }, 8 }, + { { "optic_Yorris", "item" }, 10 }, + { { "optic_MRD", "item" }, 10 } + }; + }; + class Scopes_MarkDLC + { + items[] = { + { { "optic_AMS", "item" }, 2 }, + { { "optic_AMS_khk", "item" }, 1 }, + { { "optic_AMS_snd", "item" }, 1 }, + { { "optic_KHS_blk", "item" }, 1 }, + { { "optic_KHS_hex", "item" }, 1 }, + { { "optic_KHS_old", "item" }, 2 }, + { { "optic_KHS_tan", "item" }, 1 } + }; + }; + class Scopes_CUP + { + items[] = { + { { "CUP_optic_PSO_1", "item" }, 1 }, + { { "CUP_optic_PSO_3", "item" }, 1 }, + { { "CUP_optic_Kobra", "item" }, 1 }, + { { "CUP_optic_GOSHAWK", "item" }, 1 }, + { { "CUP_optic_NSPU", "item" }, 1 }, + { { "CUP_optic_PechenegScope", "item" }, 1 }, + { { "CUP_optic_SB_3_12x50_PMII", "item" }, 1 }, + { { "CUP_optic_AN_PAS_13c2", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4", "item" }, 1 }, + { { "CUP_optic_HoloBlack", "item" }, 1 }, + { { "CUP_optic_HoloWdl", "item" }, 1 }, + { { "CUP_optic_HoloDesert", "item" }, 1 }, + { { "CUP_optic_Eotech533", "item" }, 1 }, + { { "CUP_optic_Eotech533Grey", "item" }, 1 }, + { { "CUP_optic_CompM4", "item" }, 1 }, + { { "CUP_optic_SUSAT", "item" }, 1 }, + { { "CUP_optic_ACOG", "item" }, 1 }, + { { "CUP_optic_CWS", "item" }, 1 }, + { { "CUP_optic_Leupold_VX3", "item" }, 1 }, + { { "CUP_optic_AN_PVS_10", "item" }, 1 }, + { { "CUP_optic_CompM2_Black", "item" }, 1 }, + { { "CUP_optic_CompM2_Woodland", "item" }, 1 }, + { { "CUP_optic_CompM2_Woodland2", "item" }, 1 }, + { { "CUP_optic_CompM2_Desert", "item" }, 1 }, + { { "CUP_optic_RCO", "item" }, 1 }, + { { "CUP_optic_RCO_desert", "item" }, 1 }, + { { "CUP_optic_LeupoldM3LR", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_10x40_LRT_Desert", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_10x40_LRT_Woodland", "item" }, 1 }, + { { "CUP_optic_ElcanM145", "item" }, 1 }, + { { "CUP_optic_AN_PAS_13c1", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_CQ_T", "item" }, 1 }, + { { "CUP_optic_ELCAN_SpecterDR", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_MRT_tan", "item" }, 1 }, + { { "CUP_optic_SB_11_4x20_PM", "item" }, 1 }, + { { "CUP_optic_ZDDot", "item" }, 1 }, + { { "CUP_optic_MRad", "item" }, 1 }, + { { "CUP_optic_TrijiconRx01_desert", "item" }, 1 }, + { { "CUP_optic_TrijiconRx01_black", "item" }, 1 }, + { { "CUP_optic_AN_PVS_4", "item" }, 1 } + }; + }; + class Bipods_Vanilla + { + items[] = { + { { "bipod_01_F_snd", "item" }, 1 }, + { { "bipod_01_F_blk", "item" }, 1 }, + { { "bipod_01_F_mtp", "item" }, 1 }, + { { "bipod_02_F_blk", "item" }, 1 }, + { { "bipod_02_F_tan", "item" }, 1 }, + { { "bipod_02_F_hex", "item" }, 1 }, + { { "bipod_03_F_blk", "item" }, 1 }, + { { "bipod_03_F_oli", "item" }, 1 } + }; + }; + class Bipods_CUP + { + items[] = { + { { "CUP_bipod_Harris_1A2_L", "item" }, 1 }, + { { "CUP_bipod_VLTOR_Modpod", "item" }, 1 } + }; + }; + class Muzzles_Vanilla + { + items[] = { + { { "muzzle_sr25S_epoch", "item" }, 1 }, + { { "muzzle_snds_H", "item" }, 1 }, + { { "muzzle_snds_M", "item" }, 1 }, + { { "muzzle_snds_L", "item" }, 1 }, + { { "muzzle_snds_B", "item" }, 1 }, + { { "muzzle_snds_H_MG", "item" }, 1 }, + { { "muzzle_snds_acp", "item" }, 1 }, + { { "Muzzles_MultiGun", "CfgLootTable" }, 1 } + }; + }; + class Muzzles_MarkDLC + { + items[] = { + { { "muzzle_snds_570", "item" }, 1 }, + { { "muzzle_snds_338_black", "item" }, 1 }, + { { "muzzle_snds_338_green", "item" }, 1 }, + { { "muzzle_snds_338_sand", "item" }, 1 }, + { { "muzzle_snds_93mmg", "item" }, 1 }, + { { "muzzle_snds_93mmg_tan", "item" }, 1 } + }; + }; + class Muzzles_CUP + { + items[] = { + { { "CUP_muzzle_snds_M110", "item" }, 1 }, + { { "CUP_muzzle_snds_M14", "item" }, 1 }, + { { "CUP_muzzle_PBS4", "item" }, 1 }, + { { "CUP_muzzle_PB6P9", "item" }, 1 }, + { { "CUP_muzzle_Bizon", "item" }, 1 }, + { { "CUP_muzzle_snds_M9", "item" }, 1 }, + { { "CUP_muzzle_snds_MicroUzi", "item" }, 1 }, + { { "CUP_muzzle_snds_AWM", "item" }, 1 }, + { { "CUP_muzzle_snds_G36_black", "item" }, 1 }, + { { "CUP_muzzle_snds_G36_desert", "item" }, 1 }, + { { "CUP_muzzle_snds_L85", "item" }, 1 }, + { { "CUP_muzzle_snds_M16_camo", "item" }, 1 }, + { { "CUP_muzzle_snds_M16", "item" }, 1 }, + { { "CUP_muzzle_snds_SCAR_L", "item" }, 1 }, + { { "CUP_muzzle_mfsup_SCAR_L", "item" }, 1 }, + { { "CUP_muzzle_snds_SCAR_H", "item" }, 1 }, + { { "CUP_muzzle_mfsup_SCAR_H", "item" }, 1 }, + { { "CUP_muzzle_snds_XM8", "item" }, 1 } + }; + }; + class Muzzles_MultiGun + { + items[] = { + { { "Heal_EPOCH", "item" }, 1 }, + { { "Defib_EPOCH", "item" }, 1 }, + { { "Repair_EPOCH", "item" }, 1 } + }; + }; + class WpnFlashLights_Vanilla + { + items[] = { + { { "acc_flashlight", "item" }, 1 }, + { { "acc_flashlight_pistol", "item" }, 1 }, + { { "acc_pointer_IR", "item" }, 1 } + }; + }; + class WpnFlashLights_CUP + { + items[] = { + { { "CUP_acc_Glock17_Flashlight", "item" }, 1 }, + { { "CUP_acc_ANPEQ_15", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2", "item" }, 1 }, + { { "CUP_acc_Flashlight", "item" }, 1 }, + { { "CUP_acc_Flashlight_wdl", "item" }, 1 }, + { { "CUP_acc_Flashlight_desert", "item" }, 1 }, + { { "CUP_acc_XM8_light_module", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2_camo", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2_desert", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2_grey", "item" }, 1 }, + { { "CUP_acc_CZ_M3X", "item" }, 1 } + }; + }; + class SniperCamo_CUP + { + items[] = { + { { "CUP_Mxx_camo", "item" }, 1 }, + { { "CUP_Mxx_camo_half", "item" }, 1 }, + { { "CUP_SVD_camo_g", "item" }, 1 }, + { { "CUP_SVD_camo_g_half", "item" }, 1 }, + { { "CUP_SVD_camo_d", "item" }, 1 }, + { { "CUP_SVD_camo_d_half", "item" }, 1 } + + }; + }; + class Pistols_Vanilla + { + items[] = { + { { "Hgun_Pistol_Signal_F", "weapon" }, 4 }, + { { "MultiGun", "weapon" }, 5 }, + { { "hgun_Pistol_heavy_01_F", "weapon" }, 9 }, + { { "hgun_P07_F", "weapon" }, 10 }, + { { "hgun_Rook40_F", "weapon" }, 11 }, + { { "hgun_Pistol_heavy_02_F", "weapon" }, 13 }, + { { "1911_pistol_epoch", "weapon" }, 14 }, + { { "hgun_ACPC2_F", "weapon" }, 16 }, + { { "ruger_pistol_epoch", "weapon" }, 18 } + }; + }; + class NL_Pistols + { + items[] = { + { { "hgun_Pistol_tranq_01", "weapon" }, 1 } + }; + }; + class PistolAmmo_Vanilla + { + items[] = { + { { "EnergyPack", "magazine" }, 4 }, + { { "6Rnd_RedSignal_F", "magazine" }, 2 }, + { { "6Rnd_GreenSignal_F", "magazine" }, 2 }, + { { "30Rnd_9x21_Mag", "magazine" }, 10 }, + { { "6Rnd_45ACP_Cylinder", "magazine" }, 11 }, + { { "16Rnd_9x21_Mag", "magazine" }, 11 }, + { { "11Rnd_45ACP_Mag", "magazine" }, 12 }, + { { "9Rnd_45ACP_Mag", "magazine" }, 16 }, + { { "9rnd_45X88_magazine", "magazine" }, 16 }, + { { "10rnd_22X44_magazine", "magazine" }, 16 } + }; + }; + class NL_PistolAmmo + { + items[] = { + { { "tranq_dart_mag", "magazine" }, 1 } + }; + }; + class Pistols_CUP + { + items[] = { + { { "CUP_hgun_Compact", "weapon" }, 1 }, + { { "CUP_hgun_Duty", "weapon" }, 1 }, + { { "CUP_hgun_Phantom", "weapon" }, 1 }, + { { "CUP_hgun_Glock17", "weapon" }, 1 }, + { { "CUP_hgun_Makarov", "weapon" }, 1 }, + { { "CUP_hgun_MicroUzi", "weapon" }, 1 }, + { { "CUP_hgun_TaurusTracker455", "weapon" }, 1 }, + { { "CUP_hgun_PB6P9", "weapon" }, 1 }, + { { "CUP_hgun_SA61", "weapon" }, 1 }, + { { "CUP_hgun_M9", "weapon" }, 1 }, + { { "CUP_hgun_TaurusTracker455_gold", "weapon" }, 1 }, + { { "CUP_hgun_Colt1911", "weapon" }, 1 } + }; + }; + class PistolAmmo_CUP + { + items[] = { + { { "CUP_10Rnd_9x19_Compact", "magazine" }, 2 }, + { { "CUP_18Rnd_9x19_Phantom", "magazine" }, 1 }, + { { "CUP_17Rnd_9x19_glock17", "magazine" }, 1 }, + { { "CUP_8Rnd_9x18_Makarov_M", "magazine" }, 2 }, + { { "CUP_8Rnd_9x18_MakarovSD_M", "magazine" }, 2 }, + { { "CUP_30Rnd_9x19_UZI", "magazine" }, 1 }, + { { "CUP_6Rnd_45ACP_M", "magazine" }, 3 }, + { { "CUP_20Rnd_B_765x17_Ball_M", "magazine" }, 1 }, + { { "CUP_15Rnd_9x19_M9", "magazine" }, 1 }, + { { "CUP_7Rnd_45ACP_1911", "magazine" }, 2 } + }; + }; + class Pistols_MAD + { + items[] = { + { { "revolver01", "weapon" }, 17 } + }; + }; + class Rifle_Vanilla + { + items[] = { + { { "AKM_EPOCH", "weapon" }, 3 }, + { { "sr25_epoch", "weapon" }, 4 }, + + { { "arifle_Katiba_GL_F", "weapon" }, 2 }, + { { "arifle_Katiba_C_F", "weapon" }, 3 }, + { { "arifle_Katiba_F", "weapon" }, 5 }, + + { { "arifle_MX_GL_F", "weapon" }, 3 }, + { { "arifle_MX_GL_Black_F", "weapon" }, 2 }, + { { "arifle_MXM_Black_F", "weapon" }, 2 }, + { { "arifle_MXC_Black_F", "weapon" }, 3 }, + { { "arifle_MX_Black_F", "weapon" }, 2 }, + { { "arifle_MXM_F", "weapon" }, 3 }, + { { "arifle_MXC_F", "weapon" }, 3 }, + { { "arifle_MX_F", "weapon" }, 3 }, + + { { "l85a2_epoch", "weapon" }, 1 }, + { { "l85a2_pink_epoch", "weapon" }, 1 }, + { { "l85a2_ugl_epoch", "weapon" }, 1 }, + + { { "m4a3_EPOCH", "weapon" }, 7 }, + + { { "m16_EPOCH", "weapon" }, 2 }, + { { "m16Red_EPOCH", "weapon" }, 1 }, + + { { "arifle_Mk20_GL_F", "weapon" }, 12 }, + { { "arifle_Mk20_GL_plain_F", "weapon" }, 12 }, + { { "arifle_Mk20C_F", "weapon" }, 16 }, + { { "arifle_Mk20C_plain_F", "weapon" }, 18 }, + { { "arifle_Mk20_F", "weapon" }, 20 }, + { { "arifle_Mk20_plain_F", "weapon" }, 22 }, + + { { "arifle_TRG21_GL_F", "weapon" }, 2 }, + { { "arifle_TRG21_F", "weapon" }, 3 }, + { { "arifle_TRG20_F", "weapon" }, 5 }, + + { { "arifle_SDAR_F", "weapon" }, 9 }, + { { "Rollins_F", "weapon" }, 9 }, + { { "SMG_01_F", "weapon" }, 9 }, + { { "SMG_02_F", "weapon" }, 9 }, + + { { "SMG_03_TR_black", "weapon" }, 1 }, + { { "SMG_03_TR_camo", "weapon" }, 1 }, + { { "SMG_03_TR_khaki", "weapon" }, 1 }, + { { "SMG_03_TR_hex", "weapon" }, 1 }, + { { "SMG_03C_TR_black", "weapon" }, 1 }, + { { "SMG_03C_TR_camo", "weapon" }, 1 }, + { { "SMG_03C_TR_khaki", "weapon" }, 1 }, + { { "SMG_03C_TR_hex", "weapon" }, 1 }, + { { "SMG_03_black", "weapon" }, 1 }, + { { "SMG_03_camo", "weapon" }, 1 }, + { { "SMG_03_khaki", "weapon" }, 1 }, + { { "SMG_03_hex", "weapon" }, 1 }, + { { "SMG_03C_black", "weapon" }, 1 }, + { { "SMG_03C_camo", "weapon" }, 1 }, + { { "SMG_03C_khaki", "weapon" }, 1 }, + { { "SMG_03C_hex", "weapon" }, 1 }, + + { { "hgun_PDW2000_F", "weapon" }, 10 }, + { { "speargun_epoch", "weapon" }, 5 } + }; + }; + class RifleAmmo_Vanilla + { + items[] = { + { { "30Rnd_762x39_Mag", "magazine" }, 8 }, + + { { "30Rnd_65x39_caseless_mag", "magazine" }, 3 }, + { { "30Rnd_65x39_caseless_mag_Tracer", "magazine" }, 2 }, + { { "30Rnd_65x39_caseless_green", "magazine" }, 3 }, + { { "30Rnd_65x39_caseless_green_mag_Tracer", "magazine" }, 2 }, + + { { "20Rnd_556x45_UW_mag", "magazine" }, 12 }, + + { { "30Rnd_556x45_Stanag", "magazine" }, 4 }, + { { "30Rnd_556x45_Stanag_Tracer_Red", "magazine" }, 2 }, + { { "30Rnd_556x45_Stanag_Tracer_Green", "magazine" }, 2 }, + { { "30Rnd_556x45_Stanag_Tracer_Yellow", "magazine" }, 2 }, + + { { "30Rnd_45ACP_Mag_SMG_01", "magazine" }, 5 }, + { { "30Rnd_45ACP_Mag_SMG_01_Tracer_Green", "magazine" }, 5 }, + + { { "30Rnd_9x21_Mag", "magazine" }, 10 }, + { { "5Rnd_rollins_mag", "magazine" }, 10 }, + { { "50Rnd_570x28_SMG_03", "magazine" }, 10 }, + + { { "spear_magazine", "magazine" }, 2 } + }; + }; + class NL_RifleAmmo + { + items[] = { + { { "NL_pvc_bb_mag", "magazine" }, 5 }, + { { "NL_shot_bb_mag", "magazine" }, 5 }, + { { "xbow_mag_bolt", "magazine" }, 5 }, + { { "xbow_mag_tranq", "magazine" }, 5 }, + { { "xbow_mag_exp", "magazine" }, 2 } + }; + }; + class A2_Rifle + { + items[] = { + { { "a2_ak47s_gold_EPOCH", "weapon" }, 1 }, + { { "a2_AK107_EPOCH", "weapon" }, 1 }, + { { "a2_bizon_epoch", "weapon" }, 1 }, + { { "a2_dmr_epoch", "weapon" }, 1 }, + { { "a2_dmr_epoch_scoped", "weapon" }, 1 }, + { { "a2_fnfal_epoch", "weapon" }, 1 }, + { { "a2_G36_C_epoch", "weapon" }, 1 }, + { { "a2_Mg36_epoch", "weapon" }, 1 }, + { { "a2_leeenfield_epoch", "weapon" }, 1 }, + { { "a2_m110_epoch", "weapon" }, 1 }, + { { "a2_mk16_epoch", "weapon" }, 1 }, + { { "a2_mk17_epoch", "weapon" }, 1 }, + { { "a2_svd_epoch", "weapon" }, 1 }, + { { "a2_VSS_vintorez_epoch", "weapon" }, 1 }, + { { "a2_aks74un_EPOCH", "weapon" }, 1 } + }; + }; + class NL_Rifle + { + items[] = { + { { "pvcrifle_01_F", "weapon" }, 1 }, + { { "nl_Shotgun", "weapon" }, 1 }, + { { "nl_auto_xbow", "weapon" }, 1 } + }; + }; + class A2_RifleAmmo + { + items[] = { + { { "Bizon_64Rnd_9x18", "magazine" }, 2 }, + { { "20Rnd_762x51_DMR", "magazine" }, 2 }, + { { "20Rnd_762x51_FNFAL", "magazine" }, 2 }, + { { "30Rnd_556x45_G36", "magazine" }, 2 }, + { { "10Rnd_303", "magazine" }, 2 }, + { { "100Rnd_556x45_BetaCMag", "magazine" }, 2 }, + { { "10Rnd_762x54_SVD", "magazine" }, 2 }, + { { "10Rnd_9x39_SP5_VSS", "magazine" }, 2 } + }; + }; + class Rifle_CUP + { + items[] = { + { { "CUP_smg_bizon", "weapon" }, 1 }, + { { "CUP_smg_EVO", "weapon" }, 1 }, + { { "CUP_smg_MP5SD6", "weapon" }, 1 }, + { { "CUP_smg_MP5A5", "weapon" }, 1 }, + + { { "CUP_sgun_AA12", "weapon" }, 1 }, + { { "CUP_sgun_M1014", "weapon" }, 1 }, + { { "CUP_sgun_Saiga12K", "weapon" }, 1 }, + + { { "CUP_arifle_AK74", "weapon" }, 1 }, + { { "CUP_arifle_AK74M", "weapon" }, 1 }, + { { "CUP_arifle_AK74M_GL", "weapon" }, 1 }, + { { "CUP_arifle_AK74_GL", "weapon" }, 1 }, + { { "CUP_arifle_AK74_GL_kobra", "weapon" }, 1 }, + { { "CUP_arifle_AKS", "weapon" }, 1 }, + { { "CUP_arifle_AKS_Gold", "weapon" }, 1 }, + { { "CUP_arifle_AKS74", "weapon" }, 1 }, + { { "CUP_arifle_AKS74U", "weapon" }, 1 }, + { { "CUP_arifle_AK107", "weapon" }, 1 }, + { { "CUP_arifle_AK107_GL", "weapon" }, 1 }, + { { "CUP_arifle_AKM", "weapon" }, 1 }, + + { { "CUP_arifle_CZ805_A1", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_GL", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_A2", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_B", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_B_GL", "weapon" }, 1 }, + + { { "CUP_arifle_FNFAL", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL_railed", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL5061", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL5062", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL_OSW", "weapon" }, 1 }, + + { { "CUP_arifle_G36A", "weapon" }, 1 }, + { { "CUP_arifle_G36A_camo", "weapon" }, 1 }, + { { "CUP_arifle_G36K", "weapon" }, 1 }, + { { "CUP_arifle_G36K_camo", "weapon" }, 1 }, + { { "CUP_arifle_G36C", "weapon" }, 1 }, + { { "CUP_arifle_G36C_camo", "weapon" }, 1 }, + + { { "CUP_arifle_L85A2", "weapon" }, 1 }, + { { "CUP_arifle_L85A2_GL", "weapon" }, 1 }, + + { { "CUP_arifle_M16A2", "weapon" }, 1 }, + { { "CUP_arifle_M16A2_GL", "weapon" }, 1 }, + { { "CUP_arifle_M16A4_Base", "weapon" }, 1 }, + { { "CUP_arifle_M16A4_GL", "weapon" }, 1 }, + + { { "CUP_arifle_M4A1_BUIS_GL", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_BUIS_camo_GL", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_BUIS_desert_GL", "weapon" }, 1 }, + { { "CUP_arifle_M4A1", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_camo", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_black", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_desert", "weapon" }, 1 }, + { { "CUP_arifle_M4A3_desert", "weapon" }, 1 }, + + { { "CUP_arifle_Sa58P", "weapon" }, 1 }, + { { "CUP_arifle_Sa58V", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS1", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS2", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS2_gl", "weapon" }, 1 }, + { { "CUP_arifle_Sa58P_des", "weapon" }, 1 }, + { { "CUP_arifle_Sa58V_camo", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS1_des", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS2_camo", "weapon" }, 1 }, + + { { "CUP_arifle_Mk16_STD", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_STD_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_STD_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_STD_EGLM", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC_EGLM", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_SV", "weapon" }, 1 }, + + { { "CUP_arifle_Mk17_CQC", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_CQC_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_CQC_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_CQC_EGLM", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD_EGLM", "weapon" }, 1 }, + + { { "CUP_arifle_Mk20", "weapon" }, 1 }, + + { { "CUP_arifle_XM8_Carbine", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Carbine_GL", "weapon" }, 1 }, + { { "CUP_arifle_xm8_sharpshooter", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Compact", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Compact_Rail", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Railed", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Carbine_FG", "weapon" }, 1 }, + { { "CUP_arifle_xm8_SAW", "weapon" }, 1 }, + + { { "CUP_arifle_AK47", "weapon" }, 1 }, + { { "CUP_arifle_RPK74", "weapon" }, 1 }, + { { "CUP_arifle_MG36", "weapon" }, 1 }, + { { "CUP_arifle_RPK74_45", "weapon" }, 1 }, + { { "CUP_arifle_RPK74M", "weapon" }, 1 }, + { { "CUP_arifle_MG36_camo", "weapon" }, 1 }, + { { "CUP_arifle_L86A2", "weapon" }, 1 } + }; + }; + class RifleAmmo_CUP + { + items[] = { + { { "CUP_30Rnd_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Green_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Red_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_White_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Yellow_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_45Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_762x39_AK47_M", "magazine" }, 1 }, + { { "CUP_75Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Red_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Green_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Yellow_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_100Rnd_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Red_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Green_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Yellow_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_20Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_FNFAL_M", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_B_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M_TracerG", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M_TracerR", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M_TracerY", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M", "magazine" }, 1 }, + + { { "CUP_20Rnd_B_AA12_Pellets", "magazine" }, 3 }, + { { "CUP_20Rnd_B_AA12_74Slug", "magazine" }, 2 }, + { { "CUP_20Rnd_B_AA12_HE", "magazine" }, 1 }, + { { "CUP_8Rnd_B_Beneli_74Slug", "magazine" }, 2 }, + { { "CUP_8Rnd_B_Beneli_74Pellets", "magazine" }, 3 }, + { { "CUP_8Rnd_B_Saiga12_74Slug_M", "magazine" }, 2 }, + { { "CUP_8Rnd_B_Saiga12_74Pellets_M", "magazine" }, 3 } + }; + }; + class Rifle_MAD + { + items[] = { + { { "VG_sawed_off_01", "weapon" }, 1 }, + { { "Devastator_01", "weapon" }, 1 } + }; + }; + class RifleAmmo_MAD + { + items[] = { + { { "in005_1Rnd_12Gauge_Pellets", "magazine" }, 1 }, + { { "in005_1Rnd_12Gauge_Slug", "magazine" }, 1 } + }; + }; + class SniperRifle_Vanilla + { + items[] = { + { { "m107_EPOCH", "weapon" }, 1 }, + { { "m107Tan_EPOCH", "weapon" }, 1 }, + + { { "srifle_LRR_F", "weapon" }, 11 }, + { { "srifle_GM6_F", "weapon" }, 16 }, + + { { "M14_EPOCH", "weapon" }, 1 }, + { { "M14Grn_EPOCH", "weapon" }, 1 }, + + { { "srifle_EBR_F", "weapon" }, 20 }, + + { { "srifle_DMR_01_F", "weapon" }, 17 } + }; + }; + class SniperRifleAmmo_Vanilla + { + items[] = { + { { "5Rnd_127x108_Mag", "magazine" }, 1 }, + { { "5Rnd_127x108_APDS_Mag", "magazine" }, 1 }, + { { "7Rnd_408_Mag", "magazine" }, 1 }, + { { "20Rnd_762x51_Mag", "magazine" }, 1 }, + { { "10Rnd_762x54_Mag", "magazine" }, 1 } + }; + }; + class SniperRifleMarkDLC + { + items[] = { + { { "srifle_DMR_02_F", "weapon" }, 1 }, + { { "srifle_DMR_02_camo_F", "weapon" }, 1 }, + { { "srifle_DMR_02_sniper_F", "weapon" }, 1 }, + { { "srifle_DMR_03_F", "weapon" }, 1 }, + { { "srifle_DMR_03_khaki_F", "weapon" }, 1 }, + { { "srifle_DMR_03_tan_F", "weapon" }, 1 }, + { { "srifle_DMR_03_multicam_F", "weapon" }, 1 }, + { { "srifle_DMR_03_woodland_F", "weapon" }, 1 }, + { { "srifle_DMR_04_F", "weapon" }, 1 }, + { { "srifle_DMR_04_Tan_F", "weapon" }, 1 }, + { { "srifle_DMR_05_blk_F", "weapon" }, 1 }, + { { "srifle_DMR_05_hex_F", "weapon" }, 1 }, + { { "srifle_DMR_05_tan_f", "weapon" }, 1 }, + { { "srifle_DMR_06_camo_F", "weapon" }, 1 }, + { { "srifle_DMR_06_olive_F", "weapon" }, 1 } + }; + }; + class SniperRifleAmmoMarkDLC + { + items[] = { + { { "10Rnd_338_Mag", "magazine" }, 1 }, // DMR_02 + { { "10Rnd_127x54_Mag", "magazine" }, 1 }, // DMR_04 + { { "10Rnd_93x64_DMR_05_Mag", "magazine" }, 1 } // DMR_05 + + }; + }; + class SniperRifle_CUP + { + items[] = { + { { "CUP_srifle_AS50", "weapon" }, 1 }, + { { "CUP_srifle_LeeEnfield", "weapon" }, 1 }, + { { "CUP_srifle_LeeEnfield_rail", "weapon" }, 1 }, + { { "CUP_srifle_M107_Base", "weapon" }, 1 }, + { { "CUP_srifle_M110", "weapon" }, 1 }, + { { "CUP_srifle_M14", "weapon" }, 1 }, + { { "CUP_srifle_M14_DMR", "weapon" }, 1 }, + { { "CUP_srifle_Mk12SPR", "weapon" }, 1 }, + { { "CUP_srifle_M24_des", "weapon" }, 1 }, + { { "CUP_srifle_M40A3", "weapon" }, 1 }, + { { "CUP_srifle_ksvk", "weapon" }, 1 }, + { { "CUP_srifle_SVD", "weapon" }, 1 }, + { { "CUP_srifle_VSSVintorez", "weapon" }, 1 }, + { { "CUP_srifle_CZ750", "weapon" }, 1 }, + { { "CUP_srifle_CZ550", "weapon" }, 1 }, + { { "CUP_srifle_CZ550_rail", "weapon" }, 1 }, + { { "CUP_srifle_M24_wdl", "weapon" }, 1 }, + { { "CUP_srifle_SVD_des", "weapon" }, 1 }, + { { "CUP_srifle_AWM_des", "weapon" }, 1 }, + { { "CUP_srifle_AWM_wdl", "weapon" }, 1 }, + { { "CUP_srifle_G22_des", "weapon" }, 1 } + }; + }; + class SniperRifleAmmo_CUP + { + items[] = { + { { "CUP_5Rnd_127x99_as50_M", "magazine" }, 1 }, + { { "CUP_10x_303_M", "magazine" }, 1 }, + { { "CUP_10Rnd_127x99_m107", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_B_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Red_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Green_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Yellow_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_100Rnd_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Red_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Green_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Yellow_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_5Rnd_762x51_M24", "magazine" }, 1 }, + { { "CUP_5Rnd_127x108_KSVK_M", "magazine" }, 1 }, + { { "CUP_10Rnd_762x54_SVD_M", "magazine" }, 1 }, + { { "CUP_10Rnd_9x39_SP5_VSS_M", "magazine" }, 1 }, + { { "CUP_20Rnd_9x39_SP5_VSS_M", "magazine" }, 1 }, + { { "CUP_10Rnd_762x51_CZ750_Tracer", "magazine" }, 1 }, + { { "CUP_10Rnd_762x51_CZ750", "magazine" }, 1 }, + { { "CUP_5x_22_LR_17_HMR_M", "magazine" }, 1 }, + { { "CUP_5Rnd_86x70_L115A1", "magazine" }, 1 }, + { { "CUP_5Rnd_762x67_G22", "magazine" }, 1 } + }; + }; + class Machinegun_Vanilla + { + items[] = { + { { "LMG_Zafir_F", "weapon" }, 2 }, + + { { "arifle_MX_SW_F", "weapon" }, 4 }, + { { "arifle_MX_SW_Black_F", "weapon" }, 2 }, + + { { "LMG_Mk200_F", "weapon" }, 6 }, + + { { "m249_EPOCH", "weapon" }, 1 }, + { { "m249Tan_EPOCH", "weapon" }, 1 } + }; + }; + class MachinegunAmmo_Vanilla + { + items[] = { + { { "100Rnd_65x39_caseless_mag", "magazine" }, 2 }, + { { "100Rnd_65x39_caseless_mag_Tracer", "magazine" }, 1 }, + + { { "150Rnd_762x54_Box", "magazine" }, 2 }, + { { "150Rnd_762x54_Box_Tracer", "magazine" }, 1 }, + + { { "200Rnd_556x45_M249", "magazine" }, 19 }, + + { { "200Rnd_65x39_cased_Box", "magazine" }, 2 }, + { { "200Rnd_65x39_cased_Box_Tracer", "magazine" }, 1 } + }; + }; + class MachinegunMarkDLC + { + items[] = { + { { "MMG_01_hex_F", "weapon" }, 1 }, + { { "MMG_01_tan_F", "weapon" }, 1 }, + { { "MMG_02_camo_F", "weapon" }, 1 }, + { { "MMG_02_black_F", "weapon" }, 1 }, + { { "MMG_02_sand_F", "weapon" }, 1 } + }; + }; + class MachinegunAmmoMarkDLC + { + items[] = { + { { "150Rnd_93x64_Mag", "magazine" }, 1 }, + { { "130Rnd_338_Mag", "magazine" }, 1 } + }; + }; + class Machinegun_CUP + { + items[] = { + { { "CUP_lmg_L110A1", "weapon" }, 1 }, + { { "CUP_lmg_M240", "weapon" }, 1 }, + { { "CUP_lmg_minimipara", "weapon" }, 1 }, + { { "CUP_lmg_minimi", "weapon" }, 1 }, + { { "CUP_lmg_m249_para", "weapon" }, 1 }, + { { "CUP_lmg_M249_E2", "weapon" }, 1 }, + { { "CUP_lmg_minimi_railed", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip1", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip4", "weapon" }, 1 }, + { { "CUP_lmg_L7A2", "weapon" }, 1 }, + { { "CUP_lmg_PKM", "weapon" }, 1 }, + { { "CUP_lmg_Pecheneg", "weapon" }, 1 }, + { { "CUP_lmg_UK59", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip2", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip3", "weapon" }, 1 }, + { { "CUP_lmg_m249_SQuantoon", "weapon" }, 1 }, + { { "CUP_lmg_M60E4", "weapon" }, 1 }, + { { "CUP_lmg_Mk48_des", "weapon" }, 1 }, + { { "CUP_lmg_Mk48_wdl", "weapon" }, 1 } + }; + }; + class MachinegunAmmo_CUP + { + items[] = { + { { "CUP_200Rnd_TE4_Red_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Yellow_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_200Rnd_TE1_Red_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_Green_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_Red_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_Yellow_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Green_Tracer_556x45_L110A1", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Red_Tracer_556x45_L110A1", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Yellow_Tracer_556x45_L110A1", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_G36", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_LRT4_White_Tracer_762x51_Belt_M", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_LRT4_Red_Tracer_762x51_Belt_M", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Green_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_LRT4_762x54_PK_Tracer_Green_M", "magazine" }, 1 }, + { { "CUP_50Rnd_UK59_762x54R_Tracer", "magazine" }, 1 }, + + { { "CUP_64Rnd_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_Green_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_Red_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_White_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_Yellow_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_30Rnd_9x19_EVO", "magazine" }, 1 }, + { { "CUP_30Rnd_9x19_MP5", "magazine" }, 1 } + }; + }; + class Uniforms_Male_Civ_Vanilla + { + items[] = { + { { "U_C_Poloshirt_stripped", "item" }, 1 }, + { { "U_C_Poloshirt_blue", "item" }, 1 }, + { { "U_C_Poloshirt_burgundy", "item" }, 1 }, + { { "U_C_Poloshirt_tricolour", "item" }, 1 }, + { { "U_C_Poloshirt_salmon", "item" }, 1 }, + { { "U_C_Poloshirt_redwhite", "item" }, 1 }, + { { "U_C_Commoner1_1", "item" }, 1 }, + { { "U_C_Poor_2", "item" }, 1 }, + { { "U_C_HunterBody_grn", "item" }, 1 }, + { { "U_C_Poor_shorts_1", "item" }, 1 }, + { { "U_NikosBody", "item" }, 1 }, + { { "U_NikosAgedBody", "item" }, 1 }, + { { "U_Marshal", "item" }, 1 }, + { { "U_C_man_sport_1_F", "item" }, 1 }, + { { "U_C_man_sport_2_F", "item" }, 1 }, + { { "U_C_man_sport_3_F", "item" }, 1 }, + { { "U_C_Man_casual_1_F", "item" }, 1 }, + { { "U_C_Man_casual_2_F", "item" }, 1 }, + { { "U_C_Man_casual_3_F", "item" }, 1 }, + { { "U_C_Man_casual_4_F", "item" }, 1 }, + { { "U_C_Man_casual_5_F", "item" }, 1 }, + { { "U_C_Man_casual_6_F", "item" }, 1 }, + { { "U_C_Poor_1", "item" }, 1 }, + { { "U_C_WorkerCoveralls", "item" }, 1 }, + { { "U_C_Journalist", "item" }, 1 }, + { { "U_C_Scientist", "item" }, 1 }, + { { "U_OrestesBody", "item" }, 1 }, + { { "U_C_Commoner_shorts", "item" }, 1 }, + { { "U_C_ShirtSurfer_shorts", "item" }, 1 }, + { { "U_C_TeeSurfer_shorts_1", "item" }, 1 }, + { { "U_C_TeeSurfer_shorts_2", "item" }, 1 } + + }; + }; + class Uniforms_Male_Mil_Vanilla + { + items[] = { + { { "U_OG_Guerilla1_1", "item" }, 1 }, + { { "U_OG_Guerilla2_1", "item" }, 1 }, + { { "U_OG_Guerilla2_2", "item" }, 1 }, + { { "U_OG_Guerilla2_3", "item" }, 1 }, + { { "U_OG_Guerilla3_1", "item" }, 1 }, + { { "U_OG_Guerilla3_2", "item" }, 1 }, + { { "U_OG_leader", "item" }, 1 }, + { { "U_O_CombatUniform_ocamo", "item" }, 1 }, + { { "U_O_GhillieSuit", "item" }, 1 }, + { { "U_O_PilotCoveralls", "item" }, 1 }, + { { "U_IG_Guerilla1_1", "item" }, 1 }, + { { "U_IG_leader", "item" }, 1 }, + { { "U_IG_Guerilla2_1", "item" }, 1 }, + { { "U_IG_Guerilla2_3", "item" }, 1 }, + { { "U_IG_Guerilla2_2", "item" }, 1 }, + { { "U_IG_Guerilla3_1", "item" }, 1 }, + { { "U_IG_Guerrilla_6_1", "item" }, 1 }, + { { "U_OG_Guerrilla_6_1", "item" }, 1 }, + { { "U_I_CombatUniform", "item" }, 1 }, + { { "U_I_CombatUniform_shortsleeve", "item" }, 1 }, + { { "U_I_HeliPilotCoveralls", "item" }, 1 }, + { { "U_I_pilotCoveralls", "item" }, 1 }, + { { "U_I_OfficerUniform", "item" }, 1 }, + { { "U_I_GhillieSuit", "item" }, 1 }, + { { "U_I_CombatUniform_tshirt", "item" }, 1 }, + { { "U_O_OfficerUniform_ocamo", "item" }, 1 }, + { { "U_O_SpecopsUniform_ocamo", "item" }, 1 }, + { { "U_O_CombatUniform_oucamo", "item" }, 1 }, + { { "U_I_C_Soldier_Para_1_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_2_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_3_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_4_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_5_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_1_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_2_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_3_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_4_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_5_F", "item" }, 1 }, + { { "U_I_C_Soldier_Camo_F", "item" }, 1 }, + { { "U_O_T_Soldier_F", "item" }, 1 }, + { { "U_O_T_Officer_F", "item" }, 1 }, + { { "U_O_T_Sniper_F", "item" }, 1 }, + { { "U_RadiationSuit_M_uniform", "item" }, 1 } + }; + }; + class Uniforms_Male_WetSuit + { + items[] = { + { { "U_O_Wetsuit", "item" }, 1 }, + { { "U_I_Wetsuit", "item" }, 1 } + }; + }; + class Uniforms_Male_MarksDLC + { + items[] = { + { { "U_O_T_FullGhillie_tna_F", "item" }, 1 }, + { { "U_O_FullGhillie_lsh", "item" }, 1 }, + { { "U_O_FullGhillie_sard", "item" }, 1 }, + { { "U_O_FullGhillie_ard", "item" }, 1 }, + { { "U_I_FullGhillie_lsh", "item" }, 1 }, + { { "U_I_FullGhillie_sard", "item" }, 1 }, + { { "U_I_FullGhillie_ard", "item" }, 1 } + }; + }; + class Uniforms_Male_KartDLC + { + items[] = { + { { "U_C_Driver_1", "item" }, 1 }, + { { "U_C_Driver_2", "item" }, 1 }, + { { "U_C_Driver_3", "item" }, 1 }, + { { "U_C_Driver_4", "item" }, 1 }, + { { "U_C_Driver_1_black", "item" }, 1 }, + { { "U_C_Driver_1_blue", "item" }, 1 }, + { { "U_C_Driver_1_green", "item" }, 1 }, + { { "U_C_Driver_1_red", "item" }, 1 }, + { { "U_C_Driver_1_white", "item" }, 1 }, + { { "U_C_Driver_1_yellow", "item" }, 1 }, + { { "U_C_Driver_1_orange", "item" }, 1 }, + { { "U_C_Driver_1_red", "item" }, 1 } + }; + }; + class Uniforms_Male_IdapDLC + { + items[] = { + { { "U_C_ConstructionCoverall_Red_F", "item" }, 1 }, + { { "U_C_ConstructionCoverall_vrana_F", "item" }, 1 }, + { { "U_C_ConstructionCoverall_Black_F", "item" }, 1 }, + { { "U_C_ConstructionCoverall_Blue_F", "item" }, 1 }, + { { "U_C_Paramedic_01_F", "item" }, 1 }, + { { "U_C_Mechanic_01_F", "item" }, 1 } + }; + }; + class Uniforms_Male_ApexDLC + { + items[] = { + { { "U_O_V_Soldier_Viper_hex_F", "item" }, 1 }, + { { "U_O_V_Soldier_Viper_F", "item" }, 1 } + }; + }; + class Uniforms_Female_Civ_Epoch + { + items[] = { + { { "U_JeansBlack1_uniform", "item" }, 1 }, + { { "U_JeansBlack2_uniform", "item" }, 1 }, + { { "U_JeansBlack3_uniform", "item" }, 1 }, + { { "U_JeansBlack4_uniform", "item" }, 1 }, + { { "U_JeansBlack5_uniform", "item" }, 1 }, + { { "U_JeansBlack6_uniform", "item" }, 1 }, + { { "U_JeansBlack7_uniform", "item" }, 1 }, + { { "U_JeansBlack8_uniform", "item" }, 1 }, + { { "U_JeansBlack9_uniform", "item" }, 1 }, + { { "U_JeansBlack10_uniform", "item" }, 1 }, + { { "U_JeansBlack11_uniform", "item" }, 1 }, + { { "U_JeansBlack12_uniform", "item" }, 1 }, + { { "U_JeansBlack13_uniform", "item" }, 1 }, + { { "U_JeansBlack14_uniform", "item" }, 1 }, + { { "U_JeansBlack15_uniform", "item" }, 1 }, + { { "U_JeansBlack16_uniform", "item" }, 1 }, + { { "U_JeansBlack17_uniform", "item" }, 1 }, + { { "U_JeansBlack18_uniform", "item" }, 1 }, + { { "U_JeansBlack19_uniform", "item" }, 1 }, + { { "U_JeansBlack20_uniform", "item" }, 1 }, + { { "U_JeansBlack21_uniform", "item" }, 1 }, + { { "U_JeansArBrn1_uniform", "item" }, 1 }, + { { "U_JeansArBrn2_uniform", "item" }, 1 }, + { { "U_JeansArBrn3_uniform", "item" }, 1 }, + { { "U_JeansArBrn4_uniform", "item" }, 1 }, + { { "U_JeansArBrn5_uniform", "item" }, 1 }, + { { "U_JeansArBrn6_uniform", "item" }, 1 }, + { { "U_JeansArBrn7_uniform", "item" }, 1 }, + { { "U_JeansArBrn8_uniform", "item" }, 1 }, + { { "U_JeansArBrn9_uniform", "item" }, 1 }, + { { "U_JeansArBrn10_uniform", "item" }, 1 }, + { { "U_JeansArBrn11_uniform", "item" }, 1 }, + { { "U_JeansArBrn12_uniform", "item" }, 1 }, + { { "U_JeansArBrn13_uniform", "item" }, 1 }, + { { "U_JeansArBrn14_uniform", "item" }, 1 }, + { { "U_JeansArBrn15_uniform", "item" }, 1 }, + { { "U_JeansArBrn16_uniform", "item" }, 1 }, + { { "U_JeansArBrn17_uniform", "item" }, 1 }, + { { "U_JeansArBrn18_uniform", "item" }, 1 }, + { { "U_JeansArBrn19_uniform", "item" }, 1 }, + { { "U_JeansArBrn20_uniform", "item" }, 1 }, + { { "U_JeansArBrn21_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn1_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn2_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn3_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn4_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn5_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn6_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn7_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn8_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn9_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn10_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn11_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn12_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn13_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn14_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn15_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn16_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn17_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn18_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn19_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn20_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn21_uniform", "item" }, 1 }, + { { "U_JeansPatched1_uniform", "item" }, 1 }, + { { "U_JeansPatched2_uniform", "item" }, 1 }, + { { "U_JeansPatched3_uniform", "item" }, 1 }, + { { "U_JeansPatched4_uniform", "item" }, 1 }, + { { "U_JeansPatched5_uniform", "item" }, 1 }, + { { "U_JeansPatched6_uniform", "item" }, 1 }, + { { "U_JeansPatched7_uniform", "item" }, 1 }, + { { "U_JeansPatched8_uniform", "item" }, 1 }, + { { "U_JeansPatched9_uniform", "item" }, 1 }, + { { "U_JeansPatched10_uniform", "item" }, 1 }, + { { "U_JeansPatched11_uniform", "item" }, 1 }, + { { "U_JeansPatched12_uniform", "item" }, 1 }, + { { "U_JeansPatched13_uniform", "item" }, 1 }, + { { "U_JeansPatched14_uniform", "item" }, 1 }, + { { "U_JeansPatched15_uniform", "item" }, 1 }, + { { "U_JeansPatched16_uniform", "item" }, 1 }, + { { "U_JeansPatched17_uniform", "item" }, 1 }, + { { "U_JeansPatched18_uniform", "item" }, 1 }, + { { "U_JeansPatched19_uniform", "item" }, 1 }, + { { "U_JeansPatched20_uniform", "item" }, 1 }, + { { "U_JeansPatched21_uniform", "item" }, 1 } + }; + }; + class Uniforms_Female_WetSuit_Epoch + { + items[] = { + { { "U_Wetsuit_uniform", "item" }, 1 }, + { { "U_Wetsuit_White", "item" }, 1 }, + { { "U_Wetsuit_Blue", "item" }, 1 }, + { { "U_Wetsuit_Purp", "item" }, 1 }, + { { "U_Wetsuit_Camo", "item" }, 1 } + }; + }; + class Uniforms_Female_Mil_Epoch + { + items[] = { + { { "U_CamoRed_uniform", "item" }, 1 }, + { { "U_CamoAloha_uniform", "item" }, 1 }, + { { "U_CamoBiker_uniform", "item" }, 1 }, + { { "U_CamoBubblegum_uniform", "item" }, 1 }, + { { "U_CamoLumberjack_uniform", "item" }, 1 }, + { { "U_CamoOutback_uniform", "item" }, 1 }, + { { "U_CamoPink_uniform", "item" }, 1 }, + { { "U_CamoPinkPolka_uniform", "item" }, 1 }, + { { "U_CamoBrn_uniform", "item" }, 1 }, + { { "U_CamoBlue_uniform", "item" }, 1 }, + { { "U_Camo_uniform", "item" }, 1 }, + { { "U_ghillie1_uniform", "item" }, 1 }, + { { "U_ghillie2_uniform", "item" }, 1 }, + { { "U_ghillie3_uniform", "item" }, 1 }, + { { "U_RadiationSuit_F_uniform", "item" }, 1 } + }; + }; + class Vests_Low_Vanilla + { + items[] = { + { { "V_Press_F", "item" }, 1 }, + + { { "V_1_EPOCH", "item" }, 1 }, + { { "V_2_EPOCH", "item" }, 1 }, + { { "V_3_EPOCH", "item" }, 1 }, + { { "V_4_EPOCH", "item" }, 1 }, + { { "V_5_EPOCH", "item" }, 1 }, + { { "V_6_EPOCH", "item" }, 1 }, + { { "V_7_EPOCH", "item" }, 1 }, + { { "V_8_EPOCH", "item" }, 1 }, + { { "V_9_EPOCH", "item" }, 1 }, + { { "V_10_EPOCH", "item" }, 1 }, + { { "V_11_EPOCH", "item" }, 1 }, + { { "V_12_EPOCH", "item" }, 1 }, + { { "V_13_EPOCH", "item" }, 1 }, + { { "V_14_EPOCH", "item" }, 1 }, + { { "V_15_EPOCH", "item" }, 1 }, + { { "V_16_EPOCH", "item" }, 1 }, + { { "V_17_EPOCH", "item" }, 1 }, + { { "V_18_EPOCH", "item" }, 1 }, + { { "V_21_EPOCH", "item" }, 1 }, + { { "V_22_EPOCH", "item" }, 1 }, + { { "V_23_EPOCH", "item" }, 1 }, + { { "V_24_EPOCH", "item" }, 1 }, + { { "V_25_EPOCH", "item" }, 1 }, + { { "V_26_EPOCH", "item" }, 1 }, + { { "V_27_EPOCH", "item" }, 1 }, + { { "V_28_EPOCH", "item" }, 1 }, + { { "V_29_EPOCH", "item" }, 1 }, + { { "V_30_EPOCH", "item" }, 1 }, + { { "V_31_EPOCH", "item" }, 1 }, + { { "V_32_EPOCH", "item" }, 1 }, + { { "V_33_EPOCH", "item" }, 1 }, + { { "V_34_EPOCH", "item" }, 1 }, + { { "V_35_EPOCH", "item" }, 1 }, + { { "V_37_EPOCH", "item" }, 1 }, + { { "V_38_EPOCH", "item" }, 1 }, + { { "V_39_EPOCH", "item" }, 1 }, + { { "V_40_EPOCH", "item" }, 1 } + }; + }; + class Vests_High_Vanilla + { + items[] = { + { { "V_PlateCarrier1_tna_F", "item" }, 1 }, + { { "V_PlateCarrierSpec_tna_F", "item" }, 1 }, + { { "V_PlateCarrierSpec_blk", "item" }, 1 }, + { { "V_HarnessO_ghex_F", "item" }, 1 }, + { { "V_HarnessOGL_ghex_F", "item" }, 1 }, + { { "V_PlateCarroer2_tna_F", "item" }, 1 }, + { { "V_PlateCarrierGL_tna_F", "item" }, 1 } + }; + }; + class Vests_Rebreather_Epoch + { + items[] = { + { { "V_19_EPOCH", "item" }, 1 }, + { { "V_20_EPOCH", "item" }, 1 }, + { { "V_36_EPOCH", "item" }, 1 } + }; + }; + class Vests_ApexDLC + { + items[] = { + { { "V_TacChestrig_grn_F", "item" }, 1 }, + { { "V_TacChestrig_oli_F", "item" }, 1 }, + { { "V_TacChestrig_cbr_F", "item" }, 1 }, + { { "V_TacChestrig_grn_F", "item" }, 1 }, + { { "V_TacChestrig_grn_F", "item" }, 1 }, + { { "V_TacChestrig_grn_F", "item" }, 1 } + }; + }; + class Backpacks_Low_Base + { + items[] = { + { { "B_ViperLightHarness_blk_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_ghex_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_hex_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_khk_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_oli_F", "backpack" }, 2 }, // 260 + + { { "Assault_Pack_Epoch", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_blk_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_ghex_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_hex_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_khk_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_oli_F", "backpack" }, 1 }, // 300 + { { "Patrol_Pack_Epoch", "backpack" }, 1 }, // 300 + { { "TK_RPG_Backpack_Epoch", "backpack" }, 1 }, // 300 + + { { "CZ_VestPouch_Epoch", "backpack" }, 3 } // 340 + }; + }; + class Backpacks_High_Base + { + items[] = { + { { "B_AssaultPack_cbr", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_dgtl", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_khk", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_mcamo", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_ocamo", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_rgr", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_sgg", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_blk", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_tna_F", "backpack" }, 5 }, // 360 + + { { "B_FieldPack_blk", "backpack" }, 4 }, // 400 + { { "B_FieldPack_cbr", "backpack" }, 4 }, // 400 + { { "B_FieldPack_khk", "backpack" }, 4 }, // 400 + { { "B_FieldPack_ocamo", "backpack" }, 4 }, // 400 + { { "B_FieldPack_oli", "backpack" }, 4 }, // 400 + { { "B_FieldPack_oucamo", "backpack" }, 4 }, // 400 + { { "civil_assault_pack_Epoch", "backpack" }, 4 }, // 400 + + { { "S_Gunbag_Epoch", "backpack" }, 4 }, // 420 + + { { "smallbackpack_red_epoch", "backpack" }, 4 }, // 460 + { { "smallbackpack_green_epoch", "backpack" }, 4 }, // 460 + { { "smallbackpack_teal_epoch", "backpack" }, 4 }, // 460 + { { "smallbackpack_pink_epoch", "backpack" }, 4 }, // 460 + + { { "B_TacticalPack_blk", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_mcamo", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_ocamo", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_oli", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_rgr", "backpack" }, 2 }, // 480 + { { "ALICE_Pack_Epoch", "backpack" }, 2 }, // 480 + + { { "US_Backpack_Epoch", "backpack" }, 2 }, // 500 + + { { "B_Kitbag_cbr", "backpack" }, 2 }, // 520 + { { "B_Kitbag_mcamo", "backpack" }, 2 }, // 520 + { { "B_Kitbag_rgr", "backpack" }, 2 }, // 520 + { { "B_Kitbag_sgg", "backpack" }, 2 }, // 520 + { { "CZ_Backpack_Epoch", "backpack" }, 1 }, // 520 + + { { "B_Carryall_cbr", "backpack" }, 1 }, // 550 + { { "B_Carryall_khk", "backpack" }, 1 }, // 550 + { { "B_Carryall_mcamo", "backpack" }, 1 }, // 550 + { { "B_Carryall_ocamo", "backpack" }, 1 }, // 550 + { { "B_Carryall_oli", "backpack" }, 1 }, // 550 + { { "B_Carryall_oucamo", "backpack" }, 1 }, // 550 + + { { "L_Gunbag_Epoch", "backpack" }, 3 }, // 580 + + { { "B_Parachute", "backpack" }, 1 } + }; + }; + class Backpacks_UAV + { + items[] = { + { { "I_UAV_01_backpack_F", "backpack" }, 1 }, + { { "C_IDAP_UAV_06_backpack_F", "backpack" }, 1 }, + { { "C_IDAP_UAV_06_antimine_backpack_F", "backpack" }, 1 }, + { { "B_UAV_06_medical_backpack_F", "backpack" }, 1 } + }; + }; + +// ########################################################################### Special Loot ########################################################################### + class Tree + { + items[] = { + { { "WoodLog_EPOCH", "magazine" }, 1 } + }; + }; + class Rock + { + items[] = { + { { "PartOre", "magazine" }, 1 }, + { { "ItemRock", "magazine" }, 2 } + }; + }; + class Cinder + { + items[] = { + { { "CinderBlocks", "magazine" }, 1 } + }; + }; + class Wreck + { + items[] = { + { { "ItemScraps", "magazine" }, 1 } + }; + }; + class Bush + { + items[] = { + { { "ItemStick", "magazine" }, 1 } + }; + }; + class Sheep_random_EPOCH + { + items[] = { + { { "SheepCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Goat_random_EPOCH + { + items[] = { + { { "GoatCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Fin_random_EPOCH + { + items[] = { + { { "DogCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Alsatian_Random_EPOCH + { + items[] = { + { { "DogCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Hen_random_EPOCH + { + items[] = { + { { "ChickenCarcass_EPOCH", "magazine" }, 1 } + }; + }; + class Rabbit_EPOCH + { + items[] = { + { { "RabbitCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class EPOCH_RyanZombie_1 + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 5 }, + { { "WhiskeyNoodle", "magazine" }, 5 }, + { { "Throw", "CfgLootTable" }, 10 }, + { { "ThrowExplosive", "CfgLootTable" }, 10 }, + { { "Medical", "CfgLootTable" }, 20 }, + { { "PistolAmmo", "CfgLootTable" }, 20 }, + { { "Pelt_EPOCH", "magazine" }, 10 } + }; + }; + class GreatWhite_F + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 9 }, + { { "ItemBriefcaseGold100oz", "magazine" }, 1 } + }; + }; + class Epoch_Sapper_F + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 6 }, + { { "WhiskeyNoodle", "magazine" }, 11 }, + { { "ItemKiloHemp", "magazine" }, 16 }, + { { "ItemSilverBar", "magazine" }, 18 }, + { { "Medical", "CfgLootTable" }, 18 }, + { { "Pelt_EPOCH", "magazine" }, 31 } + }; + }; + class Cock_random_EPOCH + { + items[] = { + { { "ChickenCarcass_EPOCH", "magazine" }, 1 } + }; + }; + class Epoch_SapperB_F + { + items[] = { + { { "ItemGoldBar", "magazine" }, 9 }, + { { "WhiskeyNoodle", "magazine" }, 13 }, + { { "ItemKiloHemp", "magazine" }, 15 }, + { { "ItemSilverBar", "magazine" }, 17 }, + { { "Medical", "CfgLootTable" }, 17 }, + { { "Pelt_EPOCH", "magazine" }, 29 } + }; + }; + class Epoch_SapperG_F + { + items[] = { + { { "SmokeShellToxic", "magazine" }, 9 }, + { { "WhiskeyNoodle", "magazine" }, 13 }, + { { "ItemKiloHemp", "magazine" }, 15 }, + { { "ItemSilverBar", "magazine" }, 17 }, + { { "Medical", "CfgLootTable" }, 17 }, + { { "Pelt_EPOCH", "magazine" }, 29 } + }; + }; + class Snake_random_EPOCH + { + items[] = { + { { "SnakeCarcass_EPOCH", "magazine" }, 1 }, + { { "Venom_EPOCH", "magazine" }, 1 } + }; + }; + class I_UAV_01_F + { + items[] = { + { { "CircuitParts", "magazine" }, 1 } + }; + }; + class Epoch_Cloak_F + { + items[] = { + { { "Gems", "CfgLootTable" }, 10 }, + { { "Throw", "CfgLootTable" }, 11 }, + { { "ThrowExplosive", "magazine" }, 12 }, + { { "MiniGrenade", "magazine" }, 20 }, + { { "Medical", "CfgLootTable" }, 21 }, + { { "Venom_EPOCH", "magazine" }, 26 } + }; + }; + class SeaFood + { + items[] = { + { { "ItemTrout", "magazine" }, 3 }, + { { "ItemSeaBass", "magazine" }, 2 }, + { { "ItemTuna", "magazine" }, 1 } + }; + }; + class Satellite + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 5 }, + { { "CircuitParts", "magazine" }, 1 }, + { { "Gems", "CfgLootTable" }, 3 }, + { { "ItemScraps", "magazine" }, 1 }, + { { "ItemCorrugated", "magazine" }, 2 }, + { { "ItemSolar", "magazine" }, 1 }, + { { "ItemBattery", "magazine" }, 1 }, + { { "ItemCables", "magazine" }, 1 } + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/CfgLootTable_MADCUP.h b/Server/@epochhive/addons/epoch_server_settings/configs/CfgLootTable_MADCUP.h new file mode 100644 index 0000000..f5d27bf --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/CfgLootTable_MADCUP.h @@ -0,0 +1,2044 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Server side loot table configs + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/CfgLootTable.h +*/ +class CfgLootTable_MADCUP +{ +// DLC/Mod Related from here + class Scopes + { + items[] = { + { { "Scopes_Vanilla", "CfgLootTable" }, 5 }, + { { "Scopes_MarkDLC", "CfgLootTable" }, 1 }, + { { "Scopes_CUP", "CfgLootTable" }, 3 } + }; + }; + class Bipods + { + items[] = { + { { "Bipods_Vanilla", "CfgLootTable" }, 5 }, + { { "Bipods_CUP", "CfgLootTable" }, 3 } + }; + }; + class Muzzles + { + items[] = { + { { "Muzzles_Vanilla", "CfgLootTable" }, 15 }, + { { "Muzzles_MarkDLC", "CfgLootTable" }, 8 }, + { { "Muzzles_CUP", "CfgLootTable" }, 10 }, + { { "Muzzles_MultiGun", "CfgLootTable" }, 1 } + }; + }; + class WpnFlashLights + { + items[] = { + { { "WpnFlashLights_Vanilla", "CfgLootTable" }, 5 }, + { { "WpnFlashLights_CUP", "CfgLootTable" }, 3 }, + { { "SniperCamo_CUP", "CfgLootTable" }, 1 } + }; + }; + class Pistols + { + items[] = { + { { "Pistols_Vanilla", "CfgLootTable" }, 20 }, + { { "NL_Pistols", "CfgLootTable" }, 2 }, + { { "Pistols_CUP", "CfgLootTable" }, 15 }, + { { "Pistols_MAD", "CfgLootTable" }, 2 } + }; + }; + class PistolAmmo + { + items[] = { + { { "PistolAmmo_Vanilla", "CfgLootTable" }, 15 }, + { { "NL_PistolAmmo", "CfgLootTable" }, 3 }, + { { "PistolAmmo_CUP", "CfgLootTable" }, 10 } + }; + }; + class Rifle + { + items[] = { + { { "Rifle_Vanilla", "CfgLootTable" }, 10 }, + { { "A2_Rifle", "CfgLootTable" }, 10 }, + { { "NL_Rifle", "CfgLootTable" }, 2 }, + { { "Rifle_CUP", "CfgLootTable" }, 10 }, + { { "Rifle_MAD", "CfgLootTable" }, 5 } + }; + }; + class RifleAmmo + { + items[] = { + { { "RifleAmmo_Vanilla", "CfgLootTable" }, 20 }, + { { "NL_RifleAmmo", "CfgLootTable" }, 6 }, + { { "A2_RifleAmmo", "CfgLootTable" }, 20 }, + { { "RifleAmmo_CUP", "CfgLootTable" }, 20 }, + { { "RifleAmmo_MAD", "CfgLootTable" }, 5 } + }; + }; + class SniperRifle + { + items[] = { + { { "SniperRifle_Vanilla", "CfgLootTable" }, 5 }, + { { "SniperRifleMarkDLC", "CfgLootTable" }, 1 }, + { { "SniperRifle_CUP", "CfgLootTable" }, 5 } + }; + }; + class SniperRifleAmmo + { + items[] = { + { { "SniperRifleAmmo_Vanilla", "CfgLootTable" }, 5 }, + { { "SniperRifleAmmoMarkDLC", "CfgLootTable" }, 1 }, + { { "SniperRifleAmmo_CUP", "CfgLootTable" }, 5 } + }; + }; + class Machinegun + { + items[] = { + { { "Machinegun_Vanilla", "CfgLootTable" }, 5 }, + { { "MachinegunMarkDLC", "CfgLootTable" }, 1 }, + { { "Machinegun_CUP", "CfgLootTable" }, 5 } + }; + }; + class MachinegunAmmo + { + items[] = { + { { "MachinegunAmmo_Vanilla", "CfgLootTable" }, 5 }, + { { "MachinegunAmmoMarkDLC", "CfgLootTable" }, 1 }, + { { "MachinegunAmmo_CUP", "CfgLootTable" }, 5 } + }; + }; + class Uniforms_Male_Civ + { + items[] = { + { { "Uniforms_Male_Civ_Vanilla", "CfgLootTable" }, 8 }, + { { "Uniforms_Male_KartDLC", "CfgLootTable" }, 1 }, + { { "Uniforms_Male_IdapDLC", "CfgLootTable" }, 1 } + }; + }; + class Uniforms_Male_Mil + { + items[] = { + { { "Uniforms_Male_Mil_Vanilla", "CfgLootTable" }, 8 }, + { { "Uniforms_Male_WetSuit", "CfgLootTable" }, 1 }, + { { "Uniforms_Male_MarksDLC", "CfgLootTable" }, 1 }, + { { "Uniforms_Male_ApexDLC", "CfgLootTable" }, 1 } + }; + }; + class Uniforms_Female_Civ + { + items[] = { + { { "Uniforms_Female_Civ_Epoch", "CfgLootTable" }, 1 } + }; + }; + class Uniforms_Female_Mil + { + items[] = { + { { "Uniforms_Female_Mil_Epoch", "CfgLootTable" }, 8 }, + { { "Uniforms_Female_WetSuit_Epoch", "CfgLootTable" }, 1 } + }; + }; + class Vests_Low + { + items[] = { + { { "Vests_Low_Vanilla", "CfgLootTable" }, 1 } + }; + }; + class Vests_High + { + items[] = { + { { "Vests_High_Vanilla", "CfgLootTable" }, 8 }, + { { "Vests_Rebreather_Epoch", "CfgLootTable" }, 1 }, + { { "Vests_ApexDLC", "CfgLootTable" }, 1 } + }; + }; + class BackPacks_Low + { + items[] = { + { { "Backpacks_Low_Base", "CfgLootTable" }, 1 } + }; + }; + class BackPacks_High + { + items[] = { + { { "Backpacks_High_Base", "CfgLootTable" }, 10 }, + { { "Backpacks_UAV", "CfgLootTable" }, 1 } + }; + }; +// DLC/Mod Related end + + class HeadgearNoArmor + { + items[] = { + { { "H_11_EPOCH", "item" }, 1 }, + { { "H_28_EPOCH", "item" }, 1 }, + { { "H_34_EPOCH", "item" }, 1 }, + { { "H_39_EPOCH", "item" }, 1 }, + { { "H_40_EPOCH", "item" }, 1 }, + { { "H_41_EPOCH", "item" }, 1 }, + { { "H_42_EPOCH", "item" }, 1 }, + { { "H_43_EPOCH", "item" }, 1 }, + { { "H_44_EPOCH", "item" }, 1 }, + { { "H_45_EPOCH", "item" }, 1 }, + { { "H_46_EPOCH", "item" }, 1 }, + { { "H_47_EPOCH", "item" }, 1 }, + { { "H_48_EPOCH", "item" }, 1 }, + { { "H_49_EPOCH", "item" }, 1 }, + { { "H_50_EPOCH", "item" }, 1 }, + { { "H_51_EPOCH", "item" }, 1 }, + { { "H_52_EPOCH", "item" }, 1 }, + { { "H_53_EPOCH", "item" }, 1 }, + { { "H_54_EPOCH", "item" }, 1 }, + { { "H_55_EPOCH", "item" }, 1 }, + { { "H_56_EPOCH", "item" }, 1 }, + { { "H_57_EPOCH", "item" }, 1 }, + { { "H_58_EPOCH", "item" }, 1 }, + { { "H_59_EPOCH", "item" }, 1 }, + { { "H_60_EPOCH", "item" }, 1 }, + { { "H_61_EPOCH", "item" }, 1 }, + { { "H_62_EPOCH", "item" }, 1 }, + { { "H_63_EPOCH", "item" }, 1 }, + { { "H_64_EPOCH", "item" }, 1 }, + { { "H_65_EPOCH", "item" }, 1 }, + { { "H_66_EPOCH", "item" }, 1 }, + { { "H_67_EPOCH", "item" }, 1 }, + { { "H_68_EPOCH", "item" }, 1 }, + { { "H_69_EPOCH", "item" }, 1 }, + { { "H_70_EPOCH", "item" }, 1 }, + { { "H_71_EPOCH", "item" }, 1 }, + { { "H_72_EPOCH", "item" }, 1 }, + { { "H_73_EPOCH", "item" }, 1 }, + { { "H_74_EPOCH", "item" }, 1 }, + { { "H_75_EPOCH", "item" }, 1 }, + { { "H_76_EPOCH", "item" }, 1 }, + { { "H_77_EPOCH", "item" }, 1 }, + { { "H_78_EPOCH", "item" }, 1 }, + { { "H_79_EPOCH", "item" }, 1 }, + { { "H_80_EPOCH", "item" }, 1 }, + { { "H_81_EPOCH", "item" }, 1 }, + { { "H_82_EPOCH", "item" }, 1 }, + { { "H_83_EPOCH", "item" }, 1 }, + { { "H_84_EPOCH", "item" }, 1 }, + { { "H_85_EPOCH", "item" }, 1 }, + { { "H_86_EPOCH", "item" }, 1 }, + { { "H_87_EPOCH", "item" }, 1 }, + { { "H_88_EPOCH", "item" }, 1 }, + { { "H_89_EPOCH", "item" }, 1 }, + { { "H_90_EPOCH", "item" }, 1 }, + { { "H_91_EPOCH", "item" }, 1 }, + { { "H_92_EPOCH", "item" }, 1 }, + { { "H_104_EPOCH", "item" }, 1 }, + { { "H_105_EPOCH", "item" }, 1 }, + { { "thor_mask_epoch", "item" }, 1, }, + { { "iron_mask_epoch", "item" }, 1, }, + { { "wolf_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "pkin_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "clown_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "hockey_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "plague_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "ghostface_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "skull_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "witch_mask_epoch", "item" }, 1, {"getDate", 1, "==", 10} }, // only available in october + { { "radiation_mask_epoch", "item" }, 1 } + }; + }; + class HeadgearArmored + { + items[] = { + { { "H_1_EPOCH", "item" }, 2 }, + { { "H_2_EPOCH", "item" }, 2 }, + { { "H_3_EPOCH", "item" }, 2 }, + { { "H_4_EPOCH", "item" }, 2 }, + { { "H_5_EPOCH", "item" }, 2 }, + { { "H_6_EPOCH", "item" }, 2 }, + { { "H_7_EPOCH", "item" }, 2 }, + { { "H_8_EPOCH", "item" }, 2 }, + { { "H_9_EPOCH", "item" }, 2 }, + { { "H_10_EPOCH", "item" }, 2 }, + { { "H_12_EPOCH", "item" }, 2 }, + { { "H_13_EPOCH", "item" }, 2 }, + { { "H_14_EPOCH", "item" }, 2 }, + { { "H_15_EPOCH", "item" }, 2 }, + { { "H_16_EPOCH", "item" }, 2 }, + { { "H_17_EPOCH", "item" }, 2 }, + { { "H_18_EPOCH", "item" }, 2 }, + { { "H_19_EPOCH", "item" }, 2 }, + { { "H_20_EPOCH", "item" }, 2 }, + { { "H_21_EPOCH", "item" }, 2 }, + { { "H_22_EPOCH", "item" }, 2 }, + { { "H_23_EPOCH", "item" }, 2 }, + { { "H_24_EPOCH", "item" }, 2 }, + { { "H_25_EPOCH", "item" }, 2 }, + { { "H_26_EPOCH", "item" }, 2 }, + { { "H_27_EPOCH", "item" }, 2 }, + { { "H_29_EPOCH", "item" }, 2 }, + { { "H_30_EPOCH", "item" }, 2 }, + { { "H_31_EPOCH", "item" }, 2 }, + { { "H_32_EPOCH", "item" }, 2 }, + { { "H_33_EPOCH", "item" }, 2 }, + { { "H_35_EPOCH", "item" }, 2 }, + { { "H_36_EPOCH", "item" }, 2 }, + { { "H_37_EPOCH", "item" }, 2 }, + { { "H_38_EPOCH", "item" }, 2 }, + { { "H_93_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_94_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_95_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_96_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_97_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_98_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_99_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_100_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_101_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_102_EPOCH", "item" }, 1 }, // Race Hemlet + { { "H_103_EPOCH", "item" }, 1 } // Race Hemlet + }; + }; + class Primitive + { + items[] = { + { { "ItemRock", "magazine" }, 5 }, + { { "ItemRope", "magazine" }, 2 }, + { { "ItemStick", "magazine" }, 5 }, + { { "ItemScraps", "magazine" }, 1 }, + { { "ItemCanvas", "magazine" }, 1 }, + { { "ItemBurlap", "magazine" }, 1 } + }; + }; + class BuildingItems + { + items[] = { + { { "ItemMixOil", "magazine" }, 4 }, + { { "CircuitParts", "magazine" }, 5 }, + { { "CinderBlocks", "magazine" }, 5 }, + { { "MortarBucket", "magazine" }, 15 }, + { { "ItemCorrugated", "magazine" }, 10 }, + { { "ItemCorrugatedLg", "magazine" }, 2 }, + { { "ItemBulb", "magazine" }, 2 }, + { { "ItemSolar", "magazine" }, 2 }, + { { "ItemBattery", "magazine" }, 3 }, + { { "ItemCables", "magazine" }, 3 }, + { { "ItemPipe", "magazine" }, 2 }, + { { "ItemBarrelE", "magazine" }, 1 }, + { { "jerrycan_epoch", "magazine" }, 1 }, + { { "jerrycanE_epoch", "magazine" }, 1 }, + { { "JackKit", "magazine" }, 0 } + }; + }; + class BuildingKits + { + items[] = { + { { "KitPlotPole", "magazine" }, 5 }, + { { "KitSolarGen", "magazine" }, 2 }, + + { { "KitStudWall", "magazine" }, 13 }, + { { "KitCinderWall", "magazine" }, 5 }, + + { { "KitWoodQuarterFloor", "magazine" }, 2 }, + { { "KitWoodHalfFloor", "magazine" }, 2 }, + { { "KitWoodFloor", "magazine" }, 8 }, + + { { "KitWoodStairs", "magazine" }, 9 }, + { { "KitWoodTower", "magazine" }, 5 }, + { { "KitWoodRamp", "magazine" }, 5 }, + { { "KitTankTrap", "magazine" }, 2 }, + { { "KitHesco3", "magazine" }, 1 }, + { { "KitWoodLadder", "magazine" }, 5 }, + { { "KitFirePlace", "magazine" }, 8 }, + { { "KitFoundation", "magazine" }, 5 }, + { { "KitWoodFoundation", "magazine" }, 14 } + }; + }; + class Storages + { + items[] = { + { { "KitWorkbench", "magazine" }, 25 }, + { { "KitShelf", "magazine" }, 20 }, + { { "KitTiPi", "magazine" }, 15 }, + { { "KitTentA", "magazine" }, 10 }, + { { "KitTentDome", "magazine" }, 10 }, + { { "ItemLockbox", "magazine" }, 10 }, + { { "ItemSafe", "magazine" }, 6 }, +// { { "ItemSafe_s", "magazine" }, 4 }, // Variant with less Load than the normal Safe + { { "ItemGunSafe", "magazine" }, 4 } + }; + }; + class Equipment + { + items[] = { + { { "ItemWatch", "item" }, 30 }, + { { "ItemCompass", "item" }, 20 }, + { { "Binocular", "item" }, 10 }, + { { "ItemGPS", "item" }, 9 }, + { { "B_UavTerminal", "item" }, 5 }, + { { "NVG_EPOCH", "item" }, 5 }, + { { "Rangefinder", "weapon" }, 2 }, + { { "EpochRadio0", "item" }, 2 }, + { { "EpochRadio1", "item" }, 2 }, + { { "EpochRadio2", "item" }, 2 }, + { { "EpochRadio3", "item" }, 2 }, + { { "EpochRadio4", "item" }, 2 }, + { { "EpochRadio5", "item" }, 1 }, + { { "EpochRadio6", "item" }, 1 }, + { { "EpochRadio7", "item" }, 1 }, + { { "EpochRadio8", "item" }, 1 }, + { { "EpochRadio9", "item" }, 1 }, + { { "ItemGeigerCounter_EPOCH", "item" }, 1 } + }; + }; + class Tools + { + items[] = { + { { "Hatchet", "weapon" }, 40 }, + { { "MeleeSledge", "weapon" }, 20 }, + { { "ChainSaw", "weapon" }, 10 }, + { { "Plunger", "weapon" }, 4 }, + { { "MeleeSword", "weapon" }, 2 }, + { { "Power_Sword", "weapon" }, 1 }, + { { "MeleeRod", "weapon" }, 2 }, + { { "lighter_epoch", "magazine" }, 1 }, + { { "SmeltingTools_EPOCH", "magazine" }, 10 }, + { { "ItemFireExtinguisher", "magazine" }, 1 } + }; + }; + class Repairs + { + items[] = { + { { "VehicleRepair", "magazine" }, 30 }, + { { "SpareTire", "magazine" }, 10 }, + { { "EngineParts", "magazine" }, 7 }, + { { "EngineBlock", "magazine" }, 3 }, + { { "ItemGlass", "magazine" }, 3 }, + { { "ItemDuctTape", "magazine" }, 10 }, + { { "FuelTank", "magazine" }, 3 }, + { { "ItemRotor", "magazine" }, 3 } + }; + }; + class VehicleDocs + { + items[] = { + { { "ItemDocument", "magazine" }, 20 }, + { { "ItemVehDoc1", "magazine" }, 20 }, + { { "ItemVehDoc2", "magazine" }, 15 }, + { { "ItemVehDoc3", "magazine" }, 5 }, + { { "ItemVehDoc4", "magazine" }, 2 } + }; + }; + class Seeds + { + items[] = { + { { "ItemSeedBag", "magazine" }, 10 }, + { { "SeedPacket_Hemp", "magazine" }, 1 }, + { { "SeedPacket_GoldenSeal", "magazine" }, 1 }, + { { "SeedPacket_Poppy", "magazine" }, 1 }, + { { "SeedPacket_Pumpkin", "magazine" }, 2 }, + { { "SeedPacket_Sunflower", "magazine" }, 2 } + }; + }; + class Drink + { + items[] = { + { { "ItemCanteen_Empty", "magazine" }, 5 }, + { { "ItemCanteen_Dirty", "magazine" }, 5 }, + { { "ItemCanteen_Clean", "magazine" }, 1 }, + { { "ItemBottlePlastic_Empty", "magazine" }, 5 }, + { { "ItemBottlePlastic_Dirty", "magazine" }, 5 }, + { { "ItemBottlePlastic_Clean", "magazine" }, 1 }, + { { "WhiskeyNoodle", "magazine" }, 5 }, + { { "ItemSodaOrangeSherbet", "magazine" }, 13 }, + { { "ItemSodaAlpineDude", "magazine" }, 6 }, + { { "ItemSodaPurple", "magazine" }, 13 }, + { { "ItemSodaMocha", "magazine" }, 12 }, + { { "ItemSodaBurst", "magazine" }, 15 }, + { { "ItemSodaRbull", "magazine" }, 13 }, + { { "FoodWalkNSons", "magazine" }, 13 }, + { { "ItemSodaEmpty", "magazine" }, 11 } + }; + }; + class Food + { + items[] = { + { { "ItemCoolerE", "magazine" }, 3 }, + { { "bluburger_epoch", "magazine" }, 4 }, + { { "redburger_epoch", "magazine" }, 4 }, + { { "gyro_wrap_epoch", "magazine" }, 4 }, + { { "icecream_epoch", "magazine" }, 3 }, + { { "ItemPowderMilk", "magazine" }, 3 }, + { { "ItemRicebox", "magazine" }, 3 }, + { { "ItemCereals", "magazine" }, 3 }, + { { "ItemVitamins", "magazine" }, 3 }, + { { "honey_epoch", "magazine" }, 5 }, + { { "emptyjar_epoch", "magazine" }, 13 }, + { { "water_epoch", "magazine" }, 3 }, + { { "clean_water_epoch", "magazine" }, 1 }, + { { "FoodBioMeat", "magazine" }, 11 }, + { { "sardines_epoch", "magazine" }, 11 }, + { { "meatballs_epoch", "magazine" }, 13 }, + { { "scam_epoch", "magazine" }, 14 }, + { { "sweetcorn_epoch", "magazine" }, 14 }, + { { "FoodSnooter", "magazine" }, 5 }, + { { "krypto_candy_epoch", "magazine" }, 4 }, + { { "TacticalBacon", "magazine" }, 5 }, + { { "FoodMeeps", "magazine" }, 1 }, + { { "ItemEmptyTin", "magazine" }, 5 }, + { { "ItemBakedBeans", "magazine" }, 3 }, + { { "HotAxeSauce_epoch", "magazine" }, 1 } + }; + }; + class Medical + { + items[] = { + { { "ItemDefibrillator", "magazine" }, 1 }, + { { "FAK", "magazine" }, 50 }, + { { "Soap_Epoch", "magazine" }, 3 }, + { { "atropine_epoch", "magazine" }, 6 }, + { { "adrenaline_epoch", "magazine" }, 5 }, + { { "morphine_epoch", "magazine" }, 3 }, + { { "caffeinepills_epoch", "magazine" }, 10 }, + { { "orlistat_epoch", "magazine" }, 5 }, + { { "nanite_cream_epoch", "magazine" }, 3 }, + { { "nanite_gun_epoch", "magazine" }, 1 }, + { { "nanite_pills_epoch", "magazine" }, 5 }, + { { "iodide_pills_epoch", "magazine" }, 5 }, + { { "ItemWaterPurificationTablets", "magazine" }, 5 }, + { { "HeatPack", "magazine" }, 1 }, + { { "ColdPack", "magazine" }, 1 }, + { { "Towelette", "magazine" }, 5 } + }; + }; + class PaintCans + { + items[] = { + { { "PaintCanClear", "magazine" }, 1 }, + { { "PaintCanBlk", "magazine" }, 1 }, + { { "PaintCanBlu", "magazine" }, 1 }, + { { "PaintCanBrn", "magazine" }, 1 }, + { { "PaintCanGrn", "magazine" }, 1 }, + { { "PaintCanOra", "magazine" }, 1 }, + { { "PaintCanPur", "magazine" }, 1 }, + { { "PaintCanRed", "magazine" }, 1 }, + { { "PaintCanTeal", "magazine" }, 1 }, + { { "PaintCanYel", "magazine" }, 1 } + }; + }; + class MetalBars + { + items[] = { + { { "ItemGoldBar10oz", "magazine" }, 1 }, + { { "ItemGoldBar", "magazine" }, 9 }, + { { "ItemSilverBar", "magazine" }, 20 }, + { { "ItemCopperBar", "magazine" }, 20 }, + { { "ItemAluminumBar", "magazine" }, 20 }, + { { "ItemTinBar", "magazine" }, 30 } + }; + }; + class Gems + { + items[] = { + { { "ItemJade", "magazine" }, 5 }, + { { "ItemRuby", "magazine" }, 8 }, + { { "ItemSapphire", "magazine" }, 9 }, + { { "ItemTopaz", "magazine" }, 10 }, + { { "ItemOnyx", "magazine" }, 10 }, + { { "ItemAmethyst", "magazine" }, 10 }, + { { "ItemEmerald", "magazine" }, 10 }, + { { "ItemCitrine", "magazine" }, 10 }, + { { "ItemGarnet", "magazine" }, 13 }, + { { "ItemQuartz", "magazine" }, 15 } + }; + }; + class Ore + { + items[] = { + { { "PartOreGold", "magazine" }, 20 }, + { { "PartOreSilver", "magazine" }, 30 }, + { { "PartOre", "magazine" }, 35 } + }; + }; + class Throw + { + items[] = { + { { "SmokeShell", "magazine" }, 1 }, + { { "SmokeShellYellow", "magazine" }, 1 }, + { { "SmokeShellGreen", "magazine" }, 1 }, + { { "SmokeShellToxic", "magazine" }, 1 }, + { { "SmokeShellRed", "magazine" }, 1 }, + { { "SmokeShellPurple", "magazine" }, 1 }, + { { "SmokeShellOrange", "magazine" }, 1 }, + { { "SmokeShellBlue", "magazine" }, 1 }, + { { "Chemlight_green", "magazine" }, 1 }, + { { "Chemlight_red", "magazine" }, 1 }, + { { "Chemlight_yellow", "magazine" }, 1 }, + { { "Chemlight_blue", "magazine" }, 1 } + }; + }; + class ThrowExplosive + { + items[] = { + { { "HandGrenade", "magazine" }, 25 }, + { { "MiniGrenade", "magazine" }, 25 } + }; + }; + class HighExplosives + { + items[] = { + { { "SatchelCharge_Remote_Mag", "magazine" }, 15 }, + { { "ATMine_Range_Mag", "magazine" }, 5 }, + { { "SLAMDirectionalMine_Wire_Mag", "magazine" }, 3 }, + { { "DemoCharge_Remote_Mag", "magazine" }, 6 }, + { { "ClaymoreDirectionalMine_Remote_Mag", "magazine" }, 10 }, + { { "APERSBoundingMine_Range_Mag", "magazine" }, 21 }, + { { "APERSTripMine_Wire_Mag", "magazine" }, 20 }, + { { "APERSMine_Range_Mag", "magazine" }, 20 } + }; + }; + class ShellFlares + { + items[] = { + { { "3Rnd_UGL_FlareWhite_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareGreen_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareRed_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareYellow_F", "magazine" }, 1 }, + { { "3Rnd_UGL_FlareCIR_F", "magazine" }, 1 }, + { { "UGL_FlareWhite_F", "magazine" }, 1 }, + { { "UGL_FlareGreen_F", "magazine" }, 1 }, + { { "UGL_FlareRed_F", "magazine" }, 1 }, + { { "UGL_FlareYellow_F", "magazine" }, 1 }, + { { "UGL_FlareCIR_F", "magazine" }, 1 } + }; + }; + class ShellSmokes + { + items[] = { + { { "1Rnd_Smoke_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeRed_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeGreen_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeYellow_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokePurple_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeBlue_Grenade_shell", "magazine" }, 1 }, + { { "1Rnd_SmokeOrange_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_Smoke_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeRed_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeGreen_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeYellow_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokePurple_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeBlue_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_SmokeOrange_Grenade_shell", "magazine" }, 1 } + }; + }; + class ShellExplosives + { + items[] = { + { { "1Rnd_HE_Grenade_shell", "magazine" }, 1 }, + { { "3Rnd_HE_Grenade_shell", "magazine" }, 1 } + }; + }; + +// ########################################################################### Base Classes ########################################################################### + + class Scopes_Vanilla + { + items[] = { + { { "optic_NVS", "item" }, 1 }, + { { "optic_tws", "item" }, 1 }, + { { "optic_tws_mg", "item" }, 1 }, + { { "optic_SOS", "item" }, 2 }, + { { "optic_LRPS", "item" }, 2 }, + { { "optic_DMS", "item" }, 3 }, + { { "optic_Arco", "item" }, 4 }, + { { "optic_Hamr", "item" }, 5 }, + { { "Elcan_epoch", "item" }, 5 }, + { { "Elcan_reflex_epoch", "item" }, 5 }, + { { "optic_MRCO", "item" }, 6 }, + { { "optic_Holosight", "item" }, 6 }, + { { "optic_Holosight_smg", "item" }, 6 }, + { { "optic_Aco", "item" }, 7 }, + { { "optic_ACO_grn", "item" }, 7 }, + { { "optic_Aco_smg", "item" }, 7 }, + { { "optic_ACO_grn_smg", "item" }, 8 }, + { { "optic_Yorris", "item" }, 10 }, + { { "optic_MRD", "item" }, 10 } + }; + }; + class Scopes_MarkDLC + { + items[] = { + { { "optic_AMS", "item" }, 2 }, + { { "optic_AMS_khk", "item" }, 1 }, + { { "optic_AMS_snd", "item" }, 1 }, + { { "optic_KHS_blk", "item" }, 1 }, + { { "optic_KHS_hex", "item" }, 1 }, + { { "optic_KHS_old", "item" }, 2 }, + { { "optic_KHS_tan", "item" }, 1 } + }; + }; + class Scopes_CUP + { + items[] = { + { { "CUP_optic_PSO_1", "item" }, 1 }, + { { "CUP_optic_PSO_3", "item" }, 1 }, + { { "CUP_optic_Kobra", "item" }, 1 }, + { { "CUP_optic_GOSHAWK", "item" }, 1 }, + { { "CUP_optic_NSPU", "item" }, 1 }, + { { "CUP_optic_PechenegScope", "item" }, 1 }, + { { "CUP_optic_SB_3_12x50_PMII", "item" }, 1 }, + { { "CUP_optic_AN_PAS_13c2", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4", "item" }, 1 }, + { { "CUP_optic_HoloBlack", "item" }, 1 }, + { { "CUP_optic_HoloWdl", "item" }, 1 }, + { { "CUP_optic_HoloDesert", "item" }, 1 }, + { { "CUP_optic_Eotech533", "item" }, 1 }, + { { "CUP_optic_Eotech533Grey", "item" }, 1 }, + { { "CUP_optic_CompM4", "item" }, 1 }, + { { "CUP_optic_SUSAT", "item" }, 1 }, + { { "CUP_optic_ACOG", "item" }, 1 }, + { { "CUP_optic_CWS", "item" }, 1 }, + { { "CUP_optic_Leupold_VX3", "item" }, 1 }, + { { "CUP_optic_AN_PVS_10", "item" }, 1 }, + { { "CUP_optic_CompM2_Black", "item" }, 1 }, + { { "CUP_optic_CompM2_Woodland", "item" }, 1 }, + { { "CUP_optic_CompM2_Woodland2", "item" }, 1 }, + { { "CUP_optic_CompM2_Desert", "item" }, 1 }, + { { "CUP_optic_RCO", "item" }, 1 }, + { { "CUP_optic_RCO_desert", "item" }, 1 }, + { { "CUP_optic_LeupoldM3LR", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_10x40_LRT_Desert", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_10x40_LRT_Woodland", "item" }, 1 }, + { { "CUP_optic_ElcanM145", "item" }, 1 }, + { { "CUP_optic_AN_PAS_13c1", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_CQ_T", "item" }, 1 }, + { { "CUP_optic_ELCAN_SpecterDR", "item" }, 1 }, + { { "CUP_optic_LeupoldMk4_MRT_tan", "item" }, 1 }, + { { "CUP_optic_SB_11_4x20_PM", "item" }, 1 }, + { { "CUP_optic_ZDDot", "item" }, 1 }, + { { "CUP_optic_MRad", "item" }, 1 }, + { { "CUP_optic_TrijiconRx01_desert", "item" }, 1 }, + { { "CUP_optic_TrijiconRx01_black", "item" }, 1 }, + { { "CUP_optic_AN_PVS_4", "item" }, 1 } + }; + }; + class Bipods_Vanilla + { + items[] = { + { { "bipod_01_F_snd", "item" }, 1 }, + { { "bipod_01_F_blk", "item" }, 1 }, + { { "bipod_01_F_mtp", "item" }, 1 }, + { { "bipod_02_F_blk", "item" }, 1 }, + { { "bipod_02_F_tan", "item" }, 1 }, + { { "bipod_02_F_hex", "item" }, 1 }, + { { "bipod_03_F_blk", "item" }, 1 }, + { { "bipod_03_F_oli", "item" }, 1 } + }; + }; + class Bipods_CUP + { + items[] = { + { { "CUP_bipod_Harris_1A2_L", "item" }, 1 }, + { { "CUP_bipod_VLTOR_Modpod", "item" }, 1 } + }; + }; + class Muzzles_Vanilla + { + items[] = { + { { "muzzle_sr25S_epoch", "item" }, 1 }, + { { "muzzle_snds_H", "item" }, 1 }, + { { "muzzle_snds_M", "item" }, 1 }, + { { "muzzle_snds_L", "item" }, 1 }, + { { "muzzle_snds_B", "item" }, 1 }, + { { "muzzle_snds_H_MG", "item" }, 1 }, + { { "muzzle_snds_acp", "item" }, 1 }, + { { "Muzzles_MultiGun", "CfgLootTable" }, 1 } + }; + }; + class Muzzles_MarkDLC + { + items[] = { + { { "muzzle_snds_570", "item" }, 1 }, + { { "muzzle_snds_338_black", "item" }, 1 }, + { { "muzzle_snds_338_green", "item" }, 1 }, + { { "muzzle_snds_338_sand", "item" }, 1 }, + { { "muzzle_snds_93mmg", "item" }, 1 }, + { { "muzzle_snds_93mmg_tan", "item" }, 1 } + }; + }; + class Muzzles_CUP + { + items[] = { + { { "CUP_muzzle_snds_M110", "item" }, 1 }, + { { "CUP_muzzle_snds_M14", "item" }, 1 }, + { { "CUP_muzzle_PBS4", "item" }, 1 }, + { { "CUP_muzzle_PB6P9", "item" }, 1 }, + { { "CUP_muzzle_Bizon", "item" }, 1 }, + { { "CUP_muzzle_snds_M9", "item" }, 1 }, + { { "CUP_muzzle_snds_MicroUzi", "item" }, 1 }, + { { "CUP_muzzle_snds_AWM", "item" }, 1 }, + { { "CUP_muzzle_snds_G36_black", "item" }, 1 }, + { { "CUP_muzzle_snds_G36_desert", "item" }, 1 }, + { { "CUP_muzzle_snds_L85", "item" }, 1 }, + { { "CUP_muzzle_snds_M16_camo", "item" }, 1 }, + { { "CUP_muzzle_snds_M16", "item" }, 1 }, + { { "CUP_muzzle_snds_SCAR_L", "item" }, 1 }, + { { "CUP_muzzle_mfsup_SCAR_L", "item" }, 1 }, + { { "CUP_muzzle_snds_SCAR_H", "item" }, 1 }, + { { "CUP_muzzle_mfsup_SCAR_H", "item" }, 1 }, + { { "CUP_muzzle_snds_XM8", "item" }, 1 } + }; + }; + class Muzzles_MultiGun + { + items[] = { + { { "Heal_EPOCH", "item" }, 1 }, + { { "Defib_EPOCH", "item" }, 1 }, + { { "Repair_EPOCH", "item" }, 1 } + }; + }; + class WpnFlashLights_Vanilla + { + items[] = { + { { "acc_flashlight", "item" }, 1 }, + { { "acc_flashlight_pistol", "item" }, 1 }, + { { "acc_pointer_IR", "item" }, 1 } + }; + }; + class WpnFlashLights_CUP + { + items[] = { + { { "CUP_acc_Glock17_Flashlight", "item" }, 1 }, + { { "CUP_acc_ANPEQ_15", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2", "item" }, 1 }, + { { "CUP_acc_Flashlight", "item" }, 1 }, + { { "CUP_acc_Flashlight_wdl", "item" }, 1 }, + { { "CUP_acc_Flashlight_desert", "item" }, 1 }, + { { "CUP_acc_XM8_light_module", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2_camo", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2_desert", "item" }, 1 }, + { { "CUP_acc_ANPEQ_2_grey", "item" }, 1 }, + { { "CUP_acc_CZ_M3X", "item" }, 1 } + }; + }; + class SniperCamo_CUP + { + items[] = { + { { "CUP_Mxx_camo", "item" }, 1 }, + { { "CUP_Mxx_camo_half", "item" }, 1 }, + { { "CUP_SVD_camo_g", "item" }, 1 }, + { { "CUP_SVD_camo_g_half", "item" }, 1 }, + { { "CUP_SVD_camo_d", "item" }, 1 }, + { { "CUP_SVD_camo_d_half", "item" }, 1 } + + }; + }; + class Pistols_Vanilla + { + items[] = { + { { "Hgun_Pistol_Signal_F", "weapon" }, 4 }, + { { "MultiGun", "weapon" }, 5 }, + { { "hgun_Pistol_heavy_01_F", "weapon" }, 9 }, + { { "hgun_P07_F", "weapon" }, 10 }, + { { "hgun_Rook40_F", "weapon" }, 11 }, + { { "hgun_Pistol_heavy_02_F", "weapon" }, 13 }, + { { "1911_pistol_epoch", "weapon" }, 14 }, + { { "hgun_ACPC2_F", "weapon" }, 16 }, + { { "ruger_pistol_epoch", "weapon" }, 18 } + }; + }; + class NL_Pistols + { + items[] = { + { { "hgun_Pistol_tranq_01", "weapon" }, 1 } + }; + }; + class PistolAmmo_Vanilla + { + items[] = { + { { "EnergyPack", "magazine" }, 4 }, + { { "6Rnd_RedSignal_F", "magazine" }, 2 }, + { { "6Rnd_GreenSignal_F", "magazine" }, 2 }, + { { "30Rnd_9x21_Mag", "magazine" }, 10 }, + { { "6Rnd_45ACP_Cylinder", "magazine" }, 11 }, + { { "16Rnd_9x21_Mag", "magazine" }, 11 }, + { { "11Rnd_45ACP_Mag", "magazine" }, 12 }, + { { "9Rnd_45ACP_Mag", "magazine" }, 16 }, + { { "9rnd_45X88_magazine", "magazine" }, 16 }, + { { "10rnd_22X44_magazine", "magazine" }, 16 } + }; + }; + class NL_PistolAmmo + { + items[] = { + { { "tranq_dart_mag", "magazine" }, 1 } + }; + }; + class Pistols_CUP + { + items[] = { + { { "CUP_hgun_Compact", "weapon" }, 1 }, + { { "CUP_hgun_Duty", "weapon" }, 1 }, + { { "CUP_hgun_Phantom", "weapon" }, 1 }, + { { "CUP_hgun_Glock17", "weapon" }, 1 }, + { { "CUP_hgun_Makarov", "weapon" }, 1 }, + { { "CUP_hgun_MicroUzi", "weapon" }, 1 }, + { { "CUP_hgun_TaurusTracker455", "weapon" }, 1 }, + { { "CUP_hgun_PB6P9", "weapon" }, 1 }, + { { "CUP_hgun_SA61", "weapon" }, 1 }, + { { "CUP_hgun_M9", "weapon" }, 1 }, + { { "CUP_hgun_TaurusTracker455_gold", "weapon" }, 1 }, + { { "CUP_hgun_Colt1911", "weapon" }, 1 } + }; + }; + class PistolAmmo_CUP + { + items[] = { + { { "CUP_10Rnd_9x19_Compact", "magazine" }, 2 }, + { { "CUP_18Rnd_9x19_Phantom", "magazine" }, 1 }, + { { "CUP_17Rnd_9x19_glock17", "magazine" }, 1 }, + { { "CUP_8Rnd_9x18_Makarov_M", "magazine" }, 2 }, + { { "CUP_8Rnd_9x18_MakarovSD_M", "magazine" }, 2 }, + { { "CUP_30Rnd_9x19_UZI", "magazine" }, 1 }, + { { "CUP_6Rnd_45ACP_M", "magazine" }, 3 }, + { { "CUP_20Rnd_B_765x17_Ball_M", "magazine" }, 1 }, + { { "CUP_15Rnd_9x19_M9", "magazine" }, 1 }, + { { "CUP_7Rnd_45ACP_1911", "magazine" }, 2 } + }; + }; + class Pistols_MAD + { + items[] = { + { { "revolver01", "weapon" }, 17 } + }; + }; + class Rifle_Vanilla + { + items[] = { + { { "AKM_EPOCH", "weapon" }, 3 }, + { { "sr25_epoch", "weapon" }, 4 }, + + { { "arifle_Katiba_GL_F", "weapon" }, 2 }, + { { "arifle_Katiba_C_F", "weapon" }, 3 }, + { { "arifle_Katiba_F", "weapon" }, 5 }, + + { { "arifle_MX_GL_F", "weapon" }, 3 }, + { { "arifle_MX_GL_Black_F", "weapon" }, 2 }, + { { "arifle_MXM_Black_F", "weapon" }, 2 }, + { { "arifle_MXC_Black_F", "weapon" }, 3 }, + { { "arifle_MX_Black_F", "weapon" }, 2 }, + { { "arifle_MXM_F", "weapon" }, 3 }, + { { "arifle_MXC_F", "weapon" }, 3 }, + { { "arifle_MX_F", "weapon" }, 3 }, + + { { "l85a2_epoch", "weapon" }, 1 }, + { { "l85a2_pink_epoch", "weapon" }, 1 }, + { { "l85a2_ugl_epoch", "weapon" }, 1 }, + + { { "m4a3_EPOCH", "weapon" }, 7 }, + + { { "m16_EPOCH", "weapon" }, 2 }, + { { "m16Red_EPOCH", "weapon" }, 1 }, + + { { "arifle_Mk20_GL_F", "weapon" }, 12 }, + { { "arifle_Mk20_GL_plain_F", "weapon" }, 12 }, + { { "arifle_Mk20C_F", "weapon" }, 16 }, + { { "arifle_Mk20C_plain_F", "weapon" }, 18 }, + { { "arifle_Mk20_F", "weapon" }, 20 }, + { { "arifle_Mk20_plain_F", "weapon" }, 22 }, + + { { "arifle_TRG21_GL_F", "weapon" }, 2 }, + { { "arifle_TRG21_F", "weapon" }, 3 }, + { { "arifle_TRG20_F", "weapon" }, 5 }, + + { { "arifle_SDAR_F", "weapon" }, 9 }, + { { "Rollins_F", "weapon" }, 9 }, + { { "SMG_01_F", "weapon" }, 9 }, + { { "SMG_02_F", "weapon" }, 9 }, + + { { "SMG_03_TR_black", "weapon" }, 1 }, + { { "SMG_03_TR_camo", "weapon" }, 1 }, + { { "SMG_03_TR_khaki", "weapon" }, 1 }, + { { "SMG_03_TR_hex", "weapon" }, 1 }, + { { "SMG_03C_TR_black", "weapon" }, 1 }, + { { "SMG_03C_TR_camo", "weapon" }, 1 }, + { { "SMG_03C_TR_khaki", "weapon" }, 1 }, + { { "SMG_03C_TR_hex", "weapon" }, 1 }, + { { "SMG_03_black", "weapon" }, 1 }, + { { "SMG_03_camo", "weapon" }, 1 }, + { { "SMG_03_khaki", "weapon" }, 1 }, + { { "SMG_03_hex", "weapon" }, 1 }, + { { "SMG_03C_black", "weapon" }, 1 }, + { { "SMG_03C_camo", "weapon" }, 1 }, + { { "SMG_03C_khaki", "weapon" }, 1 }, + { { "SMG_03C_hex", "weapon" }, 1 }, + + { { "hgun_PDW2000_F", "weapon" }, 10 }, + { { "speargun_epoch", "weapon" }, 5 } + }; + }; + class RifleAmmo_Vanilla + { + items[] = { + { { "30Rnd_762x39_Mag", "magazine" }, 8 }, + + { { "30Rnd_65x39_caseless_mag", "magazine" }, 3 }, + { { "30Rnd_65x39_caseless_mag_Tracer", "magazine" }, 2 }, + { { "30Rnd_65x39_caseless_green", "magazine" }, 3 }, + { { "30Rnd_65x39_caseless_green_mag_Tracer", "magazine" }, 2 }, + + { { "20Rnd_556x45_UW_mag", "magazine" }, 12 }, + + { { "30Rnd_556x45_Stanag", "magazine" }, 4 }, + { { "30Rnd_556x45_Stanag_Tracer_Red", "magazine" }, 2 }, + { { "30Rnd_556x45_Stanag_Tracer_Green", "magazine" }, 2 }, + { { "30Rnd_556x45_Stanag_Tracer_Yellow", "magazine" }, 2 }, + + { { "30Rnd_45ACP_Mag_SMG_01", "magazine" }, 5 }, + { { "30Rnd_45ACP_Mag_SMG_01_Tracer_Green", "magazine" }, 5 }, + + { { "30Rnd_9x21_Mag", "magazine" }, 10 }, + { { "5Rnd_rollins_mag", "magazine" }, 10 }, + { { "50Rnd_570x28_SMG_03", "magazine" }, 10 }, + + { { "spear_magazine", "magazine" }, 2 } + }; + }; + class NL_RifleAmmo + { + items[] = { + { { "NL_pvc_bb_mag", "magazine" }, 5 }, + { { "NL_shot_bb_mag", "magazine" }, 5 }, + { { "xbow_mag_bolt", "magazine" }, 5 }, + { { "xbow_mag_tranq", "magazine" }, 5 }, + { { "xbow_mag_exp", "magazine" }, 2 } + }; + }; + class A2_Rifle + { + items[] = { + { { "a2_ak47s_gold_EPOCH", "weapon" }, 1 }, + { { "a2_AK107_EPOCH", "weapon" }, 1 }, + { { "a2_bizon_epoch", "weapon" }, 1 }, + { { "a2_dmr_epoch", "weapon" }, 1 }, + { { "a2_dmr_epoch_scoped", "weapon" }, 1 }, + { { "a2_fnfal_epoch", "weapon" }, 1 }, + { { "a2_G36_C_epoch", "weapon" }, 1 }, + { { "a2_Mg36_epoch", "weapon" }, 1 }, + { { "a2_leeenfield_epoch", "weapon" }, 1 }, + { { "a2_m110_epoch", "weapon" }, 1 }, + { { "a2_mk16_epoch", "weapon" }, 1 }, + { { "a2_mk17_epoch", "weapon" }, 1 }, + { { "a2_svd_epoch", "weapon" }, 1 }, + { { "a2_VSS_vintorez_epoch", "weapon" }, 1 }, + { { "a2_aks74un_EPOCH", "weapon" }, 1 } + }; + }; + class NL_Rifle + { + items[] = { + { { "pvcrifle_01_F", "weapon" }, 1 }, + { { "nl_Shotgun", "weapon" }, 1 }, + { { "nl_auto_xbow", "weapon" }, 1 } + }; + }; + class A2_RifleAmmo + { + items[] = { + { { "Bizon_64Rnd_9x18", "magazine" }, 2 }, + { { "20Rnd_762x51_DMR", "magazine" }, 2 }, + { { "20Rnd_762x51_FNFAL", "magazine" }, 2 }, + { { "30Rnd_556x45_G36", "magazine" }, 2 }, + { { "10Rnd_303", "magazine" }, 2 }, + { { "100Rnd_556x45_BetaCMag", "magazine" }, 2 }, + { { "10Rnd_762x54_SVD", "magazine" }, 2 }, + { { "10Rnd_9x39_SP5_VSS", "magazine" }, 2 } + }; + }; + class Rifle_CUP + { + items[] = { + { { "CUP_smg_bizon", "weapon" }, 1 }, + { { "CUP_smg_EVO", "weapon" }, 1 }, + { { "CUP_smg_MP5SD6", "weapon" }, 1 }, + { { "CUP_smg_MP5A5", "weapon" }, 1 }, + + { { "CUP_sgun_AA12", "weapon" }, 1 }, + { { "CUP_sgun_M1014", "weapon" }, 1 }, + { { "CUP_sgun_Saiga12K", "weapon" }, 1 }, + + { { "CUP_arifle_AK74", "weapon" }, 1 }, + { { "CUP_arifle_AK74M", "weapon" }, 1 }, + { { "CUP_arifle_AK74M_GL", "weapon" }, 1 }, + { { "CUP_arifle_AK74_GL", "weapon" }, 1 }, + { { "CUP_arifle_AK74_GL_kobra", "weapon" }, 1 }, + { { "CUP_arifle_AKS", "weapon" }, 1 }, + { { "CUP_arifle_AKS_Gold", "weapon" }, 1 }, + { { "CUP_arifle_AKS74", "weapon" }, 1 }, + { { "CUP_arifle_AKS74U", "weapon" }, 1 }, + { { "CUP_arifle_AK107", "weapon" }, 1 }, + { { "CUP_arifle_AK107_GL", "weapon" }, 1 }, + { { "CUP_arifle_AKM", "weapon" }, 1 }, + + { { "CUP_arifle_CZ805_A1", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_GL", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_A2", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_B", "weapon" }, 1 }, + { { "CUP_arifle_CZ805_B_GL", "weapon" }, 1 }, + + { { "CUP_arifle_FNFAL", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL_railed", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL5061", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL5062", "weapon" }, 1 }, + { { "CUP_arifle_FNFAL_OSW", "weapon" }, 1 }, + + { { "CUP_arifle_G36A", "weapon" }, 1 }, + { { "CUP_arifle_G36A_camo", "weapon" }, 1 }, + { { "CUP_arifle_G36K", "weapon" }, 1 }, + { { "CUP_arifle_G36K_camo", "weapon" }, 1 }, + { { "CUP_arifle_G36C", "weapon" }, 1 }, + { { "CUP_arifle_G36C_camo", "weapon" }, 1 }, + + { { "CUP_arifle_L85A2", "weapon" }, 1 }, + { { "CUP_arifle_L85A2_GL", "weapon" }, 1 }, + + { { "CUP_arifle_M16A2", "weapon" }, 1 }, + { { "CUP_arifle_M16A2_GL", "weapon" }, 1 }, + { { "CUP_arifle_M16A4_Base", "weapon" }, 1 }, + { { "CUP_arifle_M16A4_GL", "weapon" }, 1 }, + + { { "CUP_arifle_M4A1_BUIS_GL", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_BUIS_camo_GL", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_BUIS_desert_GL", "weapon" }, 1 }, + { { "CUP_arifle_M4A1", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_camo", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_black", "weapon" }, 1 }, + { { "CUP_arifle_M4A1_desert", "weapon" }, 1 }, + { { "CUP_arifle_M4A3_desert", "weapon" }, 1 }, + + { { "CUP_arifle_Sa58P", "weapon" }, 1 }, + { { "CUP_arifle_Sa58V", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS1", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS2", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS2_gl", "weapon" }, 1 }, + { { "CUP_arifle_Sa58P_des", "weapon" }, 1 }, + { { "CUP_arifle_Sa58V_camo", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS1_des", "weapon" }, 1 }, + { { "CUP_arifle_Sa58RIS2_camo", "weapon" }, 1 }, + + { { "CUP_arifle_Mk16_STD", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_STD_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_STD_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_STD_EGLM", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_CQC_EGLM", "weapon" }, 1 }, + { { "CUP_arifle_Mk16_SV", "weapon" }, 1 }, + + { { "CUP_arifle_Mk17_CQC", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_CQC_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_CQC_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_CQC_EGLM", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD_FG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD_SFG", "weapon" }, 1 }, + { { "CUP_arifle_Mk17_STD_EGLM", "weapon" }, 1 }, + + { { "CUP_arifle_Mk20", "weapon" }, 1 }, + + { { "CUP_arifle_XM8_Carbine", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Carbine_GL", "weapon" }, 1 }, + { { "CUP_arifle_xm8_sharpshooter", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Compact", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Compact_Rail", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Railed", "weapon" }, 1 }, + { { "CUP_arifle_XM8_Carbine_FG", "weapon" }, 1 }, + { { "CUP_arifle_xm8_SAW", "weapon" }, 1 }, + + { { "CUP_arifle_AK47", "weapon" }, 1 }, + { { "CUP_arifle_RPK74", "weapon" }, 1 }, + { { "CUP_arifle_MG36", "weapon" }, 1 }, + { { "CUP_arifle_RPK74_45", "weapon" }, 1 }, + { { "CUP_arifle_RPK74M", "weapon" }, 1 }, + { { "CUP_arifle_MG36_camo", "weapon" }, 1 }, + { { "CUP_arifle_L86A2", "weapon" }, 1 } + }; + }; + class RifleAmmo_CUP + { + items[] = { + { { "CUP_30Rnd_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Green_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Red_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_White_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Yellow_Tracer_545x39_AK_M", "magazine" }, 1 }, + { { "CUP_45Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_762x39_AK47_M", "magazine" }, 1 }, + { { "CUP_75Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Red_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Green_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Yellow_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_100Rnd_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Red_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Green_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Yellow_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_20Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_CZ805B", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_FNFAL_M", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_B_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_SCAR", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M_TracerG", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M_TracerR", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M_TracerY", "magazine" }, 1 }, + { { "CUP_30Rnd_Sa58_M", "magazine" }, 1 }, + + { { "CUP_20Rnd_B_AA12_Pellets", "magazine" }, 3 }, + { { "CUP_20Rnd_B_AA12_74Slug", "magazine" }, 2 }, + { { "CUP_20Rnd_B_AA12_HE", "magazine" }, 1 }, + { { "CUP_8Rnd_B_Beneli_74Slug", "magazine" }, 2 }, + { { "CUP_8Rnd_B_Beneli_74Pellets", "magazine" }, 3 }, + { { "CUP_8Rnd_B_Saiga12_74Slug_M", "magazine" }, 2 }, + { { "CUP_8Rnd_B_Saiga12_74Pellets_M", "magazine" }, 3 } + }; + }; + class Rifle_MAD + { + items[] = { + { { "VG_sawed_off_01", "weapon" }, 1 }, + { { "Devastator_01", "weapon" }, 1 } + }; + }; + class RifleAmmo_MAD + { + items[] = { + { { "in005_1Rnd_12Gauge_Pellets", "magazine" }, 1 }, + { { "in005_1Rnd_12Gauge_Slug", "magazine" }, 1 } + }; + }; + class SniperRifle_Vanilla + { + items[] = { + { { "m107_EPOCH", "weapon" }, 1 }, + { { "m107Tan_EPOCH", "weapon" }, 1 }, + + { { "srifle_LRR_F", "weapon" }, 11 }, + { { "srifle_GM6_F", "weapon" }, 16 }, + + { { "M14_EPOCH", "weapon" }, 1 }, + { { "M14Grn_EPOCH", "weapon" }, 1 }, + + { { "srifle_EBR_F", "weapon" }, 20 }, + + { { "srifle_DMR_01_F", "weapon" }, 17 } + }; + }; + class SniperRifleAmmo_Vanilla + { + items[] = { + { { "5Rnd_127x108_Mag", "magazine" }, 1 }, + { { "5Rnd_127x108_APDS_Mag", "magazine" }, 1 }, + { { "7Rnd_408_Mag", "magazine" }, 1 }, + { { "20Rnd_762x51_Mag", "magazine" }, 1 }, + { { "10Rnd_762x54_Mag", "magazine" }, 1 } + }; + }; + class SniperRifleMarkDLC + { + items[] = { + { { "srifle_DMR_02_F", "weapon" }, 1 }, + { { "srifle_DMR_02_camo_F", "weapon" }, 1 }, + { { "srifle_DMR_02_sniper_F", "weapon" }, 1 }, + { { "srifle_DMR_03_F", "weapon" }, 1 }, + { { "srifle_DMR_03_khaki_F", "weapon" }, 1 }, + { { "srifle_DMR_03_tan_F", "weapon" }, 1 }, + { { "srifle_DMR_03_multicam_F", "weapon" }, 1 }, + { { "srifle_DMR_03_woodland_F", "weapon" }, 1 }, + { { "srifle_DMR_04_F", "weapon" }, 1 }, + { { "srifle_DMR_04_Tan_F", "weapon" }, 1 }, + { { "srifle_DMR_05_blk_F", "weapon" }, 1 }, + { { "srifle_DMR_05_hex_F", "weapon" }, 1 }, + { { "srifle_DMR_05_tan_f", "weapon" }, 1 }, + { { "srifle_DMR_06_camo_F", "weapon" }, 1 }, + { { "srifle_DMR_06_olive_F", "weapon" }, 1 } + }; + }; + class SniperRifleAmmoMarkDLC + { + items[] = { + { { "10Rnd_338_Mag", "magazine" }, 1 }, // DMR_02 + { { "10Rnd_127x54_Mag", "magazine" }, 1 }, // DMR_04 + { { "10Rnd_93x64_DMR_05_Mag", "magazine" }, 1 } // DMR_05 + + }; + }; + class SniperRifle_CUP + { + items[] = { + { { "CUP_srifle_AS50", "weapon" }, 1 }, + { { "CUP_srifle_LeeEnfield", "weapon" }, 1 }, + { { "CUP_srifle_LeeEnfield_rail", "weapon" }, 1 }, + { { "CUP_srifle_M107_Base", "weapon" }, 1 }, + { { "CUP_srifle_M110", "weapon" }, 1 }, + { { "CUP_srifle_M14", "weapon" }, 1 }, + { { "CUP_srifle_M14_DMR", "weapon" }, 1 }, + { { "CUP_srifle_Mk12SPR", "weapon" }, 1 }, + { { "CUP_srifle_M24_des", "weapon" }, 1 }, + { { "CUP_srifle_M40A3", "weapon" }, 1 }, + { { "CUP_srifle_ksvk", "weapon" }, 1 }, + { { "CUP_srifle_SVD", "weapon" }, 1 }, + { { "CUP_srifle_VSSVintorez", "weapon" }, 1 }, + { { "CUP_srifle_CZ750", "weapon" }, 1 }, + { { "CUP_srifle_CZ550", "weapon" }, 1 }, + { { "CUP_srifle_CZ550_rail", "weapon" }, 1 }, + { { "CUP_srifle_M24_wdl", "weapon" }, 1 }, + { { "CUP_srifle_SVD_des", "weapon" }, 1 }, + { { "CUP_srifle_AWM_des", "weapon" }, 1 }, + { { "CUP_srifle_AWM_wdl", "weapon" }, 1 }, + { { "CUP_srifle_G22_des", "weapon" }, 1 } + }; + }; + class SniperRifleAmmo_CUP + { + items[] = { + { { "CUP_5Rnd_127x99_as50_M", "magazine" }, 1 }, + { { "CUP_10x_303_M", "magazine" }, 1 }, + { { "CUP_10Rnd_127x99_m107", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_B_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_M110", "magazine" }, 1 }, + { { "CUP_20Rnd_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Yellow_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Red_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_Green_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_TE1_White_Tracer_762x51_DMR", "magazine" }, 1 }, + { { "CUP_20Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Red_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Green_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_30Rnd_TE1_Yellow_Tracer_556x45_G36", "magazine" }, 1 }, + { { "CUP_100Rnd_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Red_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Green_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_100Rnd_TE1_Yellow_Tracer_556x45_BetaCMag", "magazine" }, 1 }, + { { "CUP_5Rnd_762x51_M24", "magazine" }, 1 }, + { { "CUP_5Rnd_127x108_KSVK_M", "magazine" }, 1 }, + { { "CUP_10Rnd_762x54_SVD_M", "magazine" }, 1 }, + { { "CUP_10Rnd_9x39_SP5_VSS_M", "magazine" }, 1 }, + { { "CUP_20Rnd_9x39_SP5_VSS_M", "magazine" }, 1 }, + { { "CUP_10Rnd_762x51_CZ750_Tracer", "magazine" }, 1 }, + { { "CUP_10Rnd_762x51_CZ750", "magazine" }, 1 }, + { { "CUP_5x_22_LR_17_HMR_M", "magazine" }, 1 }, + { { "CUP_5Rnd_86x70_L115A1", "magazine" }, 1 }, + { { "CUP_5Rnd_762x67_G22", "magazine" }, 1 } + }; + }; + class Machinegun_Vanilla + { + items[] = { + { { "LMG_Zafir_F", "weapon" }, 2 }, + + { { "arifle_MX_SW_F", "weapon" }, 4 }, + { { "arifle_MX_SW_Black_F", "weapon" }, 2 }, + + { { "LMG_Mk200_F", "weapon" }, 6 }, + + { { "m249_EPOCH", "weapon" }, 1 }, + { { "m249Tan_EPOCH", "weapon" }, 1 } + }; + }; + class MachinegunAmmo_Vanilla + { + items[] = { + { { "100Rnd_65x39_caseless_mag", "magazine" }, 2 }, + { { "100Rnd_65x39_caseless_mag_Tracer", "magazine" }, 1 }, + + { { "150Rnd_762x54_Box", "magazine" }, 2 }, + { { "150Rnd_762x54_Box_Tracer", "magazine" }, 1 }, + + { { "200Rnd_556x45_M249", "magazine" }, 19 }, + + { { "200Rnd_65x39_cased_Box", "magazine" }, 2 }, + { { "200Rnd_65x39_cased_Box_Tracer", "magazine" }, 1 } + }; + }; + class MachinegunMarkDLC + { + items[] = { + { { "MMG_01_hex_F", "weapon" }, 1 }, + { { "MMG_01_tan_F", "weapon" }, 1 }, + { { "MMG_02_camo_F", "weapon" }, 1 }, + { { "MMG_02_black_F", "weapon" }, 1 }, + { { "MMG_02_sand_F", "weapon" }, 1 } + }; + }; + class MachinegunAmmoMarkDLC + { + items[] = { + { { "150Rnd_93x64_Mag", "magazine" }, 1 }, + { { "130Rnd_338_Mag", "magazine" }, 1 } + }; + }; + class Machinegun_CUP + { + items[] = { + { { "CUP_lmg_L110A1", "weapon" }, 1 }, + { { "CUP_lmg_M240", "weapon" }, 1 }, + { { "CUP_lmg_minimipara", "weapon" }, 1 }, + { { "CUP_lmg_minimi", "weapon" }, 1 }, + { { "CUP_lmg_m249_para", "weapon" }, 1 }, + { { "CUP_lmg_M249_E2", "weapon" }, 1 }, + { { "CUP_lmg_minimi_railed", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip1", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip4", "weapon" }, 1 }, + { { "CUP_lmg_L7A2", "weapon" }, 1 }, + { { "CUP_lmg_PKM", "weapon" }, 1 }, + { { "CUP_lmg_Pecheneg", "weapon" }, 1 }, + { { "CUP_lmg_UK59", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip2", "weapon" }, 1 }, + { { "CUP_lmg_m249_pip3", "weapon" }, 1 }, + { { "CUP_lmg_m249_SQuantoon", "weapon" }, 1 }, + { { "CUP_lmg_M60E4", "weapon" }, 1 }, + { { "CUP_lmg_Mk48_des", "weapon" }, 1 }, + { { "CUP_lmg_Mk48_wdl", "weapon" }, 1 } + }; + }; + class MachinegunAmmo_CUP + { + items[] = { + { { "CUP_200Rnd_TE4_Red_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Yellow_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_200Rnd_TE1_Red_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_Green_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_Red_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_Yellow_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Green_Tracer_556x45_L110A1", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Red_Tracer_556x45_L110A1", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Yellow_Tracer_556x45_L110A1", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_Stanag", "magazine" }, 1 }, + { { "CUP_30Rnd_556x45_G36", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_LRT4_White_Tracer_762x51_Belt_M", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_LRT4_Red_Tracer_762x51_Belt_M", "magazine" }, 1 }, + { { "CUP_200Rnd_TE4_Green_Tracer_556x45_M249", "magazine" }, 1 }, + { { "CUP_100Rnd_TE4_LRT4_762x54_PK_Tracer_Green_M", "magazine" }, 1 }, + { { "CUP_50Rnd_UK59_762x54R_Tracer", "magazine" }, 1 }, + + { { "CUP_64Rnd_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_Green_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_Red_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_White_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_64Rnd_Yellow_Tracer_9x19_Bizon_M", "magazine" }, 1 }, + { { "CUP_30Rnd_9x19_EVO", "magazine" }, 1 }, + { { "CUP_30Rnd_9x19_MP5", "magazine" }, 1 } + }; + }; + class Uniforms_Male_Civ_Vanilla + { + items[] = { + { { "U_C_Poloshirt_stripped", "item" }, 1 }, + { { "U_C_Poloshirt_blue", "item" }, 1 }, + { { "U_C_Poloshirt_burgundy", "item" }, 1 }, + { { "U_C_Poloshirt_tricolour", "item" }, 1 }, + { { "U_C_Poloshirt_salmon", "item" }, 1 }, + { { "U_C_Poloshirt_redwhite", "item" }, 1 }, + { { "U_C_Commoner1_1", "item" }, 1 }, + { { "U_C_Poor_2", "item" }, 1 }, + { { "U_C_HunterBody_grn", "item" }, 1 }, + { { "U_C_Poor_shorts_1", "item" }, 1 }, + { { "U_NikosBody", "item" }, 1 }, + { { "U_NikosAgedBody", "item" }, 1 }, + { { "U_Marshal", "item" }, 1 }, + { { "U_C_man_sport_1_F", "item" }, 1 }, + { { "U_C_man_sport_2_F", "item" }, 1 }, + { { "U_C_man_sport_3_F", "item" }, 1 }, + { { "U_C_Man_casual_1_F", "item" }, 1 }, + { { "U_C_Man_casual_2_F", "item" }, 1 }, + { { "U_C_Man_casual_3_F", "item" }, 1 }, + { { "U_C_Man_casual_4_F", "item" }, 1 }, + { { "U_C_Man_casual_5_F", "item" }, 1 }, + { { "U_C_Man_casual_6_F", "item" }, 1 }, + { { "U_C_Poor_1", "item" }, 1 }, + { { "U_C_WorkerCoveralls", "item" }, 1 }, + { { "U_C_Journalist", "item" }, 1 }, + { { "U_C_Scientist", "item" }, 1 }, + { { "U_OrestesBody", "item" }, 1 }, + { { "U_C_Commoner_shorts", "item" }, 1 }, + { { "U_C_ShirtSurfer_shorts", "item" }, 1 }, + { { "U_C_TeeSurfer_shorts_1", "item" }, 1 }, + { { "U_C_TeeSurfer_shorts_2", "item" }, 1 } + + }; + }; + class Uniforms_Male_Mil_Vanilla + { + items[] = { + { { "U_OG_Guerilla1_1", "item" }, 1 }, + { { "U_OG_Guerilla2_1", "item" }, 1 }, + { { "U_OG_Guerilla2_2", "item" }, 1 }, + { { "U_OG_Guerilla2_3", "item" }, 1 }, + { { "U_OG_Guerilla3_1", "item" }, 1 }, + { { "U_OG_Guerilla3_2", "item" }, 1 }, + { { "U_OG_leader", "item" }, 1 }, + { { "U_O_CombatUniform_ocamo", "item" }, 1 }, + { { "U_O_GhillieSuit", "item" }, 1 }, + { { "U_O_PilotCoveralls", "item" }, 1 }, + { { "U_IG_Guerilla1_1", "item" }, 1 }, + { { "U_IG_leader", "item" }, 1 }, + { { "U_IG_Guerilla2_1", "item" }, 1 }, + { { "U_IG_Guerilla2_3", "item" }, 1 }, + { { "U_IG_Guerilla2_2", "item" }, 1 }, + { { "U_IG_Guerilla3_1", "item" }, 1 }, + { { "U_IG_Guerrilla_6_1", "item" }, 1 }, + { { "U_OG_Guerrilla_6_1", "item" }, 1 }, + { { "U_I_CombatUniform", "item" }, 1 }, + { { "U_I_CombatUniform_shortsleeve", "item" }, 1 }, + { { "U_I_HeliPilotCoveralls", "item" }, 1 }, + { { "U_I_pilotCoveralls", "item" }, 1 }, + { { "U_I_OfficerUniform", "item" }, 1 }, + { { "U_I_GhillieSuit", "item" }, 1 }, + { { "U_I_CombatUniform_tshirt", "item" }, 1 }, + { { "U_O_OfficerUniform_ocamo", "item" }, 1 }, + { { "U_O_SpecopsUniform_ocamo", "item" }, 1 }, + { { "U_O_CombatUniform_oucamo", "item" }, 1 }, + { { "U_I_C_Soldier_Para_1_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_2_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_3_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_4_F", "item" }, 1 }, + { { "U_I_C_Soldier_Para_5_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_1_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_2_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_3_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_4_F", "item" }, 1 }, + { { "U_I_C_Soldier_Bandit_5_F", "item" }, 1 }, + { { "U_I_C_Soldier_Camo_F", "item" }, 1 }, + { { "U_O_T_Soldier_F", "item" }, 1 }, + { { "U_O_T_Officer_F", "item" }, 1 }, + { { "U_O_T_Sniper_F", "item" }, 1 }, + { { "U_RadiationSuit_M_uniform", "item" }, 1 } + }; + }; + class Uniforms_Male_WetSuit + { + items[] = { + { { "U_O_Wetsuit", "item" }, 1 }, + { { "U_I_Wetsuit", "item" }, 1 } + }; + }; + class Uniforms_Male_MarksDLC + { + items[] = { + { { "U_O_T_FullGhillie_tna_F", "item" }, 1 }, + { { "U_O_FullGhillie_lsh", "item" }, 1 }, + { { "U_O_FullGhillie_sard", "item" }, 1 }, + { { "U_O_FullGhillie_ard", "item" }, 1 }, + { { "U_I_FullGhillie_lsh", "item" }, 1 }, + { { "U_I_FullGhillie_sard", "item" }, 1 }, + { { "U_I_FullGhillie_ard", "item" }, 1 } + }; + }; + class Uniforms_Male_KartDLC + { + items[] = { + { { "U_C_Driver_1", "item" }, 1 }, + { { "U_C_Driver_2", "item" }, 1 }, + { { "U_C_Driver_3", "item" }, 1 }, + { { "U_C_Driver_4", "item" }, 1 }, + { { "U_C_Driver_1_black", "item" }, 1 }, + { { "U_C_Driver_1_blue", "item" }, 1 }, + { { "U_C_Driver_1_green", "item" }, 1 }, + { { "U_C_Driver_1_red", "item" }, 1 }, + { { "U_C_Driver_1_white", "item" }, 1 }, + { { "U_C_Driver_1_yellow", "item" }, 1 }, + { { "U_C_Driver_1_orange", "item" }, 1 }, + { { "U_C_Driver_1_red", "item" }, 1 } + }; + }; + class Uniforms_Male_IdapDLC + { + items[] = { + { { "U_C_ConstructionCoverall_Red_F", "item" }, 1 }, + { { "U_C_ConstructionCoverall_vrana_F", "item" }, 1 }, + { { "U_C_ConstructionCoverall_Black_F", "item" }, 1 }, + { { "U_C_ConstructionCoverall_Blue_F", "item" }, 1 }, + { { "U_C_Paramedic_01_F", "item" }, 1 }, + { { "U_C_Mechanic_01_F", "item" }, 1 } + }; + }; + class Uniforms_Male_ApexDLC + { + items[] = { + { { "U_O_V_Soldier_Viper_hex_F", "item" }, 1 }, + { { "U_O_V_Soldier_Viper_F", "item" }, 1 } + }; + }; + class Uniforms_Female_Civ_Epoch + { + items[] = { + { { "U_JeansBlack1_uniform", "item" }, 1 }, + { { "U_JeansBlack2_uniform", "item" }, 1 }, + { { "U_JeansBlack3_uniform", "item" }, 1 }, + { { "U_JeansBlack4_uniform", "item" }, 1 }, + { { "U_JeansBlack5_uniform", "item" }, 1 }, + { { "U_JeansBlack6_uniform", "item" }, 1 }, + { { "U_JeansBlack7_uniform", "item" }, 1 }, + { { "U_JeansBlack8_uniform", "item" }, 1 }, + { { "U_JeansBlack9_uniform", "item" }, 1 }, + { { "U_JeansBlack10_uniform", "item" }, 1 }, + { { "U_JeansBlack11_uniform", "item" }, 1 }, + { { "U_JeansBlack12_uniform", "item" }, 1 }, + { { "U_JeansBlack13_uniform", "item" }, 1 }, + { { "U_JeansBlack14_uniform", "item" }, 1 }, + { { "U_JeansBlack15_uniform", "item" }, 1 }, + { { "U_JeansBlack16_uniform", "item" }, 1 }, + { { "U_JeansBlack17_uniform", "item" }, 1 }, + { { "U_JeansBlack18_uniform", "item" }, 1 }, + { { "U_JeansBlack19_uniform", "item" }, 1 }, + { { "U_JeansBlack20_uniform", "item" }, 1 }, + { { "U_JeansBlack21_uniform", "item" }, 1 }, + { { "U_JeansArBrn1_uniform", "item" }, 1 }, + { { "U_JeansArBrn2_uniform", "item" }, 1 }, + { { "U_JeansArBrn3_uniform", "item" }, 1 }, + { { "U_JeansArBrn4_uniform", "item" }, 1 }, + { { "U_JeansArBrn5_uniform", "item" }, 1 }, + { { "U_JeansArBrn6_uniform", "item" }, 1 }, + { { "U_JeansArBrn7_uniform", "item" }, 1 }, + { { "U_JeansArBrn8_uniform", "item" }, 1 }, + { { "U_JeansArBrn9_uniform", "item" }, 1 }, + { { "U_JeansArBrn10_uniform", "item" }, 1 }, + { { "U_JeansArBrn11_uniform", "item" }, 1 }, + { { "U_JeansArBrn12_uniform", "item" }, 1 }, + { { "U_JeansArBrn13_uniform", "item" }, 1 }, + { { "U_JeansArBrn14_uniform", "item" }, 1 }, + { { "U_JeansArBrn15_uniform", "item" }, 1 }, + { { "U_JeansArBrn16_uniform", "item" }, 1 }, + { { "U_JeansArBrn17_uniform", "item" }, 1 }, + { { "U_JeansArBrn18_uniform", "item" }, 1 }, + { { "U_JeansArBrn19_uniform", "item" }, 1 }, + { { "U_JeansArBrn20_uniform", "item" }, 1 }, + { { "U_JeansArBrn21_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn1_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn2_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn3_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn4_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn5_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn6_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn7_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn8_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn9_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn10_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn11_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn12_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn13_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn14_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn15_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn16_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn17_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn18_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn19_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn20_uniform", "item" }, 1 }, + { { "U_JeansBlkBrn21_uniform", "item" }, 1 }, + { { "U_JeansPatched1_uniform", "item" }, 1 }, + { { "U_JeansPatched2_uniform", "item" }, 1 }, + { { "U_JeansPatched3_uniform", "item" }, 1 }, + { { "U_JeansPatched4_uniform", "item" }, 1 }, + { { "U_JeansPatched5_uniform", "item" }, 1 }, + { { "U_JeansPatched6_uniform", "item" }, 1 }, + { { "U_JeansPatched7_uniform", "item" }, 1 }, + { { "U_JeansPatched8_uniform", "item" }, 1 }, + { { "U_JeansPatched9_uniform", "item" }, 1 }, + { { "U_JeansPatched10_uniform", "item" }, 1 }, + { { "U_JeansPatched11_uniform", "item" }, 1 }, + { { "U_JeansPatched12_uniform", "item" }, 1 }, + { { "U_JeansPatched13_uniform", "item" }, 1 }, + { { "U_JeansPatched14_uniform", "item" }, 1 }, + { { "U_JeansPatched15_uniform", "item" }, 1 }, + { { "U_JeansPatched16_uniform", "item" }, 1 }, + { { "U_JeansPatched17_uniform", "item" }, 1 }, + { { "U_JeansPatched18_uniform", "item" }, 1 }, + { { "U_JeansPatched19_uniform", "item" }, 1 }, + { { "U_JeansPatched20_uniform", "item" }, 1 }, + { { "U_JeansPatched21_uniform", "item" }, 1 } + }; + }; + class Uniforms_Female_WetSuit_Epoch + { + items[] = { + { { "U_Wetsuit_uniform", "item" }, 1 }, + { { "U_Wetsuit_White", "item" }, 1 }, + { { "U_Wetsuit_Blue", "item" }, 1 }, + { { "U_Wetsuit_Purp", "item" }, 1 }, + { { "U_Wetsuit_Camo", "item" }, 1 } + }; + }; + class Uniforms_Female_Mil_Epoch + { + items[] = { + { { "U_CamoRed_uniform", "item" }, 1 }, + { { "U_CamoAloha_uniform", "item" }, 1 }, + { { "U_CamoBiker_uniform", "item" }, 1 }, + { { "U_CamoBubblegum_uniform", "item" }, 1 }, + { { "U_CamoLumberjack_uniform", "item" }, 1 }, + { { "U_CamoOutback_uniform", "item" }, 1 }, + { { "U_CamoPink_uniform", "item" }, 1 }, + { { "U_CamoPinkPolka_uniform", "item" }, 1 }, + { { "U_CamoBrn_uniform", "item" }, 1 }, + { { "U_CamoBlue_uniform", "item" }, 1 }, + { { "U_Camo_uniform", "item" }, 1 }, + { { "U_ghillie1_uniform", "item" }, 1 }, + { { "U_ghillie2_uniform", "item" }, 1 }, + { { "U_ghillie3_uniform", "item" }, 1 }, + { { "U_RadiationSuit_F_uniform", "item" }, 1 } + }; + }; + class Vests_Low_Vanilla + { + items[] = { + { { "V_Press_F", "item" }, 1 }, + + { { "V_1_EPOCH", "item" }, 1 }, + { { "V_2_EPOCH", "item" }, 1 }, + { { "V_3_EPOCH", "item" }, 1 }, + { { "V_4_EPOCH", "item" }, 1 }, + { { "V_5_EPOCH", "item" }, 1 }, + { { "V_6_EPOCH", "item" }, 1 }, + { { "V_7_EPOCH", "item" }, 1 }, + { { "V_8_EPOCH", "item" }, 1 }, + { { "V_9_EPOCH", "item" }, 1 }, + { { "V_10_EPOCH", "item" }, 1 }, + { { "V_11_EPOCH", "item" }, 1 }, + { { "V_12_EPOCH", "item" }, 1 }, + { { "V_13_EPOCH", "item" }, 1 }, + { { "V_14_EPOCH", "item" }, 1 }, + { { "V_15_EPOCH", "item" }, 1 }, + { { "V_16_EPOCH", "item" }, 1 }, + { { "V_17_EPOCH", "item" }, 1 }, + { { "V_18_EPOCH", "item" }, 1 }, + { { "V_21_EPOCH", "item" }, 1 }, + { { "V_22_EPOCH", "item" }, 1 }, + { { "V_23_EPOCH", "item" }, 1 }, + { { "V_24_EPOCH", "item" }, 1 }, + { { "V_25_EPOCH", "item" }, 1 }, + { { "V_26_EPOCH", "item" }, 1 }, + { { "V_27_EPOCH", "item" }, 1 }, + { { "V_28_EPOCH", "item" }, 1 }, + { { "V_29_EPOCH", "item" }, 1 }, + { { "V_30_EPOCH", "item" }, 1 }, + { { "V_31_EPOCH", "item" }, 1 }, + { { "V_32_EPOCH", "item" }, 1 }, + { { "V_33_EPOCH", "item" }, 1 }, + { { "V_34_EPOCH", "item" }, 1 }, + { { "V_35_EPOCH", "item" }, 1 }, + { { "V_37_EPOCH", "item" }, 1 }, + { { "V_38_EPOCH", "item" }, 1 }, + { { "V_39_EPOCH", "item" }, 1 }, + { { "V_40_EPOCH", "item" }, 1 } + }; + }; + class Vests_High_Vanilla + { + items[] = { + { { "V_PlateCarrier1_tna_F", "item" }, 1 }, + { { "V_PlateCarrierSpec_tna_F", "item" }, 1 }, + { { "V_PlateCarrierSpec_blk", "item" }, 1 }, + { { "V_HarnessO_ghex_F", "item" }, 1 }, + { { "V_HarnessOGL_ghex_F", "item" }, 1 }, + { { "V_PlateCarroer2_tna_F", "item" }, 1 }, + { { "V_PlateCarrierGL_tna_F", "item" }, 1 } + }; + }; + class Vests_Rebreather_Epoch + { + items[] = { + { { "V_19_EPOCH", "item" }, 1 }, + { { "V_20_EPOCH", "item" }, 1 }, + { { "V_36_EPOCH", "item" }, 1 } + }; + }; + class Vests_ApexDLC + { + items[] = { + { { "V_TacChestrig_grn_F", "item" }, 1 }, + { { "V_TacChestrig_oli_F", "item" }, 1 }, + { { "V_TacChestrig_cbr_F", "item" }, 1 }, + { { "V_TacChestrig_grn_F", "item" }, 1 }, + { { "V_TacChestrig_grn_F", "item" }, 1 }, + { { "V_TacChestrig_grn_F", "item" }, 1 } + }; + }; + class Backpacks_Low_Base + { + items[] = { + { { "B_ViperLightHarness_blk_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_ghex_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_hex_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_khk_F", "backpack" }, 2 }, // 260 + { { "B_ViperLightHarness_oli_F", "backpack" }, 2 }, // 260 + + { { "Assault_Pack_Epoch", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_blk_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_ghex_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_hex_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_khk_F", "backpack" }, 1 }, // 300 + { { "B_ViperHarness_oli_F", "backpack" }, 1 }, // 300 + { { "Patrol_Pack_Epoch", "backpack" }, 1 }, // 300 + { { "TK_RPG_Backpack_Epoch", "backpack" }, 1 }, // 300 + + { { "CZ_VestPouch_Epoch", "backpack" }, 3 } // 340 + }; + }; + class Backpacks_High_Base + { + items[] = { + { { "B_AssaultPack_cbr", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_dgtl", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_khk", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_mcamo", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_ocamo", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_rgr", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_sgg", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_blk", "backpack" }, 5 }, // 360 + { { "B_AssaultPack_tna_F", "backpack" }, 5 }, // 360 + + { { "B_FieldPack_blk", "backpack" }, 4 }, // 400 + { { "B_FieldPack_cbr", "backpack" }, 4 }, // 400 + { { "B_FieldPack_khk", "backpack" }, 4 }, // 400 + { { "B_FieldPack_ocamo", "backpack" }, 4 }, // 400 + { { "B_FieldPack_oli", "backpack" }, 4 }, // 400 + { { "B_FieldPack_oucamo", "backpack" }, 4 }, // 400 + { { "civil_assault_pack_Epoch", "backpack" }, 4 }, // 400 + + { { "S_Gunbag_Epoch", "backpack" }, 4 }, // 420 + + { { "smallbackpack_red_epoch", "backpack" }, 4 }, // 460 + { { "smallbackpack_green_epoch", "backpack" }, 4 }, // 460 + { { "smallbackpack_teal_epoch", "backpack" }, 4 }, // 460 + { { "smallbackpack_pink_epoch", "backpack" }, 4 }, // 460 + + { { "B_TacticalPack_blk", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_mcamo", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_ocamo", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_oli", "backpack" }, 2 }, // 480 + { { "B_TacticalPack_rgr", "backpack" }, 2 }, // 480 + { { "ALICE_Pack_Epoch", "backpack" }, 2 }, // 480 + + { { "US_Backpack_Epoch", "backpack" }, 2 }, // 500 + + { { "B_Kitbag_cbr", "backpack" }, 2 }, // 520 + { { "B_Kitbag_mcamo", "backpack" }, 2 }, // 520 + { { "B_Kitbag_rgr", "backpack" }, 2 }, // 520 + { { "B_Kitbag_sgg", "backpack" }, 2 }, // 520 + { { "CZ_Backpack_Epoch", "backpack" }, 1 }, // 520 + + { { "B_Carryall_cbr", "backpack" }, 1 }, // 550 + { { "B_Carryall_khk", "backpack" }, 1 }, // 550 + { { "B_Carryall_mcamo", "backpack" }, 1 }, // 550 + { { "B_Carryall_ocamo", "backpack" }, 1 }, // 550 + { { "B_Carryall_oli", "backpack" }, 1 }, // 550 + { { "B_Carryall_oucamo", "backpack" }, 1 }, // 550 + + { { "L_Gunbag_Epoch", "backpack" }, 3 }, // 580 + + { { "B_Parachute", "backpack" }, 1 } + }; + }; + class Backpacks_UAV + { + items[] = { + { { "I_UAV_01_backpack_F", "backpack" }, 1 }, + { { "C_IDAP_UAV_06_backpack_F", "backpack" }, 1 }, + { { "C_IDAP_UAV_06_antimine_backpack_F", "backpack" }, 1 }, + { { "B_UAV_06_medical_backpack_F", "backpack" }, 1 } + }; + }; + +// ########################################################################### Special Loot ########################################################################### + class Tree + { + items[] = { + { { "WoodLog_EPOCH", "magazine" }, 1 } + }; + }; + class Rock + { + items[] = { + { { "PartOre", "magazine" }, 1 }, + { { "ItemRock", "magazine" }, 2 } + }; + }; + class Cinder + { + items[] = { + { { "CinderBlocks", "magazine" }, 1 } + }; + }; + class Wreck + { + items[] = { + { { "ItemScraps", "magazine" }, 1 } + }; + }; + class Bush + { + items[] = { + { { "ItemStick", "magazine" }, 1 } + }; + }; + class Sheep_random_EPOCH + { + items[] = { + { { "SheepCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Goat_random_EPOCH + { + items[] = { + { { "GoatCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Fin_random_EPOCH + { + items[] = { + { { "DogCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Alsatian_Random_EPOCH + { + items[] = { + { { "DogCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Hen_random_EPOCH + { + items[] = { + { { "ChickenCarcass_EPOCH", "magazine" }, 1 } + }; + }; + class Rabbit_EPOCH + { + items[] = { + { { "RabbitCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class EPOCH_RyanZombie_1 + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 5 }, + { { "WhiskeyNoodle", "magazine" }, 5 }, + { { "Throw", "CfgLootTable" }, 10 }, + { { "ThrowExplosive", "CfgLootTable" }, 10 }, + { { "Medical", "CfgLootTable" }, 20 }, + { { "PistolAmmo", "CfgLootTable" }, 20 }, + { { "Pelt_EPOCH", "magazine" }, 10 } + }; + }; + class GreatWhite_F + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 9 }, + { { "ItemBriefcaseGold100oz", "magazine" }, 1 } + }; + }; + class Epoch_Sapper_F + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 6 }, + { { "WhiskeyNoodle", "magazine" }, 11 }, + { { "ItemKiloHemp", "magazine" }, 16 }, + { { "ItemSilverBar", "magazine" }, 18 }, + { { "Medical", "CfgLootTable" }, 18 }, + { { "Pelt_EPOCH", "magazine" }, 31 } + }; + }; + class Cock_random_EPOCH + { + items[] = { + { { "ChickenCarcass_EPOCH", "magazine" }, 1 } + }; + }; + class Epoch_SapperB_F + { + items[] = { + { { "ItemGoldBar", "magazine" }, 9 }, + { { "WhiskeyNoodle", "magazine" }, 13 }, + { { "ItemKiloHemp", "magazine" }, 15 }, + { { "ItemSilverBar", "magazine" }, 17 }, + { { "Medical", "CfgLootTable" }, 17 }, + { { "Pelt_EPOCH", "magazine" }, 29 } + }; + }; + class Epoch_SapperG_F + { + items[] = { + { { "SmokeShellToxic", "magazine" }, 9 }, + { { "WhiskeyNoodle", "magazine" }, 13 }, + { { "ItemKiloHemp", "magazine" }, 15 }, + { { "ItemSilverBar", "magazine" }, 17 }, + { { "Medical", "CfgLootTable" }, 17 }, + { { "Pelt_EPOCH", "magazine" }, 29 } + }; + }; + class Snake_random_EPOCH + { + items[] = { + { { "SnakeCarcass_EPOCH", "magazine" }, 1 }, + { { "Venom_EPOCH", "magazine" }, 1 } + }; + }; + class I_UAV_01_F + { + items[] = { + { { "CircuitParts", "magazine" }, 1 } + }; + }; + class Epoch_Cloak_F + { + items[] = { + { { "Gems", "CfgLootTable" }, 10 }, + { { "Throw", "CfgLootTable" }, 11 }, + { { "ThrowExplosive", "magazine" }, 12 }, + { { "MiniGrenade", "magazine" }, 20 }, + { { "Medical", "CfgLootTable" }, 21 }, + { { "Venom_EPOCH", "magazine" }, 26 } + }; + }; + class SeaFood + { + items[] = { + { { "ItemTrout", "magazine" }, 3 }, + { { "ItemSeaBass", "magazine" }, 2 }, + { { "ItemTuna", "magazine" }, 1 } + }; + }; + class Satellite + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 5 }, + { { "CircuitParts", "magazine" }, 1 }, + { { "Gems", "CfgLootTable" }, 3 }, + { { "ItemScraps", "magazine" }, 1 }, + { { "ItemCorrugated", "magazine" }, 2 }, + { { "ItemSolar", "magazine" }, 1 }, + { { "ItemBattery", "magazine" }, 1 }, + { { "ItemCables", "magazine" }, 1 } + }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/CfgMainTable.h b/Server/@epochhive/addons/epoch_server_settings/configs/CfgMainTable.h new file mode 100644 index 0000000..ba27dc7 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/CfgMainTable.h @@ -0,0 +1,1248 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Server side loot table configs + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/CfgMainTable.h +*/ +class CfgMainTable +{ + class Default // Will be used if no LootTable is found + { + chance = 1; + lootMin = 2; + LootMax = 3; + tables[] = { + { "Food", 1 }, + { "Drink", 1 }, + { "Primitive", 1 } + }; + }; +/* + class Example // All Available Loot Classes + { + chance = 1; + lootMin = 3; + LootMax = 6; + tables[] = { + { "Scopes", 1 }, + { "Bipods", 1 }, + { "Muzzles", 1 }, + { "WpnFlashLights", 1 }, + { "Pistols", 1 }, + { "PistolAmmo", 1 }, + { "Rifle", 1 }, + { "RifleAmmo", 1 }, + { "SniperRifle", 1 }, + { "SniperRifleAmmo", 1 }, + { "Machinegun", 1 }, + { "MachinegunAmmo", 1 }, + { "Uniforms_Male_Civ", 1 }, + { "Uniforms_Male_Mil", 1 }, + { "Uniforms_Female_Civ", 1 }, + { "Uniforms_Female_Mil", 1 }, + { "Vests_Low", 1 }, + { "Vests_High", 1 }, + { "BackPacks_Low", 1 }, + { "BackPacks_High", 1 }, + { "HeadgearNoArmor", 1 }, + { "HeadgearArmored", 1 }, + { "Primitive", 1 }, + { "BuildingItems", 5 }, + { "BuildingKits", 1 }, + { "Storages", 1 }, + { "Equipment", 1 }, + { "Tools", 1 }, + { "Repairs", 1 }, + { "VehicleDocs", 1 }, + { "Seeds", 1 }, + { "Drink", 1 }, + { "Food", 1 }, + { "Medical", 1 }, + { "PaintCans", 1 }, + { "MetalBars", 1 }, + { "Gems", 1 }, + { "Ore", 1 }, + { "Throw", 1 }, + { "ThrowExplosive", 1 }, + { "HighExplosives", 1 }, + { "ShellFlares", 1 }, + { "ShellSmokes", 1 }, + { "ShellExplosives", 1 } + }; + }; + +*/ +// ########################################################################### Main Tables ########################################################################### + class loots_civ : Default + { + chance = 1; + lootMin = 1; + LootMax = 2; + tables[] = { + { "Scopes", 4 }, + { "Bipods", 4 }, + { "Muzzles", 4 }, + { "WpnFlashLights", 4 }, + { "Pistols", 5 }, + { "PistolAmmo", 10 }, + { "Rifle", 1 }, + { "RifleAmmo", 3 }, + { "SniperRifle", 0 }, + { "SniperRifleAmmo", 1 }, + { "Machinegun", 0 }, + { "MachinegunAmmo", 1 }, + { "Uniforms_Male_Civ", 5 }, + { "Uniforms_Male_Mil", 1 }, + { "Uniforms_Female_Civ", 5 }, + { "Uniforms_Female_Mil", 1 }, + { "Vests_Low", 5 }, + { "Vests_High", 1 }, + { "BackPacks_Low", 6 }, + { "BackPacks_High", 2 }, + { "HeadgearNoArmor", 8 }, + { "HeadgearArmored", 2 }, + { "Primitive", 20 }, + { "BuildingItems", 10 }, + { "BuildingKits", 1 }, + { "Storages", 1 }, + { "Equipment", 6 }, + { "Tools", 6 }, + { "Repairs", 10 }, + { "VehicleDocs", 2 }, + { "Seeds", 5 }, + { "Drink", 20 }, + { "Food", 20 }, + { "Medical", 5 }, + { "PaintCans", 10 }, + { "MetalBars", 6 }, + { "Gems", 1 }, + { "Ore", 2 }, + { "Throw", 5 }, + { "ThrowExplosive", 3 }, + { "HighExplosives", 1 }, + { "ShellFlares", 3 }, + { "ShellSmokes", 3 }, + { "ShellExplosives", 1 } + }; + }; + class loots_mil : Default + { + chance = 1; + lootMin = 1; + LootMax = 2; + tables[] = { + { "Scopes", 10 }, + { "Bipods", 10 }, + { "Muzzles", 10 }, + { "WpnFlashLights", 10 }, + { "Pistols", 4 }, + { "PistolAmmo", 6 }, + { "Rifle", 6 }, + { "RifleAmmo", 9 }, + { "SniperRifle", 3 }, + { "SniperRifleAmmo", 5 }, + { "Machinegun", 2 }, + { "MachinegunAmmo", 3 }, + { "Uniforms_Male_Civ", 1 }, + { "Uniforms_Male_Mil", 3 }, + { "Uniforms_Female_Civ", 1 }, + { "Uniforms_Female_Mil", 3 }, + { "Vests_Low", 1 }, + { "Vests_High", 5 }, + { "BackPacks_Low", 2 }, + { "BackPacks_High", 6 }, + { "HeadgearNoArmor", 1 }, + { "HeadgearArmored", 8 }, + { "Primitive", 10 }, + { "BuildingItems", 10 }, + { "BuildingKits", 2 }, + { "Storages", 1 }, + { "Equipment", 10 }, + { "Tools", 10 }, + { "Repairs", 5 }, + { "VehicleDocs", 4 }, + { "Seeds", 1 }, + { "Drink", 10 }, + { "Food", 10 }, + { "Medical", 8 }, + { "PaintCans", 5 }, + { "MetalBars", 4 }, + { "Gems", 1 }, + { "Ore", 2 }, + { "Throw", 21}, + { "ThrowExplosive", 6 }, + { "HighExplosives", 2 }, + { "ShellFlares", 3 }, + { "ShellSmokes", 3 }, + { "ShellExplosives", 3 } + }; + }; + class loots_church : Default + { + chance = 1; + lootMin = 1; + LootMax = 2; + tables[] = { + { "Pistols", 2 }, + { "PistolAmmo", 2 }, + { "Rifle", 6 }, + { "RifleAmmo", 6 }, + { "SniperRifle", 9 }, + { "SniperRifleAmmo", 6 }, + { "Machinegun", 9 }, + { "MachinegunAmmo", 9 }, + { "BackPacks_High", 5 }, + { "HeadgearArmored", 3 }, + { "Equipment", 2 }, + { "Tools", 2 }, + { "Medical", 2 }, + { "ThrowExplosive", 7 }, + { "HighExplosives", 3 } + }; + }; + class loots_medical : Default + { + chance = 1; + lootMin = 1; + LootMax = 2; + tables[] = { + { "Uniforms_Male_Civ", 2 }, + { "Uniforms_Female_Civ", 2 }, + { "BackPacks_Low", 2 }, + { "BackPacks_High", 1 }, + { "HeadgearNoArmor", 5 }, + { "HeadgearArmored", 1 }, + { "Primitive", 3 }, + { "Equipment", 2 }, + { "Tools", 2 }, + { "Seeds", 2 }, + { "Drink", 7 }, + { "Food", 7 }, + { "Medical", 20 }, + { "MetalBars", 1 }, + { "Gems", 1 }, + { "Ore", 1 } + }; + }; + class loots_workshop : Default + { + chance = 1; + lootMin = 1; + LootMax = 2; + tables[] = { + { "Scopes", 3 }, + { "Bipods", 3 }, + { "Muzzles", 3 }, + { "WpnFlashLights", 3 }, + { "Pistols", 3 }, + { "PistolAmmo", 5 }, + { "Rifle", 1 }, + { "RifleAmmo", 3 }, + { "SniperRifle", 0 }, + { "SniperRifleAmmo", 1 }, + { "Machinegun", 0 }, + { "MachinegunAmmo", 1 }, + { "Uniforms_Male_Civ", 4 }, + { "Uniforms_Male_Mil", 1 }, + { "Uniforms_Female_Civ", 4 }, + { "Uniforms_Female_Mil", 1 }, + { "Vests_Low", 4 }, + { "Vests_High", 1 }, + { "BackPacks_Low", 5 }, + { "BackPacks_High", 1 }, + { "HeadgearNoArmor", 8 }, + { "HeadgearArmored", 1 }, + { "Primitive", 10 }, + { "BuildingItems", 10 }, + { "BuildingKits", 5 }, + { "Storages", 2 }, + { "Equipment", 6 }, + { "Tools", 8 }, + { "Repairs", 20 }, + { "VehicleDocs", 5 }, + { "Seeds", 2 }, + { "Drink", 10 }, + { "Food", 10 }, + { "Medical", 6 }, + { "PaintCans", 10 }, + { "MetalBars", 4 }, + { "Gems", 1 }, + { "Ore", 2 }, + { "Throw", 5 }, + { "ThrowExplosive", 2 }, + { "HighExplosives", 1 }, + { "ShellFlares", 2 }, + { "ShellSmokes", 2 }, + { "ShellExplosives", 1 } + }; + }; + class loots_industrial : Default + { + chance = 1; + lootMin = 1; + LootMax = 2; + tables[] = { + { "Scopes", 1 }, + { "Bipods", 1 }, + { "Muzzles", 1 }, + { "WpnFlashLights", 1 }, + { "Pistols", 1 }, + { "PistolAmmo", 2 }, + { "Rifle", 1 }, + { "RifleAmmo", 2 }, + { "SniperRifle", 0 }, + { "SniperRifleAmmo", 1 }, + { "Machinegun", 0 }, + { "MachinegunAmmo", 1 }, + { "Uniforms_Male_Civ", 2 }, + { "Uniforms_Male_Mil", 1 }, + { "Uniforms_Female_Civ", 2 }, + { "Uniforms_Female_Mil", 1 }, + { "Vests_Low", 2 }, + { "Vests_High", 1 }, + { "BackPacks_Low", 3 }, + { "BackPacks_High", 1 }, + { "HeadgearNoArmor", 3 }, + { "HeadgearArmored", 1 }, + { "Primitive", 5 }, + { "BuildingItems", 20 }, + { "BuildingKits", 10 }, + { "Storages", 3 }, + { "Equipment", 2 }, + { "Tools", 5 }, + { "Repairs", 10 }, + { "VehicleDocs", 3 }, + { "Seeds", 1 }, + { "Drink", 7 }, + { "Food", 7 }, + { "Medical", 3 }, + { "PaintCans", 5 }, + { "MetalBars", 3 }, + { "Gems", 1 }, + { "Ore", 1 }, + { "Throw", 2 }, + { "ThrowExplosive", 2 }, + { "HighExplosives", 1 }, + { "ShellFlares", 1 }, + { "ShellSmokes", 1 }, + { "ShellExplosives", 1 } + }; + }; + class loots_market : Default + { + chance = 1; + lootMin = 1; + LootMax = 2; + tables[] = { + { "Scopes", 3 }, + { "Bipods", 3 }, + { "Muzzles", 3 }, + { "WpnFlashLights", 3 }, + { "Pistols", 3 }, + { "PistolAmmo", 5 }, + { "Rifle", 1 }, + { "RifleAmmo", 3 }, + { "SniperRifle", 0 }, + { "SniperRifleAmmo", 1 }, + { "Machinegun", 0 }, + { "MachinegunAmmo", 1 }, + { "Uniforms_Male_Civ", 2 }, + { "Uniforms_Male_Mil", 1 }, + { "Uniforms_Female_Civ", 2 }, + { "Uniforms_Female_Mil", 1 }, + { "Vests_Low", 3 }, + { "Vests_High", 1 }, + { "BackPacks_Low", 3 }, + { "BackPacks_High", 1 }, + { "HeadgearNoArmor", 5 }, + { "HeadgearArmored", 1 }, + { "Primitive", 15 }, + { "BuildingItems", 6 }, + { "BuildingKits", 2 }, + { "Storages", 1 }, + { "Equipment", 5 }, + { "Tools", 3 }, + { "Repairs", 8 }, + { "VehicleDocs", 1 }, + { "Seeds", 3 }, + { "Drink", 15 }, + { "Food", 15 }, + { "Medical", 6 }, + { "PaintCans", 2 }, + { "MetalBars", 2 }, + { "Gems", 1 }, + { "Ore", 2 }, + { "Throw", 5 }, + { "ThrowExplosive", 3 }, + { "HighExplosives", 1 }, + { "ShellFlares", 2 }, + { "ShellSmokes", 2 }, + { "ShellExplosives", 1 } + }; + }; + class loots_construction : Default + { + chance = 1; + lootMin = 1; + LootMax = 2; + tables[] = { + { "Scopes", 1 }, + { "Bipods", 1 }, + { "Muzzles", 1 }, + { "WpnFlashLights", 1 }, + { "Pistols", 1 }, + { "PistolAmmo", 2 }, + { "Rifle", 1 }, + { "RifleAmmo", 2 }, + { "SniperRifle", 0 }, + { "SniperRifleAmmo", 1 }, + { "Machinegun", 0 }, + { "MachinegunAmmo", 1 }, + { "Uniforms_Male_Civ", 1 }, + { "Uniforms_Male_Mil", 1 }, + { "Uniforms_Female_Civ", 1 }, + { "Uniforms_Female_Mil", 1 }, + { "Vests_Low", 1 }, + { "Vests_High", 1 }, + { "BackPacks_Low", 3 }, + { "BackPacks_High", 2 }, + { "HeadgearNoArmor", 1 }, + { "HeadgearArmored", 1 }, + { "Primitive", 5 }, + { "BuildingItems", 35 }, + { "BuildingKits", 5 }, + { "Storages", 2 }, + { "Equipment", 2 }, + { "Tools", 2 }, + { "Repairs", 5 }, + { "VehicleDocs", 2 }, + { "Seeds", 1 }, + { "Drink", 3 }, + { "Food", 3 }, + { "Medical", 2 }, + { "PaintCans", 3 }, + { "MetalBars", 1 }, + { "Gems", 1 }, + { "Ore", 1 }, + { "Throw", 2 }, + { "ThrowExplosive", 2 }, + { "HighExplosives", 1 }, + { "ShellFlares", 1 }, + { "ShellSmokes", 1 }, + { "ShellExplosives", 1 } + }; + }; + + +// ########################################################################### Vehicles ########################################################################### + class VehicleBoat : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Scopes", 10 }, + { "Bipods", 10 }, + { "Muzzles", 10 }, + { "WpnFlashLights", 10 }, + { "Pistols", 20 }, + { "PistolAmmo", 25 }, + { "Rifle", 15 }, + { "RifleAmmo", 20 }, + { "SniperRifle", 10 }, + { "SniperRifleAmmo", 15 }, + { "Machinegun", 5 }, + { "MachinegunAmmo", 10 }, + { "Uniforms_Male_Civ", 10 }, + { "Uniforms_Male_Mil", 10 }, + { "Uniforms_Female_Civ", 10 }, + { "Uniforms_Female_Mil", 10 }, + { "Vests_Low", 10 }, + { "Vests_High", 5 }, + { "BackPacks_Low", 10 }, + { "BackPacks_High", 5 }, + { "HeadgearNoArmor", 10 }, + { "HeadgearArmored", 10 }, + { "Primitive", 10 }, + { "BuildingItems", 10 }, + { "BuildingKits", 5 }, + { "Storages", 3 }, + { "Equipment", 10 }, + { "Tools", 10 }, + { "Repairs", 15 }, + { "VehicleDocs", 10 }, + { "Seeds", 5 }, + { "Drink", 10 }, + { "Food", 10 }, + { "Medical", 10 }, + { "Throw", 10 }, + { "ThrowExplosive", 5 }, + { "HighExplosives", 3 }, + { "ShellFlares", 2 }, + { "ShellSmokes", 2 }, + { "ShellExplosives", 2 } + }; + }; + class Vehicle : VehicleBoat {}; + +// ########################################################################### World Objects ########################################################################### + class Trash : Default + { + chance = 0.33; + lootMin = 1; + LootMax = 4; + tables[] = { + { "Scopes", 4 }, + { "Bipods", 4 }, + { "Muzzles", 4 }, + { "WpnFlashLights", 4 }, + { "Pistols", 6 }, + { "PistolAmmo", 10 }, + { "Uniforms_Male_Civ", 4 }, + { "Uniforms_Male_Mil", 2 }, + { "Uniforms_Female_Civ", 4 }, + { "Uniforms_Female_Mil", 2 }, + { "Vests_Low", 4 }, + { "Vests_High", 2 }, + { "BackPacks_Low", 4 }, + { "BackPacks_High", 2 }, + { "HeadgearNoArmor", 10 }, + { "HeadgearArmored", 2 }, + { "Primitive", 20 }, + { "BuildingItems", 2 }, + { "Equipment", 2 }, + { "Tools", 2 }, + { "Repairs", 6 }, + { "VehicleDocs", 2 }, + { "Seeds", 4 }, + { "Drink", 20 }, + { "Food", 20 }, + { "Medical", 4 }, + { "PaintCans", 8 }, + { "Throw", 10 }, + { "ThrowExplosive", 2 } + }; + }; + class TrashSmall : Trash + { + lootMin = 1; + LootMax = 2; + }; + class Tree : Default + { + chance = 1; + lootMin = 2; + LootMax = 4; + tables[] = { "Tree" }; + }; + class Rock : Default + { + chance = 1; + lootMin = 1; + LootMax = 3; + tables[] = { "Rock" }; + }; + class Ore : Default + { + chance = 1; + lootMin = 1; + LootMax = 3; + tables[] = { + { "Gems", 15 }, + { "Ore", 85 } + }; + }; + class Cinder : Default + { + chance = 1; + lootMin = 1; + LootMax = 3; + tables[] = { "Cinder" }; + }; + class Wreck : Default + { + chance = 1; + lootMin = 1; + LootMax = 3; + tables[] = { "Wreck" }; + }; + class Bush : Default + { + chance = 1; + lootMin = 1; + LootMax = 3; + tables[] = { "Bush" }; + }; + class PumpkinPatch : Default + { + chance = 1; + lootMin = 1; + LootMax = 1; + tables[] = { "Pumpkin" }; + }; + + class HempFiber : Default + { + chance = 1; + lootMin = 1; + LootMax = 2; + tables[] = { "Hemp" }; + }; + +// ########################################################################### Furnitures ########################################################################### + class Tarp_EPOCH : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "BackPacks_Low", 5 }, + { "BackPacks_High", 1 }, + { "HeadgearNoArmor", 10 }, + { "HeadgearArmored", 2 }, + { "Primitive", 20 }, + { "BuildingItems", 20 }, + { "BuildingKits", 6 }, + { "Storages", 2}, + { "Equipment", 6 }, + { "Tools", 6 }, + { "Repairs", 15 }, + { "VehicleDocs", 1 }, + { "Seeds", 5 }, + { "Drink", 3 }, + { "Food", 3 }, + { "Medical", 2 }, + { "PaintCans", 10 }, + { "MetalBars", 1 } + }; + }; + class wardrobe_epoch : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Pistols", 10 }, + { "PistolAmmo", 15 }, + { "Rifle", 5 }, + { "RifleAmmo", 10 }, + { "SniperRifle", 2 }, + { "SniperRifleAmmo", 5 }, + { "Machinegun", 1 }, + { "MachinegunAmmo", 3 }, + { "Uniforms_Male_Civ", 10 }, + { "Uniforms_Male_Mil", 1 }, + { "Uniforms_Female_Civ", 10 }, + { "Uniforms_Female_Mil", 1 }, + { "Vests_Low", 10 }, + { "Vests_High", 1 }, + { "BackPacks_Low", 8 }, + { "BackPacks_High", 2 }, + { "HeadgearNoArmor", 15 }, + { "HeadgearArmored", 3 }, + { "Equipment", 5 }, + { "Tools", 5 }, + { "MetalBars", 3 }, + { "Gems", 1 }, + { "Ore", 2 }, + { "Throw", 3 } + }; + }; + class locker_epoch : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Scopes", 10 }, + { "Bipods", 10 }, + { "Muzzles", 10 }, + { "WpnFlashLights", 10 }, + { "Pistols", 15 }, + { "PistolAmmo", 20 }, + { "Rifle", 10 }, + { "RifleAmmo", 15 }, + { "SniperRifle", 5 }, + { "SniperRifleAmmo", 10 }, + { "Machinegun", 2 }, + { "MachinegunAmmo", 5 }, + { "Uniforms_Male_Civ", 5 }, + { "Uniforms_Male_Mil", 5 }, + { "Uniforms_Female_Civ", 5 }, + { "Uniforms_Female_Mil", 5 }, + { "Vests_Low", 10 }, + { "Vests_High", 10 }, + { "BackPacks_Low", 10 }, + { "BackPacks_High", 5 }, + { "HeadgearNoArmor", 15 }, + { "HeadgearArmored", 10 }, + { "Primitive", 15 }, + { "Equipment", 10 }, + { "Tools", 10 }, + { "Repairs", 5 }, + { "VehicleDocs", 2 }, + { "Throw", 3 }, + { "ThrowExplosive", 3 }, + { "HighExplosives", 1 }, + { "ShellFlares", 1 }, + { "ShellSmokes", 1 }, + { "ShellExplosives", 1 } + }; + }; + class cooker_epoch : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Drink", 1 }, + { "Food", 1 } + }; + }; + class Shelf_EPOCH : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Equipment", 10 }, + { "Pistols", 6 }, + { "PistolAmmo", 8 }, + { "MachinegunAmmo", 5 }, + { "RifleAmmo", 8 }, + { "SniperRifleAmmo", 5 }, + { "Scopes", 4 }, + { "Muzzles", 5 }, + { "Uniforms_Male_Civ", 2 }, + { "Uniforms_Male_Mil", 1 }, + { "Uniforms_Female_Civ", 2 }, + { "Uniforms_Female_Mil", 1 }, + { "Vests_Low", 3 }, + { "Vests_High", 2 }, + { "HeadgearNoArmor", 3 }, + { "HeadgearArmored", 2 }, + { "Rifle", 3 }, + { "Throw", 5 }, + { "ThrowExplosive", 3 }, + { "HighExplosives", 2 }, + { "BuildingItems", 7 }, + { "Drink", 3 }, + { "Food", 3 }, + { "BackPacks_Low", 1 }, + { "BackPacks_High", 1 } + }; + }; + class Fridge_EPOCH : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Drink", 1 }, + { "Food", 1 } + }; + }; + class Cabinet_EPOCH : Default + { + lootMin = 1; + LootMax = 3; + tables[] = { + { "Medical", 1 } + }; + }; + class Freezer_EPOCH : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Drink", 1 }, + { "Food", 1 } + }; + }; + class Pelican_EPOCH : Default + { + lootMin = 1; + LootMax = 3; + tables[] = { + { "Pistols", 10 }, + { "Scopes", 8 }, + { "Muzzles", 8 }, + { "Machinegun", 10 }, + { "Rifle", 21 }, + { "SniperRifle", 15 }, + { "ThrowExplosive", 8 }, + { "HighExplosives", 13 } + }; + }; + class Bed_EPOCH : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Rifle", 3 }, + { "SniperRifle", 2 }, + { "Equipment", 10}, + { "Pistols", 4 }, + { "PistolAmmo", 5 }, + { "Scopes", 3 }, + { "Muzzles", 3 }, + { "Uniforms_Male_Civ", 2 }, + { "Uniforms_Male_Mil", 1 }, + { "Uniforms_Female_Civ", 2 }, + { "Uniforms_Female_Mil", 1 }, + { "Vests_Low", 3 }, + { "Vests_High", 2 }, + { "BackPacks_Low", 2 }, + { "HeadgearNoArmor", 4 }, + { "HeadgearArmored", 2 }, + { "Drink", 4 }, + { "Food", 4 }, + { "RifleAmmo", 7 }, + { "MachinegunAmmo", 3 }, + { "SniperRifleAmmo", 2 }, + { "Throw", 4 }, + { "ThrowExplosive", 1 }, + { "BuildingItems", 7 }, + { "Repairs", 3 }, + { "BackPacks_Low", 4 }, + { "BackPacks_High", 2 } + }; + }; + class Bunk_EPOCH : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Equipment", 10 }, + { "Pistols", 5 }, + { "PistolAmmo", 6 }, + { "Scopes", 4 }, + { "Muzzles", 3 }, + { "Uniforms_Male_Civ", 2 }, + { "Uniforms_Male_Mil", 1 }, + { "Uniforms_Female_Civ", 2 }, + { "Uniforms_Female_Mil", 1 }, + { "Vests_Low", 2 }, + { "Vests_High", 2 }, + { "BackPacks_Low", 2 }, + { "HeadgearNoArmor", 3 }, + { "HeadgearArmored", 3 }, + { "Drink", 3 }, + { "Food", 3 }, + { "Medical", 1 }, + { "Rifle", 3 }, + { "RifleAmmo", 4 }, + { "Machinegun", 1 }, + { "MachinegunAmmo", 4 }, + { "SniperRifle", 1 }, + { "SniperRifleAmmo", 3 }, + { "Throw", 4 }, + { "ThrowExplosive", 1 }, + { "BuildingItems", 7 }, + { "Repairs", 3 }, + { "BackPacks_Low", 4 }, + { "BackPacks_High", 2 }, + { "HighExplosives", 2 } + }; + }; + class Couch_EPOCH : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Rifle", 3 }, + { "SniperRifle", 1 }, + { "Equipment", 10 }, + { "Pistols", 5 }, + { "PistolAmmo", 5 }, + { "Scopes", 5 }, + { "Muzzles", 5 }, + { "Uniforms_Male_Civ", 3 }, + { "Uniforms_Male_Mil", 1 }, + { "Uniforms_Female_Civ", 3 }, + { "Uniforms_Female_Mil", 1 }, + { "Vests_Low", 4 }, + { "Vests_High", 1 }, + { "BackPacks_Low", 2 }, + { "HeadgearNoArmor", 4 }, + { "HeadgearArmored", 2 }, + { "Drink", 5 }, + { "Food", 5 }, + { "Medical", 1 }, + { "RifleAmmo", 8 }, + { "MachinegunAmmo", 6 }, + { "Throw", 6 }, + { "BuildingItems", 6 } + }; + }; + class Table_EPOCH : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "PistolAmmo", 16 }, + { "Drink", 9 }, + { "Food", 9 }, + { "Medical", 2 }, + { "RifleAmmo", 16 }, + { "MachinegunAmmo", 16 }, + { "SniperRifleAmmo", 16 }, + { "Throw", 15 }, + { "ThrowExplosive", 1 } + }; + }; + class Chair_EPOCH : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Equipment", 12 }, + { "Pistols", 4 }, + { "PistolAmmo", 10 }, + { "Scopes", 6 }, + { "Muzzles", 6 }, + { "Vests_Low", 3 }, + { "Vests_High", 1 }, + { "BackPacks_Low", 2 }, + { "HeadgearNoArmor", 4 }, + { "HeadgearArmored", 2 }, + { "Drink", 3 }, + { "Food", 3 }, + { "Medical", 1 }, + { "RifleAmmo", 7 }, + { "SniperRifleAmmo", 6 }, + { "MachinegunAmmo", 7 }, + { "Throw", 8 }, + { "BuildingItems", 3 }, + { "Primitive", 5 }, + { "Tools", 2 } + }; + }; + class ChairRed_EPOCH : Chair_EPOCH {}; + class ToolRack_EPOCH : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Tools", 25 }, + { "Equipment", 20 }, + { "Pistols", 6 }, + { "Rifle", 4 }, + { "SniperRifle", 2 }, + { "VehicleDocs", 2 }, + { "Scopes", 5 }, + { "Bipods", 5 }, + { "Muzzles", 5 } + }; + }; + class Shoebox_EPOCH : Default + { + lootMin = 1; + LootMax = 2; + tables[] = { + { "Drink", 3 }, + { "Food", 3 }, + { "Medical", 2 }, + { "Equipment", 15 }, + { "PistolAmmo", 10 }, + { "Scopes", 8 }, + { "Muzzles", 8 }, + { "ThrowExplosive", 11 }, + { "RifleAmmo", 8 }, + { "SniperRifleAmmo", 6 }, + { "MachinegunAmmo", 3 }, + { "Throw", 10 } + }; + }; + class Filing_EPOCH : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Equipment", 11 }, + { "Pistols", 7 }, + { "PistolAmmo", 10 }, + { "Scopes", 5 }, + { "Muzzles", 5 }, + { "Uniforms_Male_Civ", 1 }, + { "Uniforms_Male_Mil", 4 }, + { "Uniforms_Female_Civ", 1 }, + { "Uniforms_Female_Mil", 4 }, + { "Vests_Low", 3 }, + { "Vests_High", 3 }, + { "BackPacks_Low", 1 }, + { "HeadgearNoArmor", 3 }, + { "HeadgearArmored", 3 }, + { "Drink", 5 }, + { "Food", 5 }, + { "Medical", 2 }, + { "RifleAmmo", 5 }, + { "MachinegunAmmo", 3 }, + { "SniperRifleAmmo", 2 }, + { "Throw", 10 }, + { "Generic", 10 }, + { "ThrowExplosive", 2 } + }; + }; + class Toilet_EPOCH : Default + { + lootMin = 1; + LootMax = 3; + tables[] = { + { "Primitive", 4 }, + { "Drink", 3 }, + { "Food", 3 }, + { "Medical", 1 } + }; + }; + +// ########################################################################### Epoch Map Missions ########################################################################### + class container_epoch : Default + { + lootMin = 2; + LootMax = 4; + tables[] = { + { "Gems", 5 }, + { "MetalBars", 26 }, + { "Ore", 20 } + }; + }; + class container_helicrash_epoch : Default + { + lootMin = 5; + LootMax = 10; + tables[] = { + { "Scopes", 10 }, + { "Bipods", 10 }, + { "Muzzles", 10 }, + { "WpnFlashLights", 10 }, + { "Pistols", 10 }, + { "PistolAmmo", 10 }, + { "Rifle", 8 }, + { "RifleAmmo", 10 }, + { "SniperRifle", 5 }, + { "SniperRifleAmmo", 8 }, + { "Machinegun", 5 }, + { "MachinegunAmmo", 8 }, + { "Uniforms_Male_Civ", 1 }, + { "Uniforms_Male_Mil", 5 }, + { "Uniforms_Female_Civ", 1 }, + { "Uniforms_Female_Mil", 5 }, + { "Vests_Low", 1 }, + { "Vests_High", 5 }, + { "BackPacks_Low", 1 }, + { "BackPacks_High", 5 }, + { "HeadgearNoArmor", 1 }, + { "HeadgearArmored", 5 }, + { "Primitive", 5 }, + { "BuildingItems", 5 }, + { "BuildingKits", 5 }, + { "Storages", 3 }, + { "Equipment", 5 }, + { "Tools", 5 }, + { "Repairs", 5 }, + { "VehicleDocs", 2 }, + { "Seeds", 1 }, + { "Drink", 3 }, + { "Food", 3 }, + { "Medical", 3 }, + { "PaintCans", 1 }, + { "MetalBars", 2 }, + { "Gems", 2 }, + { "Ore", 2 }, + { "Throw", 1 }, + { "ThrowExplosive", 3 }, + { "HighExplosives", 2 }, + { "ShellFlares", 1 }, + { "ShellSmokes", 1 }, + { "ShellExplosives", 1 } + }; + }; + class HeliCrash : container_helicrash_epoch + { + lootMin = 10; + LootMax = 15; + }; + class Cargo_Container : container_helicrash_epoch + { + lootMin = 5; + LootMax = 8; + }; + class MineralDepositCopper_EPOCH : Default + { + lootMin = 3; + LootMax = 6; + tables[] = { + { "Gems", 15 }, + { "Ore", 85 } + }; + }; + class MineralDepositSilver_EPOCH : Default + { + lootMin = 3; + LootMax = 6; + tables[] = { + { "Gems", 20 }, + { "Ore", 75 } + }; + }; + class MineralDepositGold_EPOCH : Default + { + lootMin = 3; + LootMax = 6; + tables[] = { + { "Gems", 25 }, + { "Ore", 75 } + }; + }; + class Land_Wreck_Satellite_EPOCH : Default + { + lootMin = 8; + LootMax = 14; + tables[] = { "Satellite" }; + }; + class satellite_p3d : Land_Wreck_Satellite_EPOCH {}; + class AirDrop_Payout1 + { + lootMin = 5; + LootMax = 10; + tables[] = { + { "MetalBars", 5 }, + { "BuildingItems", 1 }, + { "Gems", 3 }, + { "Primitive", 3 } + }; + }; + +// ########################################################################### Epoch Trader Missions ########################################################################### + class Mission_Payout1 + { + lootMin = 2; + LootMax = 5; + tables[] = { + { "Primitive", 8 }, + { "BuildingItems", 25 }, + { "BuildingKits", 15 }, + { "Storages", 3 }, + { "Equipment", 5 }, + { "Tools", 5 }, + { "Repairs", 5 }, + { "VehicleDocs", 2 }, + { "Seeds", 5 }, + { "Drink", 6 }, + { "Food", 6 }, + { "Medical", 4 }, + { "MetalBars", 3 }, + { "Gems", 3 } + }; + }; + class Mission_Monster_Payout : Mission_Payout1 + { + lootMin = 5; + LootMax = 10; + }; + class Mission_Fishing_Payout : Mission_Payout1 + { + lootMin = 4; + LootMax = 8; + }; + +// ########################################################################### Epoch Animals / AIs ########################################################################### + class Sheep_random_EPOCH + { + lootMin = 1; + LootMax = 2; + tables[] = { "Sheep_random_EPOCH" }; + }; + class Goat_random_EPOCH + { + lootMin = 1; + LootMax = 2; + tables[] = { "Goat_random_EPOCH" }; + }; + class Fin_random_EPOCH + { + lootMin = 1; + LootMax = 2; + tables[] = { "Fin_random_EPOCH" }; + }; + class Alsatian_Random_EPOCH + { + lootMin = 1; + LootMax = 2; + tables[] = { "Alsatian_Random_EPOCH" }; + }; + class Cock_random_EPOCH + { + lootMin = 1; + LootMax = 1; + tables[] = { "Cock_random_EPOCH" }; + }; + class Hen_random_EPOCH + { + lootMin = 1; + LootMax = 1; + tables[] = { "Hen_random_EPOCH" }; + }; + class Rabbit_EPOCH + { + lootMin = 1; + LootMax = 1; + tables[] = { "Rabbit_EPOCH" }; + }; + class Epoch_RyanZombie_1 + { + lootMin = 2; + LootMax = 5; + tables[] = { "EPOCH_RyanZombie_1" }; + }; + class GreatWhite_F + { + lootMin = 2; + LootMax = 5; + tables[] = { "GreatWhite_F" }; + }; + class Epoch_Sapper_F + { + lootMin = 2; + LootMax = 5; + tables[] = { "Epoch_Sapper_F" }; + }; + class Epoch_SapperB_F + { + lootMin = 2; + LootMax = 5; + tables[] = { "Epoch_SapperB_F" }; + }; + class Epoch_SapperG_F + { + lootMin = 2; + LootMax = 5; + tables[] = { "Epoch_SapperG_F" }; + }; + class Epoch_Cloak_F + { + lootMin = 2; + LootMax = 5; + tables[] = { "Epoch_Cloak_F" }; + }; + class I_UAV_01_F + { + lootMin = 1; + LootMax = 1; + tables[] = { "I_UAV_01_F" }; + }; + class Snake_random_EPOCH + { + lootMin = 1; + LootMax = 1; + tables[] = { "Snake_random_EPOCH" }; + }; + class SeaFood + { + lootMin = 1; + LootMax = 1; + tables[] = { "SeaFood" }; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Bootcamp_ACR.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Bootcamp_ACR.h new file mode 100644 index 0000000..490ad0d --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Bootcamp_ACR.h @@ -0,0 +1,44 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Bootcamp_ACR. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Bootcamp_ACR.h +*/ +class Bootcamp_ACR : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", "north" } + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Desert_E.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Desert_E.h new file mode 100644 index 0000000..c97f113 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Desert_E.h @@ -0,0 +1,44 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Desert_E. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Desert_E.h +*/ +class Desert_E : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "south" } + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Enoch.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Enoch.h new file mode 100644 index 0000000..f1a0368 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Enoch.h @@ -0,0 +1,47 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for altis. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/altis.h +*/ +class Enoch : Default +{ + worldSize = 12800; + plantLimit = 10; + // vehicles - Max vehicle slots is calculated from per vehicle limits below. Warning! Higher the number lower the performance. + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5} + }; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", { 5890,10710,0 } }, // North + { "TP_Booth_s_EPOCH", { -0.286865, -8.17383, -10.3098, 180}, "", { 6356,2768,0 } }, // South + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", { 1927,6372,0 } }, // West + { "TP_Booth_e_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", { 10328,7022,0} } // East + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; + + // Prefered locations for vehicles + class whitelistedVehiclePos { + }; + +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/IslaDuala3.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/IslaDuala3.h new file mode 100644 index 0000000..fe0b7dc --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/IslaDuala3.h @@ -0,0 +1,30 @@ +class IslaDuala3 : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "center" } // temp for now + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Kapaulio.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Kapaulio.h new file mode 100644 index 0000000..8df3610 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Kapaulio.h @@ -0,0 +1,30 @@ +class Kapaulio : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "center" } // temp for now + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Malden.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Malden.h new file mode 100644 index 0000000..7cb508a --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Malden.h @@ -0,0 +1,327 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Malden. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Malden.h +*/ +class Malden : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 8; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5} + }; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", { 3074.63,8474.27,0.00150394 } }, + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", { 2335.17, 3394.12, 0.000732422 } }, + { "TP_Booth_e_EPOCH", { 13.5127,0.410156,-10.3098, 90}, "", { 8224.4,8756.69,0.00099802 } } + }; +propsPos[] = { + // Phones and ATMs + { "Land_ATM_02_malden_F", {3225.01,6276.43,0}, {{0.951241,-0.30845,0},{0,0,1}}, true }, + { "Land_PhoneBooth_01_malden_F", {3746.04,3256.26,0.161957}, {{-0.967747,-0.251925,0},{0,0,1}}, true }, + { "Land_ATM_01_malden_F", {5103,9074.26,0.508453}, {{0.595228,0.803557,0},{0,0,1}}, true }, + { "Land_PhoneBooth_01_malden_F", {5354.97,2805.33,0}, {{-0.384161,-0.923266,0},{0,0,1}}, true }, + { "Land_PhoneBooth_01_malden_F", {5495.61,7005.75,0.166534}, {{0.448686,-0.893689,0},{0,0,1}}, true }, + { "Land_PhoneBooth_02_malden_F", {5490.94,7003.29,0.169525}, {{0.440054,-0.897971,0},{0,0,1}}, true }, + { "Land_ATM_02_malden_F", {5507.85,3484.96,0}, {{0.984902,-0.173111,0},{0,0,1}}, true }, + { "Land_PhoneBooth_01_malden_F", {6028.37,8621.77,0}, {{-0.21328,-0.976991,0},{0,0,1}}, true }, + { "Land_PhoneBooth_01_malden_F", {6636.54,8819.84,-7.62939e-006}, {{-0.150817,0.988562,0},{0,0,1}}, true }, + { "Land_PhoneBooth_01_malden_F", {6639.32,8820.08,0}, {{-0.0954069,0.995438,0},{0,0,1}}, true }, + { "Land_PhoneBooth_01_malden_F", {6637.91,8819.96,0}, {{-0.103969,0.994581,0},{0,0,1}}, true }, + { "Land_PhoneBooth_02_malden_F", {7053.47,7058.09,0}, {{0.999621,-0.027522,0},{0,0,1}}, true }, + { "Land_PhoneBooth_02_malden_F", {7150.51,6003.52,0}, {{-0.0176981,0.999843,0},{0,0,1}}, true }, + { "Land_ATM_01_malden_F", {7211.19,7791.62,0.101868}, {{0.857566,0.514374,0},{0,0,1}}, true }, + { "Land_ATM_01_malden_F", {8057.78,4054.92,0.233646}, {{0.753691,-0.657229,0},{0,0,1}}, true }, + // "Northern" Trader Camp + { "Land_Cargo20_orange_F", {2995.62,8434.97,0.0128599}, {{-0.528092,-0.84917,0.00549413},{-0.0805372,0.056524,0.995148}}, true }, + { "Land_Cargo20_orange_F", {3001.11,8431.97,0.0119005}, {{-0.528289,-0.849027,0.00800959},{-0.0757817,0.0565452,0.99552}}, true }, + { "Land_Cargo40_grey_F", {3010.16,8429.65,0.0138227}, {{0,0.999436,-0.0335804},{-0.0987155,0.0334163,0.994554}}, true }, + { "Land_Cargo20_white_F", {3019.54,8428.56,0.0277512}, {{0,0.999436,-0.0335804},{-0.140202,0.0332487,0.989565}}, true }, + { "Land_Cargo20_grey_F", {3026,8428.47,-0.00265026}, {{0,0.999586,-0.028787},{-0.0351779,0.0287692,0.998967}}, true }, + { "RoadBarrier_F", {3039.76,8429.82,0.00521612}, {{0.120292,0.99267,-0.0116707},{-0.0939822,0.0230904,0.995306}}, true }, + { "Land_ChairPlastic_F", {3070.96,8471.63,0.000873089}, {{0.992911,0.11875,-0.00503494},{0,0.0423614,0.999102}}, true }, + { "Land_FireExtinguisher_F", {3073,8467.91,0.000711918}, {{0,0.999102,-0.0423614},{0,0.0423614,0.999102}}, true }, + { "Land_CampingChair_V2_F", {3072.99,8470.89,0.000905991}, {{0.708442,0.705135,-0.0298973},{0,0.0423614,0.999102}}, true }, + { "Land_CampingChair_V2_F", {3073.42,8468.59,0.000888348}, {{0.919815,-0.392001,0.0166206},{0,0.0423614,0.999102}}, true }, + { "Land_GarbageContainer_open_F", {3083.92,8487.26,0.0002985}, {{-0.146009,0.988566,-0.0376563},{-0.0303859,0.0335649,0.998975}}, true }, + { "Land_WorkStand_F", {3080.67,8485.54,-0.0225635}, {{0,0.999436,-0.0335804},{-0.0303859,0.0335649,0.998975}}, true }, + { "Land_Icebox_F", {3085.06,8492.61,-0.000498295}, {{0.999975,0.00693204,0.00154894},{-0.00158221,0.00479658,0.999987}}, true }, + { "Tire_Van_02_F", {3085.19,8494.41,6.67572e-006}, {{0,0.999988,-0.00479659},{-0.00158221,0.00479658,0.999987}}, true }, + { "Tire_Van_02_F", {3085.14,8495.22,4.76837e-006}, {{0,0.999988,-0.00479659},{-0.00158221,0.00479658,0.999987}}, true }, + { "Tire_Van_02_F", {3085.22,8494.81,0.265893}, {{0,1,0},{0,0,1}}, true }, + { "Land_PortableGenerator_01_F", {3085.34,8490.96,1.23978e-005}, {{0.999964,-0.00833787,0.00162217},{-0.00158221,0.00479658,0.999987}}, true }, + { "Land_Metal_rack_Tall_F", {3085.44,8497.18,0}, {{0.99999,0.00409792,0.00156256},{-0.00158221,0.00479658,0.999987}}, true }, + { "Land_Metal_rack_Tall_F", {3085.42,8496.38,-4.76837e-007}, {{0.99999,0.00409792,0.00156256},{-0.00158221,0.00479658,0.999987}}, true }, + { "Land_Metal_rack_F", {3085.37,8498.23,2.14577e-005}, {{0.992478,-0.122408,0.00215748},{-0.00158221,0.00479658,0.999987}}, true }, + { "Land_CampingTable_F", {3079.78,8498.57,1.19209e-005}, {{0.997537,-0.0701184,0.00191467},{-0.00158221,0.00479658,0.999987}}, true }, + { "Land_Sink_F", {3079.76,8480.54,0.00252676}, {{0.876306,-0.478479,0.0560832},{-0.0638688,0,0.997958}}, true }, + { "Land_CampingTable_F", {3079.63,8507.07,1.43051e-006}, {{0.997943,-0.0640923,0.00147757},{-0.00158221,-0.00158197,0.999997}}, true }, + { "Land_CzechHedgehog_01_F", {2998.92,8422.76,-5.10216e-005}, {{0,1,0},{0,0,1}}, true }, + { "Land_CzechHedgehog_01_F", {2993.97,8422.44,-3.73125e-005}, {{0,1,0},{0,0,1}}, true }, + { "Land_CzechHedgehog_01_F", {2990.51,8425.96,-0.037242}, {{0,1,0},{0,0,1}}, true }, + { "Land_CzechHedgehog_01_F", {2987.69,8430.18,0.0677153}, {{0,1,0},{0,0,1}}, true }, + { "Land_CzechHedgehog_01_F", {3004.95,8422.89,-1.0252e-005}, {{0,1,0},{0,0,1}}, true }, + { "Land_CzechHedgehog_01_F", {3024.11,8421.45,-3.19481e-005}, {{0,1,0},{0,0,1}}, true }, + { "Land_CzechHedgehog_01_F", {3020.29,8421.5,0.0204887}, {{0,1,0},{0,0,1}}, true }, + { "Land_CzechHedgehog_01_F", {3010.32,8422.05,-2.45571e-005}, {{0,1,0},{0,0,1}}, true }, + { "Land_CzechHedgehog_01_F", {3015.56,8421.94,-0.000506878}, {{0,1,0},{0,0,1}}, true }, + { "Land_CzechHedgehog_01_F", {3027.56,8421.98,-5.29289e-005}, {{0,1,0},{0,0,1}}, true }, + { "Land_Wreck_Truck_F", {3045.11,8416.34,-0.0399089}, {{0.417845,-0.900498,0.120453},{-0.121494,0.0760071,0.989678}}, true }, + { "Land_LampShabby_F", {3040.54,8436.2,0.0175948}, {{-0.967344,0.253466,0},{0,0,1}}, true }, + { "Land_CncBarrier_F", {3038.68,8435.4,-0.065258}, {{0.954189,0.287336,0.0834337},{-0.0939822,0.0230904,0.995306}}, true }, + { "Land_CncBarrier_F", {3032,8431.31,5.91278e-005}, {{0.99894,0.022325,0.0402504},{-0.0407667,0.0231738,0.9989}}, true }, + { "Land_CncBarrier_F", {3030.59,8429.72,-0.0231225}, {{0,0.999586,-0.028787},{-0.0351779,0.0287692,0.998967}}, true }, + { "Land_Razorwire_F", {3049.69,8438.18,-0.0219493}, {{0.47678,-0.877605,0.0498977},{-0.0103981,0.0511302,0.998638}}, true }, + { "Land_Razorwire_F", {3042.89,8435.17,-0.0180011}, {{-0.467815,0.879819,-0.0840743},{-0.0471471,0.0701478,0.996422}}, true }, + { "PortableLight_Double_EPOCH", {3039.39,8461.92,-0.00410295}, {{-0.650916,-0.759109,0.00788934},{0,0.0103923,0.999946}}, true }, + { "Land_UWreck_MV22_F", {3028.78,8517.84,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_Razorwire_F", {3056.91,8440.96,-0.328821}, {{-0.128,0.989448,-0.0678854},{-0.133202,0.0506773,0.989792}}, true }, + { "Land_Razorwire_F", {3071.99,8448.06,0.162379}, {{-0.717775,0.64651,-0.258505},{-0.0900331,0.281972,0.955189}}, true }, + { "Land_Razorwire_F", {3065.21,8443.7,-0.302259}, {{-0.464256,0.850586,-0.246922},{-0.208888,0.165771,0.963787}}, true }, + { "Land_Garbage_square3_F", {3067.21,8468.31,0.000768661}, {{0,1,0},{-0.0423614,0,0.999102}}, true }, + { "Land_GarbageHeap_03_F", {3074.78,8472.64,-0.00442696}, {{0,0.999102,-0.0423614},{0,0.0423614,0.999102}}, true }, + { "Land_WoodPile_F", {3072.45,8466.85,0.00233793}, {{0.872535,0.488114,-0.0206958},{0,0.0423614,0.999102}}, true }, + { "Land_HelipadCircle_F", {3056.01,8466.4,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_Campfire_F", {3071.16,8469.5,0.000163078}, {{0,0.999102,-0.0423614},{0,0.0423614,0.999102}}, false }, + { "Land_LampShabby_F", {3074.85,8484.94,8.98838e-005}, {{-0.635439,0.772151,0},{0,0,1}}, true }, + { "ProtectionZone_Invisible_F", {3060.9,8484.89,6.44742}, {{0,0.999999,0.00161916},{0,-0.00161916,0.999999}}, true }, + { "Land_Razorwire_F", {3083.11,8465.72,-0.0561752}, {{-0.97853,-0.0183062,-0.205291},{-0.205892,0.0414538,0.977696}}, true }, + { "Land_Razorwire_F", {3084.93,8473.08,-0.292695}, {{0.932058,-0.340095,0.124915},{-0.0638688,0.185144,0.980634}}, true }, + { "Land_Razorwire_F", {3076.57,8454.27,-0.283497}, {{-0.823591,0.441944,-0.355503},{-0.364961,0.0668604,0.928619}}, true }, + { "Land_Razorwire_F", {3081.55,8460.04,0.0395131}, {{0.645025,-0.695578,0.316408},{-0.205892,0.240552,0.948548}}, true }, + { "Land_Garbage_square5_F", {3077.64,8490.77,0.00294161}, {{0,0.999712,0.023991},{-0.0303859,-0.0239799,0.999251}}, true }, + { "Land_StallWater_F", {3079.79,8477,-0.0317125}, {{0.997882,0.0124003,0.0638639},{-0.0638688,0,0.997958}}, true }, + { "Land_PicnicTable_01_F", {3079.19,8490.69,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_Sunshade_01_F", {3076.76,8490.18,0.00111628}, {{0,0.999712,0.023991},{-0.0303859,-0.0239799,0.999251}}, true }, + { "Land_WoodenCrate_01_stack_x3_F", {3084.71,8499.77,-0.00206947}, {{0,0.999988,-0.00479659},{-0.00158221,0.00479658,0.999987}}, true }, + { "Land_Razorwire_F", {3090.33,8488.6,-0.260276}, {{-0.843112,0.345059,-0.412428},{-0.437984,0.00432321,0.898972}}, true }, + { "Land_Razorwire_F", {3088.2,8481.35,0.140541}, {{-0.856545,-0.0269148,-0.51537},{-0.516007,0.0287644,0.856102}}, true }, + { "Land_Razorwire_F", {3092.04,8496.52,0.103394}, {{0.920431,-0.0988834,0.378191},{-0.37075,0.0858176,0.924759}}, true }, + { "Land_CratesShabby_F", {3085.11,8504.5,0.000340462}, {{0,0.999872,-0.0159977},{0.0159975,0.0159956,0.999744}}, true }, + { "Land_CratesPlastic_F", {3085.18,8505.46,3.57628e-005}, {{0,0.999872,-0.0159977},{0.0159975,0.0159956,0.999744}}, true }, + { "Land_CratesWooden_F", {3084.38,8502.77,1.90735e-006}, {{-0.0545167,-0.998511,-0.00166587},{-0.00158221,-0.00158197,0.999997}}, true }, + { "Land_CratesWooden_F", {3081.82,8502.78,1.90735e-006}, {{0,0.999999,0.00158197},{-0.00158221,-0.00158197,0.999997}}, true }, + { "Land_Garbage_square5_F", {3077.78,8504.58,-0.000335217}, {{0,0.999999,0.00158197},{-0.00158221,-0.00158197,0.999997}}, true }, + { "Land_GarbagePallet_F", {3084.52,8512.91,-0.0360587}, {{0,0.982208,-0.187798},{0.0159975,0.187774,0.982082}}, true }, + { "Land_WoodenCrate_01_stack_x5_F", {3084.1,8509.15,0.000776291}, {{0.0709465,0.997334,-0.0170923},{0.0159975,0.0159956,0.999744}}, true }, + { "Land_Razorwire_F", {3079.73,8518.7,-0.0379169}, {{0.201449,0.961461,-0.187113},{0.0159975,0.187774,0.982082}}, true }, + { "Land_Razorwire_F", {3087.25,8517.05,-0.0491641}, {{0.201468,0.963169,-0.178091},{0.00800059,0.180195,0.983598}}, true }, + { "Land_Razorwire_F", {3092.3,8504.68,-0.0691781}, {{-0.925833,-0.0848631,-0.368282},{-0.37075,0.0148576,0.928614}}, true }, + { "Land_Razorwire_F", {3092.01,8512.5,0.545356}, {{-0.992275,0.0488398,-0.114041},{-0.0939822,0.304115,0.947988}}, true }, + { "PortableLight_Single_EPOCH", {3084.55,8501.35,-0.000876427}, {{0.94556,0.325441,0.00201092},{-0.00158221,-0.00158197,0.999997}}, true }, + // Eastern Trader Camp + { "Land_MapBoard_01_Wall_Malden_F", {8199.73,8751.68,1.50435}, {{-0.998432,0.0559757,0},{0,0,1}}, true }, + { "Land_Canteen_F", {8220.15,8736.16,0.887077}, {{0,0.999997,0.00239211},{0,-0.00239211,0.999997}}, true }, + { "Land_Tableware_01_tray_F", {8220.33,8735.93,0.887081}, {{0,0.999997,0.00239211},{0,-0.00239211,0.999997}}, true }, + { "Land_Tableware_01_stackOfNapkins_F", {8221.4,8735.97,0.887082}, {{0,0.999997,0.00239211},{0,-0.00239211,0.999997}}, true }, + { "Land_Sleeping_bag_folded_F", {8216.63,8739.25,0.00943279}, {{0.536858,0.84361,0.0103293},{-0.00813388,-0.00706721,0.999942}}, true }, + { "Land_Sleeping_bag_folded_F", {8213.33,8742.03,0.00992632}, {{-0.555284,0.831659,0.00162426},{-0.00195312,-0.00325709,0.999993}}, true }, + { "Land_Sleeping_bag_folded_F", {8211.72,8745.21,0.00896549}, {{0.287965,-0.957616,0.00687788},{0.0115233,0.0106466,0.999877}}, true }, + { "Land_Sleeping_bag_folded_F", {8213.57,8743.15,-4.76837e-007}, {{-0.813133,-0.582079,0},{0,0,1}}, true }, + { "Land_ChairPlastic_F", {8222.85,8735.74,3.8147e-006}, {{-0.590678,-0.806905,-0.00193022},{0,-0.00239211,0.999997}}, true }, + { "Land_ChairPlastic_F", {8219.17,8735.11,1.90735e-006}, {{-0.795639,0.605769,0.00144907},{0,-0.00239211,0.999997}}, true }, + { "Land_TablePlastic_01_F", {8220.96,8736.08,1.43051e-006}, {{-0.065317,-0.997862,-0.00238701},{0,-0.00239211,0.999997}}, true }, + { "Land_FieldToilet_F", {8205.35,8744.03,0.000305176}, {{-0.746161,-0.665681,-0.0106481},{0,-0.0159937,0.999872}}, true }, + { "Land_FieldToilet_F", {8206.17,8743.04,0.000305176}, {{-0.746161,-0.665681,-0.0106481},{0,-0.0159937,0.999872}}, true }, + { "Land_FieldToilet_F", {8207.13,8742.06,0.000317097}, {{-0.746161,-0.665681,-0.0106481},{0,-0.0159937,0.999872}}, true }, + { "Land_CampingChair_V1_F", {8219.92,8734.58,3.33786e-006}, {{-0.365383,-0.930854,-0.00222672},{0,-0.00239211,0.999997}}, true }, + { "Land_CampingChair_V2_white_F", {8217.95,8740.93,-4.76837e-007}, {{-0.228351,-0.973579,0},{0,0,1}}, true }, + { "Land_CampingChair_V2_F", {8219.34,8744.08,-4.76837e-007}, {{0.48697,0.873419,0},{0,0,1}}, true }, + { "Land_CampingChair_V2_white_F", {8217.36,8744.34,-4.76837e-007}, {{-0.570688,0.821167,0},{0,0,1}}, true }, + { "Land_Sink_F", {8209.07,8740.61,0}, {{-0.704756,0.709359,0.0113467},{0,-0.0159937,0.999872}}, true }, + { "Land_PenBlack_F", {8202.94,8751.12,1.31026}, {{0.950445,0.310893,0},{0,0,1}}, true }, + { "Land_Money_F", {8200.91,8754.05,0.754758}, {{0,1,0},{0.00129158,0,0.999999}}, true }, + { "Land_Notepad_F", {8202.76,8750.62,1.28302}, {{0,0.999994,-0.00338291},{0,0.00338291,0.999994}}, true }, + { "Land_FlowerPot_01_Flower_F", {8200.66,8755.31,0.290066}, {{0,1,0},{0.00129158,0,0.999999}}, true }, + { "Land_TableSmall_01_F", {8202.32,8760.14,0.000129223}, {{0.987815,-0.154465,-0.0190204},{0.0159975,-0.0207896,0.999656}}, true }, + { "Land_TableSmall_01_F", {8200.89,8754.07,0.319301}, {{0.930367,-0.366628,-0.00120164},{0.00129158,0,0.999999}}, true }, + { "Land_ChairWood_F", {8200.77,8753.1,0.336327}, {{-0.988987,-0.148,0},{0,0,1}}, true }, + { "Land_ChairWood_F", {8201.53,8754.8,0.312427}, {{-0.53058,0.847635,0.000685285},{0.00129158,0,0.999999}}, true }, + { "Land_WoodenBed_01_F", {8205.4,8754.42,0.378473}, {{0.0844304,0.996429,-0.000109048},{0.00129158,0,0.999999}}, true }, + { "Land_Laptop_02_unfolded_F", {8202.87,8750.11,1.29723}, {{0.8,-0.599997,0.00202974},{0,0.00338291,0.999994}}, true }, + { "Land_File1_F", {8202.91,8750.98,1.28815}, {{0.98503,0.17238,0},{0,0,1}}, true }, + { "Land_SatelliteAntenna_01_F", {8209.93,8757.19,-0.00197601}, {{0.652561,0.757703,-0.00709392},{0.02479,-0.0119912,0.999621}}, true }, + { "Land_WoodenTable_large_F", {8203.04,8750.69,0.421222}, {{-0.0726553,-0.997351,0.00339149},{0,0.00340048,0.999994}}, true }, + { "Land_Sun_chair_F", {8203.34,8758.65,0.000140667}, {{0.993387,0.114013,-0.0135261},{0.0159975,-0.0207896,0.999656}}, true }, + { "Land_Sun_chair_F", {8203.05,8760.83,0.000155449}, {{0.976835,-0.212312,-0.0267717},{0.02479,-0.0119912,0.999621}}, true }, + { "Land_CampingTable_F", {8215.49,8750.42,6.00815e-005}, {{-0.99954,-0.0303333,-0.000364015},{0,-0.0119996,0.999928}}, true }, + { "RoadCone_F", {8222.23,8799.65,-0.207893}, {{0,0.998391,0.0567082},{0.0503349,-0.0566364,0.997125}}, true }, + { "RoadCone_F", {8215.55,8791.29,-0.201303}, {{0,0.999488,0.031983},{0.0749874,-0.0318929,0.996674}}, true }, + { "RoadCone_F", {8224.27,8792.71,-0.207889}, {{0,0.998391,0.0567082},{0.0503349,-0.0566364,0.997125}}, true }, + { "RoadCone_F", {8223.39,8795.95,-0.207932}, {{0,0.998391,0.0567082},{0.0503349,-0.0566364,0.997125}}, true }, + { "RoadCone_F", {8215.33,8795.33,-0.201246}, {{0,0.999488,0.031983},{0.0749874,-0.0318929,0.996674}}, true }, + { "RoadCone_F", {8215.82,8787.73,0.00180101}, {{0,0.999488,0.031983},{0.0749874,-0.0318929,0.996674}}, true }, + { "Land_GarbageContainer_closed_F", {8238.44,8747.71,0.0239067}, {{0.952562,-0.253598,-0.168264},{0.173336,-0.00238033,0.98486}}, true }, + { "Land_GarbageContainer_closed_F", {8238.88,8749.42,0.0274053}, {{0.954561,-0.23921,-0.177743},{0.185522,0.0102176,0.982587}}, true }, + { "Land_Workbench_01_F", {8234.04,8766.72,0.00433969}, {{-0.971237,-0.219147,0.0931256},{0.0884523,0.0310629,0.995596}}, true }, + { "Land_GarbageContainer_closed_F", {8239.42,8751.05,0.0285907}, {{-0.937222,0.310438,0.158879},{0.185522,0.0580706,0.980923}}, true }, + { "Land_GarbageBarrel_01_english_F", {8236.48,8768.79,0.00550508}, {{-0.692755,0.720114,0.0390791},{0.0884523,0.0310629,0.995596}}, true }, + { "Land_HelipadCircle_F", {8192.97,8791.68,0}, {{0,0.999672,0.0255917},{0.122276,-0.0253997,0.992171}}, true }, + { "Land_HBarrier_5_F", {8223.57,8732.43,-0.000534058}, {{-0.0980172,0.995182,0.0023806},{0,-0.00239211,0.999997}}, true }, + { "Land_HBarrier_5_F", {8212.46,8734.23,0}, {{-0.620428,-0.784264,0},{0,0,1}}, true }, + { "Land_HBarrier_5_F", {8200.71,8746.35,-0.0358186}, {{-0.998628,-0.0523504,-0.000837383},{0,-0.0159937,0.999872}}, true }, + { "Land_HBarrier_5_F", {8208.17,8738.05,0.0243478}, {{0.675598,0.737176,0.0117917},{0,-0.0159937,0.999872}}, true }, + { "Land_HBarrier_5_F", {8204.06,8742.11,0.0256491}, {{0.711713,0.70238,0.0112351},{0,-0.0159937,0.999872}}, true }, + { "Land_HBarrier_5_F", {8217.79,8732.08,-0.00536346}, {{-0.0723662,-0.997378,0.000173109},{0.00239211,0,0.999997}}, true }, + { "Land_TentA_F", {8217.81,8737.06,1.71661e-005}, {{-0.327965,-0.944687,-0.00225981},{0,-0.00239211,0.999997}}, true }, + { "Land_TentA_F", {8211.84,8743.5,5.29289e-005}, {{-0.952163,-0.305211,0.0152308},{0.015994,0,0.999872}}, true }, + { "Land_TentA_F", {8211.06,8746.34,2.28882e-005}, {{-0.995529,-0.0931043,0.0159242},{0.0159937,0,0.999872}}, true }, + { "Land_TentA_F", {8213.44,8740.86,0}, {{-0.807753,-0.589521,0},{0,0,1}}, true }, + { "Land_TentA_F", {8215.26,8738.64,0}, {{-0.650515,-0.759493,0},{0,0,1}}, true }, + { "Land_Garbage_square3_F", {8224.11,8738.91,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_Garbage_square5_F", {8217.01,8747.23,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_Campfire_F", {8218.38,8742.65,0}, {{0,1,0},{0,0,1}}, false }, + { "Land_WaterTank_04_F", {8205.41,8770.02,0}, {{-0.891667,0.452693,0},{0,0,1}}, true }, + { "ProtectionZone_Invisible_F", {8224.4,8756.69,0.00099802}, {{0,0.999974,-0.00720107},{0.0191948,0.00719974,0.99979}}, true }, + { "Land_HBarrier_5_F", {8200.46,8759.23,0.0446353}, {{0.997748,-0.0648074,-0.0173148},{0.0159975,-0.0207896,0.999656}}, true }, + { "Land_HBarrier_5_F", {8201.25,8770.14,0.0769663}, {{0.981896,-0.18675,-0.0316901},{0.0247923,-0.0391571,0.998925}}, true }, + { "Land_HBarrier_5_F", {8200.81,8764.41,0.083931}, {{0.996074,-0.083972,-0.0280132},{0.0247923,-0.0391571,0.998925}}, true }, + { "Land_TentDome_F", {8203.29,8763.57,0.00987482}, {{-0.177538,-0.983521,-0.0341469},{0.0247923,-0.0391571,0.998925}}, true }, + { "Land_Sunshade_F", {8202.34,8759.58,0.000490665}, {{0,0.999784,0.0207922},{0.0159975,-0.0207896,0.999656}}, true }, + { "Land_Garbage_square3_F", {8212.5,8769.83,0.00545883}, {{0,0.999409,0.0343797},{0.0191975,-0.0343733,0.999225}}, true }, + { "Land_Garbage_square5_F", {8212.51,8760.21,0.000863552}, {{0,0.999928,0.0119996},{0,-0.0119996,0.999928}}, true }, + { "Land_SignM_WarningMilitaryArea_english_F", {8214.52,8783.16,0}, {{0.0807734,-0.996732,0},{0,0,1}}, true }, + { "Flag_RedCrystal_F", {8216.19,8779.96,-4.76837e-007}, {{0,1,0},{0,0,1}}, true }, + { "Land_HBarrier_5_F", {8207.88,8779.19,0.0214648}, {{-0.290202,0.954198,0.0727313},{0.029589,-0.0670187,0.997313}}, true }, + { "Land_HBarrier_5_F", {8203.46,8775.56,0.094923}, {{0.847742,-0.52694,-0.0605614},{0.029589,-0.0670187,0.997313}}, true }, + { "Land_HBarrier_5_F", {8213.22,8781.17,0.0560451}, {{-0.289995,0.95312,0.0863969},{0.0479446,-0.0756943,0.995978}}, true }, + { "Land_BarGate_F", {8220.44,8782.99,0}, {{-0.114469,0.993427,0},{0,0,1}}, false }, + { "Land_Mil_ConcreteWall_F", {8223.92,8796.41,4.76837e-007}, {{0.975071,0.221895,0},{0,0,1}}, true }, + { "Land_Mil_ConcreteWall_F", {8214.73,8791.15,4.76837e-007}, {{0.990362,0.138503,0},{0,0,1}}, true }, + { "Land_Mil_ConcreteWall_F", {8215.21,8786.69,0}, {{0.990362,0.138503,0},{0,0,1}}, true }, + { "Land_Mil_ConcreteWall_F", {8214.22,8795.5,0}, {{0.990362,0.138503,0},{0,0,1}}, true }, + { "Land_Mil_ConcreteWall_F", {8222.54,8800.68,4.76837e-007}, {{-0.913812,-0.406138,0},{0,0,1}}, true }, + { "Land_Wreck_Heli_Attack_01_F", {8230.12,8702.72,-0.0943418}, {{0,0.991907,-0.126964},{0.109733,0.126197,0.985917}}, true }, + { "Land_SignM_WarningMilitaryArea_english_F", {8238.98,8738.46,0}, {{-0.7157,0.698408,0},{0,0,1}}, true }, + { "Flag_RedCrystal_F", {8235.69,8742.08,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_HBarrier_5_F", {8238.48,8743.32,-0.203916}, {{0.812708,-0.564495,-0.144401},{0.173336,-0.00238033,0.98486}}, true }, + { "Land_HBarrier_5_F", {8240.79,8748.59,0.137378}, {{-0.952517,0.247559,0.177271},{0.185522,0.0102176,0.982587}}, true }, + { "Land_BarGate_F", {8232.11,8736.13,-4.76837e-007}, {{-0.552951,0.833214,0},{0,0,1}}, false }, + { "Land_BagFence_Long_F", {8238.28,8738.67,0.00416136}, {{0.592364,-0.798642,-0.106186},{0.173336,-0.00238033,0.98486}}, true }, + { "Land_BagFence_Corner_F", {8240.12,8739.77,0.0845289}, {{-0.478555,-0.87421,0.0821129},{0.173336,-0.00238033,0.98486}}, true }, + { "Land_BagFence_Corner_F", {8226.35,8730.97,0.0133686}, {{-0.995955,-0.077641,0.0452289},{0.0455516,-0.00238963,0.998959}}, true }, + { "Land_BagFence_Round_F", {8227.31,8729.58,0.00468349}, {{0.244496,0.96961,-0.00882935},{0.0455516,-0.00238963,0.998959}}, true }, + { "Land_BagFence_Round_F", {8229.18,8730.87,-0.014102}, {{-0.99371,0.102299,0.0455569},{0.0455516,-0.00238963,0.998959}}, true }, + { "Land_BagFence_Round_F", {8241.76,8742.07,-0.0326204}, {{-0.625078,-0.773034,0.108146},{0.173336,-0.00238033,0.98486}}, true }, + { "Land_BagFence_Round_F", {8241.81,8739.81,-0.0276465}, {{-0.663004,0.739182,0.118475},{0.173336,-0.00238033,0.98486}}, true }, + { "Land_LampHalogen_F", {8225.8,8735.55,-4.76837e-007}, {{0.942949,0.332936,0},{0,0,1}}, true }, + { "Land_LampHalogen_F", {8226.55,8734.46,0}, {{-0.649994,-0.75994,0},{0,0,1}}, true }, + { "Land_HBarrier_1_F", {8236.6,8740.2,1.57356e-005}, {{-0.633946,-0.773375,-0.00185001},{0,-0.00239211,0.999997}}, true }, + { "Land_HBarrier_1_F", {8227.19,8733.18,0.0010457}, {{0.938561,0.342549,-0.0419781},{0.0455516,-0.00238963,0.998959}}, true }, + { "Land_PaperBox_open_empty_F", {8234.91,8759.52,0.00190353}, {{-0.991253,-0.118236,0.0586348},{0.0519298,0.0590158,0.996905}}, true }, + { "Land_HBarrier_5_F", {8238.81,8765.79,0.00236273}, {{0.973259,0.152852,-0.171472},{0.168745,0.0307379,0.98518}}, true }, + { "Land_HBarrier_5_F", {8237.89,8771.46,0.00236273}, {{0.973259,0.152852,-0.171472},{0.168745,0.0307379,0.98518}}, true }, + { "Land_HBarrier_5_F", {8241.05,8754.42,-0.0505013}, {{0.970278,0.147022,-0.192213},{0.185522,0.0580706,0.980923}}, true }, + { "Land_HBarrier_5_F", {8239.78,8760.04,-0.0505013}, {{0.970278,0.147022,-0.192213},{0.185522,0.0580706,0.980923}}, true }, + { "Land_ScrapHeap_1_F", {8234.62,8771.85,-0.00834084}, {{-0.221623,0.975073,-0.0107328},{0.0884523,0.0310629,0.995596}}, true }, + { "Land_PaperBox_closed_F", {8236.63,8759.77,0.00311756}, {{0.988431,0.139408,-0.0597411},{0.0519298,0.0590158,0.996905}}, true }, + { "Land_Pallet_MilBoxes_F", {8235.1,8762.83,0.00204849}, {{-0.980306,-0.191075,0.0499058},{0.0519288,-0.00559174,0.998635}}, true }, + { "Land_GarbageHeap_04_F", {8237.09,8757.11,-0.00887489}, {{0,0.998252,-0.0590955},{0.0519298,0.0590158,0.996905}}, true }, + { "Land_GarbagePallet_F", {8235.77,8755.07,-0.0131106}, {{0,0.998252,-0.0590955},{0.0519298,0.0590158,0.996905}}, true }, + { "Land_Garbage_square5_F", {8229.27,8768.14,-0.00140619}, {{0,0.999984,0.00559929},{0.0519288,-0.00559174,0.998635}}, true }, + { "Land_GarbageBags_F", {8238.65,8753.3,0.137726}, {{0,0.998252,-0.0590965},{0.185522,0.0580706,0.980923}}, true }, + { "Land_Wreck_Hunter_F", {8228.89,8799.27,-0.0184212}, {{-0.784361,0.607893,0.123465},{0.0971384,-0.0762128,0.992349}}, true }, + { "Land_BagBunker_Small_F", {8227.83,8787.76,0.0522332}, {{0.203236,-0.975907,-0.0793713},{0.116795,-0.0563211,0.991558}}, true }, + { "Flag_NATO_F", {8226.87,8781.72,4.76837e-007}, {{0,1,0},{0,0,1}}, true }, + { "Land_PowerGenerator_F", {8232.82,8780.23,0.00719833}, {{-0.752689,0.650498,0.101543},{0.116795,-0.0198578,0.992957}}, true }, + { "Land_HBarrier_5_F", {8236.95,8777.19,0.0915666}, {{0.980661,0.160399,-0.112141},{0.116795,-0.0198578,0.992957}}, true }, + { "Land_HBarrier_5_F", {8233.95,8782.17,-0.231368}, {{-0.600282,-0.797919,0.05465},{0.116795,-0.0198578,0.992957}}, true }, + { "Land_HBarrier_5_F", {8228.36,8783.77,-0.186376}, {{0.0708746,-0.995973,-0.054904},{0.0884518,-0.0485504,0.994897}}, true }, + { "Land_LampHalogen_F", {8228.48,8780.74,0}, {{0.873624,0.486601,0},{0,0,1}}, true }, + { "Land_LampHalogen_F", {8234.58,8779,1.43051e-006}, {{-0.812201,0.583377,0},{0,0,1}}, true }, + { "Land_Mil_ConcreteWall_F", {8225.03,8792.2,4.76837e-007}, {{-0.956993,-0.290112,0},{0,0,1}}, true }, + { "Land_LuggageHeap_01_F", {8287.5,8720.69,0.00329256}, {{0,0.99998,-0.0063944},{0.112874,0.00635354,0.993589}}, true }, + { "Land_LuggageHeap_04_F", {8288.41,8718.79,0.000181437}, {{0,0.99998,-0.0063944},{0.112874,0.00635354,0.993589}}, true }, + { "Land_LuggageHeap_04_F", {8285.92,8722.28,0.00569487}, {{0.623789,-0.780154,-0.0474102},{0.0837045,0.00637196,0.99647}}, true }, + { "Land_LuggageHeap_03_F", {8287.61,8722.98,0.00234711}, {{0,0.99998,-0.0063944},{0.112874,0.00635354,0.993589}}, true }, + { "Land_LuggageHeap_03_F", {8290.21,8719.18,0.00234711}, {{0,0.99998,-0.0063944},{0.112874,0.00635354,0.993589}}, true }, + { "Land_LuggageHeap_02_F", {8287.69,8721.73,-0.00678658}, {{0,0.99998,-0.0063944},{0.112874,0.00635354,0.993589}}, true }, + { "Land_LuggageHeap_05_F", {8289.71,8721.17,0.0191203}, {{0,0.99998,-0.0063944},{0.112874,0.00635354,0.993589}}, true }, + { "Land_LuggageHeap_05_F", {8285.86,8719.33,0.0138569}, {{0,0.99998,-0.0063944},{0.0837045,0.00637196,0.99647}}, true }, + { "Land_Sign_WarningNoWeapon_F", {8280.21,8727.94,0}, {{0.999999,-0.00138812,0},{0,0,1}}, true }, + { "Land_Wreck_HMMWV_F", {8289.57,8738.86,0}, {{-0.999304,0.0373081,0},{0,0,1}}, true }, + { "Land_PortableLight_double_F", {8278.5,8730.81,0}, {{0.0128195,0.999918,0},{0,0,1}}, true }, + { "Land_UWreck_FishingBoat_F", {8312.56,8711.5,-0.266865}, {{0.868645,0.494922,-0.0225495},{0.063074,-0.0653286,0.995868}}, true }, + // "Western" Trader Camp + { "Land_CampingChair_V1_F", {2311.88,3409.6,0.0055542}, {{-0.933025,0.3464,-0.0973245},{-0.116795,-0.0357304,0.992513}}, true }, + { "Land_CampingChair_V1_F", {2313.02,3407.45,0.0010376}, {{-0.364928,-0.930023,-0.0434126},{-0.0271882,-0.0359633,0.998983}}, true }, + { "Land_CampingChair_V2_F", {2314.42,3410.46,0.000213623}, {{0.653104,0.755931,0.0449882},{-0.0271882,-0.0359633,0.998983}}, true }, + { "Land_Bench_F", {2315.26,3408.7,-0.000488281}, {{0.252638,0.966663,0.0416755},{-0.0271882,-0.0359633,0.998983}}, true }, + { "PortableLight_Single_SIM_EPOCH", {2320.64,3416.14,0.000808716}, {{0.850793,0.524976,-0.0234907},{0.0127978,0.0239893,0.99963}}, true }, + { "PortableLight_Single_SIM_EPOCH", {2328.91,3388.61,0.00326538}, {{-0.921127,0.387624,-0.0356616},{-0.0487428,-0.0239649,0.998524}}, true }, + { "Land_GarbageContainer_open_F", {2330.92,3398.96,0.000228882}, {{0.977381,-0.210993,0.014426},{-0.011995,0.012797,0.999846}}, true }, + { "Land_BarrelWater_F", {2345.1,3379.22,0.00137329}, {{0,0.999233,-0.0391708},{-0.0431594,0.0391343,0.998301}}, true }, + { "Land_BarrelWater_F", {2345.7,3379.17,0.00138855}, {{0,0.999233,-0.0391708},{-0.0431594,0.0391343,0.998301}}, true }, + { "Land_BarrelWater_F", {2345.5,3378,0.00137329}, {{0.582642,-0.81073,0.0569705},{-0.0431594,0.0391343,0.998301}}, true }, + { "Land_CampingTable_F", {2331.68,3386.26,0.00161743}, {{-0.725634,-0.688029,-0.00846754},{-0.0487416,0.0391227,0.998045}}, true }, + { "Land_TablePlastic_01_F", {2334.87,3407.46,0.000106812}, {{-0.995764,0.0919293,-0.00147084},{0,0.0159977,0.999872}}, true }, + { "Land_WoodenTable_large_F", {2338.3,3401.98,0.000213623}, {{0.96056,-0.277419,0.0190381},{-0.0151952,0.0159958,0.999757}}, true }, + { "Land_Bench_F", {2362.77,3418.12,0.000488281}, {{-0.963148,0.268955,0.00307803},{0.0168009,0.0487359,0.99867}}, true }, + { "Land_Bench_F", {2359.21,3415.32,-0.000915527}, {{0.0511924,0.998687,-0.00182742},{0.0191947,0.000845572,0.999815}}, true }, + { "Land_HelipadSquare_F", {2320.92,3354.75,-1.52588e-005}, {{0.67542,0.737433,0.000311218},{-0.0829134,0.0755215,0.993691}}, true }, + { "Land_TentDome_F", {2313.72,3418.62,-0.00376892}, {{-0.807417,-0.589473,0.0244832},{0.0127978,0.0239893,0.99963}}, true }, + { "Land_TentDome_F", {2316.23,3405.6,-0.00708008}, {{0.939469,0.34054,0.0378279},{-0.0271882,-0.0359633,0.998983}}, true }, + { "Land_TentDome_F", {2318.97,3417.68,-0.0156403}, {{-0.899506,0.436907,0.001031},{0.0127978,0.0239893,0.99963}}, true }, + { "Land_TentDome_F", {2318.86,3417.65,-0.00643921}, {{-0.899506,0.436907,0.001031},{0.0127978,0.0239893,0.99963}}, true }, + { "Land_TentDome_F", {2319.62,3410.17,-0.00038147}, {{0.81714,0.576298,-0.0127619},{0.0127978,0.00399642,0.99991}}, true }, + { "Land_CampingChair_V1_folded_F", {2320.91,3413.5,1.52588e-005}, {{-0.737724,-0.674615,0.0256342},{0.0127978,0.0239893,0.99963}}, true }, + { "Land_Garbage_square3_F", {2314.48,3401.96,0.00643921}, {{0,0.999353,0.0359766},{-0.0271882,-0.0359633,0.998983}}, true }, + { "Land_Garbage_square5_F", {2315.04,3415.47,-0.00216675}, {{0,0.999712,-0.0239912},{0.0127978,0.0239893,0.99963}}, true }, + { "Land_Campfire_F", {2313.85,3408.93,-0.000305176}, {{0,0.999353,0.0359766},{-0.0271882,-0.0359633,0.998983}}, false }, + { "ProtectionZone_Invisible_F", {2335.17,3394.12,0.000732422}, {{0.159745,0.9871,-0.0107174},{-0.011995,0.012797,0.999846}}, true }, + { "Land_PortableLight_single_F", {2339.4,3377.5,-0.00457764}, {{-0.641599,-0.76704,0},{0,0,1}}, true }, + { "Land_ClothShelter_02_F", {2343.39,3379.52,0.00270081}, {{0,0.999233,-0.0391708},{-0.0431594,0.0391343,0.998301}}, true }, + { "Land_Garbage_square3_F", {2326.63,3392.23,0.00495911}, {{0,0.999712,0.0239934},{-0.0487428,-0.0239649,0.998524}}, true }, + { "Land_Garbage_square3_F", {2342.08,3398.28,-0.00131226}, {{0,0.999954,-0.00959931},{-0.0151952,0.0095982,0.999838}}, true }, + { "Land_Garbage_square5_F", {2345.81,3385.1,-0.00442505}, {{0,0.997531,-0.070225},{-0.012,0.07022,0.997459}}, true }, + { "Land_Garbage_square5_F", {2336.22,3388.28,0.00367737}, {{0,0.999712,0.0239934},{-0.0487428,-0.0239649,0.998524}}, true }, + { "Land_StallWater_F", {2341.81,3379.84,0.00115967}, {{-0.997554,-0.0566793,-0.0409052},{-0.0431594,0.0391343,0.998301}}, true }, + { "Land_PortableLight_single_F", {2332.02,3405.45,0}, {{-0.995439,0.0954,0},{0,0,1}}, true }, + { "Land_PartyTent_01_F", {2335.71,3404.76,0.000320435}, {{-0.155449,-0.987718,0.0158032},{0,0.0159977,0.999872}}, true }, + { "Land_GarbageWashingMachine_F", {2330.29,3421.09,0.00328064}, {{0,0.998436,0.0559132},{-0.10659,-0.0555947,0.992748}}, true }, + { "Land_Garbage_square5_F", {2342.82,3414.69,0.00460815}, {{0,0.998436,0.0559122},{-0.0127979,-0.0559077,0.998354}}, true }, + { "Land_Garbage_line_F", {2344.54,3410.43,0.0129242}, {{-0.8827,-0.469929,-0.00265337},{-0.0127979,0.0183943,0.999749}}, true }, + { "Land_Wreck_CarDismantled_F", {2331.54,3426.21,0.0324249}, {{0.655651,0.749953,0.0877054},{-0.10659,-0.0230633,0.994036}}, true }, + { "Land_GarbageHeap_01_F", {2356.66,3389.44,0.000198364}, {{0.997743,-0.0656321,0.0141985},{-0.0135972,0.00959842,0.999861}}, true }, + { "Land_Bench_01_F", {2365.13,3414.81,0}, {{0.979477,-0.201554,0},{0,0,1}}, true }, + { "Land_Garbage_square5_F", {2359.55,3413.34,-0.000778198}, {{0,1,-0.000845728},{0.0191947,0.000845572,0.999815}}, true }, + { "Land_Campfire_F", {2362.33,3415.94,-0.000335693}, {{0,0.998811,-0.0487416},{0.0670486,0.0486319,0.996564}}, false }, + { "Land_Wreck_Van_F", {2361.54,3427.32,0.00337219}, {{0,0.999712,-0.0239937},{0.0423613,0.0239722,0.998815}}, true } + +}; + staticNpcPos[] = { + // Eastern Trader Camp + { "C_man_hunter_1_F", { 8232.18, 8771.34, 0.00125885 }, 256 }, + { "C_man_pilot_F", { 8233.3, 8761.5, 0.00149393 }, 270 }, + { "C_man_w_worker_F", { 8221.92, 8738.06, 0.00143862 }, 010 }, + { "C_scientist_F", { 8209.06, 8761.39, 0.00152349 }, 054 }, + // "Northern" Trader Camp + { "C_man_polo_5_F", { 3040.71, 8465.4, 0.00144076 }, 052 }, + { "C_journalist_F", { 3079.2, 8474.5, 0.00206375 }, 290 }, + { "C_man_p_shorts_1_F_afro", { 3023.66, 8483.85, 8.38264 }, 047 }, + { "C_man_polo_6_F", { 3080.98, 8496.67, 0.00145102 }, 258 }, + { "C_man_shorts_2_F", { 3080.35, 8505.38, 0.00143909 }, 250 }, + // "Western" Trader Camp + { "C_man_polo_2_F_euro", { 2334.19, 3405.76, 0.00138855 }, 095 }, + { "C_man_polo_1_F", { 2343.79, 3378.75, 0.00138855 }, 004 }, + { "C_man_p_beggar_F", { 2330.36, 3388.18, 0.00140381 }, 082 } + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Mountains_ACR.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Mountains_ACR.h new file mode 100644 index 0000000..67abc08 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Mountains_ACR.h @@ -0,0 +1,47 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Mountains_ACR. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Mountains_ACR.h +*/ +class Mountains_ACR : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", "north" }, + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", "west" }, + { "TP_Booth_e_EPOCH", { 13.5127,0.410156,-10.3098, 180}, "", "east" }, + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "south" } + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Napf.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Napf.h new file mode 100644 index 0000000..dee1743 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Napf.h @@ -0,0 +1,46 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Woodland_ACR. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/woodland_acr.h +*/ +class Napf : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", "north" }, + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", "west" }, + { "TP_Booth_e_EPOCH", { 13.5127,0.410156,-10.3098, 90}, "", "east" } + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Panthera3.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Panthera3.h new file mode 100644 index 0000000..31a5c40 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Panthera3.h @@ -0,0 +1,30 @@ +class Panthera3 : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "center" } // temp for now + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Porto.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Porto.h new file mode 100644 index 0000000..4b1f764 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Porto.h @@ -0,0 +1,44 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Porto. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Porto.h +*/ +class Porto : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "south" } + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/ProvingGrounds_PMC.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/ProvingGrounds_PMC.h new file mode 100644 index 0000000..ce18688 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/ProvingGrounds_PMC.h @@ -0,0 +1,45 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for ProvingGrounds_PMC. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/ProvingGrounds_PMC.h +*/ +class ProvingGrounds_PMC : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "south" } + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Sara.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Sara.h new file mode 100644 index 0000000..71515bb --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Sara.h @@ -0,0 +1,46 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Sahrani. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Sara.h +*/ +class Sara : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 10; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", "north" }, + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098 -90}, "", "west" }, + { "TP_Booth_e_EPOCH", { 13.5127,0.410156,-10.3098, 90}, "", "east" } + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/SaraLite.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/SaraLite.h new file mode 100644 index 0000000..7af0879 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/SaraLite.h @@ -0,0 +1,46 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Sahrani. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/SaraLite.h +*/ +class SaraLite : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 10; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", "north" }, + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", "west" }, + { "TP_Booth_e_EPOCH", { 13.5127,0.410156,-10.3098, 90}, "", "east" } + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Sara_dbe1.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Sara_dbe1.h new file mode 100644 index 0000000..414ce7e --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Sara_dbe1.h @@ -0,0 +1,46 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Sahrani. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Sara_dbe1.h +*/ +class Sara_dbe1 : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 10; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", "north" }, + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", "west" }, + { "TP_Booth_e_EPOCH", { 13.5127,0.410156,-10.3098, 90}, "", "east" } + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Shapur_BAF.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Shapur_BAF.h new file mode 100644 index 0000000..8f384be --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Shapur_BAF.h @@ -0,0 +1,45 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Shapur_BAF. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Shapur_BAF.h +*/ +class Shapur_BAF : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 10; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "south" } + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Utes.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Utes.h new file mode 100644 index 0000000..6131686 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Utes.h @@ -0,0 +1,44 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Utes. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Utes.h +*/ +class Utes : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "south" } + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Winthera3.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Winthera3.h new file mode 100644 index 0000000..9357a96 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Winthera3.h @@ -0,0 +1,30 @@ +class Winthera3 : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "center" } // temp for now + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/Woodland_ACR.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Woodland_ACR.h new file mode 100644 index 0000000..26786b6 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/Woodland_ACR.h @@ -0,0 +1,46 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Woodland_ACR. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/woodland_acr.h +*/ +class Woodland_ACR : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", "north" }, + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", "west" }, + { "TP_Booth_e_EPOCH", { 13.5127,0.410156,-10.3098, 90}, "", "east" } + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/abramia.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/abramia.h new file mode 100644 index 0000000..1664576 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/abramia.h @@ -0,0 +1,30 @@ +class abramia : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "center" } // temp for now + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/altis.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/altis.h new file mode 100644 index 0000000..21c810c --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/altis.h @@ -0,0 +1,278 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for altis. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/altis.h +*/ +class Altis : Default +{ + worldSize = 25000; + plantLimit = 10; + // vehicles - Max vehicle slots is calculated from per vehicle limits below. Warning! Higher the number lower the performance. + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5} + }; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", { 13326.5, 14515.2, 0.16426 } }, // Trader city 1 + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", { 6192.46, 16834, 0.00154114 } }, // Trader city 2 + { "TP_Booth_e_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", { 18451.9, 14278.1, 0.00143814 } } // Trader city 3 + }; + propsPos[] = { + //trader city #1 + {"Land_MarketShelter_F", { 13315.3, 14512.4, 0.0361125 }, 119.966, true}, + { "Land_ScrapHeap_2_F", { 13315.9, 14499, 0.00584948 }, 255.706, true }, + { "Land_HBarrier_Big_F", { 13313.7, 14494.8, 0.050712 }, 352.447, true }, + { "Land_spp_Mirror_Broken_F", { 13303.6, 14516.4, 0 }, 300.644, true }, + { "Land_Mil_WallBig_4m_F", { 13309.9, 14500.4, 0.000857234 }, 58.0228, true }, + { "Land_Mil_WallBig_4m_F", { 13308.4, 14510.6, 0.00314641 }, 78.5001, true }, + { "Land_Mil_WallBig_4m_F", { 13308, 14507, 0.0178673 }, 112.416, true }, + { "Land_Mil_WallBig_4m_F", { 13311.2, 14517.6, -0.00578284 }, 121.855, true }, + { "Land_Mil_WallBig_4m_F", { 13308.1, 14503.5, 0.0163193 }, 66.6886, true }, + { "Land_Mil_WallBig_4m_F", { 13311.6, 14496.9, 0.0774074 }, 68.9098, true }, + { "Land_Mil_WallBig_4m_F", { 13309.1, 14514.3, -0.00295639 }, 122.56, true }, + { "Land_LampHarbour_F", { 13311.4, 14507.1, -0.00963879 }, 11.7876, true }, + { "Land_LampHarbour_F", { 13315, 14519.4, -4.76837e-007 }, 114.758, true }, + { "Land_CrabCages_F", { 13313.8, 14507.6, 0.0636249 }, 0.0560406, true }, + { "Land_JunkPile_F", { 13313.8, 14515, -0.00780201 }, 297.013, true }, + { "Land_WorkStand_F", { 13315.9, 14511.8, -0.00349522 }, 310.495, true }, + { "Land_Garbage_square3_F", { 13313.6, 14511.6, 0.00600243 }, 0.0279988, true }, + { "Land_Metal_wooden_rack_F", { 13315.9, 14518.9, 0.00110078 }, 304.348, true }, + { "Land_WheelCart_F", { 13313.1, 14513, 0.00185466 }, 117.515, true }, + { "Land_HelipadCircle_F", { 13314.1, 14540.2, 0 }, 0, true }, + { "Land_spp_Mirror_F", { 13309, 14521.7, -2.38419e-007 }, 309.358, true }, + { "Land_dp_transformer_F", { 13313.7, 14524, 0 }, 333.717, true }, + { "Land_CncWall4_F", { 13316.5, 14530.1, -0.00036478 }, 289.927, true }, + { "Land_Mil_WallBig_4m_F", { 13319.7, 14524.7, -0.0120368 }, 154.164, true }, + { "Land_Mil_WallBig_4m_F", { 13313.4, 14520.5, -0.00267744 }, 136.556, true }, + { "Land_Mil_WallBig_4m_F", { 13316.4, 14522.8, -0.00857091 }, 147.592, true }, + { "Land_Garbage_square5_F", { 13316.5, 14525.7, 0.00277591 }, 237.692, true }, + { "Land_Garbage_line_F", { 13318.9, 14523.7, 0.0254805 }, 252.492, true }, + { "Land_TouristShelter_01_F", { 13291.3, 14614.9, -9.53674e-007 }, 76.9832, true }, + { "ProtectionZone_Invisible_F", { 13344.1, 14483.7, 0.00191855 }, 359.768, true }, + { "Land_Pier_Box_F", { 13334.8, 14498.2, 0.104769 }, 71.6957, true }, + { "Land_PartyTent_01_F", { 13343.3, 14514.7, 0.000879049 }, 161.543, true }, + { "Land_HBarrier_Big_F", { 13321.3, 14496.8, 0.0973002 }, 349.224, true }, + { "Land_Sunshade_04_F", { 13329.9, 14502.9, 0.00681627 }, 0.199829, true }, + { "Land_LampHarbour_F", { 13339, 14500.7, -5.96046e-007 }, 324.419, true }, + { "Land_LampHarbour_F", { 13328, 14501.7, -0.0183594 }, 11.7876, true }, + { "Land_CrabCages_F", { 13338.9, 14503.4, 0.0179708 }, 359.976, true }, + { "Land_TentDome_F", { 13334.2, 14503.9, 0.0171249 }, 287.115, true }, + { "Land_Garbage_line_F", { 13336.4, 14501.4, -0.0589776 }, 270.921, true }, + { "Land_Garbage_square3_F", { 13324.3, 14502.1, -0.0118027 }, 0.0174958, true }, + { "Land_Garbage_square3_F", { 13338.7, 14505.8, 0.00524509 }, 0.0174958, true }, + { "Land_Garbage_square3_F", { 13333.1, 14501.1, -0.00621545 }, 0.0174958, true }, + { "Land_Campfire_F", { 13328.4, 14512.1, -0.0409672 }, 0.0174958, false }, + { "Land_GarbageContainer_open_F", { 13335.7, 14519.3, 0.00106692 }, 251.651, true }, + { "Land_BagFence_Long_F", { 13340.3, 14519.6, 0.000348806 }, 342.607, true }, + { "Land_Sink_F", { 13349.6, 14518, 0.00516319 }, 72.7978, true }, + { "Land_CampingTable_F", { 13340.8, 14518.7, 0.000142813 }, 335.017, true }, + { "Land_Bench_F", { 13331, 14512.4, 0.000242233 }, 353.009, true }, + { "Land_Bench_F", { 13326.9, 14510.1, 0.0057652 }, 124.855, true }, + { "Land_Sleeping_bag_brown_F", { 13330.5, 14503.4, 0.0382801 }, 6.17074, true }, + { "Land_Sleeping_bag_blue_F", { 13329.2, 14503.4, 0.0390047 }, 0.199829, true }, + { "Land_CampingTable_small_F", { 13327.4, 14514.5, 0.00646973 }, 158.107, true }, + { "Land_CampingChair_V1_F", { 13341.6, 14517.3, 0.00326729 }, 117.152, true }, + { "Land_CampingChair_V2_F", { 13325.9, 14513.6, 0.001086 }, 317.349, true }, + { "Land_CampingChair_V2_F", { 13329.2, 14514.8, 3.52859e-005 }, 359.941, true }, + { "Land_Pillow_camouflage_F", { 13330.3, 14504.2, -0.00268662 }, 9.06669, true }, + { "Land_Pillow_grey_F", { 13329, 14504, -0.00269282 }, 9.13059, true }, + { "Land_HBarrier_Big_F", { 13342.7, 14535.4, 2.21729e-005 }, 347.07, true }, + { "Land_HBarrier_Big_F", { 13345.1, 14530.8, -0.000231266 }, 253.023, true }, + { "Land_HBarrier_Big_F", { 13330.9, 14531, -2.38419e-007 }, 336.999, true }, + { "Land_CncWall4_F", { 13327.1, 14533.5, -2.38419e-007 }, 229.304, true }, + { "Land_CncWall4_F", { 13338.2, 14530.2, 0.000161886 }, 157.719, true }, + { "Land_CncWall4_F", { 13321.7, 14532.4, -0.000200987 }, 344.886, true }, + { "Flag_US_F", { 13320.7, 14524.6, -2.38419e-007 }, 0, false }, + { "Land_Mil_WallBig_4m_F", { 13334.7, 14524.1, 0.000475168 }, 247.87, true }, + { "Land_Mil_WallBig_4m_F", { 13336.1, 14520.5, 0.000475407 }, 247.907, true }, + { "Land_Mil_WallBig_4m_F", { 13321.1, 14527.6, -0.000753164 }, 78.6046, true }, + { "Land_Mil_WallBig_4m_F", { 13324.5, 14528.4, 0.000790119 }, 254.564, true }, + { "Land_Mil_WallBig_4m_F", { 13327.1, 14527.2, 0.00105166 }, 163.344, true }, + { "Land_Mil_WallBig_4m_F", { 13330.8, 14528.5, 0 }, 157.189, true }, + { "Land_Mil_WallBig_4m_F", { 13333.1, 14527.5, -5.72205e-006 }, 241.672, true }, + { "Land_Garbage_square5_F", { 13332.5, 14530.3, 2.6226e-006 }, 310.573, true }, + { "Land_Garbage_square5_F", { 13329.1, 14527.4, 0.000170469 }, 0.0174853, true }, + { "Land_LampHarbour_F", { 13331.7, 14523.6, -7.15256e-007 }, 219.543, true }, + { "Land_Garbage_line_F", { 13331, 14533.3, 0.000420094 }, 56.4977, true }, + { "Land_Garbage_line_F", { 13326.3, 14529.9, 0 }, 0, true }, + { "Land_Garbage_line_F", { 13329.2, 14534.4, 0.000157356 }, 153.869, true }, + { "Land_Garbage_line_F", { 13331.3, 14521.7, 0.00176883 }, 335.57, true }, + { "Land_Garbage_square3_F", { 13338.7, 14530, 0.000244141 }, 0, true }, + { "Land_Pallet_MilBoxes_F", { 13331.6, 14527.6, 0 }, 339.477, true }, + { "Land_BagFence_Long_F", { 13322.6, 14529.4, 5.00679e-006 }, 342.605, true }, + { "Land_BagFence_Long_F", { 13343.2, 14520.5, 9.29832e-005 }, 342.605, true }, + { "Land_TablePlastic_01_F", { 13322.6, 14528.6, -2.38419e-007 }, 345.367, true }, + { "Land_PaperBox_open_empty_F", { 13329.9, 14527.1, 7.86781e-006 }, 339.477, true }, + { "Land_Graffiti_01_F", { 13338.5, 14530.9, 2.13621 }, 157.817, true }, + { "Land_ChairWood_F", { 13323.8, 14527.9, -1.66893e-006 }, 126.97, true }, + { "Land_HBarrier_Big_F", { 13359.5, 14502.3, 0.0664403 }, 55.4318, true }, + { "Land_Mil_WallBig_4m_F", { 13353.3, 14518.3, 0.00565863 }, 253.583, true }, + { "Land_Mil_WallBig_4m_F", { 13356.1, 14505.4, 0.0153434 }, 67.557, true }, + { "Land_Mil_WallBig_4m_F", { 13353.3, 14514.7, 0.00991702 }, 289.908, true }, + { "Land_Mil_WallBig_4m_F", { 13355.3, 14507.7, 0.0977246 }, 225.78, true }, + { "Land_Mil_WallBig_4m_F", { 13352.9, 14510.7, 0.0773071 }, 248.711, true }, + { "Land_Garbage_line_F", { 13351, 14514.1, -0.026839 }, 296.754, true }, + { "Land_ToiletBox_F", { 13351, 14515.4, 0.0014267 }, 38.3472, true }, + { "Land_HBarrierTower_F", { 13357.5, 14530.1, -0.00182509 }, 206.67, true }, + { "Land_Grave_rocks_F", { 13355.5, 14540.3, 0 }, 333.404, true }, + { "Land_Grave_rocks_F", { 13354.6, 14542, 0 }, 333.404, true }, + //trader city 2 + { "Land_Mound02_8m_F", { 6162.68, 16812.2, 0.0149612 }, 315.554, true }, + { "Land_Cargo20_orange_F", { 6179.76, 16829.7, 0.0505295 }, 311.232, true }, + { "Land_CncBarrierMedium_F", { 6176.92, 16830, 0.00748444 }, 51.7517, true }, + { "Land_HelipadEmpty_F", { 6169.49, 16821.5, 0 }, 359.986, true }, + { "Land_Cargo40_grey_F", { 6176.53, 16833.2, 2.63681 }, 53.613, true }, + { "Land_Cargo20_sand_F", { 6176.11, 16837.8, 0.0252686 }, 144.241, true }, + { "Land_Cargo20_military_green_F", { 6177.59, 16844.3, 0.0136719 }, 113.546, true }, + { "Land_CncBarrierMedium_F", { 6177.5, 16833, 0.00309753 }, 51.6071, true }, + { "Land_CargoBox_V1_F", { 6178.72, 16841, 0.0587616 }, 250.318, true }, + { "Land_CargoBox_V1_F", { 6173.7, 16834.1, 0.0386658 }, 241.477, true }, + { "Land_CargoBox_V1_F", { 6175.78, 16840.3, 0.0342102 }, 241.651, true }, + { "Land_CncBarrier_stripes_F", { 6176.66, 16835.2, 0.000656128 }, 266.466, true }, + { "Land_Grave_dirt_F", { 6175.62, 16862, 0 }, 230.746, true }, + { "Land_Grave_forest_F", { 6174.19, 16860.9, 0 }, 232.613, true }, + { "Land_Cargo20_grey_F", { 6183.96, 16827.5, 0.0208817 }, 216.529, true }, + { "Flag_POWMIA_F", { 6185.59, 16829.4, 0 }, 0, false }, + { "Land_Garbage_line_F", { 6197.65, 16825.8, -0.040535 }, 275.131, true }, + { "Land_CncWall1_F", { 6186.84, 16825.1, 0.020401 }, 8.73224, true }, + { "Land_CncWall1_F", { 6199.79, 16824.8, 0.0112305 }, 314.427, true }, + { "Land_CncWall1_F", { 6188.11, 16824.7, 0.0179138 }, 8.76634, true }, + { "Land_CncWall1_F", { 6200.97, 16826, 0.0130386 }, 314.442, true }, + { "Land_InvisibleBarrier_F", { 6195.92, 16823.3, 6.00636 }, 0.0314739, true }, + { "Land_InvisibleBarrier_F", { 6191.93, 16823.6, 6.12908 }, 0.0420273, true }, + { "Land_InvisibleBarrier_F", { 6192.48, 16823.6, 5.09669 }, 0.0420273, true }, + { "Land_InvisibleBarrier_F", { 6196.23, 16823.4, 4.86904 }, 359.916, true }, + { "Land_Garbage_square3_F", { 6187.7, 16827.2, 0.000137329 }, 0.101566, true }, + { "Land_CncBarrier_F", { 6188.64, 16828.8, 0.00197601 }, 276.469, true }, + { "Land_CampingTable_F", { 6192.76, 16829.8, 0.00217438 }, 181.885, true }, + { "Land_CampingChair_V1_F", { 6193.31, 16828.4, 0.00823212 }, 178.199, true }, + { "Land_PartyTent_01_F", { 6193.72, 16831.7, 0.0133286 }, 0.157519, true }, + { "Land_Cargo40_grey_F", { 6184.39, 16851, 0.042366 }, 150.893, true }, + { "Land_HBarrier_Big_F", { 6202.7, 16840.1, 0.00379181 }, 100.324, true }, + { "Land_HBarrier_Big_F", { 6194.52, 16853.4, 0.0065918 }, 7.52855, true }, + { "Land_HBarrier_Big_F", { 6201.46, 16831.1, 0.000526428 }, 99.2688, true }, + { "Land_HBarrier_Big_F", { 6201.1, 16848.4, -0.00135803 }, 63.1847, true }, + { "Land_Garbage_square5_F", { 6199.71, 16835.5, 0.000144958 }, 0.16451, true }, + { "Land_Garbage_line_F", { 6192.65, 16851.8, -0.0195236 }, 291.183, true }, + { "Land_Garbage_line_F", { 6188.4, 16831.8, -0.0666351 }, 359.934, true }, + { "Land_WorkStand_F", { 6198.14, 16834.3, 0.00075531 }, 52.4856, true }, + { "Land_ToiletBox_F", { 6196.38, 16849.9, 0.00205231 }, 63.7064, true }, + { "Land_WaterTank_F", { 6200.39, 16841.4, 0.00341034 }, 273.366, true }, + { "Land_Garbage_square3_F", { 6185.6, 16849.1, 6.10352e-005 }, 0.0209828 }, + { "Land_Campfire_F", { 6183.06, 16843.3, 0.0350647 }, 359.996, false }, + { "Land_WoodenTable_large_F", { 6185.71, 16846.1, 0.00247192 }, 151.316, true }, + { "Land_Sink_F", { 6190.75, 16849.5, 0.000732422 }, 232.857, true }, + { "Land_WoodPile_F", { 6198.75, 16835.3, 0.00598145 }, 0.16451, true }, + { "Land_CncBarrier_F", { 6195.53, 16836.4, 0.00226593 }, 0.16802, true }, + { "Land_CncBarrier_stripes_F", { 6188.69, 16834, 0.00474548 }, 266.564, true }, + { "Land_CncBarrier_stripes_F", { 6191.22, 16836.5, 0.00266266 }, 0.399046, true }, + { "Land_WheelCart_F", { 6187.45, 16847, 0.00171661 }, 359.36, true }, + { "Land_Bench_F", { 6180.3, 16843, 0.000434875 }, 359.72, true }, + { "Land_ShelvesWooden_F", { 6198.24, 16831.5, 0.00237274 }, 1.02574, true }, + { "Land_ChairPlastic_F", { 6181.8, 16846.2, 0.00118256 }, 53.9327, true }, + { "Land_Axe_F", { 6197.86, 16835.8, -0.00292969 }, 246.133, true }, + //tradercity 3 + { "Land_BarGate_F", { 18436.5, 14277, 0.10347 }, 58.0699, false }, + { "Land_HBarrierBig_F", { 18440.4, 14268.3, 0.00117111 }, 60.1274, true }, + { "Land_HBarrierBig_F", { 18444.9, 14261, 0.00129318 }, 60.1036, true }, + { "Land_Mil_WiredFence_F", { 18440.6, 14268.7, 0.00332832 }, 62.0634, true }, + { "Land_Mil_WiredFence_F", { 18444.4, 14262, 0.00336647 }, 60.6549, true }, + { "Land_Mil_WiredFence_F", { 18449.2, 14256.4, 0.00034523 }, 35.4755, true }, + { "Land_LampShabby_F", { 18440.4, 14271.3, 1.90735e-006 }, 39.7611, true }, + { "Land_CncWall1_F", { 18438.8, 14275.1, -0.00109291 }, 60.6932, true }, + { "Land_CncWall1_F", { 18437.7, 14277.3, -0.00398445 }, 62.128, true }, + { "Land_CncWall1_F", { 18436.8, 14279.5, -0.00417328 }, 63.9977, true }, + { "Land_HBarrier_1_F", { 18437.7, 14272.8, 0.000751495 }, 0.0209884, true }, + { "MapBoard_seismic_F", { 18445.1, 14263.8, 0.000398636 }, 236.033, true }, + { "Land_WoodenTable_small_F", { 18440.5, 14272.3, -0.014082 }, 359.976, true }, + { "Land_Bench_F", { 18449.1, 14270.4, 0.00127792 }, 185.11, true }, + { "Land_CampingChair_V1_F", { 18441.4, 14270.9, 0.00442886 }, 194.898, true }, + { "Land_HelipadEmpty_F", { 18427, 14271.2, 1.90735e-006 }, 359.885, true }, + { "Land_HBarrierBig_F", { 18438.9, 14283.8, 0.000347137 }, 149.02, true }, + { "Land_HBarrierBig_F", { 18446.5, 14285.9, 0.00609207 }, 175.83, true }, + { "Land_Mil_WiredFence_F", { 18445.9, 14286, 0.00409126 }, 354.943, true }, + { "Land_Mil_WiredFence_F", { 18439, 14283.5, 0.000944138 }, 144.943, true }, + { "Land_cargo_addon02_V2_F", { 18460.6, 14258.8, 0 }, 330.21, true }, + { "Land_HBarrierBig_F", { 18470.7, 14266.7, 0.00342369 }, 93.2859, true }, + { "Land_HBarrierBig_F", { 18451.4, 14255.2, 0.00950432 }, 212.484, true }, + { "Land_HBarrierBig_F", { 18466.7, 14259.2, 0.0402298 }, 315.017, true }, + { "Land_HBarrierBig_F", { 18459.5, 14254.7, 0.0263481 }, 342.966, true }, + { "Land_HBarrierBig_F", { 18469.4, 14274.9, 0.00435257 }, 71.0256, true }, + { "Land_Mil_WiredFence_F", { 18468, 14261.2, 0.0418205 }, 310.274, true }, + { "Land_Mil_WiredFence_F", { 18462.6, 14256.1, 0.0299683 }, 328.217, true }, + { "Land_Mil_WiredFence_F", { 18469.2, 14275, 0.0172825 }, 250.01, true }, + { "Land_Mil_WiredFence_F", { 18470.5, 14267.7, 0.0156116 }, 271.558, true }, + { "Land_Mil_WiredFence_F", { 18455.8, 14254.1, 0.011919 }, 0.620575, true }, + { "Land_LampShabby_F", { 18454.4, 14277.9, -0.0150127 }, 0, true }, + { "Land_LampShabby_F", { 18469, 14264.4, 0 }, 323.398, true }, + { "Land_LampShabby_F", { 18457.2, 14256.1, 1.90735e-006 }, 0, true }, + { "Land_Garbage_square5_F", { 18466.9, 14266.7, 1.71661e-005 }, 359.857, true }, + { "Land_Garbage_line_F", { 18456.7, 14259.8, -0.0267105 }, 117.139, true }, + { "Land_JunkPile_F", { 18451.7, 14257.9, 0.00698853 }, 0.737973, true }, + { "Land_StallWater_F", { 18458, 14257, 0.00478554 }, 0.0420984, true }, + { "Land_Campfire_F", { 18452.4, 14270.5, 0.000808716 }, 359.867, false }, + { "Land_GarbageContainer_open_F", { 18468, 14265.1, 0.0781498 }, 284.391, true }, + { "Land_Cages_F", { 18462.1, 14259.4, 0.00989532 }, 283.389, true }, + { "Land_WoodenTable_large_F", { 18459.1, 14261.2, 0.00582504 }, 236.32, true }, + { "Land_Sink_F", { 18456.8, 14275.2, 0.00865936 }, 359.072, true }, + { "Oil_Spill_F", { 18467.5, 14263.8, 0.0297527 }, 0.257763, true }, + { "Land_Bench_F", { 18454.2, 14267.7, 0.00108147 }, 240.873, true }, + { "Land_Tyre_F", { 18469, 14263.5, -0.00253868 }, 0.460022, true }, + { "Land_KartTyre_01_x4_F", { 18468.5, 14262.8, -0.00620651 }, 2.02641, true }, + { "Land_HBarrierBig_F", { 18462.3, 14287.2, -0.00127792 }, 43.0428, true }, + { "Land_HBarrierBig_F", { 18454.6, 14288.1, 0.0716648 }, 161.76, true }, + { "Land_Mil_WiredFence_F", { 18453.8, 14287.5, 0.076416 }, 154.537, true }, + { "Land_Tank_rust_F", { 18459.4, 14284.8, 0.00293159 }, 242.028, true }, + { "Land_CncBarrierMedium4_F", { 18464.2, 14281.7, 0.00330925 }, 62.7671, true }, + { "Land_LampShabby_F", { 18451.7, 14285.3, 0 }, 221.564, true }, + { "Land_HBarrier_1_F", { 18458.1, 14290.3, 0.0128841 }, 317.438, true }, + //Air Drop Event Helipad Start + { "Land_dp_bigTank_F", { 14328.1, 13488.2, -0.64909101 }, 182, true } + }; + staticNpcPos[] = { + // tradercity 1 + { "C_man_w_worker_F", { 13323.1, 14527.3, 0.00144649 }, 201.163 }, + { "C_man_w_worker_F", { 13331.2, 14524.6, 0.00144362 }, 182.606 }, + { "C_Orestes", { 13318, 14518.3, 0 }, 173.189 }, + { "C_man_shorts_4_F_asia", { 13349.9, 14490.7, 0.750791 }, 339.975 }, + // tradercity 2 + { "C_man_hunter_1_F", { 6177.13, 16835.1, 0.0014267 }, 66.2026 }, + { "C_man_p_fugitive_F_afro", { 6196.01, 16833, 0.00157166 }, 310.814 }, + // tradercity 3 + { "C_journalist_F", { 18460.6, 14259.6, 0.00160599 }, 317.76 }, + { "C_scientist_F", { 18441.7, 14271.7, 0.00142479 }, 49.9898 } + }; + + // Prefered locations for vehicles + class whitelistedVehiclePos { + B_MRAP_01_EPOCH[] = {{{20848.6,7354.6,-0.00321198},{{0.742712,0.669594,-0.00486337},{-0.0281729,0.0385042,0.998861}}},{{11207.2,8699.47,-0.0253448},{{0.12793,0.990633,0.0477548},{-0.0485209,-0.0418414,0.997945}}},{{16153.7,16215.9,0.0475731},{{0.89862,0.437392,0.034217},{-0.0120628,-0.0533295,0.998504}}},{{25622.8,21449.4,0.0106583},{{0.89838,0.439207,0.00314456},{-0.00506914,0.00320922,0.999982}}},{{4853.33,21940.1,-0.123108},{{0.415575,0.90804,-0.0525361},{-0.0924642,0.0996369,0.990718}}},{{26702.6,24614,0.0174446},{{0.897793,0.4404,0.0040269},{-0.0157512,0.0229699,0.999612}}}}; + I_Heli_light_03_unarmed_EPOCH[] = {{{14524.2,5812.13,-0.165011},{{0.00335907,0.999207,0.0396738},{0.0704848,-0.0398119,0.996718}}},{{14556.2,6255.32,-0.0400496},{{-0.00535075,0.998245,-0.0589673},{0.160348,0.0590616,0.985292}}},{{11556.9,11973,0.0715961},{{0.701452,-0.712716,-0.000233796},{0.000326206,-6.98496e-006,1}}},{{12496.5,15195.7,-0.151024},{{0.000158264,0.999968,0.00803536},{-0.00136269,-0.00803514,0.999967}}},{{12833.6,16737.2,-0.148682},{{0.964255,-0.262783,-0.0340175},{0.0359786,0.0026531,0.999349}}},{{16092,16863.8,-0.151059},{{9.88715e-005,0.999999,0.00132077},{3.08124e-006,-0.00132077,0.999999}}},{{15079.7,17231.9,-0.0917988},{{0.774749,-0.632268,-0.000756901},{0.000975771,-1.45994e-006,1}}},{{21094.6,19219.7,-0.148798},{{-0.000397589,0.999441,-0.0334362},{0.00131965,0.0334367,0.99944}}},{{9223.15,19286.2,-0.0823975},{{-0.844991,-0.534063,-0.0276983},{0.00932124,-0.0664942,0.997743}}},{{20910.9,19313.6,-0.154133},{{0.890254,-0.455459,0.00237653},{-0.0121315,-0.018496,0.999755}}},{{12179.5,19455.4,-0.16544},{{0.927455,-0.373922,0.00295823},{-0.0260684,-0.0567627,0.998047}}},{{23505.6,21152.4,-0.154747},{{-0.641512,0.76705,-0.0098276},{-0.00724708,0.00675057,0.999951}}},{{14211.9,21183.2,-0.0603943},{{0.000271721,0.999546,0.0301094},{-0.0763408,-0.0300008,0.99663}}},{{21592.4,21241.5,-0.119406},{{-0.000695643,0.999714,0.0239146},{-0.0520525,-0.0239184,0.998358}}},{{13076.5,21684,-0.151031},{{-0.000676255,0.999991,-0.00428845},{0.066523,0.00432394,0.997776}}},{{14247.4,22206,-0.188625},{{-0.363607,0.928254,0.078318},{0.0206835,-0.0760072,0.996893}}},{{26762.3,24693.3,-0.146469},{{-0.63172,0.774591,-0.0306349},{0.0184643,0.0545427,0.998341}}}}; + O_Heli_Light_02_unarmed_EPOCH[] = {{{11244.7,6862.29,-0.0638199},{{-0.00588824,0.996735,0.0805217},{-0.0383005,-0.0806888,0.996003}}},{{8910.81,7477.11,0.0560074},{{-0.00229962,0.998366,0.0571017},{-0.0220234,-0.0571386,0.998123}}},{{10271.8,7560.52,-0.00984955},{{-0.00192509,0.999195,0.0400622},{-0.0459371,-0.0401084,0.998139}}},{{11380.3,14187.3,0.00281906},{{0.83188,-0.553107,0.0452561},{-0.0452948,0.0136059,0.998881}}},{{12875.4,16739.1,0.0199432},{{-0.8171,0.568805,0.0938469},{0.105645,-0.0122926,0.994328}}},{{16187.4,17089,0.0128679},{{-0.00240989,0.998104,0.0615038},{0.0041441,-0.0614935,0.998099}}},{{20595.1,18816,0.0180626},{{-0.000525357,0.998477,0.0551691},{0.00541467,-0.0551654,0.998462}}},{{23520.4,21127.8,-0.0303497},{{-0.294607,0.954835,0.0386931},{-0.0122543,-0.0442615,0.998945}}},{{26759,24649.7,0.564573},{{0.841424,-0.537868,0.0519941},{-0.0434802,0.0285173,0.998647}}},{{8458.41,25094.6,0.0587158},{{-0.000530238,0.999909,0.0134465},{-0.0318759,-0.0134565,0.999401}}}}; + B_Heli_Light_01_EPOCH[] = {{{11574,6993.28,0.0447769},{{-0.00712686,0.994244,-0.106903},{0.0661361,0.10714,0.992042}}},{{14320.4,13037.9,0.00167823},{{-0.000211438,0.999957,0.00932813},{-0.0226599,-0.00933052,0.9997}}},{{12349.6,14369.6,0.00465822},{{0.894009,0.446525,0.036937},{-0.0253123,-0.0319734,0.999168}}},{{24175.6,15477.4,0.033309},{{-0.70118,-0.704795,-0.107755},{-0.0861531,-0.0662717,0.994075}}},{{22573.2,16064.5,0.0449591},{{-0.695558,-0.706314,0.131602},{0.164215,0.0220324,0.986178}}},{{14348.5,16352.2,0.000350952},{{-0.707865,-0.706317,0.00659227},{-0,0.00933289,0.999956}}},{{23419.4,16586.7,0.00031662},{{-0.707875,-0.706332,-0.0028211},{0.00266666,-0.00666639,0.999974}}},{{15058.1,17158.4,0.000232697},{{0.889085,-0.457742,0},{0,0,1}}},{{21328.1,17624.6,0.00764465},{{-0.373374,0.926213,0.0521651},{0.0173096,-0.0492661,0.998636}}},{{3012.95,18488.8,0.00127029},{{0,0.999773,0.0213285},{-0,-0.0213285,0.999772}}},{{20346.9,18769.5,0.00025177},{{7.11136e-006,0.999996,-0.00266721},{-0.0026662,0.00266722,0.999993}}},{{25978.8,19854,0.00785255},{{-0.706651,-0.705666,-0.0517778},{-0.0292926,-0.0439386,0.998605}}},{{27456,21495,0.0432873},{{-0.699898,-0.703483,-0.123507},{-0.0846794,-0.089972,0.992338}}},{{26232.5,22753.2,0.00922775},{{0.0328283,-0.998294,0.0482861},{0.0292848,0.0492521,0.998357}}}}; + mosquito_epoch[] = {{{11540.8,7039.75,0.329735},{{0.00347631,0.997298,0.0733802},{0.0121495,-0.0734173,0.997227}}},{{21524,10883.3,0.0139551},{{-0.00559947,0.999039,0.0434732},{-0.0146924,-0.0435514,0.998943}}},{{11040.7,13323.5,0.00292015},{{0.931078,-0.363389,-0.0322772},{0.0346456,-0,0.9994}}},{{10873.4,13424.5,0.0864372},{{-0.00475314,0.999193,-0.0398816},{0.0713023,0.0401191,0.996648}}},{{13358.6,13410.9,0.00243521},{{0.000245095,0.999968,0.00799222},{0.0306513,-0.00799598,0.999498}}},{{10275.3,13733.9,0.0263062},{{0.00190261,0.998207,0.0598195},{-0.0366318,-0.0597099,0.997543}}},{{12697.5,14511.1,0.0692368},{{0.0408368,0.999165,0.00140223},{-0.0390096,0.000192026,0.999239}}},{{12391.8,14814.3,0.00662804},{{0.00879556,0.999888,0.0121231},{0.00186531,-0.0121399,0.999924}}},{{6509.29,15195.5,0.0220985},{{-0.00359149,0.999957,-0.00853113},{-0.0130866,0.00848346,0.999878}}},{{8963.07,15505,0.00148773},{{0.000127903,0.999986,0.00532929},{0.0239928,-0.00533083,0.999698}}},{{6739.26,15820.8,0.000797272},{{9.2422e-005,0.99985,0.0173304},{0.00533207,-0.0173306,0.999836}}},{{16699.3,16071.3,-0.107765},{{-0.877331,-0.476603,0.0560409},{0.0481685,0.0287303,0.998426}}},{{7639.62,16183.9,0.204712},{{0.00105144,0.998805,-0.0488706},{0.00125832,0.0488693,0.998804}}},{{21080.1,16817.1,0.0016613},{{0.000302042,0.999911,0.0133254},{0.0226588,-0.0133288,0.999654}}},{{16195,17311.1,0.00665474},{{-0.925487,0.378778,0.00108066},{0.00094121,-0.000553306,0.999999}}},{{12318.2,17657.6,0.0584965},{{-0.00237842,0.997587,-0.0693872},{0.0759112,0.0693673,0.994699}}},{{20910.7,19216.9,0.0137529},{{-0.0014716,0.999996,0.00225477},{-0.00117969,-0.0022565,0.999997}}},{{22010.5,21200.2,0.0113792},{{0.818084,0.572335,0.0563112},{-0.0751868,0.00936477,0.997126}}}}; + O_Heli_Transport_04_covered_EPOCH[] = {{{12832.5,7266.02,0.116539},{{-0.996663,0.0814716,0.00496967},{0.0148919,0.121638,0.992463}}},{{12494.9,12750.9,0.242147},{{0.006697,0.999531,-0.029873},{0.0607464,0.0294118,0.99772}}},{{14376.3,18959.3,0.00255585},{{0.00026728,0.999977,0.00681331},{0.0116063,-0.00681595,0.999909}}},{{9910.06,19423.9,0.0245819},{{-0.910858,0.412663,0.00682768},{0.00251286,-0.0109978,0.999936}}},{{23711.3,21074.8,-0.0692596},{{-0.969101,0.218066,0.115289},{0.096521,-0.0948796,0.990798}}}}; + I_Heli_Transport_02_EPOCH[] = {{{12280.4,8908.68,-0.0446243},{{-6.98098e-005,0.999869,-0.0161879},{-0.0110829,0.0161861,0.999807}}},{{15774.1,10679.9,-0.0435715},{{7.69548e-006,0.999917,0.0129113},{0.000126967,-0.0129113,0.999917}}},{{12546.4,16550.5,-0.0453415},{{0.92075,0.390146,0.0024947},{-0.00774546,0.0118857,0.999899}}},{{7851.22,16667.9,-0.0458679},{{-0.000763941,0.999977,0.0067945},{-0.0527193,-0.00682532,0.998586}}},{{6143.97,17477.8,-0.0397644},{{0.00139545,0.998948,-0.045825},{-0.0265955,0.0458459,0.998594}}}}; + O_Heli_Transport_04_box_EPOCH[] = {{{2945.93,12554.4,0.050137},{{-6.39908e-005,0.999872,-0.0159977},{0.00399945,0.0159978,0.999864}}},{{23483.3,21143,0.00655365},{{0.27829,0.960492,0.00300514},{0.000357766,-0.00323239,0.999995}}}}; + O_Heli_Transport_04_bench_EPOCH[] = {{{4437.83,12618.4,0.0493546},{{0,1,0},{0,0,1}}},{{17401.2,13185.5,-0.0126953},{{0.794595,-0.60712,-0.0049499},{0.0234151,0.0224968,0.999473}}},{{9289.91,13749.6,0.0788097},{{0.000656263,0.999655,-0.0262592},{0.0105936,0.0262508,0.999599}}},{{7139.33,13839.9,0.00256348},{{0.00048683,0.997677,0.0681174},{0.00918717,-0.068119,0.997635}}},{{10105.4,15372.5,0.1297},{{0.0125713,0.999168,-0.0387835},{-0.0120607,0.0389353,0.999169}}},{{7886.32,16166.4,-0.019043},{{-0.000272975,0.999734,0.0230777},{0.00600016,-0.0230756,0.999716}}},{{20985.2,17419.5,0.0205421},{{0.471315,0.881841,0.0147718},{0.0541139,-0.0456312,0.997492}}},{{4376.1,20674.9,-0.0192566},{{-0.000771936,0.999837,-0.0180471},{-0.00526979,0.0180428,0.999823}}}}; + B_Heli_Transport_03_unarmed_EPOCH[] = {{{14250.2,13031.6,0.00517178},{{-0.000243077,0.999628,-0.0272833},{0.014808,0.027284,0.999518}}},{{5413.14,17909,0.0066452},{{0.00403058,0.999603,0.027893},{0.0390797,-0.0280294,0.998843}}},{{7970.49,18607,0.0779266},{{-0.709243,0.704962,0.00169833},{0.0849824,0.0831064,0.992911}}},{{23538.3,21093.2,-0.0158768},{{0.642472,0.765029,-0.0442732},{0.0254924,0.0364056,0.999012}}},{{9085.11,21513.5,-0.0178337},{{0.00534291,0.999029,-0.0437271},{-0.0096127,0.043777,0.998995}}}}; + O_Heli_Transport_04_EPOCH[] = {{{4016.13,19250.4,0.0596619},{{0.842345,-0.535641,0.0595313},{-0.0789237,-0.0133311,0.996791}}},{{10912.4,19238.7,-0.0592804},{{0.00487772,0.998305,-0.0579997},{0.0168592,0.0579101,0.998179}}}}; + }; + +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/australia.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/australia.h new file mode 100644 index 0000000..88850b6 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/australia.h @@ -0,0 +1,652 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for australia. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/australia.h +*/ +class Australia : Default +{ + worldSize = 55000; + plantLimit = 20; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { -0.415527, -7.05298, -10.3098, 180}, "", { 24398.3, 13971.6, 0 } }, // Central + { "TP_Booth_e_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", { 34751.5, 13431.9, 0 } }, // East + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", { 19032.7, 33974.6, 0 } }, // North + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", { 4056.35, 19435.9, 0 } } // West + }; + propsPos[] = { + // North camp + {"Land_Slums02_4m", {19040.4, 33976.5, 0}, 271.364}, + {"Land_Slums02_4m", {19040.4, 33972.6, 0}, 271.364}, + {"Land_Slums02_4m", {19040.4, 33968.7, 0}, 271.364}, + {"Land_Slums02_4m", {19040.5, 33964.7, 0}, 268.182}, + {"Land_Slums02_4m", {19040.7, 33961.2, 0}, 263.182}, + {"Land_Slums02_4m", {19041, 33957.4, 0}, 273.182}, + {"Land_Slums02_4m", {19038.8, 33978.5, 0}, 195.909}, + {"brownrock2", {19026.3, 33985.3, 0}, 25.4545}, + {"Land_MarketShelter_F", {19037.4, 33967, 0.391932}, 269.545}, + {"Land_Slums02_4m", {19039.4, 33955.8, 0}, 1.81819}, + {"Land_Slums02_4m", {19035.5, 33955.9, 0}, 1.81821}, + {"Land_Slums02_4m", {19031.6, 33955.9, 0}, 1.81821}, + {"Land_Slums02_4m", {19026.2, 33957.5, 0}, 94.0909}, + {"Land_Slums02_4m", {19026.4, 33961.4, 0}, 94.0909}, + {"Land_BarGate_F", {19026.1, 33968, -0.0194139}, 267.727, false}, + {"Land_Slums02_4m", {19027.6, 33956, 0}, 1.81821}, + {"Campfire_burning_F", {19037.5, 33971.2, 0}, 0}, + {"Land_WoodPile_large_F", {19028.4, 33961.1, 0}, 0}, + {"Land_Pallets_F", {19029.6, 33957.5, 0}, 49.0909}, + {"Land_Pallet_vertical_F", {19027.4, 33958.2, 0}, 0}, + {"Land_Bricks_V2_F", {19027.4, 33957.6, 0}, 0}, + {"Land_WoodenBox_F", {19037.8, 33976.7, 0}, 0}, + {"Land_WoodenBox_F", {19038.1, 33975, 0}, 326.364}, + {"Land_WoodenBox_F", {19037.7, 33975.7, 0.445431}, 85.909}, + {"Land_WorkStand_F", {19032.6, 33958.6, 0}, 321.364}, + {"Land_Axe_fire_F", {19032.1, 33958, 0.843244}, 35.4546}, + {"Land_Coil_F", {19037.9, 33959.7, 0}, 0}, + {"Land_CrabCages_F", {19029.6, 33973.2, 0}, 0}, + {"Land_GarbageBarrel_01_F", {19025.9, 33972.8, 0}, 341.364}, + {"Land_Tyres_F", {19037.7, 33963.4, 0}, 0}, + {"Land_Cargo40_grey_F", {19048.2, 33970, 2.5386}, 62.2727}, + {"Land_Cargo40_red_F", {19048.3, 33964.6, -0.107983}, 14.5454}, + {"CargoNet_01_barrels_F", {19039.4, 33967.6, 0}, 0}, + {"MetalBarrel_burning_F", {19025.3, 33963.5, 0}, 31.3636}, + {"Land_Cargo20_military_green_F", {19045.3, 33975.6, 0}, 0}, + // East camp + {"Land_Wreck_Truck_F", {34764, 13428.5, 0}, 0}, + + {"Land_cargo_house_slum_F", {34761.5, 13431.2, 0.00321865}, 146.443}, + + {"Land_cargo_addon01_V2_F", {34746, 13425.2, 0}, 117.155}, + + + {"Campfire_burning_F", {34756, 13434.6, 0}, 0}, + + {"Land_WoodPile_F", {34760.7, 13434.1, 0}, 53.4089}, + + {"Land_bags_EP1", {34746.7, 13428.7, 0}, 0}, + + {"Land_bags_stack_EP1", {34748.2, 13430.7, 0}, 0}, + + {"JeepWreck1", {34743.9, 13427, 0}, 0}, + + {"Paleta2", {34760.7, 13427.8, 0}, 0}, + + {"Land_Barrel_sand", {34761.8, 13429.2, 0}, 0}, + + {"Land_Wheel_cart_EP1", {34761.4, 13425.3, 0}, 0}, + + {"Land_HBarrier_5_F", {34759.2, 13438.6, 0}, 0}, + + {"Land_HBarrier_5_F", {34764.7, 13437, -0.00175285}, 42.6258}, + + {"Land_HBarrier_5_F", {34753.7, 13437.6, 0}, 161.949}, + + {"Land_HBarrier_5_F", {34748.6, 13434.9, 0}, 141.275}, + + {"Land_HBarrier_5_F", {34744.1, 13431.4, 0}, 139.552}, + + {"Land_HBarrier_5_F", {34741.7, 13426.2, 0}, 91.3118}, + + {"Land_HBarrier_5_F", {34768, 13432.3, -0.00434589}, 68.9146}, + + {"Land_HBarrier_5_F", {34767.6, 13426.7, -0.00529385}, 117.155}, + + {"Land_HBarrier_5_F", {34763.5, 13422.7, 0}, 153.335}, + + {"Land_HBarrier_5_F", {34743.3, 13422.2, 0}, 8.61445}, + + {"Land_HBarrier_5_F", {34749, 13421.8, 0}, 0}, + + {"Land_HBarrier_5_F", {34757.9, 13421.4, 0}, 0}, + + {"Land_HBarrier_1_F", {34752.1, 13423.3, 0}, 0}, + + {"Land_HBarrier_1_F", {34754.9, 13423.1, 0}, 0}, + // Central camp + {"CDF_WarfareBBarrier10x", {24410.2, 13950, 0}, 149.889}, + + {"CDF_WarfareBBarrier10x", {24399, 13951.8, -4.76837e-007}, 237.755}, + + {"CDF_WarfareBBarrier10x", {24390.5, 13965.2, -4.76837e-007}, 237.755}, + + {"CDF_WarfareBBarrier10x", {24392.3, 13976, -4.76837e-007}, 149.889}, + + {"CDF_WarfareBVehicleServicePoint", {24404.4, 13953.2, 0}, 32.7345}, + + {"Land_Tyres_F", {24412.4, 13954.3, 0}, 153.335}, + + {"Land_Wreck_CarDismantled_F", {24401.3, 13959.3, 0}, 289.441}, + + {"Land_Wreck_Car2_F", {24396.2, 13965.4, 0}, 0}, + + {"Land_Wreck_HMMWV_F", {24393, 13966.9, 0}, 329.067}, + + {"Land_Tyres_F", {24389.7, 13971.8, 0}, 153.335}, + + {"Land_WoodenCart_F", {24398.9, 13975.1, 0}, 0}, + + {"Land_Sacks_goods_F", {24396.2, 13975.9, 0}, 0}, + + {"Land_LampSolar_off_F", {24402.9, 13947.8, 0}, 0}, + + {"Land_Coil_F", {24394.3, 13973.6, 0}, 0}, + + {"Land_JunkPile_F", {24396.8, 13960.5, 0}, 0}, + + {"Land_fuel_tank_small", {24402.3, 13950.3, 0}, 151.612}, + + {"CDF_WarfareBBarrier10x", {24403.6, 13974, -4.76837e-007}, 237.755}, + + {"CDF_WarfareBBarrier10x", {24413.6, 13960.4, -4.76837e-007}, 237.755}, + + {"Land_Campfire_burning", {24409, 13962.9, 0}, 0}, + // West camp + {"brownrock2", {4036.04, 19453.9, 0}, 0}, + {"brownrock3", {4051.51, 19475.8, 0}, 0}, + {"brownrock", {4032.26, 19436, 0}, 0}, + {"brownrock3", {4018.7, 19411.2, 0.00144196}, 101.649}, + {"brownrock2", {4080.9, 19486.6, -0.000320435}, 167.118}, + + {"brownrock2", {4010.67, 19383.7, -0.000320435}, 167.118}, + {"brownrock3", {4007.2, 19354, -4.57764e-005}, 241.201}, + {"Land_CncBarrierMedium4_F", {4089.53, 19469, 0.00396729}, 90}, + + {"Land_CncBarrierMedium4_F", {4089.53, 19461.4, 0.00396729}, 90}, + + {"Land_CncBarrierMedium4_F", {4089.53, 19453.8, 0.00396729}, 90}, + {"Land_CncBarrierMedium4_F", {4089.53, 19446.2, 0.00396729}, 90}, + {"Land_CncBarrierMedium4_F", {4089.53, 19438.6, 0.00396729}, 90}, + {"Land_CncBarrierMedium4_F", {4089.53, 19431, 0.00396729}, 90}, + {"Land_CncBarrierMedium4_F", {4089.53, 19415.8, 0.00396729}, 90}, + + {"Land_CncBarrierMedium4_F", {4089.53, 19408.3, 0.00396729}, 90}, + + {"Land_CncBarrierMedium4_F", {4089.53, 19400.7, 0.00396729}, 90}, + {"Land_CncBarrierMedium4_F", {4089.53, 19393.1, 0.00396729}, 90}, + {"Land_CncBarrierMedium4_F", {4089.53, 19385.5, 0.00396729}, 90}, + {"Land_CncBarrierMedium4_F", {4089.53, 19377.9, 0.00396729}, 90}, + + {"Land_CncBarrierMedium4_F", {4085.79, 19374.8, -0.000160217}, 180}, + + {"Land_CncBarrierMedium4_F", {4078.2, 19374.8, -0.000160217}, 180}, + + {"Land_CncBarrierMedium4_F", {4070.61, 19374.8, -0.000160217}, 180}, + + {"Land_CncBarrierMedium4_F", {4063.01, 19374.8, -0.000160217}, 180}, + + {"Land_CncBarrierMedium4_F", {4055.42, 19374.8, -0.000160217}, 180}, + + {"Land_CncBarrierMedium4_F", {4047.83, 19374.8, -0.000160217}, 180}, + + {"Land_CncBarrierMedium4_F", {4040.23, 19374.8, -0.000160217}, 180}, + + {"Land_CncBarrierMedium4_F", {4032.64, 19374.8, -0.000160217}, 180}, + + {"Land_CncBarrierMedium4_F", {4025.05, 19374.8, -0.000160217}, 180}, + + {"Land_ScrapHeap_2_F", {4045.49, 19423.8, 0}, 0}, + + {"WaterPump_01_sand_F", {4036.06, 19409.3, 0}, 0}, + + {"Land_Bunker_F", {4048.51, 19449.7, 0}, 315.284}, + + {"Land_Cargo_Patrol_V2_F", {4083.22, 19463.4, 0}, 0}, + + {"Land_Communication_F", {4075.63, 19467.2, 0}, 0}, + + {"Land_BarGate_F", {4087.73, 19423.3, 0.0014801}, 90, false}, + + {"Land_Tank_rust_F", {4032.32, 19378, 0}, 0}, + + {"Land_Tank_rust_F", {4039.04, 19377.9, 0}, 0}, + + + + {"HMMWVWreck", {4066.81, 19391.8, 0.00606537}, 115.432}, + + {"datsun02Wreck", {4075.33, 19461, -0.00206757}, 25.8429}, + + {"Land_LampHalogen_off_F", {4035.6, 19406.3, 0}, 180}, + {"Land_LampHalogen_off_F", {4045.78, 19439.3, 0}, 180}, + // Wind Turbines + {"Land_wpp_Turbine_V2_F", {17471.5, 31880, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {17487.7, 31607.5, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {17607.6, 31660.4, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {19344, 36134.1, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {19599.9, 36089.8, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {22239.7, 33868.5, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {21072.6, 34764.6, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {21069.9, 34839, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {21951.5, 32894.8, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {21939.6, 32939, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {21932.2, 33013.1, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {14230.9, 31117.5, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {14189.9, 31127.2, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {14142, 31139.2, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {28899.5, 35283.1, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {28918.5, 35259, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {31014.7, 32861.8, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {28984.4, 33972.4, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {30717.7, 32027.4, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {30770.3, 31948.5, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {30850, 31818.1, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {30821.7, 28701.9, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {30872.5, 28676.2, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {30934.8, 28626.8, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {30998.8, 28582.2, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {36173.5, 23892.8, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {36028.7, 23826.4, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {35866.8, 23797.8, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {33890.9, 22472.2, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {33905.6, 22415.6, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {33920.6, 22367.7, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {26318.3, 19100.2, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {26368.5, 19093.3, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {26423.3, 19083, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {8701.28, 19761.6, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {8667.67, 19710.9, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {7801.43, 19285.2, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {7745.98, 19240.7, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {7650.39, 19168.8, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {7541.71, 19073.1, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {5917.63, 12370, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {6018.31, 12440.5, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {5779.98, 12304, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {10988, 15244.2, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {10958.5, 15150.6, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {10902.6, 15042.6, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {20512.2, 14845.3, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {20513.1, 14800.1, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {34095.3, 16299.6, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {34092.8, 16265.5, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {34078.4, 16233.9, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {38268.9, 15084.6, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {37788.9, 15954.8, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {37788.3, 16018.3, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {37803.2, 16137.4, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {37837.1, 16315.4, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {34510.6, 11062.3, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {34476.8, 11119.1, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {34411.4, 11204.5, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {33540.8, 8230.01, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {33506.2, 8259.1, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {33479.3, 8289.11, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {33615.6, 3925.49, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {33582.5, 4029.25, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {33521.1, 4159.21, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {31983.5, 3752.43, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {32015.1, 3735.57, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {26768.4, 9460.39, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {26769.5, 9419.41, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {26766.7, 9386.49, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {26766.7, 9348.41, 0}, 0}, + // Garbage + {"Land_GarbagePallet_F", {16006.4, 33369.4, 0}, 0}, + {"Land_GarbagePallet_F", {16160.7, 33533.7, 0}, 0}, + {"Land_GarbagePallet_F", {16270.2, 33564.7, 0}, 0}, + {"Land_GarbagePallet_F", {16199.1, 33656.3, 0}, 0}, + {"Land_GarbagePallet_F", {16159.8, 33700.5, 0}, 0}, + {"Land_GarbagePallet_F", {16160.4, 33792.6, 0}, 0}, + {"Land_GarbagePallet_F", {16372.1, 33663.1, 0}, 0}, + {"Land_GarbagePallet_F", {16472.5, 33565.5, 0}, 0}, + {"Land_GarbagePallet_F", {16583.4, 33479.9, 0}, 0}, + {"Land_GarbagePallet_F", {16341, 33408, 0}, 0}, + {"Land_GarbagePallet_F", {15891.7, 33213.4, 0}, 0}, + {"Land_GarbagePallet_F", {15807.9, 33308.7, 0}, 0}, + {"Land_GarbagePallet_F", {15696.3, 33408.9, 0}, 0}, + {"Land_GarbagePallet_F", {15612.7, 33222.6, 0}, 0}, + {"Land_GarbagePallet_F", {15680.1, 33197.9, 0}, 0}, + {"Land_GarbagePallet_F", {15741.5, 33224.2, 0}, 0}, + {"Land_GarbagePallet_F", {15773.9, 33093.9, 0}, 0}, + {"Land_GarbageBags_F", {15682.2, 33156.9, 0.0492201}, 0}, + {"Land_GarbageBags_F", {15770.5, 33176, 0}, 0}, + {"Land_GarbageBags_F", {15849.4, 33225.3, 0}, 0}, + {"Land_GarbageBags_F", {15912.5, 33288.8, 0}, 0}, + {"Land_GarbageBags_F", {15965.5, 33299.1, 0}, 0}, + {"Land_GarbageBags_F", {15984.7, 33287.8, 0}, 0}, + {"Land_GarbageBags_F", {16025.8, 33351, 0}, 0}, + {"Land_GarbageBags_F", {16027.8, 33324.1, 0}, 0}, + {"Land_GarbageBags_F", {16044.1, 33384.1, 0}, 0}, + {"Land_GarbageBags_F", {16108.8, 33392, 0}, 0}, + {"Land_GarbageBags_F", {16442.9, 33401.3, 0}, 0}, + {"Land_GarbageBags_F", {16507.2, 33508.4, 0}, 0}, + {"Land_GarbageBags_F", {16662.2, 33590.5, 0}, 0}, + {"Land_GarbageBags_F", {17112.8, 33379, 0}, 0}, + {"Land_GarbageBags_F", {17574, 33024.1, 0}, 0}, + {"Land_GarbageBags_F", {17562.1, 33019.4, 0}, 0}, + {"Land_GarbageBags_F", {17475.1, 34218.1, 0}, 0}, + {"Land_GarbageBags_F", {17476.3, 34211.5, 0}, 100.455}, + {"Land_GarbageBags_F", {17752.2, 34386.1, 0}, 0}, + {"Land_GarbageBags_F", {15941.7, 33289.9, 0}, 0}, + {"Land_GarbageBags_F", {16000.5, 33357, 0}, 0}, + {"Land_GarbageBags_F", {15914.8, 33417.1, 0}, 0}, + {"Land_GarbageBags_F", {28990.7, 36639.3, 0}, 0}, + {"Land_GarbageBags_F", {29018.6, 36664.5, 0}, 0}, + {"Land_GarbagePallet_F", {28996.5, 36691.7, 0}, 0}, + {"Land_GarbagePallet_F", {28474.8, 35269.2, 0}, 0}, + {"Land_GarbagePallet_F", {28412.9, 35236, 0}, 0}, + {"Land_GarbagePallet_F", {28478.1, 35173.9, 0}, 0}, + {"Land_GarbagePallet_F", {28435.3, 35152.4, 0}, 0}, + {"Land_GarbageBags_F", {28402.2, 35171.2, 0}, 0}, + {"Land_GarbageBags_F", {28386.6, 35257.9, 0}, 0}, + {"Land_GarbageBags_F", {28442.9, 35256.5, 0}, 0}, + {"Land_GarbageBags_F", {28537.4, 35170.3, 0}, 0}, + {"Land_GarbageBags_F", {29050, 34044.7, 0}, 0}, + {"Land_GarbageBags_F", {29047.2, 34183.7, 0}, 0}, + {"Land_GarbageBags_F", {29176.9, 34151.5, 0}, 0}, + {"Land_GarbagePallet_F", {29079.6, 34106.7, 0}, 0}, + {"Land_GarbagePallet_F", {29127.1, 34037.6, 0}, 0}, + {"Land_GarbagePallet_F", {29018, 33994, 0}, 0}, + {"Land_GarbagePallet_F", {10134.4, 29852.3, 0}, 0}, + {"Land_GarbagePallet_F", {10122.6, 29817.3, 0}, 0}, + {"Land_GarbagePallet_F", {10258.6, 29891.3, 0}, 0}, + {"Land_GarbageBags_F", {10250.8, 29871.7, 0}, 0}, + {"Land_GarbageBags_F", {31587.6, 30964, 0}, 0}, + {"Land_GarbageBags_F", {31691.8, 30952.4, 0}, 0}, + {"Land_GarbagePallet_F", {31633.9, 30911.3, 0}, 0}, + {"Land_GarbagePallet_F", {31607.5, 31022.2, 0}, 0}, + {"Land_GarbagePallet_F", {31795.9, 29664.1, 0}, 0}, + {"Land_GarbagePallet_F", {31885, 29613, 0}, 0}, + {"Land_GarbagePallet_F", {31892.8, 29681.6, 0}, 0}, + {"Land_GarbagePallet_F", {31850.2, 29784.6, 0}, 0}, + {"Land_GarbagePallet_F", {31964.2, 29758.1, 0}, 0}, + {"Land_GarbagePallet_F", {32084.3, 29756.7, 0}, 0}, + {"Land_GarbagePallet_F", {32114.2, 29986.8, 0}, 0}, + {"Land_GarbagePallet_F", {32076.9, 29996.7, 0}, 0}, + {"Land_GarbageBags_F", {32150.1, 30012.7, 0}, 0}, + {"Land_GarbageBags_F", {32086.7, 29861.1, 0}, 0}, + {"Land_GarbageBags_F", {32234.6, 29673.1, 0}, 0}, + {"Land_GarbageBags_F", {32111.2, 29685.6, 0}, 0}, + {"Land_GarbageBags_F", {31958.8, 29606.8, 0}, 0}, + {"Land_GarbageBags_F", {31908.6, 29764.1, 0}, 0}, + {"Land_GarbageBags_F", {32015.1, 29880, 0}, 0}, + {"Land_GarbageBags_F", {31996.5, 30012.9, 0}, 0}, + {"Land_GarbageBags_F", {26832, 27917, 0}, 0}, + {"Land_GarbageBags_F", {26788.1, 28057.1, 0}, 0}, + {"Land_GarbageBags_F", {26730.8, 27992.9, 0}, 0}, + {"Land_GarbagePallet_F", {26662.2, 28006.6, 0}, 0}, + {"Land_GarbagePallet_F", {26753.8, 28075.2, 0}, 0}, + {"Land_GarbagePallet_F", {26978.6, 28287.1, 0}, 0}, + {"Land_GarbagePallet_F", {26755.8, 27996.7, 0}, 0}, + {"Land_GarbagePallet_F", {26748.2, 28069.8, 0}, 0}, + {"Land_GarbagePallet_F", {22379.8, 25550.3, 0}, 0}, + {"Land_GarbageBags_F", {22442.3, 25553.1, 0}, 0}, + {"Land_GarbageBags_F", {22234.9, 25563.4, 0}, 0}, + {"Land_GarbageBags_F", {22052.5, 25562.4, 0}, 0}, + {"Land_GarbagePallet_F", {22030, 25529.5, 0}, 0}, + {"Land_GarbagePallet_F", {22036.5, 25491.3, 0}, 0}, + {"Land_GarbagePallet_F", {21954.6, 25537.3, 0}, 0}, + {"Land_GarbageBags_F", {21886.1, 25522, 0}, 0}, + {"Land_GarbageBags_F", {21880.1, 25726.3, 0}, 0}, + {"Land_GarbageBags_F", {21888.6, 25783.4, 0}, 0}, + {"Land_GarbageBags_F", {21951.9, 25777.9, 0}, 0}, + {"Land_GarbageBags_F", {21941.6, 25718.7, 0}, 0}, + {"Land_GarbagePallet_F", {21920.2, 25759.7, 0}, 0}, + {"Land_GarbagePallet_F", {21983.7, 25709.5, 0}, 0}, + {"Land_GarbagePallet_F", {22027.1, 25766.2, 0}, 0}, + {"Land_GarbageBags_F", {22045.6, 25701.1, 0}, 0}, + {"Land_GarbageBags_F", {22156.3, 25673.8, 0}, 0}, + {"Land_GarbageBags_F", {22239.9, 25568.9, 0}, 0}, + {"Land_GarbageBags_F", {22047.7, 25431.9, 0}, 0}, + {"Land_GarbageBags_F", {22649.3, 24806.1, 0}, 0}, + {"Land_GarbagePallet_F", {22645.2, 24807.9, 0}, 0}, + {"Land_GarbageContainer_open_F", {22653.6, 24811.2, 0}, 255.455}, + {"Land_GarbagePallet_F", {19874.5, 24373.1, 0}, 0}, + {"Land_GarbagePallet_F", {19842.8, 24526.4, 0}, 0}, + {"Land_GarbageBags_F", {19795.4, 24402.3, 0}, 0}, + {"Land_GarbageBags_F", {19642.3, 24561.7, 0}, 0}, + {"Land_GarbageBags_F", {19602.2, 24672.1, 0}, 0}, + {"Land_GarbageBags_F", {19650.6, 24086.4, 0}, 0}, + {"Land_GarbagePallet_F", {19635.1, 24036.9, 0}, 0}, + {"Land_GarbagePallet_F", {19517.5, 24056.6, 0}, 0}, + {"Land_GarbagePallet_F", {19486.3, 23915.6, 0}, 0}, + {"Land_GarbageBags_F", {19410.6, 23951.5, 0}, 0}, + {"Land_GarbageBags_F", {19393.8, 23963.9, 0}, 0}, + {"Land_GarbageBags_F", {20033, 24253.9, 0}, 0}, + {"Land_GarbageBags_F", {19686.1, 24085.8, 0}, 0}, + {"Land_GarbageBags_F", {4064.7, 17183, 0}, 0}, + {"Land_GarbageBags_F", {4062.15, 17120, 0}, 0}, + {"Land_GarbageBags_F", {4027.97, 17167, 0}, 0}, + {"Land_GarbageBags_F", {4031.36, 17304.2, 0}, 0}, + {"Land_GarbageBags_F", {4079.91, 17320.7, 0}, 0}, + {"Land_GarbageBags_F", {4050, 17394.6, 0}, 0}, + {"Land_GarbageBags_F", {4076.14, 17385.1, 0}, 0}, + {"Land_GarbagePallet_F", {4082.06, 17359.7, 0}, 0}, + {"Land_GarbagePallet_F", {4039.94, 17411.9, 0}, 0}, + {"Land_GarbagePallet_F", {4037.43, 17340, 0}, 0}, + {"Land_GarbagePallet_F", {4044.81, 17578.5, 0}, 0}, + {"Land_GarbagePallet_F", {4075.01, 17644.7, 0}, 0}, + {"Land_GarbagePallet_F", {3987.72, 17635.1, 0}, 0}, + {"Land_GarbagePallet_F", {4048.52, 17818.6, 0}, 0}, + {"Land_GarbagePallet_F", {4102.45, 17846.7, 0}, 0}, + {"Land_GarbagePallet_F", {4104.42, 17787.8, 0}, 0}, + {"Land_GarbagePallet_F", {4140.62, 17791.5, 0}, 0}, + {"Land_GarbagePallet_F", {4194, 17787.2, 0}, 0}, + {"Land_GarbagePallet_F", {4204.49, 17820.7, 0}, 0}, + {"Land_GarbageBags_F", {4061.74, 17790.9, 0}, 0}, + {"Land_GarbageBags_F", {4031.2, 17850.8, 0}, 0}, + {"Land_GarbageBags_F", {4075.22, 17816.1, 0}, 0}, + {"Land_GarbageBags_F", {4149.92, 17824.9, 0}, 0}, + {"Land_GarbageBags_F", {4318.3, 17845.6, 0}, 0}, + {"Land_GarbageBags_F", {4297.62, 17788.2, 0}, 0}, + {"Land_GarbageBags_F", {4412.56, 17831.9, 0}, 0}, + {"Land_GarbageBags_F", {4420.85, 17780.8, 0}, 0}, + {"Land_GarbageBags_F", {4512.08, 17792.2, 0}, 0}, + {"Land_GarbageBags_F", {4577.07, 17757.3, 0}, 0}, + {"Land_GarbageBags_F", {4579.15, 17852, 0}, 0}, + {"Land_GarbageBags_F", {4572.17, 17980.6, 0}, 0}, + {"Land_GarbageBags_F", {4696.2, 18058.1, 0}, 0}, + {"Land_GarbageBags_F", {4753.67, 18105.8, 0}, 0}, + {"Land_GarbageBags_F", {4765.8, 18045.2, 0}, 0}, + {"Land_GarbageBags_F", {4808.09, 18014.5, 0}, 0}, + {"Land_GarbageBags_F", {4693.54, 18349.5, 0}, 0}, + {"Land_GarbageBags_F", {4629.09, 18349.5, 0}, 0}, + {"Land_GarbageBags_F", {4589.01, 18390.8, 0}, 0}, + {"Land_GarbagePallet_F", {4593.95, 18343.7, 0}, 0}, + {"Land_GarbagePallet_F", {4661.78, 18363.5, 0}, 0}, + {"Land_GarbagePallet_F", {4465.32, 18462.5, 0}, 0}, + {"Land_GarbagePallet_F", {4826.29, 18348.9, 0}, 0}, + {"Land_GarbagePallet_F", {5469.15, 18432.7, 0}, 0}, + {"Land_GarbagePallet_F", {5473.77, 18476.4, 0}, 0}, + {"Land_GarbagePallet_F", {5503.79, 18482.5, 0}, 0}, + {"Land_GarbageBags_F", {5511.98, 18480.7, 0}, 0}, + {"Land_GarbageBags_F", {5534.63, 18455.4, 0}, 0}, + {"Land_GarbageBags_F", {5534.85, 18501.4, 0}, 0}, + {"Land_GarbageBags_F", {5613.3, 18486.7, 0}, 0}, + {"Land_GarbagePallet_F", {5610.03, 18482.6, 0}, 0}, + {"Land_GarbagePallet_F", {5771.71, 18582.4, 0}, 0}, + {"Land_GarbagePallet_F", {5738.36, 18607.2, 0}, 0}, + {"Land_GarbagePallet_F", {5738.81, 18683.4, 0}, 0}, + {"Land_GarbagePallet_F", {5685.25, 18709.5, 0}, 0}, + {"Land_GarbageBags_F", {5685.22, 18722.8, 0}, 0}, + {"Land_GarbageBags_F", {5578.59, 18803.7, 0}, 0}, + {"Land_GarbageBags_F", {5536.85, 18688.1, 0}, 0}, + {"Land_GarbageBags_F", {4897.73, 17874.4, 0}, 0}, + {"Land_GarbageBags_F", {4818.78, 17806, 0}, 0}, + {"Land_GarbageBags_F", {4733.5, 17796.2, 0}, 0}, + {"Land_GarbagePallet_F", {4725.9, 17743.1, 0}, 0}, + {"Land_GarbagePallet_F", {27680, 16915.8, 0}, 0}, + {"Land_GarbagePallet_F", {27603, 16941.4, 0}, 0}, + {"Land_GarbagePallet_F", {27679.3, 17018.1, 0}, 0}, + {"Land_GarbagePallet_F", {27766.7, 17014.2, 0}, 0}, + {"Land_GarbagePallet_F", {27779.7, 17000.7, 0}, 0}, + {"Land_GarbageBags_F", {27750.6, 16942.8, 0}, 0}, + {"Land_GarbageBags_F", {27689.1, 16902.5, 0}, 0}, + {"Land_GarbageBags_F", {27570.5, 17025.5, 0}, 0}, + {"Land_GarbageBags_F", {27539.6, 16993, 0}, 0}, + {"Land_GarbageBags_F", {35461, 17257.9, 0}, 0}, + {"Land_GarbageBags_F", {35410.8, 17310, 0}, 0}, + {"Land_GarbageBags_F", {34452.9, 22483.3, 0}, 0}, + {"Land_GarbageBags_F", {34254.7, 22517, 0}, 0}, + {"Land_GarbageBags_F", {34412.8, 22622.6, 0}, 0}, + {"Land_GarbagePallet_F", {34453, 22558.8, 0}, 0}, + {"Land_GarbagePallet_F", {37537.8, 19762.6, 0}, 0}, + {"Land_GarbagePallet_F", {37647.5, 19905.9, 0}, 0}, + {"Land_GarbagePallet_F", {37650.8, 19762.4, 0}, 0}, + {"Land_GarbagePallet_F", {37682.1, 19719.2, 0}, 0}, + {"Land_GarbagePallet_F", {37826.8, 19887.6, 0}, 0}, + {"Land_GarbagePallet_F", {37899.5, 19801.4, 0}, 0}, + {"Land_GarbagePallet_F", {37855.2, 19799.8, 0}, 0}, + {"Land_GarbagePallet_F", {38006.1, 19889.2, 0}, 0}, + {"Land_GarbagePallet_F", {38127.5, 20203.3, 0}, 0}, + {"Land_GarbagePallet_F", {38324.9, 20110.7, 0}, 0}, + {"Land_GarbagePallet_F", {38403.3, 20119, 0}, 0}, + {"Land_GarbagePallet_F", {38491.3, 20171.4, 0}, 0}, + {"Land_GarbagePallet_F", {38541.1, 19965.2, 0}, 0}, + {"Land_GarbagePallet_F", {38205.8, 19914.4, 0}, 0}, + {"Land_GarbagePallet_F", {38050.1, 19772.2, 0}, 0}, + {"Land_GarbageBags_F", {37907, 19762.8, 0}, 0}, + {"Land_GarbageBags_F", {37866.3, 19799.7, 0}, 0}, + {"Land_GarbageBags_F", {37816.2, 19994.2, 0}, 0}, + {"Land_GarbageBags_F", {37905.5, 20134.5, 0}, 0}, + {"Land_GarbageBags_F", {38172.9, 20060.5, 0}, 0}, + {"Land_GarbageBags_F", {38206.9, 20655.1, 0}, 0}, + {"Land_GarbageBags_F", {37932.6, 20492.2, 0}, 0}, + {"Land_GarbageBags_F", {38264.5, 19678.9, 0}, 0}, + {"Land_GarbageBags_F", {38254, 19606, 0}, 0}, + {"Land_GarbageBags_F", {38449.9, 19679.8, 0}, 0}, + {"Land_GarbageBags_F", {38585.8, 19663, 0}, 0}, + {"Land_GarbageBags_F", {38624.3, 19591, 0}, 0}, + {"Land_GarbageBags_F", {38699.7, 19555.9, 0}, 0}, + {"Land_GarbageBags_F", {38870.1, 19502.4, 0}, 0}, + {"Land_GarbageBags_F", {38807.2, 19685, 0}, 0}, + {"Land_GarbageBags_F", {38602.3, 19531.5, 0}, 0}, + {"Land_GarbageBags_F", {38378.3, 19341.6, 0}, 0}, + {"Land_GarbageBags_F", {38744.8, 19310.7, 0}, 0}, + {"Land_GarbageBags_F", {38730.5, 19140.8, 0}, 0}, + {"Land_GarbageBags_F", {38832.3, 19168.7, 0}, 0}, + {"Land_GarbageBags_F", {38865.1, 18942.4, 0}, 0}, + {"Land_GarbageBags_F", {38641.9, 18900.4, 0}, 0}, + {"Land_GarbageBags_F", {38549.8, 18906.3, 0}, 0}, + {"Land_GarbagePallet_F", {38546.4, 18907.2, 0}, 0}, + {"Land_GarbagePallet_F", {38536.6, 19006.9, 0}, 0}, + {"Land_GarbagePallet_F", {31340.7, 16766.3, 0}, 0}, + {"Land_GarbagePallet_F", {31348.8, 16752.3, 0}, 0}, + {"Land_GarbagePallet_F", {31323.2, 16737.5, 0}, 0}, + {"Land_GarbageBags_F", {31338.1, 16746.7, 0}, 0}, + {"Land_GarbageBags_F", {31293.7, 16732.1, 0}, 0}, + {"Land_GarbageBags_F", {31278.3, 16751.3, 0}, 0}, + {"Land_GarbageBags_F", {33728.4, 15571.1, 0}, 0}, + {"Land_GarbageBags_F", {33762.2, 15699.3, 0}, 0}, + {"Land_GarbagePallet_F", {33863, 15673.3, 0}, 0}, + {"Land_GarbagePallet_F", {33834.3, 15641.2, 0}, 0}, + {"Land_GarbagePallet_F", {33843.8, 15746.9, 0}, 0}, + {"Land_GarbagePallet_F", {36490.1, 13151.5, 0}, 0}, + {"Land_GarbagePallet_F", {36658.9, 13150.4, 0}, 0}, + {"Land_GarbagePallet_F", {36836.9, 13019.4, 0}, 0}, + {"Land_GarbagePallet_F", {36895, 13121.7, 0}, 0}, + {"Land_GarbagePallet_F", {36939, 12956.5, 0}, 0}, + {"Land_GarbagePallet_F", {36956.4, 12861.1, 0}, 0}, + {"Land_GarbageBags_F", {36953.5, 12857.3, 0}, 0}, + {"Land_GarbageBags_F", {36930.7, 12740.6, 0}, 0}, + {"Land_GarbageBags_F", {36812.5, 12696.3, 0}, 0}, + {"Land_GarbageBags_F", {36747.3, 12775.4, 0}, 0}, + {"Land_GarbageBags_F", {36555.7, 12861.3, 0}, 0}, + {"Land_GarbageBags_F", {36459.1, 12901.5, 0}, 0}, + {"Land_GarbageBags_F", {36382.3, 12841.8, 0}, 0}, + {"Land_GarbageBags_F", {36423.8, 12748.5, 0}, 0}, + {"Land_GarbageBags_F", {36436.4, 12792.8, 0}, 0}, + {"Land_GarbageBags_F", {35839.5, 12996.8, 0}, 0}, + {"Land_GarbageBags_F", {35337.8, 8528.21, 0}, 0}, + {"Land_GarbageBags_F", {35369.4, 8443.14, 0}, 0}, + {"Land_GarbagePallet_F", {35383.3, 8445.58, 0}, 0}, + {"Land_GarbagePallet_F", {35336.7, 8372.79, 0}, 0}, + {"Land_GarbagePallet_F", {35305.1, 8410.81, 0}, 0}, + {"Land_GarbagePallet_F", {35352.3, 8563.8, 0}, 0}, + {"Land_GarbagePallet_F", {35438.6, 8578.18, 0}, 0}, + {"Land_GarbagePallet_F", {35391.6, 8620.26, 0}, 0}, + {"Land_GarbagePallet_F", {35432.4, 8624.22, 0}, 0}, + {"Land_GarbageBags_F", {35419.9, 8619.09, 0}, 0}, + {"Land_GarbageBags_F", {35493.4, 8641.29, 0}, 0}, + {"Land_GarbageBags_F", {35451.6, 8456.98, 0}, 0}, + {"Land_GarbageBags_F", {31226.4, 11357.4, 0}, 0}, + {"Land_GarbageBags_F", {31328.7, 11287.9, 0}, 0}, + {"Land_GarbageBags_F", {31394.7, 11183.6, 0}, 0}, + {"Land_GarbageBags_F", {31503.5, 11044.3, 0}, 0}, + {"Land_GarbagePallet_F", {31499.4, 11053.7, 0}, 0}, + {"Land_GarbagePallet_F", {31242.1, 11285.7, 0}, 0}, + {"Land_GarbagePallet_F", {31298.9, 11327.8, 0}, 0}, + {"Land_GarbagePallet_F", {31164.2, 11274.4, 0}, 0}, + {"Land_GarbagePallet_F", {31213.4, 11164.3, 0}, 0}, + {"Land_GarbageBags_F", {31137.6, 11168.4, 0}, 0}, + {"Land_GarbageBags_F", {31139.3, 10954.3, 0}, 0}, + {"Land_GarbagePallet_F", {31134.7, 10955.9, 0}, 0}, + {"Land_GarbagePallet_F", {31131.5, 10844.8, 0}, 0}, + {"Land_GarbagePallet_F", {31109.5, 10755.7, 0}, 0}, + {"Land_GarbagePallet_F", {31132.2, 10692.8, 0}, 0}, + {"Land_GarbagePallet_F", {31117.9, 10550.6, 0}, 0}, + {"Land_GarbagePallet_F", {31122.5, 10522.6, 0}, 0}, + {"Land_GarbageBags_F", {31074.6, 10523.1, 0}, 0}, + {"Land_GarbageBags_F", {31012.7, 10533.4, 0}, 0}, + {"Land_GarbageBags_F", {30896.5, 10686.5, 0}, 0}, + {"Land_GarbageBags_F", {31032.2, 10718.2, 0}, 0}, + {"Land_GarbageBags_F", {30728.4, 10657.2, 0}, 0}, + {"Land_GarbageBags_F", {30699.5, 10757.5, 0}, 0}, + {"Land_GarbageBags_F", {30777.6, 10756.4, 0}, 0}, + {"Land_GarbageBags_F", {30785.1, 10293.1, 0}, 0}, + {"Land_GarbageBags_F", {30818.4, 10289.3, 0}, 0}, + {"Land_GarbageBags_F", {30939.4, 10220.3, 0}, 0}, + {"Land_GarbageBags_F", {31049.3, 10225.9, 0}, 0}, + {"Land_GarbagePallet_F", {31159.5, 10241.9, 0}, 0}, + {"Land_GarbagePallet_F", {31171.7, 10167.3, 0}, 0}, + {"Land_GarbagePallet_F", {31505.7, 9931.36, 0}, 0}, + {"Land_GarbagePallet_F", {31500.9, 9720.38, 0}, 0}, + {"Land_GarbagePallet_F", {31511, 9679, 0}, 0}, + {"Land_GarbagePallet_F", {31619.3, 9655.18, 0}, 0}, + {"Land_GarbagePallet_F", {31826.2, 9061.1, 0}, 0}, + {"Land_GarbagePallet_F", {31822.7, 9372.9, 0}, 0}, + {"Land_GarbagePallet_F", {26183.5, 11081.5, 0}, 0}, + {"Land_GarbagePallet_F", {26156.1, 11119.5, 0}, 0}, + {"Land_GarbagePallet_F", {25091.2, 12591.2, 0}, 0}, + {"Land_GarbagePallet_F", {25048.8, 12788.3, 0}, 0}, + {"Land_GarbageBags_F", {25042.9, 12774.5, 0}, 0}, + {"Land_GarbageBags_F", {25174.9, 12808.7, 0}, 0}, + {"Land_GarbageBags_F", {25178.5, 12770.1, 0}, 0}, + {"Land_GarbageBags_F", {25290.5, 12753.1, 0}, 0}, + {"Land_GarbageBags_F", {25234.2, 12842.6, 0}, 0}, + {"Land_GarbageBags_F", {25071, 12774.6, 0}, 0}, + {"Land_GarbagePallet_F", {25075.9, 12768.5, 0}, 0}, + {"Land_GarbagePallet_F", {24874.4, 12508.3, 0}, 0}, + {"Land_GarbagePallet_F", {24801.1, 12408, 0}, 0}, + {"Land_GarbagePallet_F", {24725.8, 12496.5, 0}, 0}, + {"Land_GarbagePallet_F", {20747.8, 12732.2, 0}, 0}, + {"Land_GarbagePallet_F", {20732.6, 12901.8, 0}, 0}, + {"Land_GarbagePallet_F", {20862.9, 12672, 0}, 0}, + {"Land_GarbageBags_F", {20916.4, 12695.6, 0}, 0} + }; + staticNpcPos[] = { + // North + { "C_man_hunter_1_F", { 19031.8, 33967, 0 }, 275 }, + // East + { "C_man_hunter_1_F", { 34757.4, 13432.1, 0 }, 313.34}, + // Central + { "C_man_hunter_1_F", { 24407.3, 13957.4, 0 }, 231.976}, + // West + { "C_man_hunter_1_F", { 4077.59, 19458.2, 0 }, 93.5839 } + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/bornholm.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/bornholm.h new file mode 100644 index 0000000..149fe1b --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/bornholm.h @@ -0,0 +1,367 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Uro1, Robio + + Description: + Epoch gamemode server Side map specific configs for bornholm. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/bornholm.h +*/ +class Bornholm : Default +{ + worldSize = 25000; + plantLimit = 10; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { -0.415527, -7.05298, -10.3098, 180}, "", { 14121.2, 11331.5, 0.000305176 } }, + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", { 1322.18, 8733.92, 0.0136757 } }, + { "TP_Booth_e_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", { 15639.3, 191.995, 0.000153065 } } + }; + propsPos[] = { + { "ProtectionZone_Invisible_F", { 13818.4, 6886.48, 0.278801 }, 0.17135 }, + { "Land_BuoyBig_F", { 15721.4, 64.163, -0.979368 }, 359.777 }, + { "Land_Wreck_Traw_F", { 15639.2, 124.932, 0.263839 }, 322.809 }, + { "Land_Wreck_Traw2_F", { 15658.1, 100.086, 1.61801 }, 323.376 }, + { "Land_Scaffolding_F", { 15646.2, 133.731, -0.294488 }, 137.789 }, + { "Land_HBarrierBig_F", { 15651, 162.33, 0.0101829 }, 73.3763 }, + { "Land_HBarrier_Big_F", { 15625.1, 175.804, -0.00112391 }, 52.9624 }, + { "Land_HBarrier_Big_F", { 15645.6, 161.356, -0.00148749 }, 355.877 }, + { "Land_HBarrierBig_F", { 15637.3, 163.356, 0.000881672 }, 210.987 }, + { "Land_HBarrier_Big_F", { 15658.2, 167.454, 0.0122895 }, 34.2396 }, + { "Land_HBarrier_Big_F", { 15662.6, 170.78, 0.0376873 }, 136.674 }, + { "Land_HBarrier_Big_F", { 15650.4, 171.279, 0.0293906 }, 150.055 }, + { "Land_HBarrier_Big_F", { 15630.5, 168.907, -0.00100851 }, 52.8745 }, + { "Land_HelipadCircle_F", { 15608.4, 161.428, 2.14174 }, 359.996 }, + { "Land_Timbers_F", { 15620.5, 174.332, -0.00525379 }, 298.321 }, + { "Land_Sunshade_04_F", { 15648.7, 175.01, 0.0031445 }, 0.0265293 }, + { "Land_Sunshade_02_F", { 15643.9, 173.805, 0.0163455 }, 359.811 }, + { "Land_FishingGear_01_F", { 15648, 153.691, -0.00799263 }, 1.20091 }, + { "Land_RowBoat_V2_F", { 15645.1, 147.559, -0.0263296 }, 357.977 }, + { "Land_Pipes_large_F", { 15659.4, 171.393, 3.42131e-005 }, 312.927 }, + { "Land_Sun_chair_F", { 15646, 175.112, 0.0202277 }, 359.948 }, + { "Land_Pipes_small_F", { 15638.3, 164.277, 2.40803e-005 }, 206.804 }, + { "Land_CashDesk_F", { 15635.7, 169.9, 0.000852585 }, 239.921 }, + { "Land_TableDesk_F", { 15633.7, 173.214, 0.00173426 }, 239.32 }, + { "Land_Bricks_V4_F", { 15641.7, 163.213, 0.00875616 }, 0.337211 }, + { "Land_FishingGear_02_F", { 15669.4, 171.452, 0.00496185 }, 0.904838 }, + { "Land_RowBoat_V1_F", { 15664.5, 166.044, 0.00929034 }, 77.2365 }, + { "Land_Cargo40_light_green_F", { 15619.5, 184.413, 0.0896568 }, 256.577 }, + { "Land_MarketShelter_F", { 15631.8, 177.006, 0.208288 }, 60.5181 }, + { "Land_MarketShelter_F", { 15655.5, 191.154, -0.00783348 }, 225.194 }, + { "Land_Cargo40_red_F", { 15649.1, 204.413, 0.0555987 }, 51.1155 }, + { "Land_Cargo40_yellow_F", { 15655.3, 201.558, 0.014725 }, 75.8082 }, + { "Land_Cargo40_orange_F", { 15622.3, 188.507, 0.0617955 }, 88.4635 }, + { "Land_Cargo40_cyan_F", { 15620.9, 188.635, 2.67698 }, 111.079 }, + { "Land_HBarrierWall6_F", { 15663, 190.661, -0.0307951 }, 46.118 }, + { "Land_ScrapHeap_2_F", { 15627.1, 203.132, -0.00299644 }, 223.597 }, + { "Land_HBarrierWall_corridor_F", { 15633.8, 202.358, 0.00317883 }, 62.7664 }, + { "Land_ScrapHeap_1_F", { 15650.8, 209.432, 0.017817 }, 0.447878 }, + { "Land_Cargo20_military_green_F", { 15659.1, 196.541, 0.00264668 }, 77.2429 }, + { "Land_Wreck_Truck_dropside_F", { 15642.2, 207.691, -0.00757217 }, 0.199335 }, + { "Land_CncWall4_F", { 15643.6, 205.103, 0.075758 }, 154.219 }, + { "Land_CncWall4_F", { 15630.4, 198.341, 0.119653 }, 151.628 }, + { "Land_CncWall4_F", { 15636.4, 197.3, 0.0389404 }, 152.243 }, + { "Land_CncWall4_F", { 15639, 202.788, 0.0421772 }, 153.298 }, + { "Land_CncWall4_F", { 15625.9, 195.78, 0.0775604 }, 149.793 }, + { "Land_Sunshade_02_F", { 15651.6, 182.98, 0.0120049 }, 0.0717062 }, + { "Land_Sunshade_02_F", { 15643, 182.337, 0.0176392 }, 359.944 }, + { "Land_Wreck_CarDismantled_F", { 15624, 198.622, 0.261416 }, 285.125 }, + { "Land_Sunshade_01_F", { 15641.1, 178.177, 0.0102644 }, 359.93 }, + { "Land_Sunshade_01_F", { 15647.6, 184.087, 0.0125721 }, 0.0504709 }, + { "Land_Sunshade_01_F", { 15652.7, 178.511, 0.00689721 }, 0.0371588 }, + { "Land_Wreck_Car3_F", { 15638.4, 205.266, 0.00205564 }, 251.285 }, + { "ProtectionZone_Invisible_F", { 15646.3, 178.848, 0.000143051 }, 359.965 }, + { "Land_WoodenCart_F", { 15663.9, 177.179, -0.00787663 }, 35.9049 }, + { "Land_WoodPile_large_F", { 15642.1, 185.201, -0.00321651 }, 52.3456 }, + { "Land_CrabCages_F", { 15645.5, 202.82, 0.0562382 }, 0.0688534 }, + { "Land_DieselGroundPowerUnit_01_F", { 15637.7, 195.264, -0.000700712 }, 262.48 }, + { "Land_Pallets_F", { 15624.9, 190.665, 0.123774 }, 359.823 }, + { "Land_StallWater_F", { 15657.7, 187.455, 0.000522137 }, 141.868 }, + { "Land_Campfire_F", { 15646.3, 178.848, 0.000143051 }, 359.965 }, + { "Land_Pallet_F", { 15627.2, 192.907, 0.00328994 }, 359.886 }, + { "Land_TablePlastic_01_F", { 15629.7, 180.15, 0.000247717 }, 59.5573 }, + { "Land_WoodenTable_large_F", { 15652.6, 194.046, 0.000631809 }, 137.873 }, + { "Land_Sink_F", { 15627.7, 184.434, 0.000186443 }, 63.1626 }, + { "Land_Sun_chair_F", { 15648.3, 181.691, 0.0240393 }, 213.692 }, + { "Land_Sun_chair_F", { 15643.2, 179.6, 0.0209301 }, 118.295 }, + { "Land_Sun_chair_F", { 15649.9, 177.68, 0.0205896 }, 287.149 }, + { "Land_WoodPile_F", { 15642.7, 184.317, -0.00298262 }, 51.5809 }, + { "Land_Sun_chair_green_F", { 15650.2, 180.237, 0.0196772 }, 251.876 }, + { "Land_Sun_chair_green_F", { 15645.5, 181.945, 0.0205414 }, 167.928 }, + { "Land_Sun_chair_green_F", { 15643.4, 176.47, 0.0220649 }, 48.1992 }, + { "Land_Rack_F", { 15651.3, 199.418, 0.000468731 }, 141.195 }, + { "FlexibleTank_01_sand_F", { 15635.1, 194.896, 0.000255585 }, 359.956 }, + { "FlexibleTank_01_sand_F", { 15635.8, 195.265, 0.000300169 }, 0.288991 }, + { "MetalBarrel_burning_F", { 15630.8, 204.419, 0.00832129 }, 0.462099 }, + { "MetalBarrel_burning_F", { 15633.5, 205.994, 0.0023284 }, 0.111446 }, + { "Land_Pallets_stack_F", { 15640.2, 187.414, 0.000448942 }, 359.977 }, + { "FxWindLeaf2", { 15628.6, 214.852, 0.548064 }, 317.584 }, + { "FxWindLeaf1", { 15637.8, 217.288, 0.455507 }, 222.879 }, + { "Land_HBarrierBig_F", { 15667.1, 178.052, 0.0442517 }, 109.907 }, + { "Land_HBarrierWall_corner_F", { 15667.8, 184.951, 0.00963998 }, 44.1245 }, + { "Land_Scrap_MRAP_01_F", { 15664.2, 198.094, 0.00405431 }, 0 }, + { "Land_RowBoat_V3_F", { 15673.3, 177.127, -0.0486985 }, 11.8809 }, + { "Land_CncWall4_F", { 15665.8, 180.36, 0.00917315 }, 187.504 }, + { "FxWindPollen1", { 15637.9, 230.239, 0.471553 }, 235.371 }, + { "FxWindPollen1", { 15621, 234.069, 0.872333 }, 233.3 }, + { "Land_Pier_F", { 13830.4, 6891.93, 0 }, 239.591 }, + { "FxWindGrass1", { 13810.7, 6892.85, 0.191719 }, 46.31 }, + { "FxWindGrass1", { 13810, 6892.56, 0.191727 }, 82.095 }, + { "FxWindPollen1", { 13805.2, 6885.39, 0.710732 }, 317.928 }, + { "FxWindLeaf3", { 13831.8, 6884.05, 0.189926 }, 25.4875 }, + { "FxWindLeaf3", { 13832, 6885.3, 0.189926 }, 181.815 }, + { "Land_ClutterCutter_large_F", { 1319.66, 8731.35, 2.86102e-006 }, 359.675 }, + { "Land_ClutterCutter_large_F", { 1318.44, 8727.63, 0 }, 49.1151 }, + { "Land_Wreck_T72_hull_F", { 1310.5, 8749.84, 0.299499 }, 270.134 }, + { "Land_HBarrier_Big_F", { 1309.12, 8739.04, -0.00028038 }, 288.585 }, + { "Land_HBarrier_Big_F", { 1314.19, 8745.84, -0.000450134 }, 324.918 }, + { "Land_HBarrier_Big_F", { 1304.72, 8732.63, 0.00205898 }, 255.866 }, + { "Land_HBarrier_Big_F", { 1310.8, 8728.35, -0.00150394 }, 238.536 }, + { "Land_Scrap_MRAP_01_F", { 1316.63, 8716.55, 0.0548172 }, 0.0379385 }, + { "Land_Cargo20_cyan_F", { 1314.66, 8720.54, 0.121656 }, 133.796 }, + { "Land_Cargo20_red_F", { 1313.05, 8722.93, 0.114467 }, 140.761 }, + { "Land_FishingGear_02_F", { 1305.03, 8742.61, 0.019352 }, 359.951 }, + { "Land_Wreck_Car3_F", { 1308.63, 8722.36, -0.000584602 }, 159.418 }, + { "ProtectionZone_Invisible_F", { 1321.31, 8731.17, 0.0812912 }, 0.227285 }, + { "Land_MobileScafolding_01_F", { 1310.84, 8737.95, -0.0364008 }, 103.374 }, + { "Land_WoodPile_large_F", { 1316.73, 8730.8, 0.00762749 }, 358.764 }, + { "Land_CrabCages_F", { 1316.66, 8726.4, -0.039607 }, 359.88 }, + { "Land_Cages_F", { 1311.79, 8730.49, 0.00186729 }, 329.18 }, + { "Land_WoodPile_F", { 1318.06, 8731.28, 0.102395 }, 359.49 }, + { "Land_RattanTable_01_F", { 1318.35, 8741.7, 0.00507355 }, 199.868 }, + { "Land_MarketShelter_F", { 1326.45, 8742.12, -1.4176 }, 0.583462 }, + { "Land_Wreck_Slammer_F", { 1353.97, 8733.56, 0.319329 }, 342.452 }, + { "Land_ClutterCutter_large_F", { 1328.95, 8731.05, 0 }, 359.889 }, + { "Land_Cargo40_cyan_F", { 1349.2, 8731.39, 0.180404 }, 270.482 }, + { "Land_Cargo40_orange_F", { 1345.71, 8727.76, -0.0503521 }, 43.0521 }, + { "Land_Cargo40_yellow_F", { 1338.59, 8721.49, 0.118133 }, 166.24 }, + { "Land_Cargo40_yellow_F", { 1333.97, 8751.09, 0.0053997 }, 0.479134 }, + { "Land_Cargo40_red_F", { 1345.61, 8730.46, 0.0270262 }, 277.598 }, + { "Land_Cargo40_blue_F", { 1332.74, 8748.52, 0.104683 }, 0.0114725 }, + { "Land_Cargo40_white_F", { 1343.71, 8742.82, 2.67184 }, 59.773 }, + { "Land_Cargo40_light_blue_F", { 1341.84, 8741.73, 0.0691147 }, 55.0215 }, + { "Land_ScrapHeap_2_F", { 1341.49, 8731.74, 0.00237465 }, 0.0212086 }, + { "Land_HelipadCircle_F", { 1369.58, 8743.4, 13.3347 }, 359.892 }, + { "Land_HBarrier_Big_F", { 1321.51, 8719.38, 0.132846 }, 203.427 }, + { "Land_HBarrier_Big_F", { 1333.9, 8717.74, 0.00420952 }, 165.489 }, + { "Land_HBarrier_Big_F", { 1322.29, 8748.25, -0.00112915 }, 181.401 }, + { "Land_HBarrier_Big_F", { 1328.07, 8722.15, 0.0205135 }, 188.521 }, + { "Land_Cargo20_grey_F", { 1346.87, 8741.34, 0.0168638 }, 235.64 }, + { "Land_Cargo20_sand_F", { 1341.23, 8719.37, 0.114039 }, 163.19 }, + { "Land_Cargo20_orange_F", { 1343.26, 8746.69, 0.0393 }, 63.0174 }, + { "Land_Cargo20_light_green_F", { 1337.88, 8721.16, -0.0479851 }, 350.063 }, + { "Land_Cargo20_vr_F", { 1344.77, 8722.73, 2.70838 }, 177.136 }, + { "Land_Wreck_HMMWV_F", { 1324.98, 8751.86, 0.074626 }, 296.748 }, + { "Land_Wreck_CarDismantled_F", { 1334.24, 8714.83, -0.00515842 }, 246.992 }, + { "Land_Cargo10_grey_F", { 1346.65, 8722.83, 0.0225801 }, 189.743 }, + { "WaterPump_01_forest_F", { 1342.53, 8726.05, 0.00149822 }, 359.638 }, + { "Land_WoodenCart_F", { 1327.25, 8732.57, 0.0624475 }, 38.0636 }, + { "Land_Tyres_F", { 1327.23, 8724.99, 0.274611 }, 0.698713 }, + { "Land_Pipes_large_F", { 1328.98, 8731.08, 0.119346 }, 126.292 }, + { "Land_ToiletBox_F", { 1333.95, 8723.05, 0.00406837 }, 179.327 }, + { "Land_Pallets_F", { 1331.82, 8729.83, 0.246457 }, 0.133333 }, + { "Land_Campfire_F", { 1321.31, 8731.17, 0.0812912 }, 0.227285 }, + { "Land_TablePlastic_01_F", { 1330.71, 8740.37, 0.106432 }, 8.04588 }, + { "Land_WoodenTable_large_F", { 1334.79, 8741.17, -0.0226603 }, 85.1037 }, + { "Land_Pallets_stack_F", { 1333.94, 8730.13, 0.00930882 }, 167.347 }, + { "Land_Pipes_small_F", { 1330.4, 8731.07, 0.0154037 }, 129.542 }, + { "Land_Cages_F", { 1342.32, 8738.78, -0.617805 }, 45.591 }, + { "Land_TableDesk_F", { 1322.53, 8741.47, 0.00610065 }, 358.733 }, + { "Land_Bricks_V2_F", { 1333.91, 8732.71, -5.24521e-005 }, 359.919 }, + { "Land_PalletTrolley_01_khaki_F", { 1330.8, 8729.43, 0.0189047 }, 0.0261265 }, + { "Land_Portable_generator_F", { 1330.73, 8739.86, -0.0376806 }, 350.676 }, + { "FxWindLeaf2", { 1325.15, 8729.28, 0.377025 }, 277.926 }, + { "FxWindGrass1", { 1322.63, 8759.85, -0.0120373 }, 256.525 }, + { "Land_Wreck_Offroad2_F", { 14123.7, 11307.4, 0.0586777 }, 239.247 }, + { "Land_MarketShelter_F", { 14113.9, 11348.2, -0.00108337 }, 198.18 }, + { "Land_ClutterCutter_large_F", { 14109.4, 11348.4, 0 }, 0.0882208 }, + { "Land_ClutterCutter_large_F", { 14119, 11344.5, 0 }, 291.114 }, + { "Land_ClutterCutter_large_F", { 14110.4, 11340.1, 0 }, 0.179516 }, + { "Land_ClutterCutter_large_F", { 14112.3, 11331.2, 0 }, 0.191839 }, + { "Land_ClutterCutter_large_F", { 14121.2, 11324, 0 }, 0.12738 }, + { "Land_ClutterCutter_large_F", { 14120.6, 11335.4, 0 }, 0.163394 }, + { "Land_ClutterCutter_large_F", { 14103.3, 11340.8, 0 }, 0.389968 }, + { "Land_BarGate_F", { 14092.2, 11324.1, -0.0248566 }, 271.54, false }, + { "Land_BarGate_F", { 14107.3, 11310.3, 0.237534 }, 5.83527, false }, + { "Land_Cargo40_military_green_F", { 14096.3, 11342.9, 0.183029 }, 271.598 }, + { "Land_Cargo40_brick_red_F", { 14120.9, 11351.1, -0.00115967 }, 19.6872 }, + { "Land_HBarrierWall6_F", { 14100, 11351.7, -0.0260773 }, 315.035 }, + { "Land_Wreck_Hunter_F", { 14089.7, 11335.9, 0.116058 }, 41.7281 }, + { "Land_HBarrier_Big_F", { 14115.8, 11312.1, -0.00105286 }, 187 }, + { "Land_HBarrier_Big_F", { 14100, 11328.6, 0.014595 }, 5.7961 }, + { "Land_HBarrier_Big_F", { 14094.8, 11332.4, 0.00354767 }, 95.9078 }, + { "Land_HBarrier_Big_F", { 14112.2, 11318, -0.00088501 }, 94.6266 }, + { "Land_ScrapHeap_1_F", { 14099.9, 11338.5, -0.00891113 }, 0.0417361 }, + { "Land_CncWall4_F", { 14109.8, 11326.9, 0.0617294 }, 42.9559 }, + { "Land_CncWall4_F", { 14099.7, 11330.4, 0.0908203 }, 4.05557 }, + { "Land_CncWall4_F", { 14117.2, 11313.6, 0.0520935 }, 5.30844 }, + { "Land_CncWall4_F", { 14115.6, 11324.1, 0.0231323 }, 86.9643 }, + { "Land_CncWall4_F", { 14106.6, 11331.8, 0.13678 }, 0.150863 }, + { "Land_CncWall1_F", { 14096.1, 11333.9, 0.0272675 }, 90.0868 }, + { "Land_CncWall4_F", { 14113.8, 11317.2, 0.0120621 }, 91.1773 }, + { "Land_IronPipes_F", { 14108.9, 11337.6, 0.0977249 }, 8.84802 }, + { "Land_HBarrier_5_F", { 14107.4, 11327.7, -0.0314255 }, 42.6278 }, + { "Land_MobileScafolding_01_F", { 14123.8, 11336.2, 0.00486755 }, 205.774 }, + { "Land_WoodPile_large_F", { 14114.1, 11348.9, 0.0017395 }, 301.895 }, + { "Land_Tyres_F", { 14115.4, 11336.7, -0.00137329 }, 0.0397758 }, + { "Land_Pipes_large_F", { 14099.5, 11333.3, -7.62939e-006 }, 37.8076 }, + { "Land_JunkPile_F", { 14116.7, 11334.5, -0.0035553 }, 303.091 }, + { "Land_CncWall1_F", { 14103.6, 11331.2, 0.138077 }, 319.046 }, + { "Land_CncWall1_F", { 14112.3, 11325.1, 0.0537262 }, 359.959 }, + { "Land_CncWall1_F", { 14115.4, 11321.1, -0.00537109 }, 140.897 }, + { "Land_CncWall1_F", { 14096.6, 11331, 0.0315247 }, 47.2756 }, + { "Land_CncWall1_F", { 14102.6, 11330.4, 0.138901 }, 319.955 }, + { "Land_CncWall1_F", { 14107.7, 11329.4, 0.0115585 }, 81.1684 }, + { "Land_CncWall1_F", { 14114.3, 11314.3, 0.0269775 }, 51.8706 }, + { "Land_CncWall1_F", { 14114.4, 11320.3, -0.0051651 }, 137.557 }, + { "Land_WorkStand_F", { 14098.2, 11342.5, 0.0126724 }, 277.068 }, + { "Land_ToiletBox_F", { 14103.3, 11333.8, 0.00485229 }, 182.828 }, + { "Land_FieldToilet_F", { 14115.7, 11317.3, 0.000938416 }, 269.985 }, + { "Land_FieldToilet_F", { 14115.8, 11318.8, 0.00125122 }, 273.548 }, + { "Land_DieselGroundPowerUnit_01_F", { 14122.2, 11339.9, 0.000114441 }, 0.167524 }, + { "Land_StallWater_F", { 14117.3, 11325.1, 0.00311279 }, 270.887 }, + { "Land_Campfire_F", { 14111.7, 11343.3, 0.000343323 }, 0.132363 }, + { "Land_Cages_F", { 14123.4, 11324.3, 0.00346375 }, 0.106132 }, + { "Land_WoodenTable_large_F", { 14121.2, 11344.7, 0.00106812 }, 294.951 }, + { "Land_WoodPile_F", { 14113.4, 11347.5, -0.00383759 }, 143.448 }, + { "Land_TableDesk_F", { 14109.4, 11348.4, 0.000434875 }, 16.3586 }, + { "Land_Bricks_V2_F", { 14121.5, 11314.5, -7.62939e-006 }, 351.827 }, + { "Land_Bricks_V4_F", { 14122.9, 11314.8, 1.52588e-005 }, 297.473 }, + { "Land_PalletTrolley_01_yellow_F", { 14122.7, 11322.8, 0.000572205 }, 234.41 }, + { "Land_ToolTrolley_01_F", { 14099.9, 11343.8, 0.00119781 }, 53.6541 }, + { "Land_Basket_F", { 14122.2, 11324.4, 0.000450134 }, 0.0888181 }, + { "FxWindLeaf1", { 14122.9, 11345.1, 0.411011 }, 332.49 }, + { "Land_HelipadCircle_F", { 14152.4, 11356.6, 0.00000 }, 0.100796 }, + { "Land_MarketShelter_F", { 14134.5, 11324.6, -0.012886 }, 119.171 }, + { "Land_Wreck_Slammer_F", { 14149.3, 11338.6, 0.00175476 }, 359.963 }, + { "Land_ClutterCutter_large_F", { 14137.4, 11330.9, 0 }, 0.130885 }, + { "Land_ClutterCutter_large_F", { 14130.6, 11321.3, 0 }, 0.138625 }, + { "Land_ClutterCutter_large_F", { 14131, 11342.7, -0.00253868 }, 0.0181735 }, + { "Land_ClutterCutter_large_F", { 14126.9, 11333.6, 0 }, 0.174845 }, + { "Land_Cargo40_cyan_F", { 14126.2, 11312.3, 0.00121307 }, 0.207354 }, + { "Land_Cargo40_yellow_F", { 14126.1, 11343.4, 0.0130692 }, 287.618 }, + { "Land_Cargo40_sand_F", { 14136.1, 11316.5, 0.00692749 }, 116.21 }, + { "Land_Cargo40_orange_F", { 14141.7, 11327.4, 0.000640869 }, 114.223 }, + { "Land_ScrapHeap_2_F", { 14145.8, 11320.2, 0.0355225 }, 0.0212184 }, + { "Land_Timbers_F", { 14128, 11340.7, 0.00062561 }, 196.821 }, + { "Land_CncBarrierMedium4_F", { 14137.9, 11343.9, -0.000160217 }, 50.7395 }, + { "Land_Cargo20_grey_F", { 14131.7, 11345.7, 0.000389099 }, 50.4909 }, + { "Land_Cargo20_red_F", { 14137, 11339, 0.00183105 }, 187.844 }, + { "Land_Cargo20_vr_F", { 14142.3, 11335.5, 0.00969696 }, 30.7018 }, + { "Land_Wreck_Car2_F", { 14141, 11348, 0.130402 }, 7.6156 }, + { "Land_Wreck_CarDismantled_F", { 14129.8, 11308, 0.0423508 }, 125.341 }, + { "Land_Wreck_Car_F", { 14130.9, 11349.7, 0.0104446 }, 97.6291 }, + { "ProtectionZone_Invisible_F", { 14129, 11327.3, 0.000221252 }, 0.17135 }, + { "Land_Campfire_F", { 14129, 11327.3, 0.000221252 }, 0.17135 }, + { "Land_Workbench_01_F", { 14132.3, 11320.7, 0.00038147 }, 292.74 }, + { "Land_Pallets_stack_F", { 14124.8, 11314.6, 0.000427246 }, 0.078499 }, + { "Land_WoodPile_F", { 14130.3, 11324.2, 0.0151367 }, 0.104529 }, + { "Land_CampingTable_F", { 14135.9, 11328.8, 0.00232697 }, 296.997 }, + { "FxWindGrass1", { 14124.6, 11344.8, 0.246208 }, 284.567 }, + { "Land_CinderBlocks_F", { 14135.7, 11336.8, 0.000205994 }, 231.317 }, + { "Land_Portable_generator_F", { 14131.3, 11319.1, -0.000579834 }, 0.147205 }, + { "Land_ClutterCutter_large_F", { 14130.3, 11327.1, 0 }, 0.0946766 }, + { "WaterPump_01_forest_F", { 14138.6, 11332.2, 0.00193024 }, 160.548 }, + { "Land_Cargo40_orange_F", { 14109.3, 11354.7, 0.0171814 }, 195.887 }, + { "Land_Wreck_BMP2_F", { 14097.7, 11356.3, 0.21608 }, 350.67 }, + { "Land_Wreck_HMMWV_F", { 14125.8, 11354, -0.00344086 }, 240.065 }, + { "Land_Atm_01_F", { 17948.2, 10018.5, 0.8 }, 153 }, + { "Land_Atm_01_F", { 17630.7, 5516.61, 0 }, 218.482 }, + { "Land_Atm_01_F", { 9347.83, 5432.61, 0 }, 136.374 }, + { "Land_Atm_01_F", { 3080.28, 5477.06, 0 }, 293.278 }, + { "Land_Atm_01_F", { 1552.82, 7861.97, 0.8 }, 249.868 }, + { "Land_Atm_01_F", { 1283.03, 7559.01, 0 }, 345.846 }, + { "Land_Atm_01_F", { 1562.76, 7293.19, 0 }, 271.018 }, + { "Land_Atm_01_F", { 1625.4, 13054.5, 0.5 }, 168.824 }, + { "Land_Atm_01_F", { 1484.12, 12910.3, 0 }, 259.593 }, + { "Land_Atm_01_F", { 11726.2, 14722.3, 1 }, 98.3179 }, + { "Land_Atm_02_F", { 15481.5, 521.788, 0 }, 164.042 }, + { "Land_Atm_02_F", { 12244.8, 3040.3, 0 }, 177.44 }, + { "Land_Atm_02_F", { 9545.33, 5594.19, 0 }, 268.712 }, + { "Land_Atm_02_F", { 1675.32, 7578.76, 0 }, 76.3863 }, + { "Land_Atm_02_F", { 3349.34, 10166.2, 0 }, 174.71 }, + { "Land_Atm_02_F", { 11392.5, 11771.8, 0 }, 180.112 }, + { "Land_Atm_02_F", { 13071.3, 10240, 0 }, 224.86 }, + { "Land_Atm_02_F", { 5797.28, 8076.61, 0 }, 119.317 }, + { "Land_PhoneBooth_01_F", { 17966.5, 9811.4, 0 }, 83.4164 }, + { "Land_PhoneBooth_01_F", { 17469.3, 4952.04, 0.7 }, 20.8038 }, + { "Land_PhoneBooth_01_F", { 17554.4, 5198.17, 0 }, 103.519 }, + { "Land_PhoneBooth_01_F", { 17427.1, 4771.2, 0 }, 147.441 }, + { "Land_PhoneBooth_01_F", { 17211.1, 5118.6, 0 }, 299.072 }, + { "Land_PhoneBooth_01_F", { 17499.2, 4673.25, 0 }, 131.277 }, + { "Land_PhoneBooth_01_F", { 12262.7, 2996.02, 0 }, 271.562 }, + { "Land_PhoneBooth_01_F", { 9495.03, 5629.67, 1 }, 172.541 }, + { "Land_PhoneBooth_01_F", { 6414.45, 5828.47, 0 }, 197.162 }, + { "Land_PhoneBooth_01_F", { 5351.75, 5793.8, 0 }, 292.858 }, + { "Land_PhoneBooth_01_F", { 3135.69, 5501.4, 0 }, 206.007 }, + { "Land_PhoneBooth_01_F", { 1682.27, 7631.78, 0 }, 67.3692 }, + { "Land_PhoneBooth_01_F", { 1520.53, 7353.66, 0 }, 97.015 }, + { "Land_PhoneBooth_01_F", { 3388.9, 10053.6, 0 }, 83.771 }, + { "Land_PhoneBooth_01_F", { 1720.77, 12978.6, 0 }, 310.082 }, + { "Land_PhoneBooth_01_F", { 1784.66, 13010.2, 0 }, 160.14 }, + { "Land_PhoneBooth_01_F", { 1295.62, 12993.2, 1 }, 272.256 }, + { "Land_PhoneBooth_01_F", { 2927.35, 14772.8, 0 }, 128.466 }, + { "Land_PhoneBooth_01_F", { 2745.57, 17249.1, 0 }, 0 }, + { "Land_PhoneBooth_01_F", { 4209.93, 19992.1, 0 }, 351.701 }, + { "Land_PhoneBooth_01_F", { 4750.45, 19123.5, 0 }, 228.424 }, + { "Land_PhoneBooth_01_F", { 4955.82, 18875.1, 0 }, 275.971 }, + { "Land_PhoneBooth_01_F", { 6314.34, 17164.7, 0 }, 305.095 }, + { "Land_PhoneBooth_01_F", { 5192.34, 12548.8, 0 }, 78.9806 }, + { "Land_PhoneBooth_01_F", { 11402.2, 14810.7, 0 }, 48.8638 }, + { "Land_PhoneBooth_01_F", { 11233.8, 11823, 0 }, 4.7398 }, + { "Land_PhoneBooth_01_F", { 7601.6, 10444.1, 0 }, 146.863 }, + { "Land_PhoneBooth_01_F", { 3241.5, 8255.09, 0 }, 271.64 }, + { "Land_PhoneBooth_01_F", { 5809.73, 7986.64, 0 }, 206.012 }, + { "Land_PhoneBooth_01_F", { 16739.1, 10529.7, 0 }, 28.4654 }, + { "Land_PhoneBooth_01_F", { 19600.4, 22078.4, 0 }, 80.9019 }, + { "Land_PhoneBooth_02_F", { 18068.1, 9941.38, 0 }, 134.255 }, + { "Land_PhoneBooth_02_F", { 17862.9, 10010.3, 0 }, 358.468 }, + { "Land_PhoneBooth_02_F", { 17867.4, 8003.57, 0 }, 267.786 }, + { "Land_PhoneBooth_02_F", { 17640.9, 5109.96, 0 }, 318.459 }, + { "Land_PhoneBooth_02_F", { 17628, 5359.17, 0 }, 272.252 }, + { "Land_PhoneBooth_02_F", { 15484.7, 594.351, 0 }, 258.111 }, + { "Land_PhoneBooth_02_F", { 9708.03, 5709.24, 0 }, 248.864 }, + { "Land_PhoneBooth_02_F", { 1858.59, 7715.78, 0 }, 239.078 }, + { "Land_PhoneBooth_02_F", { 3110.47, 10014.2, 0 }, 179.057 }, + { "Land_PhoneBooth_02_F", { 1457.63, 13180.8, 0 }, 295.164 }, + { "Land_PhoneBooth_02_F", { 4935.21, 16760.4, 0 }, 85.4829 }, + { "Land_PhoneBooth_02_F", { 4389.78, 19934.9, 0 }, 30.6939 }, + { "Land_PhoneBooth_02_F", { 4043.76, 19903.6, 0 }, 324.067 }, + { "Land_PhoneBooth_02_F", { 8515.78, 15058.4, 0 }, 276.368 }, + { "Land_PhoneBooth_02_F", { 13073.5, 10195.5, 0 }, 47.5487 } }; + staticNpcPos[] = { + { "C_man_polo_6_F_afro", { 15634.3, 168.649, 0.00156903 }, 51.959599 }, + { "C_man_polo_4_F_euro", { 15654, 195.205, 0.00135756 }, 236.48599 }, + { "C_man_polo_5_F_afro", { 15656.8, 189.026, 0.00136185 }, 259.375 }, + { "C_man_polo_5_F_afro", { 15625.9, 183.62601, 0.00153399 }, 54.630501 }, + { "C_man_p_fugitive_F", { 1318.72, 8742.6904, 0.00168705 }, 175.675 }, + { "C_man_w_worker_F", { 1322.49, 8742.4297, 0.00178528 }, 174.548 }, + { "C_Orestes", { 1335.04, 8742.6201, 0.0012836501 }, 184.13699 }, + { "C_man_polo_4_F", { 1330.87, 8742.5, 0.00138187 }, 196.77499 }, + { "C_man_shorts_3_F_euro", { 14109.7, 11350.5, 0.0014267 }, 174.95 }, + { "C_man_p_fugitive_F_euro", { 14121.8, 11346.5, 0.00154877 }, 205.657 }, + { "C_man_polo_5_F_euro", { 14137.9, 11327.6, 0.00151062 }, 304.94299 }, + { "C_man_p_beggar_F_euro", { 14134.3, 11319.9, 0.00152588 }, 291.728 } + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/chernarus.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/chernarus.h new file mode 100644 index 0000000..74406f8 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/chernarus.h @@ -0,0 +1,496 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Uro1, Robio + + Description: + Epoch gamemode server Side map specific configs for chernarus. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/chernarus.h +*/ +class Chernarus : Default +{ + worldSize = 12000; + plantLimit = 10; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", { 4569.52, 4524.24, 0.201431 } }, // South West + { "TP_Booth_e_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", { 12077.8, 5121.92, 0.00144958 } }, // South East + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", { 10688.6, 9428.98, 0.00144958 } } // North East + }; + propsPos[] = { + // phones + { "Land_PhoneBooth_02_F", { 10455.2, 2214.84, 0 }, 52.4502 }, + { "Land_PhoneBooth_02_F", { 10480, 2350.02, 0.101999 }, 326.023 }, + { "Land_PhoneBooth_02_F", { 10479.1, 2349.45, 0.101999 }, 326.023 }, + { "Land_PhoneBooth_02_F", { 6809.42, 2703.85, 0.101999 }, 131.438 }, + { "Land_PhoneBooth_02_F", { 6795.85, 2484.88, 0 }, 312.46 }, + { "Land_PhoneBooth_02_F", { 6738.58, 2393.89, 0 }, 221.25 }, + { "Land_PhoneBooth_02_F", { 6409.57, 2439.88, 0.0883212 }, 46.4278 }, + { "Land_PhoneBooth_02_F", { 7496.04, 5126.04, -0.000732422 }, 182.17 }, + { "Land_PhoneBooth_02_F", { 10132.1, 5471.31, 1.52588e-005 }, 46.4049 }, + { "Land_TouristShelter_01_F", { 11285.3, 5492.9, 1.52588e-005 }, 160.867 }, + { "Land_PhoneBooth_02_F", { 11282.8, 5491.04, 0 }, 162.031 }, + { "Land_PhoneBooth_02_F", { 13359.8, 6170.49, 0 }, 176.672 }, + { "Land_PhoneBooth_02_F", { 12102.1, 7283.6, 0 }, 96.4346 }, + { "Land_PhoneBooth_02_F", { 10654.9, 8013.35, 0.102005 }, 303.161 }, + { "Land_PhoneBooth_02_F", { 12022.4, 9151.21, 0 }, 47.4504 }, + { "Land_PhoneBooth_02_F", { 12023.3, 9150.26, 0 }, 45.6474 }, + { "Land_PhoneBooth_02_F", { 12265.6, 9479.49, 1.18411 }, 141.691 }, + { "Land_PhoneBooth_02_F", { 6017.95, 7821.39, -0.00500488 }, 223.037 }, + { "Land_PhoneBooth_02_F", { 6227.46, 7721.33, 0 }, 36.2285 }, + { "Land_TouristShelter_01_F", { 1969.65, 7361.86, 0 }, 35.9378 }, + { "Land_PhoneBooth_02_F", { 1971.84, 7359.15, -1.52588e-005 }, 127.545 }, + { "Land_PhoneBooth_02_F", { 8785.43, 11618.8, 0 }, 100.044 }, + { "Land_PhoneBooth_02_F", { 11242.2, 12209.9, 0 }, 118.072 }, + { "Land_PhoneBooth_02_F", { 2706.84, 10002.9, 0 }, 12.6221 }, + // City Klen + { "Land_MarketShelter_F", { 11396.6, 11368.6, -0.0245056 }, 216.043 }, + { "Land_i_Stone_Shed_V1_F", { 11392.3, 11388.6, 0 }, 216.9 }, + { "Land_Wreck_Offroad2_F", { 11398.5, 11382.7, -0.00628662 }, 181.726 }, + { "Land_Slums01_8m", { 11383.6, 11393.7, 0.00790405 }, 300.102 }, + { "Land_Slums01_8m", { 11379.6, 11386.9, -0.00378418 }, 300.014 }, + { "Land_GarbageBags_F", { 11394.1, 11382.3, 0.00491333 }, 0.000760495 }, + { "Land_CratesPlastic_F", { 11398.8, 11372.4, -0.000823975 }, 359.71 }, + { "Land_BarrelWater_F", { 11390, 11370.7, 0.000457764 }, 359.997 }, + { "Land_Chapel_V2_F", { 11429, 11352.8, 0.258972 }, 126.48 }, + { "Land_u_House_Big_02_V1_F", { 11417.7, 11362.8, 0 }, 36.7593 }, + { "Land_Cages_F", { 11401.1, 11369.3, 0.00457764 }, 76.3813 }, + { "Land_GarbagePallet_F", { 11426.1, 11367.2, 0.00119019 }, 0.234284 }, + { "Land_i_Stone_HouseBig_V3_F", { 11405.1, 11375.6, 0 }, 129.339 }, + { "Land_Slums02_4m", { 11414.1, 11377.4, 0.0258484 }, 39.2923 }, + { "Land_Slums02_4m", { 11417, 11375.1, 0.00820923 }, 39.284 }, + { "Land_Slums02_4m", { 11407.2, 11383.1, 0.00335693 }, 39.2788 }, + { "Land_Slums02_4m", { 11419.8, 11372.7, 0.00827026 }, 39.284 }, + { "Land_Wreck_Truck_dropside_F", { 11429.9, 11380.5, 0.000671387 }, 0.00762456 }, + { "Land_d_Shop_01_V1_F", { 11453.7, 11350.2, 0.298096 }, 127.575 }, + { "Land_Garbage_square5_F", { 11449.2, 11357.1, 3.05176e-005 }, 0.000244135 }, + { "Land_GarbagePallet_F", { 11452.4, 11353.4, -0.0103455 }, 0.234284 }, + { "Land_PhoneBooth_02_F", { 11459, 11364.1, 3.05176e-005 }, 124.922 }, + { "Land_d_Addon_02_V1_F", { 11436, 11377.1, 3.05176e-005 }, 37.7171 }, + { "Land_i_Stone_HouseSmall_V3_F", { 11464.1, 11229.2, 0 }, 206.45 }, + { "Land_Wired_Fence_8mD_F", { 11480.2, 11247.8, 0.228699 }, 359.571 }, + { "Land_GarbagePallet_F", { 11473.9, 11223.8, -0.0253296 }, 0.234284 }, + { "Land_Wired_Fence_8m_F", { 11476.1, 11253.8, 0.219452 }, 359.549 }, + { "Land_d_Shop_02_V1_F", { 11460.3, 11357.9, 0 }, 215.984 }, + { "Land_Garbage_line_F", { 11464.2, 11351.2, 0.000854492 }, 52.1301 }, + { "Land_WheelieBin_01_F", { 11461.5, 11349.7, 0 }, 0.0691075 }, + { "Land_GarbagePallet_F", { 11463.7, 11363.2, -0.0102539 }, 0.234284 }, + { "Land_GarbageContainer_closed_F", { 11463.6, 11351.2, 3.05176e-005 }, 130.585 }, + { "Land_Timbers_F", { 11469.3, 11389.7, 0.0153503 }, 359.649 }, + { "Land_d_Stone_HouseBig_V1_F", { 11461.3, 11389.2, 0 }, 0 }, + { "Land_GarbagePallet_F", { 11466.6, 11393.2, -0.0388489 }, 0.234284 }, + { "Land_Wreck_Van_F", { 11462.1, 11396.9, -0.0365906 }, 282.773 }, + { "Land_Ancient_Wall_8m_F", { 11535.8, 11265.3, -0.125122 }, 144.692 }, + { "Land_Ancient_Wall_4m_F", { 11556.4, 11279, -0.112091 }, 148.121 }, + { "Land_Ancient_Wall_8m_F", { 11567.8, 11287.4, 0.0343018 }, 144.515 }, + { "Land_HBarrier_5_F", { 11577.4, 11307.8, -0.0361633 }, 324.948 }, + { "Land_HBarrier_5_F", { 11572.7, 11307.1, 0.0201416 }, 21.0099 }, + { "Land_HBarrier_5_F", { 11562.9, 11309.6, 0.0461121 }, 48.0841 }, + { "Land_HBarrier_5_F", { 11567.4, 11307.6, 0.0220337 }, 355.004 }, + { "Land_Cargo_HQ_V3_F", { 11571.9, 11330.1, -0.0317078 }, 268 }, + { "Land_HBarrier_5_F", { 11555.9, 11323.6, 0.0753479 }, 231.934 }, + { "Land_HBarrier_5_F", { 11562.4, 11326.7, -0.125763 }, 49.9669 }, + { "Land_HBarrier_5_F", { 11560.6, 11331.7, -0.0820618 }, 87.9061 }, + { "Land_HBarrier_5_F", { 11564.1, 11322.1, 0.0942078 }, 88.1076 }, + { "Land_HBarrier_5_F", { 11557.4, 11319, -0.0873108 }, 272.274 }, + { "Land_HBarrier_5_F", { 11564.8, 11339.8, 0.0496521 }, 177.031 }, + { "Land_HBarrier_5_F", { 11561.2, 11337.2, -0.0386963 }, 107.942 }, + { "Land_HBarrier_5_F", { 11557.3, 11313.6, -0.120697 }, 271.244 }, + { "Land_HBarrier_5_F", { 11566.1, 11318.1, 0.0227051 }, 36.0297 }, + { "Land_HBarrier_5_F", { 11557.1, 11332, 0.112 }, 177.096 }, + { "Land_HBarrier_3_F", { 11559.8, 11311.4, 0.0235596 }, 180.944 }, + { "Land_PortableLight_double_F", { 11578.2, 11325.2, -0.00167847 }, 357.96 }, + { "Land_PortableLight_double_F", { 11565.8, 11331, 0.00180054 }, 87.9936 }, + { "Land_PortableLight_double_F", { 11579.4, 11336.2, 0.00131226 }, 229.004 }, + { "Land_HBarrier_5_F", { 11570.4, 11340, 0.0419312 }, 176.992 }, + { "Land_HBarrier_5_F", { 11575.8, 11340.3, -0.00686646 }, 176.886 }, + { "Land_Cargo_Patrol_V3_F", { 11598.1, 11309, -0.261566 }, 315 }, + { "Land_HBarrier_5_F", { 11604.1, 11309.6, 0.263916 }, 91.8105 }, + { "Land_HBarrier_5_F", { 11592.5, 11305.2, 0.325073 }, 42.8493 }, + { "Land_HBarrier_5_F", { 11587.8, 11308.1, 0.193237 }, 23.3538 }, + { "Land_HBarrier_5_F", { 11602, 11304.9, -0.0116272 }, 133.822 }, + { "Land_HBarrier_5_F", { 11582.7, 11309.1, -0.0935974 }, 179.212 }, + { "Land_HBarrier_5_F", { 11597.2, 11303.2, 0.501007 }, 1.93882 }, + { "Land_PortableLight_double_F", { 11600.9, 11306.2, 0.0727539 }, 311.827 }, + { "Land_Wreck_HMMWV_F", { 11601.7, 11318.8, 0.0107117 }, 0.254173 }, + { "Land_HBarrier_5_F", { 11580.2, 11338.1, -0.0474548 }, 230.951 }, + { "Land_HBarrier_5_F", { 11604.3, 11315.3, 0.15564 }, 90.3624 }, + { "Land_HBarrier_5_F", { 11605.4, 11320.6, 0.00527954 }, 108.727 }, + { "Land_HBarrier_5_F", { 11605.2, 11325.8, -0.31781 }, 239.194 }, + { "Land_HBarrier_5_F", { 11602.4, 11336.2, -0.191833 }, 230.52 }, + { "Land_HBarrier_5_F", { 11587, 11332.5, 0.0287476 }, 272.043 }, + { "Land_HBarrier_5_F", { 11588, 11327.3, -0.0723877 }, 242.815 }, + { "Land_HBarrier_5_F", { 11604, 11331, 0.0708313 }, 271.184 }, + { "Land_HBarrier_5_F", { 11589.1, 11322.3, -0.0202026 }, 273.918 }, + { "Land_HBarrier_5_F", { 11586.6, 11318.1, 0.0480652 }, 330.046 }, + { "Land_HBarrier_5_F", { 11581.5, 11316.5, 0.0766602 }, 358.179 }, + { "Land_HBarrier_5_F", { 11584.9, 11336.1, -0.142578 }, 180.844 }, + { "Land_Tyres_F", { 11589.7, 11334.3, -0.0446472 }, 202.731 }, + { "Land_ToiletBox_F", { 11585.2, 11333.7, 0.00323486 }, 359.952 }, + { "Land_ToiletBox_F", { 11582.7, 11333.7, 0.00323486 }, 359.965 }, + { "Land_WaterTank_F", { 11584.8, 11322.4, 0.00262451 }, 270.952 }, + { "Land_Pallet_F", { 11599.1, 11334.4, 0.0012207 }, 167.913 }, + { "Land_PaperBox_open_empty_F", { 11593.4, 11312.9, 0.0102844 }, 166.48 }, + { "Land_PaperBox_closed_F", { 11595.3, 11314, 0.0174255 }, 20.1509 }, + { "Land_Pallets_stack_F", { 11599, 11336.3, 0.00747681 }, 107.491 }, + { "Land_BarrelSand_grey_F", { 11582.4, 11318.9, 0.00143433 }, 200.963 }, + { "Land_BarrelEmpty_F", { 11583, 11319.7, 0.00137329 }, 143.048 }, + { "Land_wpp_Turbine_V2_F", { 11630.6, 11256.4, 3.05176e-005 }, 0 }, + { "Land_wpp_Turbine_V2_F", { 11634.6, 11338.9, 0 }, 0 }, + { "Land_wpp_Turbine_V2_F", { 11645.6, 11296.8, 0 }, 0 }, + // North East + {"Land_ClutterCutter_medium_F",{10679.6,9435.62,7.62939e-006},0.0643096}, + {"Land_LampShabby_F",{10673.1,9422,-7.62939e-006},48.6578}, + {"Land_WoodenCart_F",{10677.4,9442.94,-0.0199509},0.1255}, + {"Land_Slums02_4m",{10674.5,9433.75,0.00186157},224.018}, + {"Land_Slums02_4m",{10673.4,9444.57,0.0374298},309.223}, + {"Land_Slums02_4m",{10672.1,9437.09,-0.00406647},244.438}, + {"Land_Slums02_4m",{10676.8,9446.41,0.0543442},0.119723}, + {"Land_Slums02_4m",{10671.6,9441.05,0.0140839},283.663}, + {"Land_Garbage_line_F",{10674,9443.57,0.0653152},217.23}, + {"Land_JunkPile_F",{10679.5,9444.45,0.00154877},359.709}, + {"Land_InvisibleBarrier_F",{10673.7,9444.29,0},131.152}, + {"Land_InvisibleBarrier_F",{10672,9440.85,7.62939e-006},285.049}, + {"Land_InvisibleBarrier_F",{10676.8,9445.61,0},182.439}, + {"Land_InvisibleBarrier_F",{10672.5,9437.2,0},63.0227}, + {"Land_InvisibleBarrier_F",{10674.8,9434.01,0},43.6106}, + {"Land_Campfire_F",{10679.6,9435.56,0.000465393},359.367}, + {"Land_WoodPile_F",{10675.9,9441.61,0.00293732},359.088}, + {"Land_CncBarrier_F",{10677,9430.56,3.8147e-005},38.2729}, + {"Land_Axe_F",{10676.6,9441.46,-0.00322723},73.9678}, + {"Land_HelipadEmpty_F",{10686.6,9418.95,4.57764e-005},0.0323291}, + {"Land_ClutterCutter_large_F",{10686.8,9435.84,-7.62939e-006},359.153}, + {"Land_Garbage_square5_F",{10690.6,9430.02,0.000267029},0.00641501}, + {"Land_Slums02_4m",{10684.4,9427.61,0.00271606},33.3528}, + {"Land_Slums02_4m",{10694.4,9429.21,0.0391235},116.206}, + {"Land_Slums02_4m",{10690.7,9442.29,0.0845108},48.305}, + {"Land_Slums02_4m",{10694.1,9436.97,0.0754395},67.0969}, + {"Land_Slums02_4m",{10695.1,9433.24,0.0348969},86.0347}, + {"Land_Slums02_4m",{10687.4,9444.58,0.0864868},22.401}, + {"Land_Slums02_4m",{10687.7,9426.84,0.00393677},356.182}, + {"Land_Slums02_4m",{10680.9,9446.4,0.0634003},1.21943}, + {"Land_Slums02_4m",{10681,9429.68,0.00272369},33.3528}, + {"Land_Slums02_4m",{10691.6,9426.76,-0.00839233},160.21}, + {"Land_TentDome_F",{10687.7,9442.09,-0.0244064},290.361}, + {"Land_InvisibleBarrier_F",{10680.9,9445.82,0},182.266}, + {"Land_InvisibleBarrier_F",{10684.1,9427.22,0},33.8221}, + {"Land_InvisibleBarrier_F",{10680.8,9429.46,0},33.8225}, + {"Land_InvisibleBarrier_F",{10690.3,9441.82,0},227.277}, + {"Land_InvisibleBarrier_F",{10694.5,9433.07,0},268.195}, + {"Land_InvisibleBarrier_F",{10687,9444.06,7.62939e-006},196.736}, + {"Land_InvisibleBarrier_F",{10687.7,9426.38,0},351.992}, + {"Land_InvisibleBarrier_F",{10691.6,9427.21,-7.62939e-006},334.964}, + {"Land_InvisibleBarrier_F",{10693.8,9436.79,0},248.547}, + {"Land_InvisibleBarrier_F",{10687.7,9426.38,0},352.452}, + {"Land_InvisibleBarrier_F",{10693.9,9429.35,0},297.599}, + {"Land_WorkStand_F",{10689.6,9431.71,0.00012207},0.4623}, + {"Land_FieldToilet_F",{10700.1,9449.24,0.0270386},229.999}, + {"Land_PortableLight_double_F",{10688.4,9426.99,-7.62939e-006},152.941}, + {"Land_Cages_F",{10691,9428.64,9.91821e-005},359.15}, + {"Land_WoodenTable_large_F",{10685.9,9434.16,0.000358582},143.934}, + {"Land_Pallets_stack_F",{10692.5,9430.88,0.0114899},359.393}, + {"Land_WheelCart_F",{10683.8,9441.73,0.0119476},181.87}, + {"Land_ShelvesWooden_khaki_F",{10685.5,9440.39,0.0146866},238.174}, + {"Land_CampingChair_V1_F",{10683.2,9430.95,0.00310516},0.668239}, + {"Land_CratesPlastic_F",{10699.1,9449.65,0.00570679},110.237}, + {"Land_BarrelWater_F",{10684.7,9440.29,0.0127869},2.49711}, + {"Land_Slums02_pole",{10682.8,9445.84,0.00499725},0.672715}, + {"Land_Slums02_pole",{10691.6,9440.46,0.00566864},321.615}, + {"Land_GasTank_01_khaki_F",{10690.6,9431.43,0.00012207},200.712}, + // South East + { "Land_spp_Mirror_F", { 12021.8, 5100.76, -7.62939e-006 }, 182.521 }, + { "Land_spp_Mirror_Broken_F", { 12031.5, 5104.48, 0 }, 182.521 }, + { "Land_Slums01_8m", { 12050.9, 5109.1, -0.00202179 }, 359.933 }, + { "Land_Slums01_8m", { 12051, 5121.93, 0.0187302 }, 118.143 }, + { "Land_Slums01_8m", { 12054.5, 5128.94, 0.0217743 }, 118.269 }, + { "Land_WoodPile_large_F", { 12057.6, 5121.48, -9.15527e-005 }, 21.8792 }, + { "Land_WoodPile_large_F", { 12057.1, 5119.12, 9.91821e-005 }, 203.739 }, + { "Land_WoodPile_large_F", { 12058.9, 5123.89, -0.00171661 }, 197.098 }, + { "Land_WoodPile_large_F", { 12055.8, 5119.65, -9.15527e-005 }, 16.6504 }, + { "Land_Garbage_square3_F", { 12058.5, 5119.32, -0.000190735 }, 200.54 }, + { "Land_Cages_F", { 12051, 5119.59, 0.00479126 }, 22.0683 }, + { "Land_HelipadEmpty_F", { 12058.1, 5100.99, 0 }, 359.533 }, + { "Land_cargo_addon02_V2_F", { 12075.8, 5110.74, 0 }, 313.277 }, + { "Land_Slums01_8m", { 12067.6, 5108.54, -0.00462341 }, 194.501 }, + { "Land_Slums01_8m", { 12067, 5122.79, -0.00128937 }, 106.496 }, + { "Land_Slums01_8m", { 12078.5, 5109.96, -0.00531769 }, 302.472 }, + { "Land_Slums01_8m", { 12080.8, 5125.66, -0.0038147 }, 62.4229 }, + { "Land_Slums01_8m", { 12071.9, 5107.49, -0.00380707 }, 194.501 }, + { "Land_Wreck_Offroad_F", { 12074.4, 5127.79, 0.0411682 }, 325.773 }, + { "Land_LampShabby_F", { 12070.6, 5109.13, -0.0195618 }, 0 }, + { "Land_Wreck_Car3_F", { 12078.6, 5126.01, 0.0244293 }, 146.6 }, + { "Land_TentDome_F", { 12076.8, 5111.69, 3.8147e-005 }, 359.62 }, + { "Land_Garbage_line_F", { 12078, 5124.46, -0.0770569 }, 142.344 }, + { "Land_JunkPile_F", { 12073.8, 5125.85, -0.0101395 }, 359.544 }, + { "Land_InvisibleBarrier_F", { 12065.4, 5108.95, 0 }, 16.7308 }, + { "Land_InvisibleBarrier_F", { 12074.6, 5106.78, 0 }, 19.2329 }, + { "Land_InvisibleBarrier_F", { 12081.8, 5123.84, 0 }, 243.383 }, + { "Land_InvisibleBarrier_F", { 12070.3, 5107.81, 0 }, 16.7344 }, + { "Land_InvisibleBarrier_F", { 12079.7, 5111.63, 0 }, 122.723 }, + { "Land_InvisibleBarrier_F", { 12080.1, 5127.47, 0 }, 239.065 }, + { "Land_InvisibleBarrier_F", { 12077.2, 5107.93, 0 }, 122.631 }, + { "Land_InvisibleBarrier_F", { 12069.1, 5128.14, 0 }, 122.279 }, + { "Land_InvisibleBarrier_F", { 12067.6, 5124.65, 0 }, 112.368 }, + { "Land_InvisibleBarrier_F", { 12066.5, 5120.62, 0 }, 104.748 }, + { "Land_Campfire_F", { 12070.3, 5113.58, 0.00119019 }, 0 }, + { "Land_WoodPile_F", { 12073, 5117.34, -0.00229645 }, 236.097 }, + { "Land_CncBarrier_F", { 12065.4, 5116.71, 0 }, 103.32 }, + { "Land_CncBarrier_stripes_F", { 12082.8, 5121.11, 0.0150528 }, 90.5238 }, + { "Land_CncBarrier_stripes_F", { 12082.3, 5117.84, 0.0185394 }, 104.536 }, + { "Land_CncBarrier_stripes_F", { 12064.5, 5112.14, 0.0020752 }, 279.748 }, + { "Land_CncBarrier_stripes_F", { 12081.2, 5114.26, 0.0116425 }, 300.824 }, + { "Land_WheelCart_F", { 12073, 5108.21, 0.00278473 }, 301.42 }, + { "Land_Slums01_pole", { 12068.4, 5126.9, 0.000801086 }, 260.084 }, + { "Land_Portable_generator_F", { 12069.8, 5108.61, 0.00123596 }, 359.87 }, + { "Land_CampingChair_V2_F", { 12076.1, 5109.27, 0.00286865 }, 99.2684 }, + { "Land_CratesPlastic_F", { 12072.4, 5118.94, 3.05176e-005 }, 359.993 }, + { "Land_BarrelWater_F", { 12073.1, 5110.06, 0.00231171 }, 359.255 }, + { "Land_Axe_fire_F", { 12077.1, 5109.95, -0.00322723 }, 359.907 }, + { "Land_Slums01_8m", { 12070.5, 5130.62, 0.0177002 }, 300.964 }, + { "Land_Slums01_8m", { 12075.7, 5131.46, 0.00196838 }, 40.0636 }, + { "Land_Slums01_8m", { 12060.6, 5133.4, 0.000160217 }, 168.792 }, + { "Land_LampShabby_F", { 12063, 5131.89, 0 }, 169.228 }, + { "Land_InvisibleBarrier_F", { 12073.8, 5133.13, -7.62939e-006 }, 221.588 }, + { "Land_InvisibleBarrier_F", { 12071.2, 5131.82, 0 }, 122.469 }, + { "Land_InvisibleBarrier_F", { 12077.1, 5130.37, 0 }, 221.588 }, + { "Land_Slums01_pole", { 12072.6, 5134.17, 0.00662994 }, 359.468 }, + { "Land_Slums01_pole", { 12064.7, 5134.13, 0.0012207 }, 359.827 }, + { "Land_Garbage_square5_F", { 12093.4, 5120.34, 0.00907135 }, 359.692 }, + { "Land_FieldToilet_F", { 12093.7, 5119.73, 0.0153198 }, 155.607 }, + { "Land_Grave_rocks_F", { 12116.8, 5130.7, 0 }, 0 }, + // South West + { "Flag_US_F", { 4542.15, 4522, -1.52588e-005 }, 209.275 }, + { "Land_HelipadEmpty_F", { 4552.98, 4515.85, 0 }, 0 }, + { "Land_ToiletBox_F", { 4556.27, 4549.86, 0.175018 }, 0.00193372 }, + { "Land_Timbers_F", { 4564.65, 4516.04, 0.199997 }, 325.751 }, + { "Land_Wreck_Van_F", { 4573.34, 4506.86, 0.199997 }, 151.285 }, + { "Land_Garbage_square5_F", { 4588.59, 4516.25, 0.199997 }, 0 }, + { "Land_LampStreet_small_F", { 4577.73, 4514.35, 0.199997 }, 239.902 }, + { "Land_Pipes_large_F", { 4581.84, 4521.72, 0.174988 }, 146.546 }, + { "Land_Pallets_F", { 4586.84, 4514.64, 0.275681 }, 335.695 }, + { "Land_EngineCrane_01_F", { 4581.71, 4510.71, 0.174988 }, 95.9295 }, + { "Land_GarbageContainer_open_F", { 4582.15, 4523.48, 0.175003 }, 151.569 }, + { "Land_Workbench_01_F", { 4585.25, 4521.76, 0.174988 }, 50.0718 }, + { "Barrels", { 4589.08, 4516.4, 0.225494 }, 239.1 }, + { "SignAd_SponsorS_Redstone_F", { 4585.1, 4511.84, 0 }, 142.53 }, + { "Land_WoodenTable_large_F", { 4579.26, 4513.71, 0.175003 }, 142.285 }, + { "Land_Sink_F", { 4573.95, 4519.14, 0.175003 }, 51.2154 }, + { "Land_CncBarrier_stripes_F", { 4578.63, 4513.11, 0.199997 }, 231.189 }, + { "Land_CncBarrier_stripes_F", { 4577.53, 4518.75, 0.199997 }, 325.531 }, + { "Land_CncBarrier_stripes_F", { 4576.61, 4515.73, 0.199997 }, 231.189 }, + { "Land_WoodenTable_small_F", { 4578.02, 4515.24, 0.174988 }, 319.098 }, + { "Land_WeldingTrolley_01_F", { 4585.96, 4513.3, 0.174988 }, 236.669 }, + { "Land_Bench_F", { 4573.12, 4520.15, 0.175003 }, 232.492 }, + { "Land_ToolTrolley_01_F", { 4586.23, 4520.34, 0.175018 }, 228.625 }, + { "Land_ToolTrolley_02_F", { 4587.01, 4519.39, 0.174973 }, 320.682 }, + { "Land_PlasticCase_01_large_F", { 4588.17, 4518.07, 0.174988 }, 321.256 }, + { "Land_WheelieBin_01_F", { 4581.21, 4522.58, 0.175003 }, 139.325 }, + { "Land_WaterCooler_01_old_F", { 4575.21, 4518.16, 0.175064 }, 226.8 }, + { "Land_ChairWood_F", { 4583.23, 4521.15, 0.175018 }, 270.935 }, + { "Land_BarrelWater_F", { 4574.63, 4517.66, 0.175049 }, 354.242 }, + { "Land_PlasticCase_01_medium_F", { 4579.23, 4513.68, 0.175003 }, 120.138 }, + { "Land_Tyre_F", { 4576.11, 4505.51, 0.0297241 }, 358.563 }, + { "Land_GasTank_01_blue_F", { 4588.49, 4515.58, 0.175034 }, 327.133 }, + { "Land_GasTank_01_yellow_F", { 4588.23, 4515.09, 0.175034 }, 247.551 }, + { "Land_PlasticCase_01_small_F", { 4578.02, 4515.24, 0.174988 }, 137.793 }, + { "Land_SurvivalRadio_F", { 4586.07, 4521.12, 0.941803 }, 269.968 }, + { "Fridge_01_closed_F", { 4576.98, 4516.48, 0.175064 }, 238.777 }, + // Boat Vendor + { "Land_WorkStand_F", { 13678.8, 4032.35, -0.00124931 }, 359.908 }, + { "Land_WheelCart_F", { 13671.7, 4037.31, 0.00549078 }, 0.0201131 }, + { "Land_TentDome_F", { 13661.6, 4027.37, -0.014101 }, 359.452 }, + { "Land_Pier_Box_F", { 13696.5, 4033.33, 0.599987 }, 0 }, + { "Land_Campfire_F", { 13681.2, 4035.13, 0.00247145 }, 0.1179 }, + { "Land_Wreck_Traw_F", { 13710.9, 3862.6, 0.242525 }, 0.611813 }, + { "Land_WavePowerPlant_F", { 13878.7, 3932.25, 9.53635 }, 345.483 }, + // Stary Sobor Military + { "Land_HBarrierBig_F", { 6296.66, 7795.88, -0.00692749 }, 219.542 }, + { "Land_HBarrier_5_F", { 6290.16, 7793.43, 0.0203857 }, 218.553 }, + { "Land_HBarrier_5_F", { 6297.02, 7790.79, 0.110291 }, 130.462 }, + { "Land_HBarrier_5_F", { 6285.72, 7796.98, 0.0177002 }, 219.491 }, + { "Land_PaperBox_closed_F", { 6292.73, 7799.57, -0.00213623 }, 221.545 }, + { "Land_WaterTank_F", { 6299.27, 7797.89, 0.00109863 }, 219.43 }, + { "Land_HBarrierBig_F", { 6272.08, 7813.91, 0.00427246 }, 193.847 }, + { "Land_HBarrierBig_F", { 6297.31, 7802.14, -0.00527954 }, 307.543 }, + { "Land_HBarrierBig_F", { 6276.2, 7808.03, 0.000549316 }, 83.8871 }, + { "Land_HBarrierBig_F", { 6280.2, 7801.39, -0.00228882 }, 37.4585 }, + { "Land_HBarrier_5_F", { 6288.43, 7824.38, 0.00488281 }, 217.5 }, + { "Land_HBarrier_5_F", { 6293.44, 7822.44, -0.00402832 }, 175.45 }, + { "Land_PortableLight_double_F", { 6278.42, 7808.37, 0 }, 261.498 }, + { "Land_Pallets_stack_F", { 6291.09, 7800.92, 0.000518799 }, 203.664 }, + { "Land_HBarrierBig_F", { 6293.92, 7846.05, -0.000823975 }, 37.5492 }, + { "Land_HBarrier_5_F", { 6288.87, 7844.77, 0.0146179 }, 125.61 }, + { "Land_HBarrier_5_F", { 6287.4, 7836.51, 0.00183105 }, 36.5104 }, + { "Land_HBarrier_5_F", { 6285.68, 7840.26, 0.00210571 }, 125.565 }, + { "Land_PortableLight_double_F", { 6288.7, 7841.98, 0 }, 125.471 }, + { "Land_Cargo_Patrol_V1_F", { 6291.25, 7840.74, 0 }, 125.498 }, + { "Land_BagBunker_Large_F", { 6284.77, 7830.87, 0.000396729 }, 125.544 }, + { "Land_Cargo_Patrol_V1_F", { 6315.33, 7798.51, 0 }, 306.498 }, + { "Land_HBarrierBig_F", { 6304.61, 7794.26, -0.00469971 }, 164.31 }, + { "Land_HBarrierBig_F", { 6312.32, 7793.03, -0.00683594 }, 219.624 }, + { "Land_HBarrier_5_F", { 6317.45, 7794.16, 0.0157166 }, 307.501 }, + { "Land_HBarrier_5_F", { 6320.83, 7798.61, 0.0254822 }, 307.457 }, + { "Land_PortableLight_double_F", { 6317.92, 7796.97, 0 }, 307.493 }, + { "Land_PortableLight_double_F", { 6309.06, 7797.2, 0 }, 188.5 }, + { "Land_ToiletBox_F", { 6314.53, 7793.88, 0.000274658 }, 132.45 }, + { "Land_BagBunker_Large_F", { 6326.43, 7813.56, -0.000640869 }, 307.499 }, + { "Land_HBarrier_5_F", { 6319.26, 7802.51, -0.00213623 }, 219.502 }, + { "Land_HBarrier_5_F", { 6318.51, 7814.62, -0.00192261 }, 219.497 }, + { "Land_HBarrier_5_F", { 6329.87, 7820.18, 0.0175171 }, 299.066 }, + { "Land_HBarrier_5_F", { 6301.78, 7807.92, -0.00479126 }, 307.524 }, + { "Land_HBarrier_5_F", { 6313.51, 7816.39, -0.000457764 }, 171.499 }, + { "Land_TentA_F", { 6325.46, 7824.22, 9.15527e-005 }, 94.5132 }, + { "Land_TentA_F", { 6323.97, 7829.37, 0.00863647 }, 82.3408 }, + { "Land_Campfire_F", { 6317.24, 7829.11, -0.0592346 }, 26.001 }, + { "Land_WoodPile_F", { 6312.93, 7826.2, 0.00164795 }, 1.00009 }, + { "Land_WaterBarrel_F", { 6304.27, 7808.83, -3.05176e-005 }, 136.44 }, + { "Land_Sack_F", { 6326, 7822.95, 0.010437 }, 353.513 }, + { "Land_Basket_F", { 6325.17, 7822.36, 9.15527e-005 }, 137.301 }, + { "Land_MetalBarrel_F", { 6305.22, 7808.31, 0 }, 244.342 }, + { "Land_BarrelTrash_grey_F", { 6305.45, 7807.6, 0.000549316 }, 313.436 }, + { "Land_BarrelEmpty_grey_F", { 6304.88, 7807.12, 0 }, 307.487 }, + { "Land_WoodenLog_F", { 6317.17, 7827.17, 0.000335693 }, 77.1906 }, + { "Land_Axe_F", { 6313.81, 7826.37, -0.00338745 }, 248.999 }, + { "Land_CanisterFuel_F", { 6313.75, 7825.28, 6.10352e-005 }, 34.3382 }, + { "Land_Canteen_F", { 6323.97, 7823.34, 9.15527e-005 }, 347.753 }, + { "Land_TinContainer_F", { 6317.53, 7827.55, 0.00189209 }, 235.145 }, + { "Land_Camping_Light_F", { 6317.18, 7827.1, 0.481659 }, 78.9907 }, + { "Land_HBarrierBig_F", { 6325.11, 7838.57, 0.00241089 }, 219.523 }, + { "Land_HBarrierBig_F", { 6301.64, 7845.13, -0.00299072 }, 342.464 }, + { "Land_HBarrierBig_F", { 6309.64, 7843.89, -0.00140381 }, 37.508 }, + { "Land_HBarrierBig_F", { 6317.6, 7841.65, 0.00088501 }, 187.754 }, + { "Land_HBarrierBig_F", { 6309.25, 7837.67, 0.0010376 }, 125.494 }, + { "Land_HBarrierBig_F", { 6328.96, 7831.3, 0.000183105 }, 265.544 }, + { "Land_HBarrier_5_F", { 6305.08, 7831.75, 0.013855 }, 306.499 }, + { "Land_TentA_F", { 6323.29, 7833.88, -3.05176e-005 }, 56.9963 }, + { "Land_ToiletBox_F", { 6306.66, 7840.59, 0.000305176 }, 37.4933 }, + { "Land_Pallets_F", { 6305.09, 7836.28, 0.00402832 }, 301.498 }, + { "Land_WoodenBox_F", { 6315.52, 7830.8, 0.000152588 }, 135.939 }, + { "Land_HBarrierBig_F", { 6355.05, 7758.61, 0.01651 }, 180.899 }, + { "Land_HBarrier_3_F", { 6341.05, 7763.39, -0.024231 }, 230.09 }, + { "Land_PaperBox_closed_F", { 6355.89, 7769.34, 0.000213623 }, 300.988 }, + { "Land_HBarrierBig_F", { 6356.52, 7790.86, -0.0449524 }, 90.0002 }, + { "Land_HBarrierBig_F", { 6334.66, 7777.03, 0.000701904 }, 260.011 }, + { "Land_HBarrierBig_F", { 6356.92, 7782.55, -0.0672607 }, 89.0069 }, + { "Land_HBarrier_5_F", { 6358.21, 7796.04, -0.00231934 }, 178 }, + { "Land_HBarrier_5_F", { 6359.02, 7777.34, -0.0152588 }, 177.997 }, + { "Land_HBarrier_3_F", { 6345.2, 7793.81, 0.00137329 }, 299 }, + { "Land_HBarrier_3_F", { 6349.54, 7771.55, -0.00192261 }, 230.001 }, + { "Land_HBarrier_3_F", { 6332.6, 7798.95, 0.00323486 }, 299 }, + { "Land_PaperBox_closed_F", { 6357.05, 7771.16, 0 }, 270 }, + { "Land_Pallets_stack_F", { 6348.26, 7791.23, 3.05176e-005 }, 225.003 }, + { "Land_Pallets_stack_F", { 6348.28, 7788.84, 0.00216675 }, 263.003 }, + { "Land_HBarrierBig_F", { 6350.34, 7814.14, -0.000396729 }, 134.998 }, + { "Land_Razorwire_F", { 6352.86, 7822.44, 0.000793457 }, 196.803 }, + { "Land_HBarrier_5_F", { 6330.96, 7824.57, -0.0115967 }, 68.0471 }, + { "Land_HBarrierBig_F", { 6375.54, 7759.76, 0.0117493 }, 178.122 }, + { "Land_HBarrier_3_F", { 6386.83, 7765.76, 0.0414429 }, 128.913 }, + { "Land_Cargo_Tower_V1_F", { 6364.71, 7786.91, 0.00137329 }, 269 }, + { "Land_HBarrierBig_F", { 6371.91, 7791.33, -0.0449524 }, 90 }, + { "Land_HBarrierBig_F", { 6372.13, 7782.9, -0.0224304 }, 90.0001 }, + { "Land_HBarrier_5_F", { 6370.43, 7777.76, -0.0215149 }, 177.996 }, + { "Land_HBarrier_5_F", { 6369.94, 7796.64, -0.00372314 }, 179 }, + { "Land_HBarrier_3_F", { 6380.18, 7795.26, 0.00366211 }, 244.001 }, + { "Land_HBarrier_3_F", { 6378.41, 7772.92, -0.0100403 }, 129 }, + { "Land_ToiletBox_F", { 6360.83, 7789.36, -3.05176e-005 }, 269.005 }, + { "Land_WaterTank_F", { 6375.86, 7785.65, 0.00012207 }, 0.000633659 }, + { "Land_WaterTank_F", { 6375.74, 7788.49, 0.000183105 }, 0.000302211 }, + { "Land_PortableLight_double_F", { 6360.99, 7782.88, 8.57773 }, 88.0059 }, + { "Land_PortableLight_double_F", { 6363.69, 7791.14, 4.66943 }, 272 }, + { "Land_HBarrierBig_F", { 6375.25, 7815.47, 0.00146484 }, 226.006 }, + { "Land_Razorwire_F", { 6361.44, 7821.18, -0.0170898 }, 353.994 }, + { "Land_HBarrier_3_F", { 6363.49, 7807.3, 0.00195313 }, 357.999 }, + { "Land_HBarrierBig_F", { 6390.12, 7781.39, -0.000366211 }, 275 }, + { "Land_HBarrier_3_F", { 6391.39, 7801.7, 0.00195313 }, 244 }, + // NW Airfield + { "Land_Airport_Tower_F", { 4327.37, 10905.9, 0 }, 61.1295 }, + { "Land_Offices_01_V1_F", { 4573.46, 9819.88, 0 }, 244.926 }, + { "Land_i_Barracks_V2_F", { 4598.97, 9720.41, 0 }, 100.719 }, + // Wind Farm + {"Land_wpp_Turbine_V2_F", { 5449.11, 13270.3, -0.00350952 }, 0 }, + {"Land_wpp_Turbine_V2_F", { 5477.64, 13280.7, 3.05176e-005 }, 0 }, + {"Land_spp_Transformer_F", { 5478.29, 13300.4, 0 }, 0}, + {"Land_dp_transformer_F", { 5482.13, 13300.9, -3.05176e-005 }, 0 }, + {"Land_wpp_Turbine_V2_F", { 5503.9, 13291.3, 0.0585327 }, 0 }, + // Old Hero small military post. + { "Land_HBarrier_5_F", { 12899.8, 12748.4, 0.02034 }, 354.796 }, + { "Land_HBarrier_5_F", { 12894.1, 12748, 0.013916 }, 354.737 }, + { "Land_Cargo_Patrol_V2_F", { 12897.5, 12750.2, 0 }, 85.8348 }, + { "Land_HBarrier_5_F", { 12898.8, 12763.6, 0.00309753 }, 354.799 }, + { "Land_HBarrier_5_F", { 12891.9, 12751.4, 0.132568 }, 85.9089 }, + { "Land_HBarrier_5_F", { 12893.1, 12763.1, 0.0252838 }, 354.791 }, + { "Land_Garbage_square5_F", { 12898.5, 12754.1, 0.403336 }, 356.786 }, + { "Land_HBarrier_3_F", { 12894.2, 12753.5, -0.00849915 }, 176.727 }, + { "Land_Sign_WarningMilitaryArea_F", { 12878.3, 12753.7, 0 }, 86.9098 }, + { "Land_Cargo_HQ_V2_F", { 12921.2, 12747.4, 1.52588e-005 }, 354.835 }, + { "Land_HBarrier_5_F", { 12906.8, 12739.5, 0.185944 }, 32.8205 }, + { "Land_HBarrier_5_F", { 12928.2, 12739.4, -0.0260773 }, 353.715 }, + { "Land_HBarrier_5_F", { 12922.9, 12739.1, -0.00527954 }, 353.753 }, + { "Land_HBarrier_5_F", { 12917.2, 12738.6, -0.00486755 }, 353.757 }, + { "Land_HBarrier_5_F", { 12912.2, 12738.2, -0.0137329 }, 353.744 }, + { "Land_HBarrier_5_F", { 12901.8, 12744.8, 0.200394 }, 86.3687 }, + { "Land_Garbage_square5_F", { 12909.3, 12746, 1.08038 }, 303.574 }, + { "Land_HBarrier_3_F", { 12903.3, 12741.9, -0.0743713 }, 214.774 }, + { "Land_Cargo_Patrol_V2_F", { 12924.7, 12773.8, 0 }, 210.835 }, + { "Land_ScrapHeap_2_F", { 12915.2, 12759.6, 0.0301971 }, 169.814 }, + { "Land_Loudspeakers_F", { 12915.6, 12750.6, 0 }, 356.835 }, + { "Land_ScrapHeap_1_F", { 12921.4, 12760.3, 0.0139313 }, 349.801 }, + { "Land_HBarrier_5_F", { 12921.6, 12756, -0.0275116 }, 353.819 }, + { "Land_HBarrier_5_F", { 12929.5, 12770.1, 0.118179 }, 84.8375 }, + { "Land_HBarrier_5_F", { 12929.9, 12764.5, 0.142838 }, 84.8577 }, + { "Land_HBarrier_5_F", { 12918.7, 12776.7, -0.0367279 }, 353.82 }, + { "Land_HBarrier_5_F", { 12913.2, 12776.2, -0.0335236 }, 353.831 }, + { "Land_HBarrier_5_F", { 12919.8, 12776.8, -0.0367126 }, 353.82 }, + { "Land_HBarrier_5_F", { 12916, 12755.5, -0.0212097 }, 353.818 }, + { "Land_HBarrier_5_F", { 12927.1, 12773.9, 0.00674438 }, 30.819 }, + { "Land_HBarrier_5_F", { 12927.1, 12756.5, -0.0491486 }, 353.797 }, + { "Land_HBarrier_5_F", { 12900.6, 12767.1, 0.0879211 }, 86.4439 }, + { "Land_HBarrier_5_F", { 12903.9, 12773.6, -0.0444031 }, 307.87 }, + { "Land_HBarrier_5_F", { 12901.7, 12752, 0.132278 }, 86.4207 }, + { "Land_HBarrier_5_F", { 12907.7, 12775.7, -0.0238953 }, 353.847 }, + { "Land_HBarrier_5_F", { 12905.2, 12754.4, 0.00515747 }, 354.814 }, + { "Land_GarbageBags_F", { 12904.7, 12751, -0.0263214 }, 26.6415 }, + { "Land_Garbage_square5_F", { 12917.5, 12761.8, 0.00386047 }, 19.7988 }, + { "Land_HBarrier_3_F", { 12901.2, 12770.2, 0.0333557 }, 130.704 }, + { "Land_HBarrier_3_F", { 12923.5, 12776.2, -0.00253296 }, 212.829 }, + { "Land_JunkPile_F", { 12907.2, 12769.1, 0.00367737 }, 354.816 }, + { "Land_Pallets_stack_F", { 12909, 12767.7, 0.000915527 }, 128.791 }, + { "Land_CratesShabby_F", { 12910.4, 12768, 0.0017395 }, 245.684 }, + { "Land_GarbageBarrel_01_F", { 12914.8, 12763.5, -0.00370789 }, 182.87 }, + { "Land_HBarrier_5_F", { 12931.5, 12742.2, -0.338425 }, 264.829 }, + { "Land_HBarrier_5_F", { 12931.2, 12747.7, -0.208801 }, 264.774 }, + { "Land_HBarrier_5_F", { 12930.4, 12758.9, 0.141861 }, 84.8576 }, + { "Land_HBarrier_5_F", { 12930.8, 12753.3, -0.150925 }, 264.812 } + }; + staticNpcPos[] = { + // South West + { "C_man_hunter_1_F", { 4585.05, 4516.51, 0.201431 }, 273.197 }, + // South East + { "C_man_hunter_1_F", { 12075.5, 5109.38, 0.00123596 }, 313.34}, + // North East + { "C_man_hunter_1_F", { 10686.8,9437.87,0.00151825 }, 231.976}, + //Boat Trader + { "C_man_hunter_1_F", { 13694, 4033.22, 0.0021317 }, 93.5839 } + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/chernarus_summer.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/chernarus_summer.h new file mode 100644 index 0000000..5c7d831 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/chernarus_summer.h @@ -0,0 +1,496 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Uro1, Robio + + Description: + Epoch gamemode server Side map specific configs for chernarus. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/chernarus.h +*/ +class Chernarus_Summer : Default +{ + worldSize = 12000; + plantLimit = 10; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", { 4569.52, 4524.24, 0.201431 } }, // South West + { "TP_Booth_e_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", { 12077.8, 5121.92, 0.00144958 } }, // South East + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", { 10688.6, 9428.98, 0.00144958 } } // North East + }; + propsPos[] = { + // phones + { "Land_PhoneBooth_02_F", { 10455.2, 2214.84, 0 }, 52.4502 }, + { "Land_PhoneBooth_02_F", { 10480, 2350.02, 0.101999 }, 326.023 }, + { "Land_PhoneBooth_02_F", { 10479.1, 2349.45, 0.101999 }, 326.023 }, + { "Land_PhoneBooth_02_F", { 6809.42, 2703.85, 0.101999 }, 131.438 }, + { "Land_PhoneBooth_02_F", { 6795.85, 2484.88, 0 }, 312.46 }, + { "Land_PhoneBooth_02_F", { 6738.58, 2393.89, 0 }, 221.25 }, + { "Land_PhoneBooth_02_F", { 6409.57, 2439.88, 0.0883212 }, 46.4278 }, + { "Land_PhoneBooth_02_F", { 7496.04, 5126.04, -0.000732422 }, 182.17 }, + { "Land_PhoneBooth_02_F", { 10132.1, 5471.31, 1.52588e-005 }, 46.4049 }, + { "Land_TouristShelter_01_F", { 11285.3, 5492.9, 1.52588e-005 }, 160.867 }, + { "Land_PhoneBooth_02_F", { 11282.8, 5491.04, 0 }, 162.031 }, + { "Land_PhoneBooth_02_F", { 13359.8, 6170.49, 0 }, 176.672 }, + { "Land_PhoneBooth_02_F", { 12102.1, 7283.6, 0 }, 96.4346 }, + { "Land_PhoneBooth_02_F", { 10654.9, 8013.35, 0.102005 }, 303.161 }, + { "Land_PhoneBooth_02_F", { 12022.4, 9151.21, 0 }, 47.4504 }, + { "Land_PhoneBooth_02_F", { 12023.3, 9150.26, 0 }, 45.6474 }, + { "Land_PhoneBooth_02_F", { 12265.6, 9479.49, 1.18411 }, 141.691 }, + { "Land_PhoneBooth_02_F", { 6017.95, 7821.39, -0.00500488 }, 223.037 }, + { "Land_PhoneBooth_02_F", { 6227.46, 7721.33, 0 }, 36.2285 }, + { "Land_TouristShelter_01_F", { 1969.65, 7361.86, 0 }, 35.9378 }, + { "Land_PhoneBooth_02_F", { 1971.84, 7359.15, -1.52588e-005 }, 127.545 }, + { "Land_PhoneBooth_02_F", { 8785.43, 11618.8, 0 }, 100.044 }, + { "Land_PhoneBooth_02_F", { 11242.2, 12209.9, 0 }, 118.072 }, + { "Land_PhoneBooth_02_F", { 2706.84, 10002.9, 0 }, 12.6221 }, + // City Klen + { "Land_MarketShelter_F", { 11396.6, 11368.6, -0.0245056 }, 216.043 }, + { "Land_i_Stone_Shed_V1_F", { 11392.3, 11388.6, 0 }, 216.9 }, + { "Land_Wreck_Offroad2_F", { 11398.5, 11382.7, -0.00628662 }, 181.726 }, + { "Land_Slums01_8m", { 11383.6, 11393.7, 0.00790405 }, 300.102 }, + { "Land_Slums01_8m", { 11379.6, 11386.9, -0.00378418 }, 300.014 }, + { "Land_GarbageBags_F", { 11394.1, 11382.3, 0.00491333 }, 0.000760495 }, + { "Land_CratesPlastic_F", { 11398.8, 11372.4, -0.000823975 }, 359.71 }, + { "Land_BarrelWater_F", { 11390, 11370.7, 0.000457764 }, 359.997 }, + { "Land_Chapel_V2_F", { 11429, 11352.8, 0.258972 }, 126.48 }, + { "Land_u_House_Big_02_V1_F", { 11417.7, 11362.8, 0 }, 36.7593 }, + { "Land_Cages_F", { 11401.1, 11369.3, 0.00457764 }, 76.3813 }, + { "Land_GarbagePallet_F", { 11426.1, 11367.2, 0.00119019 }, 0.234284 }, + { "Land_i_Stone_HouseBig_V3_F", { 11405.1, 11375.6, 0 }, 129.339 }, + { "Land_Slums02_4m", { 11414.1, 11377.4, 0.0258484 }, 39.2923 }, + { "Land_Slums02_4m", { 11417, 11375.1, 0.00820923 }, 39.284 }, + { "Land_Slums02_4m", { 11407.2, 11383.1, 0.00335693 }, 39.2788 }, + { "Land_Slums02_4m", { 11419.8, 11372.7, 0.00827026 }, 39.284 }, + { "Land_Wreck_Truck_dropside_F", { 11429.9, 11380.5, 0.000671387 }, 0.00762456 }, + { "Land_d_Shop_01_V1_F", { 11453.7, 11350.2, 0.298096 }, 127.575 }, + { "Land_Garbage_square5_F", { 11449.2, 11357.1, 3.05176e-005 }, 0.000244135 }, + { "Land_GarbagePallet_F", { 11452.4, 11353.4, -0.0103455 }, 0.234284 }, + { "Land_PhoneBooth_02_F", { 11459, 11364.1, 3.05176e-005 }, 124.922 }, + { "Land_d_Addon_02_V1_F", { 11436, 11377.1, 3.05176e-005 }, 37.7171 }, + { "Land_i_Stone_HouseSmall_V3_F", { 11464.1, 11229.2, 0 }, 206.45 }, + { "Land_Wired_Fence_8mD_F", { 11480.2, 11247.8, 0.228699 }, 359.571 }, + { "Land_GarbagePallet_F", { 11473.9, 11223.8, -0.0253296 }, 0.234284 }, + { "Land_Wired_Fence_8m_F", { 11476.1, 11253.8, 0.219452 }, 359.549 }, + { "Land_d_Shop_02_V1_F", { 11460.3, 11357.9, 0 }, 215.984 }, + { "Land_Garbage_line_F", { 11464.2, 11351.2, 0.000854492 }, 52.1301 }, + { "Land_WheelieBin_01_F", { 11461.5, 11349.7, 0 }, 0.0691075 }, + { "Land_GarbagePallet_F", { 11463.7, 11363.2, -0.0102539 }, 0.234284 }, + { "Land_GarbageContainer_closed_F", { 11463.6, 11351.2, 3.05176e-005 }, 130.585 }, + { "Land_Timbers_F", { 11469.3, 11389.7, 0.0153503 }, 359.649 }, + { "Land_d_Stone_HouseBig_V1_F", { 11461.3, 11389.2, 0 }, 0 }, + { "Land_GarbagePallet_F", { 11466.6, 11393.2, -0.0388489 }, 0.234284 }, + { "Land_Wreck_Van_F", { 11462.1, 11396.9, -0.0365906 }, 282.773 }, + { "Land_Ancient_Wall_8m_F", { 11535.8, 11265.3, -0.125122 }, 144.692 }, + { "Land_Ancient_Wall_4m_F", { 11556.4, 11279, -0.112091 }, 148.121 }, + { "Land_Ancient_Wall_8m_F", { 11567.8, 11287.4, 0.0343018 }, 144.515 }, + { "Land_HBarrier_5_F", { 11577.4, 11307.8, -0.0361633 }, 324.948 }, + { "Land_HBarrier_5_F", { 11572.7, 11307.1, 0.0201416 }, 21.0099 }, + { "Land_HBarrier_5_F", { 11562.9, 11309.6, 0.0461121 }, 48.0841 }, + { "Land_HBarrier_5_F", { 11567.4, 11307.6, 0.0220337 }, 355.004 }, + { "Land_Cargo_HQ_V3_F", { 11571.9, 11330.1, -0.0317078 }, 268 }, + { "Land_HBarrier_5_F", { 11555.9, 11323.6, 0.0753479 }, 231.934 }, + { "Land_HBarrier_5_F", { 11562.4, 11326.7, -0.125763 }, 49.9669 }, + { "Land_HBarrier_5_F", { 11560.6, 11331.7, -0.0820618 }, 87.9061 }, + { "Land_HBarrier_5_F", { 11564.1, 11322.1, 0.0942078 }, 88.1076 }, + { "Land_HBarrier_5_F", { 11557.4, 11319, -0.0873108 }, 272.274 }, + { "Land_HBarrier_5_F", { 11564.8, 11339.8, 0.0496521 }, 177.031 }, + { "Land_HBarrier_5_F", { 11561.2, 11337.2, -0.0386963 }, 107.942 }, + { "Land_HBarrier_5_F", { 11557.3, 11313.6, -0.120697 }, 271.244 }, + { "Land_HBarrier_5_F", { 11566.1, 11318.1, 0.0227051 }, 36.0297 }, + { "Land_HBarrier_5_F", { 11557.1, 11332, 0.112 }, 177.096 }, + { "Land_HBarrier_3_F", { 11559.8, 11311.4, 0.0235596 }, 180.944 }, + { "Land_PortableLight_double_F", { 11578.2, 11325.2, -0.00167847 }, 357.96 }, + { "Land_PortableLight_double_F", { 11565.8, 11331, 0.00180054 }, 87.9936 }, + { "Land_PortableLight_double_F", { 11579.4, 11336.2, 0.00131226 }, 229.004 }, + { "Land_HBarrier_5_F", { 11570.4, 11340, 0.0419312 }, 176.992 }, + { "Land_HBarrier_5_F", { 11575.8, 11340.3, -0.00686646 }, 176.886 }, + { "Land_Cargo_Patrol_V3_F", { 11598.1, 11309, -0.261566 }, 315 }, + { "Land_HBarrier_5_F", { 11604.1, 11309.6, 0.263916 }, 91.8105 }, + { "Land_HBarrier_5_F", { 11592.5, 11305.2, 0.325073 }, 42.8493 }, + { "Land_HBarrier_5_F", { 11587.8, 11308.1, 0.193237 }, 23.3538 }, + { "Land_HBarrier_5_F", { 11602, 11304.9, -0.0116272 }, 133.822 }, + { "Land_HBarrier_5_F", { 11582.7, 11309.1, -0.0935974 }, 179.212 }, + { "Land_HBarrier_5_F", { 11597.2, 11303.2, 0.501007 }, 1.93882 }, + { "Land_PortableLight_double_F", { 11600.9, 11306.2, 0.0727539 }, 311.827 }, + { "Land_Wreck_HMMWV_F", { 11601.7, 11318.8, 0.0107117 }, 0.254173 }, + { "Land_HBarrier_5_F", { 11580.2, 11338.1, -0.0474548 }, 230.951 }, + { "Land_HBarrier_5_F", { 11604.3, 11315.3, 0.15564 }, 90.3624 }, + { "Land_HBarrier_5_F", { 11605.4, 11320.6, 0.00527954 }, 108.727 }, + { "Land_HBarrier_5_F", { 11605.2, 11325.8, -0.31781 }, 239.194 }, + { "Land_HBarrier_5_F", { 11602.4, 11336.2, -0.191833 }, 230.52 }, + { "Land_HBarrier_5_F", { 11587, 11332.5, 0.0287476 }, 272.043 }, + { "Land_HBarrier_5_F", { 11588, 11327.3, -0.0723877 }, 242.815 }, + { "Land_HBarrier_5_F", { 11604, 11331, 0.0708313 }, 271.184 }, + { "Land_HBarrier_5_F", { 11589.1, 11322.3, -0.0202026 }, 273.918 }, + { "Land_HBarrier_5_F", { 11586.6, 11318.1, 0.0480652 }, 330.046 }, + { "Land_HBarrier_5_F", { 11581.5, 11316.5, 0.0766602 }, 358.179 }, + { "Land_HBarrier_5_F", { 11584.9, 11336.1, -0.142578 }, 180.844 }, + { "Land_Tyres_F", { 11589.7, 11334.3, -0.0446472 }, 202.731 }, + { "Land_ToiletBox_F", { 11585.2, 11333.7, 0.00323486 }, 359.952 }, + { "Land_ToiletBox_F", { 11582.7, 11333.7, 0.00323486 }, 359.965 }, + { "Land_WaterTank_F", { 11584.8, 11322.4, 0.00262451 }, 270.952 }, + { "Land_Pallet_F", { 11599.1, 11334.4, 0.0012207 }, 167.913 }, + { "Land_PaperBox_open_empty_F", { 11593.4, 11312.9, 0.0102844 }, 166.48 }, + { "Land_PaperBox_closed_F", { 11595.3, 11314, 0.0174255 }, 20.1509 }, + { "Land_Pallets_stack_F", { 11599, 11336.3, 0.00747681 }, 107.491 }, + { "Land_BarrelSand_grey_F", { 11582.4, 11318.9, 0.00143433 }, 200.963 }, + { "Land_BarrelEmpty_F", { 11583, 11319.7, 0.00137329 }, 143.048 }, + { "Land_wpp_Turbine_V2_F", { 11630.6, 11256.4, 3.05176e-005 }, 0 }, + { "Land_wpp_Turbine_V2_F", { 11634.6, 11338.9, 0 }, 0 }, + { "Land_wpp_Turbine_V2_F", { 11645.6, 11296.8, 0 }, 0 }, + // North East + {"Land_ClutterCutter_medium_F",{10679.6,9435.62,7.62939e-006},0.0643096}, + {"Land_LampShabby_F",{10673.1,9422,-7.62939e-006},48.6578}, + {"Land_WoodenCart_F",{10677.4,9442.94,-0.0199509},0.1255}, + {"Land_Slums02_4m",{10674.5,9433.75,0.00186157},224.018}, + {"Land_Slums02_4m",{10673.4,9444.57,0.0374298},309.223}, + {"Land_Slums02_4m",{10672.1,9437.09,-0.00406647},244.438}, + {"Land_Slums02_4m",{10676.8,9446.41,0.0543442},0.119723}, + {"Land_Slums02_4m",{10671.6,9441.05,0.0140839},283.663}, + {"Land_Garbage_line_F",{10674,9443.57,0.0653152},217.23}, + {"Land_JunkPile_F",{10679.5,9444.45,0.00154877},359.709}, + {"Land_InvisibleBarrier_F",{10673.7,9444.29,0},131.152}, + {"Land_InvisibleBarrier_F",{10672,9440.85,7.62939e-006},285.049}, + {"Land_InvisibleBarrier_F",{10676.8,9445.61,0},182.439}, + {"Land_InvisibleBarrier_F",{10672.5,9437.2,0},63.0227}, + {"Land_InvisibleBarrier_F",{10674.8,9434.01,0},43.6106}, + {"Land_Campfire_F",{10679.6,9435.56,0.000465393},359.367}, + {"Land_WoodPile_F",{10675.9,9441.61,0.00293732},359.088}, + {"Land_CncBarrier_F",{10677,9430.56,3.8147e-005},38.2729}, + {"Land_Axe_F",{10676.6,9441.46,-0.00322723},73.9678}, + {"Land_HelipadEmpty_F",{10686.6,9418.95,4.57764e-005},0.0323291}, + {"Land_ClutterCutter_large_F",{10686.8,9435.84,-7.62939e-006},359.153}, + {"Land_Garbage_square5_F",{10690.6,9430.02,0.000267029},0.00641501}, + {"Land_Slums02_4m",{10684.4,9427.61,0.00271606},33.3528}, + {"Land_Slums02_4m",{10694.4,9429.21,0.0391235},116.206}, + {"Land_Slums02_4m",{10690.7,9442.29,0.0845108},48.305}, + {"Land_Slums02_4m",{10694.1,9436.97,0.0754395},67.0969}, + {"Land_Slums02_4m",{10695.1,9433.24,0.0348969},86.0347}, + {"Land_Slums02_4m",{10687.4,9444.58,0.0864868},22.401}, + {"Land_Slums02_4m",{10687.7,9426.84,0.00393677},356.182}, + {"Land_Slums02_4m",{10680.9,9446.4,0.0634003},1.21943}, + {"Land_Slums02_4m",{10681,9429.68,0.00272369},33.3528}, + {"Land_Slums02_4m",{10691.6,9426.76,-0.00839233},160.21}, + {"Land_TentDome_F",{10687.7,9442.09,-0.0244064},290.361}, + {"Land_InvisibleBarrier_F",{10680.9,9445.82,0},182.266}, + {"Land_InvisibleBarrier_F",{10684.1,9427.22,0},33.8221}, + {"Land_InvisibleBarrier_F",{10680.8,9429.46,0},33.8225}, + {"Land_InvisibleBarrier_F",{10690.3,9441.82,0},227.277}, + {"Land_InvisibleBarrier_F",{10694.5,9433.07,0},268.195}, + {"Land_InvisibleBarrier_F",{10687,9444.06,7.62939e-006},196.736}, + {"Land_InvisibleBarrier_F",{10687.7,9426.38,0},351.992}, + {"Land_InvisibleBarrier_F",{10691.6,9427.21,-7.62939e-006},334.964}, + {"Land_InvisibleBarrier_F",{10693.8,9436.79,0},248.547}, + {"Land_InvisibleBarrier_F",{10687.7,9426.38,0},352.452}, + {"Land_InvisibleBarrier_F",{10693.9,9429.35,0},297.599}, + {"Land_WorkStand_F",{10689.6,9431.71,0.00012207},0.4623}, + {"Land_FieldToilet_F",{10700.1,9449.24,0.0270386},229.999}, + {"Land_PortableLight_double_F",{10688.4,9426.99,-7.62939e-006},152.941}, + {"Land_Cages_F",{10691,9428.64,9.91821e-005},359.15}, + {"Land_WoodenTable_large_F",{10685.9,9434.16,0.000358582},143.934}, + {"Land_Pallets_stack_F",{10692.5,9430.88,0.0114899},359.393}, + {"Land_WheelCart_F",{10683.8,9441.73,0.0119476},181.87}, + {"Land_ShelvesWooden_khaki_F",{10685.5,9440.39,0.0146866},238.174}, + {"Land_CampingChair_V1_F",{10683.2,9430.95,0.00310516},0.668239}, + {"Land_CratesPlastic_F",{10699.1,9449.65,0.00570679},110.237}, + {"Land_BarrelWater_F",{10684.7,9440.29,0.0127869},2.49711}, + {"Land_Slums02_pole",{10682.8,9445.84,0.00499725},0.672715}, + {"Land_Slums02_pole",{10691.6,9440.46,0.00566864},321.615}, + {"Land_GasTank_01_khaki_F",{10690.6,9431.43,0.00012207},200.712}, + // South East + { "Land_spp_Mirror_F", { 12021.8, 5100.76, -7.62939e-006 }, 182.521 }, + { "Land_spp_Mirror_Broken_F", { 12031.5, 5104.48, 0 }, 182.521 }, + { "Land_Slums01_8m", { 12050.9, 5109.1, -0.00202179 }, 359.933 }, + { "Land_Slums01_8m", { 12051, 5121.93, 0.0187302 }, 118.143 }, + { "Land_Slums01_8m", { 12054.5, 5128.94, 0.0217743 }, 118.269 }, + { "Land_WoodPile_large_F", { 12057.6, 5121.48, -9.15527e-005 }, 21.8792 }, + { "Land_WoodPile_large_F", { 12057.1, 5119.12, 9.91821e-005 }, 203.739 }, + { "Land_WoodPile_large_F", { 12058.9, 5123.89, -0.00171661 }, 197.098 }, + { "Land_WoodPile_large_F", { 12055.8, 5119.65, -9.15527e-005 }, 16.6504 }, + { "Land_Garbage_square3_F", { 12058.5, 5119.32, -0.000190735 }, 200.54 }, + { "Land_Cages_F", { 12051, 5119.59, 0.00479126 }, 22.0683 }, + { "Land_HelipadEmpty_F", { 12058.1, 5100.99, 0 }, 359.533 }, + { "Land_cargo_addon02_V2_F", { 12075.8, 5110.74, 0 }, 313.277 }, + { "Land_Slums01_8m", { 12067.6, 5108.54, -0.00462341 }, 194.501 }, + { "Land_Slums01_8m", { 12067, 5122.79, -0.00128937 }, 106.496 }, + { "Land_Slums01_8m", { 12078.5, 5109.96, -0.00531769 }, 302.472 }, + { "Land_Slums01_8m", { 12080.8, 5125.66, -0.0038147 }, 62.4229 }, + { "Land_Slums01_8m", { 12071.9, 5107.49, -0.00380707 }, 194.501 }, + { "Land_Wreck_Offroad_F", { 12074.4, 5127.79, 0.0411682 }, 325.773 }, + { "Land_LampShabby_F", { 12070.6, 5109.13, -0.0195618 }, 0 }, + { "Land_Wreck_Car3_F", { 12078.6, 5126.01, 0.0244293 }, 146.6 }, + { "Land_TentDome_F", { 12076.8, 5111.69, 3.8147e-005 }, 359.62 }, + { "Land_Garbage_line_F", { 12078, 5124.46, -0.0770569 }, 142.344 }, + { "Land_JunkPile_F", { 12073.8, 5125.85, -0.0101395 }, 359.544 }, + { "Land_InvisibleBarrier_F", { 12065.4, 5108.95, 0 }, 16.7308 }, + { "Land_InvisibleBarrier_F", { 12074.6, 5106.78, 0 }, 19.2329 }, + { "Land_InvisibleBarrier_F", { 12081.8, 5123.84, 0 }, 243.383 }, + { "Land_InvisibleBarrier_F", { 12070.3, 5107.81, 0 }, 16.7344 }, + { "Land_InvisibleBarrier_F", { 12079.7, 5111.63, 0 }, 122.723 }, + { "Land_InvisibleBarrier_F", { 12080.1, 5127.47, 0 }, 239.065 }, + { "Land_InvisibleBarrier_F", { 12077.2, 5107.93, 0 }, 122.631 }, + { "Land_InvisibleBarrier_F", { 12069.1, 5128.14, 0 }, 122.279 }, + { "Land_InvisibleBarrier_F", { 12067.6, 5124.65, 0 }, 112.368 }, + { "Land_InvisibleBarrier_F", { 12066.5, 5120.62, 0 }, 104.748 }, + { "Land_Campfire_F", { 12070.3, 5113.58, 0.00119019 }, 0 }, + { "Land_WoodPile_F", { 12073, 5117.34, -0.00229645 }, 236.097 }, + { "Land_CncBarrier_F", { 12065.4, 5116.71, 0 }, 103.32 }, + { "Land_CncBarrier_stripes_F", { 12082.8, 5121.11, 0.0150528 }, 90.5238 }, + { "Land_CncBarrier_stripes_F", { 12082.3, 5117.84, 0.0185394 }, 104.536 }, + { "Land_CncBarrier_stripes_F", { 12064.5, 5112.14, 0.0020752 }, 279.748 }, + { "Land_CncBarrier_stripes_F", { 12081.2, 5114.26, 0.0116425 }, 300.824 }, + { "Land_WheelCart_F", { 12073, 5108.21, 0.00278473 }, 301.42 }, + { "Land_Slums01_pole", { 12068.4, 5126.9, 0.000801086 }, 260.084 }, + { "Land_Portable_generator_F", { 12069.8, 5108.61, 0.00123596 }, 359.87 }, + { "Land_CampingChair_V2_F", { 12076.1, 5109.27, 0.00286865 }, 99.2684 }, + { "Land_CratesPlastic_F", { 12072.4, 5118.94, 3.05176e-005 }, 359.993 }, + { "Land_BarrelWater_F", { 12073.1, 5110.06, 0.00231171 }, 359.255 }, + { "Land_Axe_fire_F", { 12077.1, 5109.95, -0.00322723 }, 359.907 }, + { "Land_Slums01_8m", { 12070.5, 5130.62, 0.0177002 }, 300.964 }, + { "Land_Slums01_8m", { 12075.7, 5131.46, 0.00196838 }, 40.0636 }, + { "Land_Slums01_8m", { 12060.6, 5133.4, 0.000160217 }, 168.792 }, + { "Land_LampShabby_F", { 12063, 5131.89, 0 }, 169.228 }, + { "Land_InvisibleBarrier_F", { 12073.8, 5133.13, -7.62939e-006 }, 221.588 }, + { "Land_InvisibleBarrier_F", { 12071.2, 5131.82, 0 }, 122.469 }, + { "Land_InvisibleBarrier_F", { 12077.1, 5130.37, 0 }, 221.588 }, + { "Land_Slums01_pole", { 12072.6, 5134.17, 0.00662994 }, 359.468 }, + { "Land_Slums01_pole", { 12064.7, 5134.13, 0.0012207 }, 359.827 }, + { "Land_Garbage_square5_F", { 12093.4, 5120.34, 0.00907135 }, 359.692 }, + { "Land_FieldToilet_F", { 12093.7, 5119.73, 0.0153198 }, 155.607 }, + { "Land_Grave_rocks_F", { 12116.8, 5130.7, 0 }, 0 }, + // South West + { "Flag_US_F", { 4542.15, 4522, -1.52588e-005 }, 209.275 }, + { "Land_HelipadEmpty_F", { 4552.98, 4515.85, 0 }, 0 }, + { "Land_ToiletBox_F", { 4556.27, 4549.86, 0.175018 }, 0.00193372 }, + { "Land_Timbers_F", { 4564.65, 4516.04, 0.199997 }, 325.751 }, + { "Land_Wreck_Van_F", { 4573.34, 4506.86, 0.199997 }, 151.285 }, + { "Land_Garbage_square5_F", { 4588.59, 4516.25, 0.199997 }, 0 }, + { "Land_LampStreet_small_F", { 4577.73, 4514.35, 0.199997 }, 239.902 }, + { "Land_Pipes_large_F", { 4581.84, 4521.72, 0.174988 }, 146.546 }, + { "Land_Pallets_F", { 4586.84, 4514.64, 0.275681 }, 335.695 }, + { "Land_EngineCrane_01_F", { 4581.71, 4510.71, 0.174988 }, 95.9295 }, + { "Land_GarbageContainer_open_F", { 4582.15, 4523.48, 0.175003 }, 151.569 }, + { "Land_Workbench_01_F", { 4585.25, 4521.76, 0.174988 }, 50.0718 }, + { "Barrels", { 4589.08, 4516.4, 0.225494 }, 239.1 }, + { "SignAd_SponsorS_Redstone_F", { 4585.1, 4511.84, 0 }, 142.53 }, + { "Land_WoodenTable_large_F", { 4579.26, 4513.71, 0.175003 }, 142.285 }, + { "Land_Sink_F", { 4573.95, 4519.14, 0.175003 }, 51.2154 }, + { "Land_CncBarrier_stripes_F", { 4578.63, 4513.11, 0.199997 }, 231.189 }, + { "Land_CncBarrier_stripes_F", { 4577.53, 4518.75, 0.199997 }, 325.531 }, + { "Land_CncBarrier_stripes_F", { 4576.61, 4515.73, 0.199997 }, 231.189 }, + { "Land_WoodenTable_small_F", { 4578.02, 4515.24, 0.174988 }, 319.098 }, + { "Land_WeldingTrolley_01_F", { 4585.96, 4513.3, 0.174988 }, 236.669 }, + { "Land_Bench_F", { 4573.12, 4520.15, 0.175003 }, 232.492 }, + { "Land_ToolTrolley_01_F", { 4586.23, 4520.34, 0.175018 }, 228.625 }, + { "Land_ToolTrolley_02_F", { 4587.01, 4519.39, 0.174973 }, 320.682 }, + { "Land_PlasticCase_01_large_F", { 4588.17, 4518.07, 0.174988 }, 321.256 }, + { "Land_WheelieBin_01_F", { 4581.21, 4522.58, 0.175003 }, 139.325 }, + { "Land_WaterCooler_01_old_F", { 4575.21, 4518.16, 0.175064 }, 226.8 }, + { "Land_ChairWood_F", { 4583.23, 4521.15, 0.175018 }, 270.935 }, + { "Land_BarrelWater_F", { 4574.63, 4517.66, 0.175049 }, 354.242 }, + { "Land_PlasticCase_01_medium_F", { 4579.23, 4513.68, 0.175003 }, 120.138 }, + { "Land_Tyre_F", { 4576.11, 4505.51, 0.0297241 }, 358.563 }, + { "Land_GasTank_01_blue_F", { 4588.49, 4515.58, 0.175034 }, 327.133 }, + { "Land_GasTank_01_yellow_F", { 4588.23, 4515.09, 0.175034 }, 247.551 }, + { "Land_PlasticCase_01_small_F", { 4578.02, 4515.24, 0.174988 }, 137.793 }, + { "Land_SurvivalRadio_F", { 4586.07, 4521.12, 0.941803 }, 269.968 }, + { "Fridge_01_closed_F", { 4576.98, 4516.48, 0.175064 }, 238.777 }, + // Boat Vendor + { "Land_WorkStand_F", { 13678.8, 4032.35, -0.00124931 }, 359.908 }, + { "Land_WheelCart_F", { 13671.7, 4037.31, 0.00549078 }, 0.0201131 }, + { "Land_TentDome_F", { 13661.6, 4027.37, -0.014101 }, 359.452 }, + { "Land_Pier_Box_F", { 13696.5, 4033.33, 0.599987 }, 0 }, + { "Land_Campfire_F", { 13681.2, 4035.13, 0.00247145 }, 0.1179 }, + { "Land_Wreck_Traw_F", { 13710.9, 3862.6, 0.242525 }, 0.611813 }, + { "Land_WavePowerPlant_F", { 13878.7, 3932.25, 9.53635 }, 345.483 }, + // Stary Sobor Military + { "Land_HBarrierBig_F", { 6296.66, 7795.88, -0.00692749 }, 219.542 }, + { "Land_HBarrier_5_F", { 6290.16, 7793.43, 0.0203857 }, 218.553 }, + { "Land_HBarrier_5_F", { 6297.02, 7790.79, 0.110291 }, 130.462 }, + { "Land_HBarrier_5_F", { 6285.72, 7796.98, 0.0177002 }, 219.491 }, + { "Land_PaperBox_closed_F", { 6292.73, 7799.57, -0.00213623 }, 221.545 }, + { "Land_WaterTank_F", { 6299.27, 7797.89, 0.00109863 }, 219.43 }, + { "Land_HBarrierBig_F", { 6272.08, 7813.91, 0.00427246 }, 193.847 }, + { "Land_HBarrierBig_F", { 6297.31, 7802.14, -0.00527954 }, 307.543 }, + { "Land_HBarrierBig_F", { 6276.2, 7808.03, 0.000549316 }, 83.8871 }, + { "Land_HBarrierBig_F", { 6280.2, 7801.39, -0.00228882 }, 37.4585 }, + { "Land_HBarrier_5_F", { 6288.43, 7824.38, 0.00488281 }, 217.5 }, + { "Land_HBarrier_5_F", { 6293.44, 7822.44, -0.00402832 }, 175.45 }, + { "Land_PortableLight_double_F", { 6278.42, 7808.37, 0 }, 261.498 }, + { "Land_Pallets_stack_F", { 6291.09, 7800.92, 0.000518799 }, 203.664 }, + { "Land_HBarrierBig_F", { 6293.92, 7846.05, -0.000823975 }, 37.5492 }, + { "Land_HBarrier_5_F", { 6288.87, 7844.77, 0.0146179 }, 125.61 }, + { "Land_HBarrier_5_F", { 6287.4, 7836.51, 0.00183105 }, 36.5104 }, + { "Land_HBarrier_5_F", { 6285.68, 7840.26, 0.00210571 }, 125.565 }, + { "Land_PortableLight_double_F", { 6288.7, 7841.98, 0 }, 125.471 }, + { "Land_Cargo_Patrol_V1_F", { 6291.25, 7840.74, 0 }, 125.498 }, + { "Land_BagBunker_Large_F", { 6284.77, 7830.87, 0.000396729 }, 125.544 }, + { "Land_Cargo_Patrol_V1_F", { 6315.33, 7798.51, 0 }, 306.498 }, + { "Land_HBarrierBig_F", { 6304.61, 7794.26, -0.00469971 }, 164.31 }, + { "Land_HBarrierBig_F", { 6312.32, 7793.03, -0.00683594 }, 219.624 }, + { "Land_HBarrier_5_F", { 6317.45, 7794.16, 0.0157166 }, 307.501 }, + { "Land_HBarrier_5_F", { 6320.83, 7798.61, 0.0254822 }, 307.457 }, + { "Land_PortableLight_double_F", { 6317.92, 7796.97, 0 }, 307.493 }, + { "Land_PortableLight_double_F", { 6309.06, 7797.2, 0 }, 188.5 }, + { "Land_ToiletBox_F", { 6314.53, 7793.88, 0.000274658 }, 132.45 }, + { "Land_BagBunker_Large_F", { 6326.43, 7813.56, -0.000640869 }, 307.499 }, + { "Land_HBarrier_5_F", { 6319.26, 7802.51, -0.00213623 }, 219.502 }, + { "Land_HBarrier_5_F", { 6318.51, 7814.62, -0.00192261 }, 219.497 }, + { "Land_HBarrier_5_F", { 6329.87, 7820.18, 0.0175171 }, 299.066 }, + { "Land_HBarrier_5_F", { 6301.78, 7807.92, -0.00479126 }, 307.524 }, + { "Land_HBarrier_5_F", { 6313.51, 7816.39, -0.000457764 }, 171.499 }, + { "Land_TentA_F", { 6325.46, 7824.22, 9.15527e-005 }, 94.5132 }, + { "Land_TentA_F", { 6323.97, 7829.37, 0.00863647 }, 82.3408 }, + { "Land_Campfire_F", { 6317.24, 7829.11, -0.0592346 }, 26.001 }, + { "Land_WoodPile_F", { 6312.93, 7826.2, 0.00164795 }, 1.00009 }, + { "Land_WaterBarrel_F", { 6304.27, 7808.83, -3.05176e-005 }, 136.44 }, + { "Land_Sack_F", { 6326, 7822.95, 0.010437 }, 353.513 }, + { "Land_Basket_F", { 6325.17, 7822.36, 9.15527e-005 }, 137.301 }, + { "Land_MetalBarrel_F", { 6305.22, 7808.31, 0 }, 244.342 }, + { "Land_BarrelTrash_grey_F", { 6305.45, 7807.6, 0.000549316 }, 313.436 }, + { "Land_BarrelEmpty_grey_F", { 6304.88, 7807.12, 0 }, 307.487 }, + { "Land_WoodenLog_F", { 6317.17, 7827.17, 0.000335693 }, 77.1906 }, + { "Land_Axe_F", { 6313.81, 7826.37, -0.00338745 }, 248.999 }, + { "Land_CanisterFuel_F", { 6313.75, 7825.28, 6.10352e-005 }, 34.3382 }, + { "Land_Canteen_F", { 6323.97, 7823.34, 9.15527e-005 }, 347.753 }, + { "Land_TinContainer_F", { 6317.53, 7827.55, 0.00189209 }, 235.145 }, + { "Land_Camping_Light_F", { 6317.18, 7827.1, 0.481659 }, 78.9907 }, + { "Land_HBarrierBig_F", { 6325.11, 7838.57, 0.00241089 }, 219.523 }, + { "Land_HBarrierBig_F", { 6301.64, 7845.13, -0.00299072 }, 342.464 }, + { "Land_HBarrierBig_F", { 6309.64, 7843.89, -0.00140381 }, 37.508 }, + { "Land_HBarrierBig_F", { 6317.6, 7841.65, 0.00088501 }, 187.754 }, + { "Land_HBarrierBig_F", { 6309.25, 7837.67, 0.0010376 }, 125.494 }, + { "Land_HBarrierBig_F", { 6328.96, 7831.3, 0.000183105 }, 265.544 }, + { "Land_HBarrier_5_F", { 6305.08, 7831.75, 0.013855 }, 306.499 }, + { "Land_TentA_F", { 6323.29, 7833.88, -3.05176e-005 }, 56.9963 }, + { "Land_ToiletBox_F", { 6306.66, 7840.59, 0.000305176 }, 37.4933 }, + { "Land_Pallets_F", { 6305.09, 7836.28, 0.00402832 }, 301.498 }, + { "Land_WoodenBox_F", { 6315.52, 7830.8, 0.000152588 }, 135.939 }, + { "Land_HBarrierBig_F", { 6355.05, 7758.61, 0.01651 }, 180.899 }, + { "Land_HBarrier_3_F", { 6341.05, 7763.39, -0.024231 }, 230.09 }, + { "Land_PaperBox_closed_F", { 6355.89, 7769.34, 0.000213623 }, 300.988 }, + { "Land_HBarrierBig_F", { 6356.52, 7790.86, -0.0449524 }, 90.0002 }, + { "Land_HBarrierBig_F", { 6334.66, 7777.03, 0.000701904 }, 260.011 }, + { "Land_HBarrierBig_F", { 6356.92, 7782.55, -0.0672607 }, 89.0069 }, + { "Land_HBarrier_5_F", { 6358.21, 7796.04, -0.00231934 }, 178 }, + { "Land_HBarrier_5_F", { 6359.02, 7777.34, -0.0152588 }, 177.997 }, + { "Land_HBarrier_3_F", { 6345.2, 7793.81, 0.00137329 }, 299 }, + { "Land_HBarrier_3_F", { 6349.54, 7771.55, -0.00192261 }, 230.001 }, + { "Land_HBarrier_3_F", { 6332.6, 7798.95, 0.00323486 }, 299 }, + { "Land_PaperBox_closed_F", { 6357.05, 7771.16, 0 }, 270 }, + { "Land_Pallets_stack_F", { 6348.26, 7791.23, 3.05176e-005 }, 225.003 }, + { "Land_Pallets_stack_F", { 6348.28, 7788.84, 0.00216675 }, 263.003 }, + { "Land_HBarrierBig_F", { 6350.34, 7814.14, -0.000396729 }, 134.998 }, + { "Land_Razorwire_F", { 6352.86, 7822.44, 0.000793457 }, 196.803 }, + { "Land_HBarrier_5_F", { 6330.96, 7824.57, -0.0115967 }, 68.0471 }, + { "Land_HBarrierBig_F", { 6375.54, 7759.76, 0.0117493 }, 178.122 }, + { "Land_HBarrier_3_F", { 6386.83, 7765.76, 0.0414429 }, 128.913 }, + { "Land_Cargo_Tower_V1_F", { 6364.71, 7786.91, 0.00137329 }, 269 }, + { "Land_HBarrierBig_F", { 6371.91, 7791.33, -0.0449524 }, 90 }, + { "Land_HBarrierBig_F", { 6372.13, 7782.9, -0.0224304 }, 90.0001 }, + { "Land_HBarrier_5_F", { 6370.43, 7777.76, -0.0215149 }, 177.996 }, + { "Land_HBarrier_5_F", { 6369.94, 7796.64, -0.00372314 }, 179 }, + { "Land_HBarrier_3_F", { 6380.18, 7795.26, 0.00366211 }, 244.001 }, + { "Land_HBarrier_3_F", { 6378.41, 7772.92, -0.0100403 }, 129 }, + { "Land_ToiletBox_F", { 6360.83, 7789.36, -3.05176e-005 }, 269.005 }, + { "Land_WaterTank_F", { 6375.86, 7785.65, 0.00012207 }, 0.000633659 }, + { "Land_WaterTank_F", { 6375.74, 7788.49, 0.000183105 }, 0.000302211 }, + { "Land_PortableLight_double_F", { 6360.99, 7782.88, 8.57773 }, 88.0059 }, + { "Land_PortableLight_double_F", { 6363.69, 7791.14, 4.66943 }, 272 }, + { "Land_HBarrierBig_F", { 6375.25, 7815.47, 0.00146484 }, 226.006 }, + { "Land_Razorwire_F", { 6361.44, 7821.18, -0.0170898 }, 353.994 }, + { "Land_HBarrier_3_F", { 6363.49, 7807.3, 0.00195313 }, 357.999 }, + { "Land_HBarrierBig_F", { 6390.12, 7781.39, -0.000366211 }, 275 }, + { "Land_HBarrier_3_F", { 6391.39, 7801.7, 0.00195313 }, 244 }, + // NW Airfield + { "Land_Airport_Tower_F", { 4327.37, 10905.9, 0 }, 61.1295 }, + { "Land_Offices_01_V1_F", { 4573.46, 9819.88, 0 }, 244.926 }, + { "Land_i_Barracks_V2_F", { 4598.97, 9720.41, 0 }, 100.719 }, + // Wind Farm + {"Land_wpp_Turbine_V2_F", { 5449.11, 13270.3, -0.00350952 }, 0 }, + {"Land_wpp_Turbine_V2_F", { 5477.64, 13280.7, 3.05176e-005 }, 0 }, + {"Land_spp_Transformer_F", { 5478.29, 13300.4, 0 }, 0}, + {"Land_dp_transformer_F", { 5482.13, 13300.9, -3.05176e-005 }, 0 }, + {"Land_wpp_Turbine_V2_F", { 5503.9, 13291.3, 0.0585327 }, 0 }, + // Old Hero small military post. + { "Land_HBarrier_5_F", { 12899.8, 12748.4, 0.02034 }, 354.796 }, + { "Land_HBarrier_5_F", { 12894.1, 12748, 0.013916 }, 354.737 }, + { "Land_Cargo_Patrol_V2_F", { 12897.5, 12750.2, 0 }, 85.8348 }, + { "Land_HBarrier_5_F", { 12898.8, 12763.6, 0.00309753 }, 354.799 }, + { "Land_HBarrier_5_F", { 12891.9, 12751.4, 0.132568 }, 85.9089 }, + { "Land_HBarrier_5_F", { 12893.1, 12763.1, 0.0252838 }, 354.791 }, + { "Land_Garbage_square5_F", { 12898.5, 12754.1, 0.403336 }, 356.786 }, + { "Land_HBarrier_3_F", { 12894.2, 12753.5, -0.00849915 }, 176.727 }, + { "Land_Sign_WarningMilitaryArea_F", { 12878.3, 12753.7, 0 }, 86.9098 }, + { "Land_Cargo_HQ_V2_F", { 12921.2, 12747.4, 1.52588e-005 }, 354.835 }, + { "Land_HBarrier_5_F", { 12906.8, 12739.5, 0.185944 }, 32.8205 }, + { "Land_HBarrier_5_F", { 12928.2, 12739.4, -0.0260773 }, 353.715 }, + { "Land_HBarrier_5_F", { 12922.9, 12739.1, -0.00527954 }, 353.753 }, + { "Land_HBarrier_5_F", { 12917.2, 12738.6, -0.00486755 }, 353.757 }, + { "Land_HBarrier_5_F", { 12912.2, 12738.2, -0.0137329 }, 353.744 }, + { "Land_HBarrier_5_F", { 12901.8, 12744.8, 0.200394 }, 86.3687 }, + { "Land_Garbage_square5_F", { 12909.3, 12746, 1.08038 }, 303.574 }, + { "Land_HBarrier_3_F", { 12903.3, 12741.9, -0.0743713 }, 214.774 }, + { "Land_Cargo_Patrol_V2_F", { 12924.7, 12773.8, 0 }, 210.835 }, + { "Land_ScrapHeap_2_F", { 12915.2, 12759.6, 0.0301971 }, 169.814 }, + { "Land_Loudspeakers_F", { 12915.6, 12750.6, 0 }, 356.835 }, + { "Land_ScrapHeap_1_F", { 12921.4, 12760.3, 0.0139313 }, 349.801 }, + { "Land_HBarrier_5_F", { 12921.6, 12756, -0.0275116 }, 353.819 }, + { "Land_HBarrier_5_F", { 12929.5, 12770.1, 0.118179 }, 84.8375 }, + { "Land_HBarrier_5_F", { 12929.9, 12764.5, 0.142838 }, 84.8577 }, + { "Land_HBarrier_5_F", { 12918.7, 12776.7, -0.0367279 }, 353.82 }, + { "Land_HBarrier_5_F", { 12913.2, 12776.2, -0.0335236 }, 353.831 }, + { "Land_HBarrier_5_F", { 12919.8, 12776.8, -0.0367126 }, 353.82 }, + { "Land_HBarrier_5_F", { 12916, 12755.5, -0.0212097 }, 353.818 }, + { "Land_HBarrier_5_F", { 12927.1, 12773.9, 0.00674438 }, 30.819 }, + { "Land_HBarrier_5_F", { 12927.1, 12756.5, -0.0491486 }, 353.797 }, + { "Land_HBarrier_5_F", { 12900.6, 12767.1, 0.0879211 }, 86.4439 }, + { "Land_HBarrier_5_F", { 12903.9, 12773.6, -0.0444031 }, 307.87 }, + { "Land_HBarrier_5_F", { 12901.7, 12752, 0.132278 }, 86.4207 }, + { "Land_HBarrier_5_F", { 12907.7, 12775.7, -0.0238953 }, 353.847 }, + { "Land_HBarrier_5_F", { 12905.2, 12754.4, 0.00515747 }, 354.814 }, + { "Land_GarbageBags_F", { 12904.7, 12751, -0.0263214 }, 26.6415 }, + { "Land_Garbage_square5_F", { 12917.5, 12761.8, 0.00386047 }, 19.7988 }, + { "Land_HBarrier_3_F", { 12901.2, 12770.2, 0.0333557 }, 130.704 }, + { "Land_HBarrier_3_F", { 12923.5, 12776.2, -0.00253296 }, 212.829 }, + { "Land_JunkPile_F", { 12907.2, 12769.1, 0.00367737 }, 354.816 }, + { "Land_Pallets_stack_F", { 12909, 12767.7, 0.000915527 }, 128.791 }, + { "Land_CratesShabby_F", { 12910.4, 12768, 0.0017395 }, 245.684 }, + { "Land_GarbageBarrel_01_F", { 12914.8, 12763.5, -0.00370789 }, 182.87 }, + { "Land_HBarrier_5_F", { 12931.5, 12742.2, -0.338425 }, 264.829 }, + { "Land_HBarrier_5_F", { 12931.2, 12747.7, -0.208801 }, 264.774 }, + { "Land_HBarrier_5_F", { 12930.4, 12758.9, 0.141861 }, 84.8576 }, + { "Land_HBarrier_5_F", { 12930.8, 12753.3, -0.150925 }, 264.812 } + }; + staticNpcPos[] = { + // South West + { "C_man_hunter_1_F", { 4585.05, 4516.51, 0.201431 }, 273.197 }, + // South East + { "C_man_hunter_1_F", { 12075.5, 5109.38, 0.00123596 }, 313.34}, + // North East + { "C_man_hunter_1_F", { 10686.8,9437.87,0.00151825 }, 231.976}, + //Boat Trader + { "C_man_hunter_1_F", { 13694, 4033.22, 0.0021317 }, 93.5839 } + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/chernarusredux.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/chernarusredux.h new file mode 100644 index 0000000..3d90004 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/chernarusredux.h @@ -0,0 +1,496 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Uro1, Robio + + Description: + Epoch gamemode server Side map specific configs for chernarus redux. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/chernarusredux.h +*/ +class ChernarusRedux : Default +{ + worldSize = 12000; + plantLimit = 10; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", { 4569.52, 4524.24, 0.201431 } }, // South West + { "TP_Booth_e_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", { 12077.8, 5121.92, 0.00144958 } }, // South East + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", { 10688.6, 9428.98, 0.00144958 } } // North East + }; + propsPos[] = { + // phones + { "Land_PhoneBooth_02_F", { 10455.2, 2214.84, 0 }, 52.4502 }, + { "Land_PhoneBooth_02_F", { 10480, 2350.02, 0.101999 }, 326.023 }, + { "Land_PhoneBooth_02_F", { 10479.1, 2349.45, 0.101999 }, 326.023 }, + { "Land_PhoneBooth_02_F", { 6809.42, 2703.85, 0.101999 }, 131.438 }, + { "Land_PhoneBooth_02_F", { 6795.85, 2484.88, 0 }, 312.46 }, + { "Land_PhoneBooth_02_F", { 6738.58, 2393.89, 0 }, 221.25 }, + { "Land_PhoneBooth_02_F", { 6409.57, 2439.88, 0.0883212 }, 46.4278 }, + { "Land_PhoneBooth_02_F", { 7496.04, 5126.04, -0.000732422 }, 182.17 }, + { "Land_PhoneBooth_02_F", { 10132.1, 5471.31, 1.52588e-005 }, 46.4049 }, + { "Land_TouristShelter_01_F", { 11285.3, 5492.9, 1.52588e-005 }, 160.867 }, + { "Land_PhoneBooth_02_F", { 11282.8, 5491.04, 0 }, 162.031 }, + { "Land_PhoneBooth_02_F", { 13359.8, 6170.49, 0 }, 176.672 }, + { "Land_PhoneBooth_02_F", { 12102.1, 7283.6, 0 }, 96.4346 }, + { "Land_PhoneBooth_02_F", { 10654.9, 8013.35, 0.102005 }, 303.161 }, + { "Land_PhoneBooth_02_F", { 12022.4, 9151.21, 0 }, 47.4504 }, + { "Land_PhoneBooth_02_F", { 12023.3, 9150.26, 0 }, 45.6474 }, + { "Land_PhoneBooth_02_F", { 12265.6, 9479.49, 1.18411 }, 141.691 }, + { "Land_PhoneBooth_02_F", { 6017.95, 7821.39, -0.00500488 }, 223.037 }, + { "Land_PhoneBooth_02_F", { 6227.46, 7721.33, 0 }, 36.2285 }, + { "Land_TouristShelter_01_F", { 1969.65, 7361.86, 0 }, 35.9378 }, + { "Land_PhoneBooth_02_F", { 1971.84, 7359.15, -1.52588e-005 }, 127.545 }, + { "Land_PhoneBooth_02_F", { 8785.43, 11618.8, 0 }, 100.044 }, + { "Land_PhoneBooth_02_F", { 11242.2, 12209.9, 0 }, 118.072 }, + { "Land_PhoneBooth_02_F", { 2706.84, 10002.9, 0 }, 12.6221 }, + // City Klen + { "Land_MarketShelter_F", { 11396.6, 11368.6, -0.0245056 }, 216.043 }, + { "Land_i_Stone_Shed_V1_F", { 11392.3, 11388.6, 0 }, 216.9 }, + { "Land_Wreck_Offroad2_F", { 11398.5, 11382.7, -0.00628662 }, 181.726 }, + { "Land_Slums01_8m", { 11383.6, 11393.7, 0.00790405 }, 300.102 }, + { "Land_Slums01_8m", { 11379.6, 11386.9, -0.00378418 }, 300.014 }, + { "Land_GarbageBags_F", { 11394.1, 11382.3, 0.00491333 }, 0.000760495 }, + { "Land_CratesPlastic_F", { 11398.8, 11372.4, -0.000823975 }, 359.71 }, + { "Land_BarrelWater_F", { 11390, 11370.7, 0.000457764 }, 359.997 }, + { "Land_Chapel_V2_F", { 11429, 11352.8, 0.258972 }, 126.48 }, + { "Land_u_House_Big_02_V1_F", { 11417.7, 11362.8, 0 }, 36.7593 }, + { "Land_Cages_F", { 11401.1, 11369.3, 0.00457764 }, 76.3813 }, + { "Land_GarbagePallet_F", { 11426.1, 11367.2, 0.00119019 }, 0.234284 }, + { "Land_i_Stone_HouseBig_V3_F", { 11405.1, 11375.6, 0 }, 129.339 }, + { "Land_Slums02_4m", { 11414.1, 11377.4, 0.0258484 }, 39.2923 }, + { "Land_Slums02_4m", { 11417, 11375.1, 0.00820923 }, 39.284 }, + { "Land_Slums02_4m", { 11407.2, 11383.1, 0.00335693 }, 39.2788 }, + { "Land_Slums02_4m", { 11419.8, 11372.7, 0.00827026 }, 39.284 }, + { "Land_Wreck_Truck_dropside_F", { 11429.9, 11380.5, 0.000671387 }, 0.00762456 }, + { "Land_d_Shop_01_V1_F", { 11453.7, 11350.2, 0.298096 }, 127.575 }, + { "Land_Garbage_square5_F", { 11449.2, 11357.1, 3.05176e-005 }, 0.000244135 }, + { "Land_GarbagePallet_F", { 11452.4, 11353.4, -0.0103455 }, 0.234284 }, + { "Land_PhoneBooth_02_F", { 11459, 11364.1, 3.05176e-005 }, 124.922 }, + { "Land_d_Addon_02_V1_F", { 11436, 11377.1, 3.05176e-005 }, 37.7171 }, + { "Land_i_Stone_HouseSmall_V3_F", { 11464.1, 11229.2, 0 }, 206.45 }, + { "Land_Wired_Fence_8mD_F", { 11480.2, 11247.8, 0.228699 }, 359.571 }, + { "Land_GarbagePallet_F", { 11473.9, 11223.8, -0.0253296 }, 0.234284 }, + { "Land_Wired_Fence_8m_F", { 11476.1, 11253.8, 0.219452 }, 359.549 }, + { "Land_d_Shop_02_V1_F", { 11460.3, 11357.9, 0 }, 215.984 }, + { "Land_Garbage_line_F", { 11464.2, 11351.2, 0.000854492 }, 52.1301 }, + { "Land_WheelieBin_01_F", { 11461.5, 11349.7, 0 }, 0.0691075 }, + { "Land_GarbagePallet_F", { 11463.7, 11363.2, -0.0102539 }, 0.234284 }, + { "Land_GarbageContainer_closed_F", { 11463.6, 11351.2, 3.05176e-005 }, 130.585 }, + { "Land_Timbers_F", { 11469.3, 11389.7, 0.0153503 }, 359.649 }, + { "Land_d_Stone_HouseBig_V1_F", { 11461.3, 11389.2, 0 }, 0 }, + { "Land_GarbagePallet_F", { 11466.6, 11393.2, -0.0388489 }, 0.234284 }, + { "Land_Wreck_Van_F", { 11462.1, 11396.9, -0.0365906 }, 282.773 }, + { "Land_Ancient_Wall_8m_F", { 11535.8, 11265.3, -0.125122 }, 144.692 }, + { "Land_Ancient_Wall_4m_F", { 11556.4, 11279, -0.112091 }, 148.121 }, + { "Land_Ancient_Wall_8m_F", { 11567.8, 11287.4, 0.0343018 }, 144.515 }, + { "Land_HBarrier_5_F", { 11577.4, 11307.8, -0.0361633 }, 324.948 }, + { "Land_HBarrier_5_F", { 11572.7, 11307.1, 0.0201416 }, 21.0099 }, + { "Land_HBarrier_5_F", { 11562.9, 11309.6, 0.0461121 }, 48.0841 }, + { "Land_HBarrier_5_F", { 11567.4, 11307.6, 0.0220337 }, 355.004 }, + { "Land_Cargo_HQ_V3_F", { 11571.9, 11330.1, -0.0317078 }, 268 }, + { "Land_HBarrier_5_F", { 11555.9, 11323.6, 0.0753479 }, 231.934 }, + { "Land_HBarrier_5_F", { 11562.4, 11326.7, -0.125763 }, 49.9669 }, + { "Land_HBarrier_5_F", { 11560.6, 11331.7, -0.0820618 }, 87.9061 }, + { "Land_HBarrier_5_F", { 11564.1, 11322.1, 0.0942078 }, 88.1076 }, + { "Land_HBarrier_5_F", { 11557.4, 11319, -0.0873108 }, 272.274 }, + { "Land_HBarrier_5_F", { 11564.8, 11339.8, 0.0496521 }, 177.031 }, + { "Land_HBarrier_5_F", { 11561.2, 11337.2, -0.0386963 }, 107.942 }, + { "Land_HBarrier_5_F", { 11557.3, 11313.6, -0.120697 }, 271.244 }, + { "Land_HBarrier_5_F", { 11566.1, 11318.1, 0.0227051 }, 36.0297 }, + { "Land_HBarrier_5_F", { 11557.1, 11332, 0.112 }, 177.096 }, + { "Land_HBarrier_3_F", { 11559.8, 11311.4, 0.0235596 }, 180.944 }, + { "Land_PortableLight_double_F", { 11578.2, 11325.2, -0.00167847 }, 357.96 }, + { "Land_PortableLight_double_F", { 11565.8, 11331, 0.00180054 }, 87.9936 }, + { "Land_PortableLight_double_F", { 11579.4, 11336.2, 0.00131226 }, 229.004 }, + { "Land_HBarrier_5_F", { 11570.4, 11340, 0.0419312 }, 176.992 }, + { "Land_HBarrier_5_F", { 11575.8, 11340.3, -0.00686646 }, 176.886 }, + { "Land_Cargo_Patrol_V3_F", { 11598.1, 11309, -0.261566 }, 315 }, + { "Land_HBarrier_5_F", { 11604.1, 11309.6, 0.263916 }, 91.8105 }, + { "Land_HBarrier_5_F", { 11592.5, 11305.2, 0.325073 }, 42.8493 }, + { "Land_HBarrier_5_F", { 11587.8, 11308.1, 0.193237 }, 23.3538 }, + { "Land_HBarrier_5_F", { 11602, 11304.9, -0.0116272 }, 133.822 }, + { "Land_HBarrier_5_F", { 11582.7, 11309.1, -0.0935974 }, 179.212 }, + { "Land_HBarrier_5_F", { 11597.2, 11303.2, 0.501007 }, 1.93882 }, + { "Land_PortableLight_double_F", { 11600.9, 11306.2, 0.0727539 }, 311.827 }, + { "Land_Wreck_HMMWV_F", { 11601.7, 11318.8, 0.0107117 }, 0.254173 }, + { "Land_HBarrier_5_F", { 11580.2, 11338.1, -0.0474548 }, 230.951 }, + { "Land_HBarrier_5_F", { 11604.3, 11315.3, 0.15564 }, 90.3624 }, + { "Land_HBarrier_5_F", { 11605.4, 11320.6, 0.00527954 }, 108.727 }, + { "Land_HBarrier_5_F", { 11605.2, 11325.8, -0.31781 }, 239.194 }, + { "Land_HBarrier_5_F", { 11602.4, 11336.2, -0.191833 }, 230.52 }, + { "Land_HBarrier_5_F", { 11587, 11332.5, 0.0287476 }, 272.043 }, + { "Land_HBarrier_5_F", { 11588, 11327.3, -0.0723877 }, 242.815 }, + { "Land_HBarrier_5_F", { 11604, 11331, 0.0708313 }, 271.184 }, + { "Land_HBarrier_5_F", { 11589.1, 11322.3, -0.0202026 }, 273.918 }, + { "Land_HBarrier_5_F", { 11586.6, 11318.1, 0.0480652 }, 330.046 }, + { "Land_HBarrier_5_F", { 11581.5, 11316.5, 0.0766602 }, 358.179 }, + { "Land_HBarrier_5_F", { 11584.9, 11336.1, -0.142578 }, 180.844 }, + { "Land_Tyres_F", { 11589.7, 11334.3, -0.0446472 }, 202.731 }, + { "Land_ToiletBox_F", { 11585.2, 11333.7, 0.00323486 }, 359.952 }, + { "Land_ToiletBox_F", { 11582.7, 11333.7, 0.00323486 }, 359.965 }, + { "Land_WaterTank_F", { 11584.8, 11322.4, 0.00262451 }, 270.952 }, + { "Land_Pallet_F", { 11599.1, 11334.4, 0.0012207 }, 167.913 }, + { "Land_PaperBox_open_empty_F", { 11593.4, 11312.9, 0.0102844 }, 166.48 }, + { "Land_PaperBox_closed_F", { 11595.3, 11314, 0.0174255 }, 20.1509 }, + { "Land_Pallets_stack_F", { 11599, 11336.3, 0.00747681 }, 107.491 }, + { "Land_BarrelSand_grey_F", { 11582.4, 11318.9, 0.00143433 }, 200.963 }, + { "Land_BarrelEmpty_F", { 11583, 11319.7, 0.00137329 }, 143.048 }, + { "Land_wpp_Turbine_V2_F", { 11630.6, 11256.4, 3.05176e-005 }, 0 }, + { "Land_wpp_Turbine_V2_F", { 11634.6, 11338.9, 0 }, 0 }, + { "Land_wpp_Turbine_V2_F", { 11645.6, 11296.8, 0 }, 0 }, + // North East + {"Land_ClutterCutter_medium_F",{10679.6,9435.62,7.62939e-006},0.0643096}, + {"Land_LampShabby_F",{10673.1,9422,-7.62939e-006},48.6578}, + {"Land_WoodenCart_F",{10677.4,9442.94,-0.0199509},0.1255}, + {"Land_Slums02_4m",{10674.5,9433.75,0.00186157},224.018}, + {"Land_Slums02_4m",{10673.4,9444.57,0.0374298},309.223}, + {"Land_Slums02_4m",{10672.1,9437.09,-0.00406647},244.438}, + {"Land_Slums02_4m",{10676.8,9446.41,0.0543442},0.119723}, + {"Land_Slums02_4m",{10671.6,9441.05,0.0140839},283.663}, + {"Land_Garbage_line_F",{10674,9443.57,0.0653152},217.23}, + {"Land_JunkPile_F",{10679.5,9444.45,0.00154877},359.709}, + {"Land_InvisibleBarrier_F",{10673.7,9444.29,0},131.152}, + {"Land_InvisibleBarrier_F",{10672,9440.85,7.62939e-006},285.049}, + {"Land_InvisibleBarrier_F",{10676.8,9445.61,0},182.439}, + {"Land_InvisibleBarrier_F",{10672.5,9437.2,0},63.0227}, + {"Land_InvisibleBarrier_F",{10674.8,9434.01,0},43.6106}, + {"Land_Campfire_F",{10679.6,9435.56,0.000465393},359.367}, + {"Land_WoodPile_F",{10675.9,9441.61,0.00293732},359.088}, + {"Land_CncBarrier_F",{10677,9430.56,3.8147e-005},38.2729}, + {"Land_Axe_F",{10676.6,9441.46,-0.00322723},73.9678}, + {"Land_HelipadEmpty_F",{10686.6,9418.95,4.57764e-005},0.0323291}, + {"Land_ClutterCutter_large_F",{10686.8,9435.84,-7.62939e-006},359.153}, + {"Land_Garbage_square5_F",{10690.6,9430.02,0.000267029},0.00641501}, + {"Land_Slums02_4m",{10684.4,9427.61,0.00271606},33.3528}, + {"Land_Slums02_4m",{10694.4,9429.21,0.0391235},116.206}, + {"Land_Slums02_4m",{10690.7,9442.29,0.0845108},48.305}, + {"Land_Slums02_4m",{10694.1,9436.97,0.0754395},67.0969}, + {"Land_Slums02_4m",{10695.1,9433.24,0.0348969},86.0347}, + {"Land_Slums02_4m",{10687.4,9444.58,0.0864868},22.401}, + {"Land_Slums02_4m",{10687.7,9426.84,0.00393677},356.182}, + {"Land_Slums02_4m",{10680.9,9446.4,0.0634003},1.21943}, + {"Land_Slums02_4m",{10681,9429.68,0.00272369},33.3528}, + {"Land_Slums02_4m",{10691.6,9426.76,-0.00839233},160.21}, + {"Land_TentDome_F",{10687.7,9442.09,-0.0244064},290.361}, + {"Land_InvisibleBarrier_F",{10680.9,9445.82,0},182.266}, + {"Land_InvisibleBarrier_F",{10684.1,9427.22,0},33.8221}, + {"Land_InvisibleBarrier_F",{10680.8,9429.46,0},33.8225}, + {"Land_InvisibleBarrier_F",{10690.3,9441.82,0},227.277}, + {"Land_InvisibleBarrier_F",{10694.5,9433.07,0},268.195}, + {"Land_InvisibleBarrier_F",{10687,9444.06,7.62939e-006},196.736}, + {"Land_InvisibleBarrier_F",{10687.7,9426.38,0},351.992}, + {"Land_InvisibleBarrier_F",{10691.6,9427.21,-7.62939e-006},334.964}, + {"Land_InvisibleBarrier_F",{10693.8,9436.79,0},248.547}, + {"Land_InvisibleBarrier_F",{10687.7,9426.38,0},352.452}, + {"Land_InvisibleBarrier_F",{10693.9,9429.35,0},297.599}, + {"Land_WorkStand_F",{10689.6,9431.71,0.00012207},0.4623}, + {"Land_FieldToilet_F",{10700.1,9449.24,0.0270386},229.999}, + {"Land_PortableLight_double_F",{10688.4,9426.99,-7.62939e-006},152.941}, + {"Land_Cages_F",{10691,9428.64,9.91821e-005},359.15}, + {"Land_WoodenTable_large_F",{10685.9,9434.16,0.000358582},143.934}, + {"Land_Pallets_stack_F",{10692.5,9430.88,0.0114899},359.393}, + {"Land_WheelCart_F",{10683.8,9441.73,0.0119476},181.87}, + {"Land_ShelvesWooden_khaki_F",{10685.5,9440.39,0.0146866},238.174}, + {"Land_CampingChair_V1_F",{10683.2,9430.95,0.00310516},0.668239}, + {"Land_CratesPlastic_F",{10699.1,9449.65,0.00570679},110.237}, + {"Land_BarrelWater_F",{10684.7,9440.29,0.0127869},2.49711}, + {"Land_Slums02_pole",{10682.8,9445.84,0.00499725},0.672715}, + {"Land_Slums02_pole",{10691.6,9440.46,0.00566864},321.615}, + {"Land_GasTank_01_khaki_F",{10690.6,9431.43,0.00012207},200.712}, + // South East + { "Land_spp_Mirror_F", { 12021.8, 5100.76, -7.62939e-006 }, 182.521 }, + { "Land_spp_Mirror_Broken_F", { 12031.5, 5104.48, 0 }, 182.521 }, + { "Land_Slums01_8m", { 12050.9, 5109.1, -0.00202179 }, 359.933 }, + { "Land_Slums01_8m", { 12051, 5121.93, 0.0187302 }, 118.143 }, + { "Land_Slums01_8m", { 12054.5, 5128.94, 0.0217743 }, 118.269 }, + { "Land_WoodPile_large_F", { 12057.6, 5121.48, -9.15527e-005 }, 21.8792 }, + { "Land_WoodPile_large_F", { 12057.1, 5119.12, 9.91821e-005 }, 203.739 }, + { "Land_WoodPile_large_F", { 12058.9, 5123.89, -0.00171661 }, 197.098 }, + { "Land_WoodPile_large_F", { 12055.8, 5119.65, -9.15527e-005 }, 16.6504 }, + { "Land_Garbage_square3_F", { 12058.5, 5119.32, -0.000190735 }, 200.54 }, + { "Land_Cages_F", { 12051, 5119.59, 0.00479126 }, 22.0683 }, + { "Land_HelipadEmpty_F", { 12058.1, 5100.99, 0 }, 359.533 }, + { "Land_cargo_addon02_V2_F", { 12075.8, 5110.74, 0 }, 313.277 }, + { "Land_Slums01_8m", { 12067.6, 5108.54, -0.00462341 }, 194.501 }, + { "Land_Slums01_8m", { 12067, 5122.79, -0.00128937 }, 106.496 }, + { "Land_Slums01_8m", { 12078.5, 5109.96, -0.00531769 }, 302.472 }, + { "Land_Slums01_8m", { 12080.8, 5125.66, -0.0038147 }, 62.4229 }, + { "Land_Slums01_8m", { 12071.9, 5107.49, -0.00380707 }, 194.501 }, + { "Land_Wreck_Offroad_F", { 12074.4, 5127.79, 0.0411682 }, 325.773 }, + { "Land_LampShabby_F", { 12070.6, 5109.13, -0.0195618 }, 0 }, + { "Land_Wreck_Car3_F", { 12078.6, 5126.01, 0.0244293 }, 146.6 }, + { "Land_TentDome_F", { 12076.8, 5111.69, 3.8147e-005 }, 359.62 }, + { "Land_Garbage_line_F", { 12078, 5124.46, -0.0770569 }, 142.344 }, + { "Land_JunkPile_F", { 12073.8, 5125.85, -0.0101395 }, 359.544 }, + { "Land_InvisibleBarrier_F", { 12065.4, 5108.95, 0 }, 16.7308 }, + { "Land_InvisibleBarrier_F", { 12074.6, 5106.78, 0 }, 19.2329 }, + { "Land_InvisibleBarrier_F", { 12081.8, 5123.84, 0 }, 243.383 }, + { "Land_InvisibleBarrier_F", { 12070.3, 5107.81, 0 }, 16.7344 }, + { "Land_InvisibleBarrier_F", { 12079.7, 5111.63, 0 }, 122.723 }, + { "Land_InvisibleBarrier_F", { 12080.1, 5127.47, 0 }, 239.065 }, + { "Land_InvisibleBarrier_F", { 12077.2, 5107.93, 0 }, 122.631 }, + { "Land_InvisibleBarrier_F", { 12069.1, 5128.14, 0 }, 122.279 }, + { "Land_InvisibleBarrier_F", { 12067.6, 5124.65, 0 }, 112.368 }, + { "Land_InvisibleBarrier_F", { 12066.5, 5120.62, 0 }, 104.748 }, + { "Land_Campfire_F", { 12070.3, 5113.58, 0.00119019 }, 0 }, + { "Land_WoodPile_F", { 12073, 5117.34, -0.00229645 }, 236.097 }, + { "Land_CncBarrier_F", { 12065.4, 5116.71, 0 }, 103.32 }, + { "Land_CncBarrier_stripes_F", { 12082.8, 5121.11, 0.0150528 }, 90.5238 }, + { "Land_CncBarrier_stripes_F", { 12082.3, 5117.84, 0.0185394 }, 104.536 }, + { "Land_CncBarrier_stripes_F", { 12064.5, 5112.14, 0.0020752 }, 279.748 }, + { "Land_CncBarrier_stripes_F", { 12081.2, 5114.26, 0.0116425 }, 300.824 }, + { "Land_WheelCart_F", { 12073, 5108.21, 0.00278473 }, 301.42 }, + { "Land_Slums01_pole", { 12068.4, 5126.9, 0.000801086 }, 260.084 }, + { "Land_Portable_generator_F", { 12069.8, 5108.61, 0.00123596 }, 359.87 }, + { "Land_CampingChair_V2_F", { 12076.1, 5109.27, 0.00286865 }, 99.2684 }, + { "Land_CratesPlastic_F", { 12072.4, 5118.94, 3.05176e-005 }, 359.993 }, + { "Land_BarrelWater_F", { 12073.1, 5110.06, 0.00231171 }, 359.255 }, + { "Land_Axe_fire_F", { 12077.1, 5109.95, -0.00322723 }, 359.907 }, + { "Land_Slums01_8m", { 12070.5, 5130.62, 0.0177002 }, 300.964 }, + { "Land_Slums01_8m", { 12075.7, 5131.46, 0.00196838 }, 40.0636 }, + { "Land_Slums01_8m", { 12060.6, 5133.4, 0.000160217 }, 168.792 }, + { "Land_LampShabby_F", { 12063, 5131.89, 0 }, 169.228 }, + { "Land_InvisibleBarrier_F", { 12073.8, 5133.13, -7.62939e-006 }, 221.588 }, + { "Land_InvisibleBarrier_F", { 12071.2, 5131.82, 0 }, 122.469 }, + { "Land_InvisibleBarrier_F", { 12077.1, 5130.37, 0 }, 221.588 }, + { "Land_Slums01_pole", { 12072.6, 5134.17, 0.00662994 }, 359.468 }, + { "Land_Slums01_pole", { 12064.7, 5134.13, 0.0012207 }, 359.827 }, + { "Land_Garbage_square5_F", { 12093.4, 5120.34, 0.00907135 }, 359.692 }, + { "Land_FieldToilet_F", { 12093.7, 5119.73, 0.0153198 }, 155.607 }, + { "Land_Grave_rocks_F", { 12116.8, 5130.7, 0 }, 0 }, + // South West + { "Flag_US_F", { 4542.15, 4522, -1.52588e-005 }, 209.275 }, + { "Land_HelipadEmpty_F", { 4552.98, 4515.85, 0 }, 0 }, + { "Land_ToiletBox_F", { 4556.27, 4549.86, 0.175018 }, 0.00193372 }, + { "Land_Timbers_F", { 4564.65, 4516.04, 0.199997 }, 325.751 }, + { "Land_Wreck_Van_F", { 4573.34, 4506.86, 0.199997 }, 151.285 }, + { "Land_Garbage_square5_F", { 4588.59, 4516.25, 0.199997 }, 0 }, + { "Land_LampStreet_small_F", { 4577.73, 4514.35, 0.199997 }, 239.902 }, + { "Land_Pipes_large_F", { 4581.84, 4521.72, 0.174988 }, 146.546 }, + { "Land_Pallets_F", { 4586.84, 4514.64, 0.275681 }, 335.695 }, + { "Land_EngineCrane_01_F", { 4581.71, 4510.71, 0.174988 }, 95.9295 }, + { "Land_GarbageContainer_open_F", { 4582.15, 4523.48, 0.175003 }, 151.569 }, + { "Land_Workbench_01_F", { 4585.25, 4521.76, 0.174988 }, 50.0718 }, + { "Barrels", { 4589.08, 4516.4, 0.225494 }, 239.1 }, + { "SignAd_SponsorS_Redstone_F", { 4585.1, 4511.84, 0 }, 142.53 }, + { "Land_WoodenTable_large_F", { 4579.26, 4513.71, 0.175003 }, 142.285 }, + { "Land_Sink_F", { 4573.95, 4519.14, 0.175003 }, 51.2154 }, + { "Land_CncBarrier_stripes_F", { 4578.63, 4513.11, 0.199997 }, 231.189 }, + { "Land_CncBarrier_stripes_F", { 4577.53, 4518.75, 0.199997 }, 325.531 }, + { "Land_CncBarrier_stripes_F", { 4576.61, 4515.73, 0.199997 }, 231.189 }, + { "Land_WoodenTable_small_F", { 4578.02, 4515.24, 0.174988 }, 319.098 }, + { "Land_WeldingTrolley_01_F", { 4585.96, 4513.3, 0.174988 }, 236.669 }, + { "Land_Bench_F", { 4573.12, 4520.15, 0.175003 }, 232.492 }, + { "Land_ToolTrolley_01_F", { 4586.23, 4520.34, 0.175018 }, 228.625 }, + { "Land_ToolTrolley_02_F", { 4587.01, 4519.39, 0.174973 }, 320.682 }, + { "Land_PlasticCase_01_large_F", { 4588.17, 4518.07, 0.174988 }, 321.256 }, + { "Land_WheelieBin_01_F", { 4581.21, 4522.58, 0.175003 }, 139.325 }, + { "Land_WaterCooler_01_old_F", { 4575.21, 4518.16, 0.175064 }, 226.8 }, + { "Land_ChairWood_F", { 4583.23, 4521.15, 0.175018 }, 270.935 }, + { "Land_BarrelWater_F", { 4574.63, 4517.66, 0.175049 }, 354.242 }, + { "Land_PlasticCase_01_medium_F", { 4579.23, 4513.68, 0.175003 }, 120.138 }, + { "Land_Tyre_F", { 4576.11, 4505.51, 0.0297241 }, 358.563 }, + { "Land_GasTank_01_blue_F", { 4588.49, 4515.58, 0.175034 }, 327.133 }, + { "Land_GasTank_01_yellow_F", { 4588.23, 4515.09, 0.175034 }, 247.551 }, + { "Land_PlasticCase_01_small_F", { 4578.02, 4515.24, 0.174988 }, 137.793 }, + { "Land_SurvivalRadio_F", { 4586.07, 4521.12, 0.941803 }, 269.968 }, + { "Fridge_01_closed_F", { 4576.98, 4516.48, 0.175064 }, 238.777 }, + // Boat Vendor + { "Land_WorkStand_F", { 13678.8, 4032.35, -0.00124931 }, 359.908 }, + { "Land_WheelCart_F", { 13671.7, 4037.31, 0.00549078 }, 0.0201131 }, + { "Land_TentDome_F", { 13661.6, 4027.37, -0.014101 }, 359.452 }, + { "Land_Pier_Box_F", { 13696.5, 4033.33, 0.599987 }, 0 }, + { "Land_Campfire_F", { 13681.2, 4035.13, 0.00247145 }, 0.1179 }, + { "Land_Wreck_Traw_F", { 13710.9, 3862.6, 0.242525 }, 0.611813 }, + { "Land_WavePowerPlant_F", { 13878.7, 3932.25, 9.53635 }, 345.483 }, + // Stary Sobor Military + { "Land_HBarrierBig_F", { 6296.66, 7795.88, -0.00692749 }, 219.542 }, + { "Land_HBarrier_5_F", { 6290.16, 7793.43, 0.0203857 }, 218.553 }, + { "Land_HBarrier_5_F", { 6297.02, 7790.79, 0.110291 }, 130.462 }, + { "Land_HBarrier_5_F", { 6285.72, 7796.98, 0.0177002 }, 219.491 }, + { "Land_PaperBox_closed_F", { 6292.73, 7799.57, -0.00213623 }, 221.545 }, + { "Land_WaterTank_F", { 6299.27, 7797.89, 0.00109863 }, 219.43 }, + { "Land_HBarrierBig_F", { 6272.08, 7813.91, 0.00427246 }, 193.847 }, + { "Land_HBarrierBig_F", { 6297.31, 7802.14, -0.00527954 }, 307.543 }, + { "Land_HBarrierBig_F", { 6276.2, 7808.03, 0.000549316 }, 83.8871 }, + { "Land_HBarrierBig_F", { 6280.2, 7801.39, -0.00228882 }, 37.4585 }, + { "Land_HBarrier_5_F", { 6288.43, 7824.38, 0.00488281 }, 217.5 }, + { "Land_HBarrier_5_F", { 6293.44, 7822.44, -0.00402832 }, 175.45 }, + { "Land_PortableLight_double_F", { 6278.42, 7808.37, 0 }, 261.498 }, + { "Land_Pallets_stack_F", { 6291.09, 7800.92, 0.000518799 }, 203.664 }, + { "Land_HBarrierBig_F", { 6293.92, 7846.05, -0.000823975 }, 37.5492 }, + { "Land_HBarrier_5_F", { 6288.87, 7844.77, 0.0146179 }, 125.61 }, + { "Land_HBarrier_5_F", { 6287.4, 7836.51, 0.00183105 }, 36.5104 }, + { "Land_HBarrier_5_F", { 6285.68, 7840.26, 0.00210571 }, 125.565 }, + { "Land_PortableLight_double_F", { 6288.7, 7841.98, 0 }, 125.471 }, + { "Land_Cargo_Patrol_V1_F", { 6291.25, 7840.74, 0 }, 125.498 }, + { "Land_BagBunker_Large_F", { 6284.77, 7830.87, 0.000396729 }, 125.544 }, + { "Land_Cargo_Patrol_V1_F", { 6315.33, 7798.51, 0 }, 306.498 }, + { "Land_HBarrierBig_F", { 6304.61, 7794.26, -0.00469971 }, 164.31 }, + { "Land_HBarrierBig_F", { 6312.32, 7793.03, -0.00683594 }, 219.624 }, + { "Land_HBarrier_5_F", { 6317.45, 7794.16, 0.0157166 }, 307.501 }, + { "Land_HBarrier_5_F", { 6320.83, 7798.61, 0.0254822 }, 307.457 }, + { "Land_PortableLight_double_F", { 6317.92, 7796.97, 0 }, 307.493 }, + { "Land_PortableLight_double_F", { 6309.06, 7797.2, 0 }, 188.5 }, + { "Land_ToiletBox_F", { 6314.53, 7793.88, 0.000274658 }, 132.45 }, + { "Land_BagBunker_Large_F", { 6326.43, 7813.56, -0.000640869 }, 307.499 }, + { "Land_HBarrier_5_F", { 6319.26, 7802.51, -0.00213623 }, 219.502 }, + { "Land_HBarrier_5_F", { 6318.51, 7814.62, -0.00192261 }, 219.497 }, + { "Land_HBarrier_5_F", { 6329.87, 7820.18, 0.0175171 }, 299.066 }, + { "Land_HBarrier_5_F", { 6301.78, 7807.92, -0.00479126 }, 307.524 }, + { "Land_HBarrier_5_F", { 6313.51, 7816.39, -0.000457764 }, 171.499 }, + { "Land_TentA_F", { 6325.46, 7824.22, 9.15527e-005 }, 94.5132 }, + { "Land_TentA_F", { 6323.97, 7829.37, 0.00863647 }, 82.3408 }, + { "Land_Campfire_F", { 6317.24, 7829.11, -0.0592346 }, 26.001 }, + { "Land_WoodPile_F", { 6312.93, 7826.2, 0.00164795 }, 1.00009 }, + { "Land_WaterBarrel_F", { 6304.27, 7808.83, -3.05176e-005 }, 136.44 }, + { "Land_Sack_F", { 6326, 7822.95, 0.010437 }, 353.513 }, + { "Land_Basket_F", { 6325.17, 7822.36, 9.15527e-005 }, 137.301 }, + { "Land_MetalBarrel_F", { 6305.22, 7808.31, 0 }, 244.342 }, + { "Land_BarrelTrash_grey_F", { 6305.45, 7807.6, 0.000549316 }, 313.436 }, + { "Land_BarrelEmpty_grey_F", { 6304.88, 7807.12, 0 }, 307.487 }, + { "Land_WoodenLog_F", { 6317.17, 7827.17, 0.000335693 }, 77.1906 }, + { "Land_Axe_F", { 6313.81, 7826.37, -0.00338745 }, 248.999 }, + { "Land_CanisterFuel_F", { 6313.75, 7825.28, 6.10352e-005 }, 34.3382 }, + { "Land_Canteen_F", { 6323.97, 7823.34, 9.15527e-005 }, 347.753 }, + { "Land_TinContainer_F", { 6317.53, 7827.55, 0.00189209 }, 235.145 }, + { "Land_Camping_Light_F", { 6317.18, 7827.1, 0.481659 }, 78.9907 }, + { "Land_HBarrierBig_F", { 6325.11, 7838.57, 0.00241089 }, 219.523 }, + { "Land_HBarrierBig_F", { 6301.64, 7845.13, -0.00299072 }, 342.464 }, + { "Land_HBarrierBig_F", { 6309.64, 7843.89, -0.00140381 }, 37.508 }, + { "Land_HBarrierBig_F", { 6317.6, 7841.65, 0.00088501 }, 187.754 }, + { "Land_HBarrierBig_F", { 6309.25, 7837.67, 0.0010376 }, 125.494 }, + { "Land_HBarrierBig_F", { 6328.96, 7831.3, 0.000183105 }, 265.544 }, + { "Land_HBarrier_5_F", { 6305.08, 7831.75, 0.013855 }, 306.499 }, + { "Land_TentA_F", { 6323.29, 7833.88, -3.05176e-005 }, 56.9963 }, + { "Land_ToiletBox_F", { 6306.66, 7840.59, 0.000305176 }, 37.4933 }, + { "Land_Pallets_F", { 6305.09, 7836.28, 0.00402832 }, 301.498 }, + { "Land_WoodenBox_F", { 6315.52, 7830.8, 0.000152588 }, 135.939 }, + { "Land_HBarrierBig_F", { 6355.05, 7758.61, 0.01651 }, 180.899 }, + { "Land_HBarrier_3_F", { 6341.05, 7763.39, -0.024231 }, 230.09 }, + { "Land_PaperBox_closed_F", { 6355.89, 7769.34, 0.000213623 }, 300.988 }, + { "Land_HBarrierBig_F", { 6356.52, 7790.86, -0.0449524 }, 90.0002 }, + { "Land_HBarrierBig_F", { 6334.66, 7777.03, 0.000701904 }, 260.011 }, + { "Land_HBarrierBig_F", { 6356.92, 7782.55, -0.0672607 }, 89.0069 }, + { "Land_HBarrier_5_F", { 6358.21, 7796.04, -0.00231934 }, 178 }, + { "Land_HBarrier_5_F", { 6359.02, 7777.34, -0.0152588 }, 177.997 }, + { "Land_HBarrier_3_F", { 6345.2, 7793.81, 0.00137329 }, 299 }, + { "Land_HBarrier_3_F", { 6349.54, 7771.55, -0.00192261 }, 230.001 }, + { "Land_HBarrier_3_F", { 6332.6, 7798.95, 0.00323486 }, 299 }, + { "Land_PaperBox_closed_F", { 6357.05, 7771.16, 0 }, 270 }, + { "Land_Pallets_stack_F", { 6348.26, 7791.23, 3.05176e-005 }, 225.003 }, + { "Land_Pallets_stack_F", { 6348.28, 7788.84, 0.00216675 }, 263.003 }, + { "Land_HBarrierBig_F", { 6350.34, 7814.14, -0.000396729 }, 134.998 }, + { "Land_Razorwire_F", { 6352.86, 7822.44, 0.000793457 }, 196.803 }, + { "Land_HBarrier_5_F", { 6330.96, 7824.57, -0.0115967 }, 68.0471 }, + { "Land_HBarrierBig_F", { 6375.54, 7759.76, 0.0117493 }, 178.122 }, + { "Land_HBarrier_3_F", { 6386.83, 7765.76, 0.0414429 }, 128.913 }, + { "Land_Cargo_Tower_V1_F", { 6364.71, 7786.91, 0.00137329 }, 269 }, + { "Land_HBarrierBig_F", { 6371.91, 7791.33, -0.0449524 }, 90 }, + { "Land_HBarrierBig_F", { 6372.13, 7782.9, -0.0224304 }, 90.0001 }, + { "Land_HBarrier_5_F", { 6370.43, 7777.76, -0.0215149 }, 177.996 }, + { "Land_HBarrier_5_F", { 6369.94, 7796.64, -0.00372314 }, 179 }, + { "Land_HBarrier_3_F", { 6380.18, 7795.26, 0.00366211 }, 244.001 }, + { "Land_HBarrier_3_F", { 6378.41, 7772.92, -0.0100403 }, 129 }, + { "Land_ToiletBox_F", { 6360.83, 7789.36, -3.05176e-005 }, 269.005 }, + { "Land_WaterTank_F", { 6375.86, 7785.65, 0.00012207 }, 0.000633659 }, + { "Land_WaterTank_F", { 6375.74, 7788.49, 0.000183105 }, 0.000302211 }, + { "Land_PortableLight_double_F", { 6360.99, 7782.88, 8.57773 }, 88.0059 }, + { "Land_PortableLight_double_F", { 6363.69, 7791.14, 4.66943 }, 272 }, + { "Land_HBarrierBig_F", { 6375.25, 7815.47, 0.00146484 }, 226.006 }, + { "Land_Razorwire_F", { 6361.44, 7821.18, -0.0170898 }, 353.994 }, + { "Land_HBarrier_3_F", { 6363.49, 7807.3, 0.00195313 }, 357.999 }, + { "Land_HBarrierBig_F", { 6390.12, 7781.39, -0.000366211 }, 275 }, + { "Land_HBarrier_3_F", { 6391.39, 7801.7, 0.00195313 }, 244 }, + // NW Airfield + { "Land_Airport_Tower_F", { 4327.37, 10905.9, 0 }, 61.1295 }, + { "Land_Offices_01_V1_F", { 4573.46, 9819.88, 0 }, 244.926 }, + { "Land_i_Barracks_V2_F", { 4598.97, 9720.41, 0 }, 100.719 }, + // Wind Farm + {"Land_wpp_Turbine_V2_F", { 5449.11, 13270.3, -0.00350952 }, 0 }, + {"Land_wpp_Turbine_V2_F", { 5477.64, 13280.7, 3.05176e-005 }, 0 }, + {"Land_spp_Transformer_F", { 5478.29, 13300.4, 0 }, 0}, + {"Land_dp_transformer_F", { 5482.13, 13300.9, -3.05176e-005 }, 0 }, + {"Land_wpp_Turbine_V2_F", { 5503.9, 13291.3, 0.0585327 }, 0 }, + // Old Hero small military post. + { "Land_HBarrier_5_F", { 12899.8, 12748.4, 0.02034 }, 354.796 }, + { "Land_HBarrier_5_F", { 12894.1, 12748, 0.013916 }, 354.737 }, + { "Land_Cargo_Patrol_V2_F", { 12897.5, 12750.2, 0 }, 85.8348 }, + { "Land_HBarrier_5_F", { 12898.8, 12763.6, 0.00309753 }, 354.799 }, + { "Land_HBarrier_5_F", { 12891.9, 12751.4, 0.132568 }, 85.9089 }, + { "Land_HBarrier_5_F", { 12893.1, 12763.1, 0.0252838 }, 354.791 }, + { "Land_Garbage_square5_F", { 12898.5, 12754.1, 0.403336 }, 356.786 }, + { "Land_HBarrier_3_F", { 12894.2, 12753.5, -0.00849915 }, 176.727 }, + { "Land_Sign_WarningMilitaryArea_F", { 12878.3, 12753.7, 0 }, 86.9098 }, + { "Land_Cargo_HQ_V2_F", { 12921.2, 12747.4, 1.52588e-005 }, 354.835 }, + { "Land_HBarrier_5_F", { 12906.8, 12739.5, 0.185944 }, 32.8205 }, + { "Land_HBarrier_5_F", { 12928.2, 12739.4, -0.0260773 }, 353.715 }, + { "Land_HBarrier_5_F", { 12922.9, 12739.1, -0.00527954 }, 353.753 }, + { "Land_HBarrier_5_F", { 12917.2, 12738.6, -0.00486755 }, 353.757 }, + { "Land_HBarrier_5_F", { 12912.2, 12738.2, -0.0137329 }, 353.744 }, + { "Land_HBarrier_5_F", { 12901.8, 12744.8, 0.200394 }, 86.3687 }, + { "Land_Garbage_square5_F", { 12909.3, 12746, 1.08038 }, 303.574 }, + { "Land_HBarrier_3_F", { 12903.3, 12741.9, -0.0743713 }, 214.774 }, + { "Land_Cargo_Patrol_V2_F", { 12924.7, 12773.8, 0 }, 210.835 }, + { "Land_ScrapHeap_2_F", { 12915.2, 12759.6, 0.0301971 }, 169.814 }, + { "Land_Loudspeakers_F", { 12915.6, 12750.6, 0 }, 356.835 }, + { "Land_ScrapHeap_1_F", { 12921.4, 12760.3, 0.0139313 }, 349.801 }, + { "Land_HBarrier_5_F", { 12921.6, 12756, -0.0275116 }, 353.819 }, + { "Land_HBarrier_5_F", { 12929.5, 12770.1, 0.118179 }, 84.8375 }, + { "Land_HBarrier_5_F", { 12929.9, 12764.5, 0.142838 }, 84.8577 }, + { "Land_HBarrier_5_F", { 12918.7, 12776.7, -0.0367279 }, 353.82 }, + { "Land_HBarrier_5_F", { 12913.2, 12776.2, -0.0335236 }, 353.831 }, + { "Land_HBarrier_5_F", { 12919.8, 12776.8, -0.0367126 }, 353.82 }, + { "Land_HBarrier_5_F", { 12916, 12755.5, -0.0212097 }, 353.818 }, + { "Land_HBarrier_5_F", { 12927.1, 12773.9, 0.00674438 }, 30.819 }, + { "Land_HBarrier_5_F", { 12927.1, 12756.5, -0.0491486 }, 353.797 }, + { "Land_HBarrier_5_F", { 12900.6, 12767.1, 0.0879211 }, 86.4439 }, + { "Land_HBarrier_5_F", { 12903.9, 12773.6, -0.0444031 }, 307.87 }, + { "Land_HBarrier_5_F", { 12901.7, 12752, 0.132278 }, 86.4207 }, + { "Land_HBarrier_5_F", { 12907.7, 12775.7, -0.0238953 }, 353.847 }, + { "Land_HBarrier_5_F", { 12905.2, 12754.4, 0.00515747 }, 354.814 }, + { "Land_GarbageBags_F", { 12904.7, 12751, -0.0263214 }, 26.6415 }, + { "Land_Garbage_square5_F", { 12917.5, 12761.8, 0.00386047 }, 19.7988 }, + { "Land_HBarrier_3_F", { 12901.2, 12770.2, 0.0333557 }, 130.704 }, + { "Land_HBarrier_3_F", { 12923.5, 12776.2, -0.00253296 }, 212.829 }, + { "Land_JunkPile_F", { 12907.2, 12769.1, 0.00367737 }, 354.816 }, + { "Land_Pallets_stack_F", { 12909, 12767.7, 0.000915527 }, 128.791 }, + { "Land_CratesShabby_F", { 12910.4, 12768, 0.0017395 }, 245.684 }, + { "Land_GarbageBarrel_01_F", { 12914.8, 12763.5, -0.00370789 }, 182.87 }, + { "Land_HBarrier_5_F", { 12931.5, 12742.2, -0.338425 }, 264.829 }, + { "Land_HBarrier_5_F", { 12931.2, 12747.7, -0.208801 }, 264.774 }, + { "Land_HBarrier_5_F", { 12930.4, 12758.9, 0.141861 }, 84.8576 }, + { "Land_HBarrier_5_F", { 12930.8, 12753.3, -0.150925 }, 264.812 } + }; + staticNpcPos[] = { + // South West + { "C_man_hunter_1_F", { 4585.05, 4516.51, 0.201431 }, 273.197 }, + // South East + { "C_man_hunter_1_F", { 12075.5, 5109.38, 0.00123596 }, 313.34}, + // North East + { "C_man_hunter_1_F", { 10686.8,9437.87,0.00151825 }, 231.976}, + //Boat Trader + { "C_man_hunter_1_F", { 13694, 4033.22, 0.0021317 }, 93.5839 } + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/dingor.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/dingor.h new file mode 100644 index 0000000..6c9bef2 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/dingor.h @@ -0,0 +1,30 @@ +class dingor : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "center" } // temp for now + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/esseker.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/esseker.h new file mode 100644 index 0000000..e8cef77 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/esseker.h @@ -0,0 +1,158 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Riche + + Description: + Epoch gamemode server Side map specific configs for esseker. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/esseker.h +*/ +class Esseker : Default +{ + worldSize = 12000; + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", { 5073.31, 8903.09, 0 } }, + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", { 4407.77, 6054.78, 0 } }, + { "TP_Booth_e_EPOCH", { 13.5127,0.410156,-10.3098, 90}, "", { 8692.93, 3854.72, 0 } } + }; + + propsPos[] = { + //Banking + {"Land_PhoneBooth_02_F", {2676.67, 4481.42, 0.971237}, 251.364}, + {"Land_PhoneBooth_02_F", {4780.24, 5036.36, 0}, 61.8182}, + {"Land_PhoneBooth_02_F", {8375, 5886.44, 0.874567}, 260}, + {"Land_PhoneBooth_02_F", {9066.22, 5711.39, 1.01706}, 92.2728}, + {"Land_PhoneBooth_02_F", {10274, 5426.17, 0.389097}, 5.90916}, + {"Land_PhoneBooth_02_F", {11867.5, 7928.89, 0}, 0}, + {"Land_PhoneBooth_02_F", {1954.29, 7823.96, 0}, 19.5454}, + {"Land_PhoneBooth_02_F", {7229.75, 9369.1, 0}, 2.72723}, + // Turbines + {"Land_wpp_Turbine_V2_F", {660.226, 10060.1, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {638.57, 10022.9, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {619.792, 9992.28, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {8460.08, 10413.9, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {8454.32, 10389.2, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {9049.06, 7300.92, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {9076.69, 7307.17, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {9106.83, 7312.57, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {10366.2, 4436.95, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {10388.1, 4432.72, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {10409.6, 4431.36, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {10477.8, 1711.21, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {10450.9, 1722.47, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {10427.2, 1732.72, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {6786.74, 1593.55, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {6815.66, 1599.61, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {5271.16, 701.119, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {5299.02, 686.961, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {5333.93, 680.457, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {1004.79, 995.512, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {1013.99, 964.396, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {1781.4, 4202.1, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {1809.62, 4202.09, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {3322.47, 6256.38, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {3354.45, 6249.63, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {3380.16, 6244.95, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {1185.73, 7709.4, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {1223.07, 7716, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {5535.8, 8959.03, 0}, 0}, + {"Land_wpp_Turbine_V2_F", {5507.72, 8966.35, 0}, 0}, + // Esseker South Trader + {"ClutterCutter_EP1", {8694.08, 3853.14, 0}, 0}, + {"ClutterCutter_EP1", {8691.68, 3859.46, 0}, 0}, + {"land_Objects11", {8699.23, 3858.52, 0}, 319.546}, + {"RU_WarfareBVehicleServicePoint", {8693.92, 3864.09, -0.126221}, 149.545}, + {"CDF_WarfareBBarrier10x", {8692.13, 3865.79, -0.315292}, 329.545}, + {"CDF_WarfareBBarrier10x", {8705.19, 3862.98, -0.226089}, 60.4545}, + {"CDF_WarfareBBarrier10x", {8700.07, 3851.64, 0}, 329.545}, + {"CDF_WarfareBBarrier10x", {8687.66, 3853.77, -0.350647}, 59.5454}, + {"Land_Fire_barrel_burning", {8700.64, 3856.44, 0}, 60.9091}, + {"Land_Ind_BoardsPack2", {8689.38, 3853.65, 0}, 327.273}, + {"Paleta2", {8691.03, 3851.63, 0}, 0}, + {"Land_cages_EP1", {8696.63, 3851.24, 0}, 240}, + {"Land_transport_kiosk_EP1", {8689.07, 3861.7, 0}, 60.4545}, + {"Land_stand_waterl_EP1", {8698.58, 3852.75, 0}, 149.545}, + {"Land_tires_EP1", {8690.3, 3854.55, 0}, 0}, + {"Misc_TyreHeapEP1", {8688.46, 3856.11, 0}, 0}, + {"Land_transport_crates_EP1", {8693.05, 3859.05, 0}, 0}, + {"Campfire_burning_F", {8696.22, 3857.09, 0}, 0}, + {"Land_bags_EP1", {8687.38, 3861.25, 0}, 0}, + // West Trader + {"ClutterCutter_EP1", {4403.29, 6054.46, 0}, 0}, + {"CDF_WarfareBBarrier10x", {4399.01, 6060.29, -0.514542}, 307.273}, + {"CDF_WarfareBBarrier10x", {4411.15, 6059.94, 0}, 217.273}, + {"CDF_WarfareBBarrier10x", {4414.62, 6048.48, -0.14389}, 306.818}, + {"CDF_WarfareBBarrier10x", {4402.54, 6048.84, -0.160172}, 37.7273}, + {"USMC_WarfareBVehicleServicePoint", {4405.97, 6049.83, 0}, 127.727}, + {"Misc_cargo_cont_net2", {4400.11, 6053.7, 0}, 304.545}, + {"Land_StallWater_F", {4399.67, 6058.44, 0}, 307.273}, + {"Land_Sacks_heap_F", {4405.97, 6061.98, 0}, 0}, + {"Land_Sacks_goods_F", {4407.62, 6060.97, 0}, 35.4546}, + {"Land_CratesShabby_F", {4401.47, 6061.99, 0}, 40}, + {"Land_CratesPlastic_F", {4412.85, 6049.18, 0}, 0}, + {"Land_WoodenCart_F", {4412.07, 6047.53, 0}, 34.091}, + {"Land_Cages_F", {4401.22, 6060.5, 0}, 0}, + {"Land_fort_bagfence_corner", {4410.22, 6059.21, 0}, 36.3637}, + {"Land_fort_bagfence_corner", {4412.56, 6057.64, 0}, 305.455}, + {"Land_Campfire_burning", {4403.67, 6057.8, 0.0157471}, 0}, + {"Land_stand_small_EP1", {4414.19, 6049.87, 0}, 126.818}, + {"Land_transport_kiosk_EP1", {4414.51, 6051.86, 0}, 215}, + {"Land_Fire_barrel_burning", {4413.8, 6056.01, 0}, 0}, + // North Trader + {"ClutterCutter_EP1", {5068.43, 8897.88, 0}, 0}, + {"CDF_WarfareBBarrier10x", {5065.82, 8891.55, -0.294769}, 29.5455}, + {"CDF_WarfareBBarrier10x", {5064.97, 8903.57, -0.186707}, 302.727}, + {"CDF_WarfareBBarrier10x", {5077, 8896.71, -0.080307}, 299.545}, + {"CDF_WarfareBBarrier10x", {5076.48, 8908.56, -0.235596}, 29.5455}, + {"land_Objects70", {5067.69, 8903.17, 0}, 119.545}, + {"Land_bags_EP1", {5078.3, 8901.94, 0}, 29.5454}, + {"Land_Fire_barrel_burning", {5067.41, 8895.88, 0}, 0}, + {"Land_Ind_BoardsPack2", {5072.56, 8908.35, 0}, 208.182}, + {"Land_Campfire_burning", {5070.59, 8897.51, 0}, 0}, + {"Land_Carpet_rack_EP1", {5077.88, 8906.5, 0}, 30}, + {"Misc_palletsfoiled_heap", {5064.94, 8895.37, 0}, 29.5455}, + {"Land_bags_stack_EP1", {5077.46, 8899.98, 0}, 300}, + {"Land_Misc_IronPipes_EP1", {5075.13, 8898.29, 0}, 275.909}, + {"Land_cages_EP1", {5073.74, 8893.72, 0}, 314.545}, + {"Land_Reservoir_EP1", {5075.23, 8907.88, 0}, 146.364}, + {"Land_Crates_stack_EP1", {5064.93, 8901.7, 0}, 31.3636}, + {"ShedSmall", {5067.43, 8893.46, 0}, 28.6363}, + // Protection Domes + { "ProtectionZone_Invisible_F", { 5073.31, 8903.09, 0 }, 0, true }, + { "ProtectionZone_Invisible_F", { 4407.77, 6054.78, 0 }, 0, true }, + { "ProtectionZone_Invisible_F", { 8692.93, 3854.72, 0 }, 0, true } + }; + + staticNpcPos[] = { + //South + { "C_man_hunter_1_F", {8700.09, 3859.75, -0.0334778}, 241}, + //West + { "C_man_w_worker_F", {4411.08, 6058.25, 0}, 24.5455}, + //North + { "C_man_shorts_4_F_asia", {5068.45, 8893.52, 0}, 30} + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/lingor3.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/lingor3.h new file mode 100644 index 0000000..93c021a --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/lingor3.h @@ -0,0 +1,30 @@ +class lingor3 : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", "center" } // temp for now + }; + propsPos[] = { + }; + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/lythium.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/lythium.h new file mode 100644 index 0000000..047d276 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/lythium.h @@ -0,0 +1,81 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Uro1, Robio + + Description: + Epoch gamemode server Side map specific configs for chernarus redux. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/chernarusredux.h +*/ +class Lythium : Default +{ + worldSize = 12000; + plantLimit = 10; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + traderBlds[] = { + "Land_A_FuelStation_Build", + "Land_A_GeneralStore_01", + "Land_A_GeneralStore_01a", + "Land_A_Office01", + "Land_Ind_Garage01", + "Land_Ind_Workshop01_04", + "Land_Ind_Workshop01_L", + "Land_Shed_Ind02", + "Land_Tovarna2", + "Land_sara_hasic_zbroj" + }; + telePos[] = { + //[9305.75,0,15320.2], respawn_north + //[8859.85,0,6356.99], respawn_south + //[4489.75,0,11967.3], respawn_west + //[18040.1,0,12909.7], respawn_east + + // N [-0.286865,8.17383,-10.3098] + // S [-0.415527,-7.05298,-10.3098] + // E [13.5127,0.410156,-10.3098] + // W [-14.4316,0.112793,-10.3098] + //{ "Transport_W_EPOCH", { -14.4316, 0.112793, -10.3098 }, "", { 4489.75, 11967.3, 0 } }, // West + { "Transport_C_EPOCH", { -0.286865, 8.17383, -10.3098 }, "", { 10575.8, 9284.92, 0 } }, // East 10575/9284 + { "Transport_W_EPOCH", { -14.4316, 0.112793, -10.3098 }, "", { 14325.1, 18769.7, 0 } }, + { "Transport_E_EPOCH", { 13.5127, 0.410156, -10.3098 }, "", { 12313.85, 1129.99, 0 } } // South // 12313/1129 + }; + propsPos[] = { + + }; + staticNpcPos[] = { + // Eaample: { "C_man_w_worker_F", { 13323.1, 14527.3, 0.00144649 }, 201.163 }, + // Central + { C_Man_UtilityWorker_01_F,{10575,9284.19,0.0143967},67.6322 }, + { C_man_sport_1_F_afro,{10581.2,9284.84,0.208435},274.638 }, + { C_man_sport_2_F_tanoan,{10577.4,9279.94,-5.34058e-005},15.5608 }, + //{ C_man_p_fugitive_F_euro,{10572.7,9296.96,0.00154877},155.608 }, + //North + { C_Man_UtilityWorker_01_F,{14360,18784.4,0.00143433},116.53 }, + { C_man_sport_1_F_afro,{14364.7,18780.4,0.00143433},314.072 }, + { C_man_sport_2_F_tanoan,{14358.5,18779.8,0.00143433},57.9831 }, + //{ C_man_p_fugitive_F_euro,{12413.8,19894.9,0.00292969},155.608 }, + //South + { C_Man_UtilityWorker_01_F,{12338.7,1139.92,0.00128555},270 }, + { C_man_sport_1_F_afro,{12332.6,1139.89,0.00128937},84.9434 }, + { C_man_sport_2_F_tanoan,{12336.8,1144.39,0.00127792},184.952 } + + + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/stratis.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/stratis.h new file mode 100644 index 0000000..5468c87 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/stratis.h @@ -0,0 +1,319 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for stratis. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/stratis.h +*/ +class Stratis : Default +{ + worldSize = 6000; + plantLimit = 5; + allowedVehiclesList[] = { + {"C_Offroad_01_EPOCH",3}, + {"C_Quadbike_01_EPOCH",3}, + {"C_Hatchback_01_EPOCH",2}, + {"C_Hatchback_02_EPOCH",2}, + {"C_SUV_01_EPOCH",2}, + {"C_Rubberboat_EPOCH",2}, + {"C_Rubberboat_02_EPOCH",2}, + {"C_Rubberboat_03_EPOCH",2}, + {"C_Rubberboat_04_EPOCH",2}, + {"C_Van_01_box_EPOCH",2}, + {"C_Van_01_transport_EPOCH",2}, + {"C_Boat_Civil_01_EPOCH",2}, + {"C_Boat_Civil_01_police_EPOCH",2}, + {"C_Boat_Civil_01_rescue_EPOCH",2}, + {"B_Heli_Light_01_EPOCH",2}, + {"B_SDV_01_EPOCH",1}, + {"B_MRAP_01_EPOCH",2}, + {"I_MRAP_03_EPOCH", 1}, + {"B_Truck_01_transport_EPOCH",1}, + {"B_Truck_01_covered_EPOCH",2}, + {"B_Truck_01_mover_EPOCH",1}, + {"B_Truck_01_box_EPOCH",1}, + {"O_Truck_02_covered_EPOCH",2}, + {"O_Truck_02_transport_EPOCH",1}, + {"O_Truck_03_covered_EPOCH",1}, + {"O_Truck_02_box_EPOCH",1}, + {"I_Heli_light_03_unarmed_EPOCH",1}, + {"O_Heli_Light_02_unarmed_EPOCH",1}, + {"I_Heli_Transport_02_EPOCH",1}, + {"O_Heli_Transport_04_EPOCH",1}, + {"O_Heli_Transport_04_bench_EPOCH",1}, + {"O_Heli_Transport_04_box_EPOCH",1}, + {"O_Heli_Transport_04_covered_EPOCH",1}, + {"B_Heli_Transport_03_unarmed_EPOCH",1}, + {"jetski_epoch",2}, + {"K01",2}, + {"K02",2}, + {"K03",2}, + {"K04",2}, + {"ebike_epoch",2}, + {"mosquito_epoch",2}, + {"C_Heli_Light_01_civil_EPOCH",1} + }; + allowedVehiclesList_CUP[] = { + {"C_Offroad_01_EPOCH",2}, + {"C_Quadbike_01_EPOCH",2}, + {"C_Hatchback_01_EPOCH",2}, + {"C_Hatchback_02_EPOCH",2}, + {"C_SUV_01_EPOCH",2}, + {"C_Rubberboat_EPOCH",2}, + {"C_Rubberboat_02_EPOCH",2}, + {"C_Rubberboat_03_EPOCH",2}, + {"C_Rubberboat_04_EPOCH",2}, + {"C_Van_01_box_EPOCH",2}, + {"C_Van_01_transport_EPOCH",2}, + {"C_Boat_Civil_01_EPOCH",2}, + {"C_Boat_Civil_01_police_EPOCH",2}, + {"C_Boat_Civil_01_rescue_EPOCH",2}, + {"B_Heli_Light_01_EPOCH",2}, + {"B_SDV_01_EPOCH",2}, + {"B_MRAP_01_EPOCH",2}, + {"I_MRAP_03_EPOCH", 2}, + {"B_Truck_01_transport_EPOCH",1}, + {"B_Truck_01_covered_EPOCH",2}, + {"B_Truck_01_mover_EPOCH",1}, + {"B_Truck_01_box_EPOCH",1}, + {"O_Truck_02_covered_EPOCH",2}, + {"O_Truck_02_transport_EPOCH",1}, + {"O_Truck_03_covered_EPOCH",1}, + {"O_Truck_02_box_EPOCH",1}, + {"I_Heli_light_03_unarmed_EPOCH",1}, + {"O_Heli_Light_02_unarmed_EPOCH",1}, + {"I_Heli_Transport_02_EPOCH",1}, + {"O_Heli_Transport_04_EPOCH",1}, + {"O_Heli_Transport_04_bench_EPOCH",1}, + {"O_Heli_Transport_04_box_EPOCH",1}, + {"O_Heli_Transport_04_covered_EPOCH",1}, + {"B_Heli_Transport_03_unarmed_EPOCH",1}, + {"jetski_epoch",1}, + {"K01",1}, + {"K02",1}, + {"K03",1}, + {"K04",1}, + {"ebike_epoch",2}, + {"mosquito_epoch",2}, + {"C_Heli_Light_01_civil_EPOCH",2}, + {"CUP_C_Fishing_Boat_Chernarus",1}, + {"CUP_C_LR_Transport_CTK",1}, + {"CUP_B_Zodiac_USMC",1}, + {"CUP_C_Skoda_Red_CIV",1}, + {"CUP_C_Skoda_White_CIV",1}, + {"CUP_C_Skoda_Blue_CIV",1}, + {"CUP_C_Skoda_Green_CIV",1}, + {"CUP_C_SUV_CIV",1}, + {"CUP_B_HMMWV_Transport_USA",1}, + {"CUP_B_HMMWV_Unarmed_USA",1}, + {"CUP_C_SUV_TK",1}, + {"CUP_B_LR_Transport_CZ_D",1}, + {"CUP_C_Datsun_Covered",1}, + {"CUP_C_Datsun_Plain",1}, + {"CUP_C_Datsun_Tubeframe",1}, + {"CUP_C_Datsun_4seat",1}, + {"CUP_C_Datsun",1}, + {"CUP_C_Golf4_green_Civ",1}, + {"CUP_C_Golf4_red_Civ",1}, + {"CUP_C_Golf4_blue_Civ",1}, + {"CUP_C_Golf4_black_Civ",1}, + {"CUP_C_Golf4_kitty_Civ",1}, + {"CUP_C_Golf4_reptile_Civ",1}, + {"CUP_C_Golf4_camodigital_Civ",1}, + {"CUP_C_Golf4_camodark_Civ",1}, + {"CUP_C_Golf4_camo_Civ",1}, + {"CUP_B_M1030",1}, + {"CUP_C_Ural_Civ_03",1}, + {"CUP_C_Ural_Open_Civ_03",1}, + {"CUP_C_Ural_Civ_02",1}, + {"CUP_B_TowingTractor_USMC",1}, + {"CUP_C_C47_CIV",1}, + {"CUP_B_LR_Transport_CZ_W",1}, + {"CUP_C_Golf4_white_Civ",1}, + {"CUP_C_Golf4_whiteblood_Civ",1}, + {"CUP_C_Golf4_yellow_Civ",1}, + {"CUP_C_Octavia_CIV",1}, + {"CUP_C_Ural_Civ_01",1}, + {"CUP_C_Ural_Open_Civ_01",1}, + {"CUP_B_Ural_CDF",1}, + {"CUP_B_Ural_Open_CDF",1}, + {"CUP_C_Ural_Open_Civ_02",1}, + {"CUP_B_HMMWV_Ambulance_USA",1}, + {"CUP_C_UAZ_Unarmed_TK_CIV",1}, + {"CUP_C_UAZ_Open_TK_CIV",1}, + {"CUP_B_UAZ_Unarmed_CDF",1}, + {"CUP_B_Ural_Empty_CDF",1}, + {"CUP_C_DC3_CIV",1} + }; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", { 4089.82, 4597.71, 0.00143433 } } + }; + propsPos[] = { + { "Land_Castle_01_wall_08_F", { 1830.55, 3389.67, 0 }, 285.304, true }, + { "Land_Castle_01_tower_F", { 1852.1, 3361.42, 1.51087 }, 283.624, true }, + { "Land_Stone_HouseBig_V1_ruins_F", { 1877.76, 2747.02, 0.58992 }, 350.47, true }, + { "Land_Research_house_V1_F", { 1882.16, 3420.11, 0 }, 114.473, false }, + { "Land_Research_house_V1_F", { 1926.81, 3483.25, 0 }, 78.3937, false }, + { "Land_Research_house_V1_F", { 1981.81, 3454.27, 0 }, 114.473, false }, + { "Land_Swing_01_F", { 1985.26, 4154.77, 0.000238657 }, 0, true }, + { "Land_LifeguardTower_01_F", { 1984.14, 4165.94, 0.0106359 }, 96.173, true }, + { "Land_i_House_Small_02_V1_F", { 2038.01, 4155.31, -2.38419e-007 }, 104.737, false }, + { "Land_d_House_Small_02_V1_F", { 2078.54, 4114.41, 2.38419e-007 }, 0, false }, + { "Land_Offices_01_V1_F", { 2057.75, 5451.7, 4.76837e-007 }, 282.813, false }, + { "Land_Hospital_side1_F", { 2058.38, 5592.42, 0 }, 192.575, false }, + { "Land_Hospital_main_F", { 2070.05, 5623.08, 0 }, 192.575, false }, + { "Land_i_House_Big_01_V3_F", { 2086.85, 4150.62, 0 }, 107.808, false }, + { "Land_Kiosk_papers_F", { 2093.64, 5570.47, 6.53267e-005 }, 283.475, false }, + { "Land_Hospital_side2_F", { 2099.4, 5626.81, 0 }, 192.575, false }, + { "Land_Slum_House03_F", { 2141.66, 4792.06, 0.0015676 }, 0, false }, + { "Land_Slum_House02_F", { 2143.03, 4775.16, -0.0263515 }, 0, false }, + { "Land_Kiosk_blueking_F", { 2727.62, 5826.22, 0.000421524 }, 132.967, false }, + { "Land_d_House_Small_01_V1_F", { 2801.58, 1046.55, 0 }, 41.0052, true }, + { "Land_Chapel_V1_F", { 2871.78, 6067.89, 0 }, 211.514, true }, + { "Land_Cargo_HQ_V3_F", { 2971.3, 1866.99, 0 }, 179.108, false }, + { "Land_u_House_Small_01_V1_F", { 2973.94, 6218.94, 0.325663 }, 0, true }, + { "Land_Cargo_House_V3_F", { 2995.03, 1873.41, 1.52588e-005 }, 0, false }, + { "Land_i_Garage_V2_F", { 2989, 6223.63, -1.90735e-006 }, 273.954, false }, + { "Land_i_House_Big_01_V1_F", { 3049.42, 5942.24, 2.38419e-007 }, 311.557, false }, + { "Land_Kiosk_redburger_F", { 3044.55, 6076.2, 9.44138e-005 }, 91.6749, false }, + { "Land_i_House_Small_02_V3_F", { 3155.17, 6013.37, 0.458257 }, 332.154, false }, + { "Land_Chapel_V2_F", { 3232.37, 6857.66, 0.685185 }, 272.76, true }, + { "Land_cargo_house_slum_F", { 3538.77, 2707.56, 0 }, 177.058, true }, + { "Land_cargo_addon01_V1_F", { 3541.2, 2705.14, 0 }, 357.446, true }, + { "Land_d_Stone_HouseBig_V1_F", { 3623.09, 5245.06, 0.009758 }, 166.481, true }, + { "Land_d_House_Small_01_V1_F", { 3743.54, 4780.82, 1.57976 }, 0, true }, + { "Land_Slum_House03_F", { 3797.53, 2993.58, 0 }, 0, false }, + { "Land_Slum_House02_F", { 3831.47, 2971.8, 0 }, 0, false }, + { "Land_HelipadCircle_F", { 4067.47, 4572.62, 1.52588e-005 }, 359.244, true }, + { "Land_TouristShelter_01_F", { 4073.64, 4549.6, 0 }, 192.51, true }, + { "Land_cargo_addon02_V1_F", { 4078.63, 4592.18, 0 }, 0, true }, + { "Land_Loudspeakers_F", { 4092.04, 4598.9, 0 }, 0, true }, + { "Land_ScrapHeap_1_F", { 4079.07, 4596.36, 0.00553894 }, 99.9798, true }, + { "Land_CncBarrierMedium4_F", { 4079.99, 4588.74, 0.0153656 }, 359.686, true }, + { "Land_CncWall4_F", { 4089.64, 4588.13, -0.00886536 }, 12.7799, true }, + { "Land_CncWall4_F", { 4094.76, 4586.89, -0.00213623 }, 12.7868, true }, + { "Land_LampShabby_F", { 4076.45, 4589.55, 0 }, 121.571, false }, + { "Land_BC_Basket_F", { 4078.18, 4602.15, 1.52588e-005 }, 106.029, true }, + { "Land_InvisibleBarrier_F", { 4075.89, 4589.43, 0.753189 }, 201.944, true }, + { "Land_InvisibleBarrier_F", { 4075.31, 4596.73, 1.33836 }, 120.492, true }, + { "Land_InvisibleBarrier_F", { 4075.13, 4590.7, 1.13405 }, 81.5166, true }, + { "Land_InvisibleBarrier_F", { 4076.48, 4600.02, 1.22104 }, 115.878, true }, + { "Land_InvisibleBarrier_F", { 4078.54, 4604.28, 1.28917 }, 115.887, true }, + { "Land_InvisibleBarrier_F", { 4075.15, 4594.21, 1.20979 }, 96.9556, true }, + { "Land_InvisibleBarrier_F", { 4080.46, 4607.96, 1.49496 }, 115.887, true }, + { "Land_CncBarrierMedium_F", { 4085.46, 4589.37, 0.00686646 }, 359.902, true }, + { "Land_Garbage_square3_F", { 4081.92, 4590.14, 0.0126038 }, 359.751, true }, + { "Land_Garbage_square3_F", { 4087.47, 4605.58, 0 }, 0, true }, + { "Land_Campfire_F", { 4087.44, 4605.57, 0 }, 359.692, false }, + { "Land_HBarrier_1_F", { 4073.01, 4589.24, 0.00802612 }, 196.111, true }, + { "Land_HBarrier_1_F", { 4074.2, 4587.82, 0.0124664 }, 104.304, true }, + { "Land_WoodenTable_large_F", { 4080.83, 4591.95, -0.00935364 }, 359.965, true }, + { "Land_Bench_01_F", { 4090.86, 4589.01, 0 }, 187.798, true }, + { "Land_Graffiti_03_F", { 4090.15, 4587.4, 2.04541 }, 13.1322, true }, + { "Land_Tyre_F", { 4077.24, 4593.93, -0.0040741 }, 359.906, true }, + { "Land_cargo_addon02_V2_F", { 4088.04, 4609.67, 0.864685 }, 0, true }, + { "Land_CncWall4_F", { 4095.45, 4610.17, 0 }, 19.8004, true }, + { "Flag_US_F", { 4083.69, 4609.71, 0 }, 0, true }, + { "Land_InvisibleBarrier_F", { 4090.66, 4611.46, 1.21396 }, 181.969, true }, + { "Land_InvisibleBarrier_F", { 4083.03, 4610.92, 1.30064 }, 155.064, true }, + { "Land_InvisibleBarrier_F", { 4085.83, 4611.93, 1.50397 }, 181.969, true }, + { "Land_GarbageContainer_open_F", { 4093.96, 4612.7, 1.52588e-005 }, 14.0197, true }, + { "Land_Sun_chair_F", { 4089.87, 4609.37, 0.0206299 }, 230.807, true }, + { "Land_WoodenTable_small_F", { 4087.48, 4609.82, 0 }, 0.0139882, true }, + { "Land_ChairPlastic_F", { 4085.61, 4609.59, 4.57764e-005 }, 56.7009, true }, + { "Land_PartyTent_01_F", { 4102.91, 4597.95, 0 }, 99.5276, true }, + { "Land_spp_Mirror_F", { 4116.51, 4586.74, 0.00367737 }, 123.312, true }, + { "Land_spp_Mirror_Broken_F", { 4112.67, 4580.57, 0.0202332 }, 125.593, true }, + { "Land_CncWall4_F", { 4106.1, 4604.81, -0.00102234 }, 19.7979, true }, + { "Land_LampShabby_F", { 4096.18, 4607.97, 0 }, 206.995, false }, + { "Land_LampShabby_F", { 4097.33, 4587.92, 0.0244751 }, 31.518, false }, + { "Land_InvisibleBarrier_F", { 4109.2, 4597.37, 1.52361 }, 277.612, true }, + { "Land_InvisibleBarrier_F", { 4108.27, 4592.6, 1.73965 }, 277.612, true }, + { "Land_InvisibleBarrier_F", { 4109.82, 4601.67, 1.56946 }, 277.612, true }, + { "Land_InvisibleBarrier_F", { 4107.04, 4586.27, 1.85316 }, 319.546, true }, + { "Land_InvisibleBarrier_F", { 4104.05, 4585.58, 1.68684 }, 7.11481, true }, + { "Land_InvisibleBarrier_F", { 4099.71, 4585.46, 1.77679 }, 2.57549, true }, + { "Land_WorkStand_F", { 4099.94, 4600.94, -1.52588e-005 }, 295.919, true }, + { "Land_WaterTank_F", { 4104.34, 4589.11, 0.0553589 }, 268.9, true }, + { "Land_CncBarrierMedium_F", { 4102.32, 4607.87, -6.10352e-005 }, 227.793, true }, + { "Land_Garbage_square3_F", { 4097.21, 4596.75, 0 }, 0, true }, + { "Land_PowerGenerator_F", { 4102.48, 4603.53, 0 }, 195.669, true }, + { "Land_PortableLight_double_F", { 4106.97, 4601.45, 1.52588e-005 }, 54.431, false }, + { "Land_CargoBox_V1_F", { 4105.27, 4594.12, 0.0321808 }, 359.692, true }, + { "Land_HBarrier_1_F", { 4108.91, 4587.86, 0.0543213 }, 190.858, true }, + { "Land_HBarrier_1_F", { 4104.23, 4584.41, 0.0659485 }, 102.162, true }, + { "Land_HBarrier_1_F", { 4105.92, 4584.86, 0.0720825 }, 91.1097, true }, + { "Land_HBarrier_1_F", { 4108.57, 4586.13, 0.00216675 }, 192.397, true }, + { "Land_HBarrier_1_F", { 4107.47, 4584.94, 0.060257 }, 102.162, true }, + { "Land_HBarrier_1_F", { 4102.35, 4584.26, 0.0769043 }, 102.051, true }, + { "Land_HBarrier_1_F", { 4109.11, 4589.47, 0.11763 }, 9.99734, true }, + { "Land_PaperBox_open_full_F", { 4102.1, 4594.33, 1.52588e-005 }, 263.73, true }, + { "Land_PaperBox_open_empty_F", { 4105.48, 4596.11, -0.0014801 }, 0, true }, + { "Land_Cages_F", { 4105.58, 4591.83, 0.0664368 }, 185.048, true }, + { "Land_CncBarrier_F", { 4097.61, 4596.8, 0 }, 99.6326, true }, + { "Land_CncBarrier_F", { 4100.22, 4593.2, 3.05176e-005 }, 190.22, true }, + { "Land_CampingTable_F", { 4101.72, 4596.48, 0.00106812 }, 281.325, true }, + { "Land_BagFence_Corner_F", { 4097.22, 4593.88, 0.0379028 }, 190.245, true }, + { "Land_CratesPlastic_F", { 4103.75, 4593.7, -0.000549316 }, 359.881, true }, + { "Land_Axe_F", { 4099.65, 4600.64, -0.00337219 }, 295.967, true }, + { "Land_Bucket_F", { 4097.32, 4594.08, 6.10352e-005 }, 356.543, true }, + { "Land_ToiletBox_F", { 4096.96, 4611.27, 0.000183105 }, 289.938, true }, + { "Land_CncBarrierMedium_F", { 4099.65, 4608.55, 0 }, 359.899, true }, + { "Land_Research_HQ_F", { 4380.18, 3823.79, 0 }, 355.975, false }, + { "Land_Unfinished_Building_01_F", { 4649.67, 5884.08, 0.293839 }, 198.291, true }, + { "Land_Unfinished_Building_02_F", { 5174.01, 5007.38, 0 }, 243.495, true }, + { "Land_i_Stone_HouseBig_V3_F", { 5498.5, 4727.75, -0.0115128 }, 293.658, true }, + { "Land_i_Stone_Shed_V2_F", { 5505.49, 4702.41, 0.00200653 }, 297.882, false }, + { "Land_i_Stone_HouseSmall_V1_F", { 5981.14, 4959.02, 0 }, 9.37543, false }, + { "Land_i_Stone_Shed_V3_F", { 6023.49, 4945.2, 0 }, 176.441, false }, + { "Land_WIP_F", { 6366.69, 5475.46, 0 }, 130.712, false }, + { "Land_BC_Court_F", { 6419.24, 5433.65, 0.43597 }, 223.519, true }, + { "Land_BC_Basket_F", { 6411.08, 5425.05, -4.76837e-007 }, 44.4966, true }, + { "Land_BC_Basket_F", { 6427.29, 5442.33, 4.76837e-007 }, 223.664, true }, + { "ProtectionZone_Invisible_F", { 4079.01, 4573.1, 0.0611725 }, 359.768, false }, + // Coastline trader + { "Land_LightHouse_F", { 1845.07, 2988.35, -1.90735e-006 }, 0, false }, + { "Land_HelipadEmpty_F", { 1882.75, 2942.03, 1.42167 }, 358.907, true }, + { "Land_Pier_small_F", { 1891.08, 2938.65, -2.98023e-007 }, 56.3395, true }, + { "Land_RowBoat_V2_F", { 1909.67, 2941.81, 0.0138569 }, 2.33694, true }, + { "Land_WorkStand_F", { 1908.58, 2944.58, -0.020708 }, 122.503, true }, + { "Land_CargoBox_V1_F", { 1907.39, 2947.01, 0.0350925 }, 359.867, true }, + { "Land_Axe_F", { 1908.74, 2945.41, -0.00328684 }, 359.986, true }, + { "Land_ToiletBox_F", { 1913.84, 2986.91, 0.0251269 }, 349.174, true }, + { "Land_BeachBooth_01_F", { 1907.22, 2978.81, -0.00382352 }, 55.1352, false }, + { "Land_TentDome_F", { 1937.39, 2959.15, -0.0218604 }, 326.44, true }, + { "Land_Campfire_F", { 1933.14, 2949.95, -0.00123048 }, 359.804, false }, + { "Land_Sun_chair_F", { 1933.75, 2952.72, 0.0220282 }, 197.997, true }, + { "ProtectionZone_Invisible_F", { 1912.9, 2950.53, 0.0313282 }, 359.93, false } + }; + staticNpcPos[] = { + { "C_man_hunter_1_F", { 4079.2, 4592.1, 0.00123596 }, 358.384 }, + { "C_man_w_worker_F", { 4103, 4595.83, 0.00146484 }, 265.753 }, + // Coastline trader + { "C_man_shorts_4_F_asia", { 1899.42, 2944, 0.500793 }, 255.304 } + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/takistan.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/takistan.h new file mode 100644 index 0000000..61fc012 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/takistan.h @@ -0,0 +1,427 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for takistan. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/takistan.h +*/ +class Takistan : Default +{ + worldSize = 12000; + plantLimit = 7; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", { 4695.13,9215.56,0.00141907 } }, + { "TP_Booth_w_EPOCH", { -14.4316, 0.112793, -10.3098, -90}, "", { 6028.83,1118.3,0.00149536 } }, + { "TP_Booth_c_EPOCH", { 13.5127, 0.410156, -10.3098, 90}, "", { 6817.97,4988.9,0.00137329 } } + }; + + propsPos[] = { + ///Map Additions/ATM Takistan/// + { "Land_Atm_02_F", { 5243.95, 6205.38, 0 }, { { -0.565867, -0.824496, 0 }, { 0, 0, 1 } } }, + { "Land_Atm_02_F", { 5362.95, 6280.63, 0 }, { { -0.405255, 0.914204, 0 }, { 0, 0, 1 } } }, + { "Land_Atm_02_F", { 5360.44, 6294.53, 0.00595093 }, { { 0, 1, 0 }, { 0, 0, 1 } } }, + { "Land_WoodenCart_F", {8600.47,8308.58,0.000244141}, {{-0.00010867,0.998231,0.0594464},{-0.000479913,-0.0594465,0.998231}}, true }, + { "Land_GarbageContainer_open_F", {8614.26,8307.72,0.00209045}, {{-0.000908369,0.998607,0.0527489},{-0.00959579,-0.0527552,0.998561}}, true }, + { "Land_TablePlastic_01_F", {8616.5,8319.94,0.00038147}, {{-0.00559824,0.999618,0.0270492},{-0.0142782,-0.0271267,0.99953}}, true }, + { "Land_TablePlastic_01_F", {8620.37,8321.66,6.10352e-005}, {{0.00175068,0.999966,0.00796957},{0.00958832,-0.007986,0.999922}}, true }, + { "Land_TablePlastic_01_F", {8605.09,8319.24,0.00285339}, {{0.00774264,0.999619,0.0264946},{-0.000176419,-0.026494,0.999649}}, true }, + { "Land_TablePlastic_01_F", {8609.86,8320.45,0.000457764}, {{0.0383293,0.998763,0.0316879},{-0.00137344,-0.0316585,0.999498}}, true }, + { "Land_Chair_EP1", {8617.7,8318.22,0.0252991}, {{-0.942776,-0.331865,-0.0322254},{-0.00691176,-0.0771769,0.996993}}, true }, + { "Land_Chair_EP1", {8608.33,8320.23,0.024353}, {{-0.442972,0.895975,0.0316853},{-0.0231885,-0.0467803,0.998636}}, true }, + { "Land_Chair_EP1", {8618.64,8321.61,0.0234528}, {{0.0198366,0.999761,0.00919886},{-0.0150687,-0.00890067,0.999847}}, true }, + { "Land_Chair_EP1", {8622.26,8321.18,0.0245056}, {{-0.00511849,-0.99994,-0.00965282},{0.0326003,-0.00981467,0.99942}}, true }, + { "Land_Chair_EP1", {8614.25,8319.22,0.0243073}, {{-0.537853,0.842858,0.0174573},{-0.0366214,-0.0440472,0.998358}}, true }, + { "Land_Chair_EP1", {8611.64,8320.24,0.024292}, {{-0.79148,-0.611008,-0.0151516},{0.0189673,-0.0493328,0.998602}}, true }, + { "Land_Chair_EP1", {8603.1,8318.66,0.0211334}, {{-0.407876,0.912296,0.0367823},{-0.0211378,-0.0497099,0.99854}}, true }, + { "Land_Chair_EP1", {8606.18,8318.17,0.0257263}, {{-0.856036,-0.516133,-0.0284495},{0.0116302,-0.074254,0.997172}}, true }, + { "Land_Chair_EP1", {8609.77,8319.17,0.0244293}, {{-0.99005,-0.140577,-0.00626497},{0.00223823,-0.0602484,0.998181}}, true }, + { "Land_Chair_EP1", {8616,8318.21,0.0252686}, {{-0.999339,-0.0320484,-0.0171452},{-0.0145636,-0.079119,0.996759}}, true }, + { "Land_WheelieBin_01_F", {8639.92,8301.09,0.000854492}, {{-0.981885,0.189475,-0.000711495},{-0.00817358,-0.0386045,0.999221}}, true }, + { "Land_Tyre_F", {8640.93,8307.23,0.00567627}, {{-0.0230978,0.998985,0.0386768},{-0.0387386,-0.0395524,0.998466}}, true }, + { "Land_Kiosk_gyros_F", {4650.79,699.551,-3.05176e-005}, {{-0.745202,0.666839,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {4671.33,719.913,0}, {{-0.735833,0.677163,0},{0,0,1}}, true }, + { "Land_Atm_02_F", {6080.03,1141.94,3.05176e-005}, {{0.123096,-0.992395,0},{0,0,1}}, true }, + { "Land_i_Stone_HouseSmall_V3_F", {4023.96,1474.49,-3.05176e-005}, {{-0.999304,0.0372983,0},{0,0,1}}, true }, + { "Land_Kiosk_blueking_F", {10141,2339.35,0}, {{-0.368553,0.929607,0},{0,0,1}}, true }, + { "Land_Atm_02_F", {10146.2,2313.48,0}, {{0.974477,0.224487,0},{0,0,1}}, true }, + { "Land_Atm_02_F", {8545.88,2480.68,3.05176e-005}, {{-0.045591,0.99896,0},{0,0,1}}, true }, + { "Land_Kiosk_redburger_F", {8534.11,2468.17,0.00244141}, {{0,1,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {1436,3525.56,0}, {{-0.230713,0.973022,0},{0,0,1}}, true }, + { "Land_Kiosk_gyros_F", {1479.97,3513.22,0.00117493}, {{0.224356,-0.974507,0},{0,0,1}}, true }, + { "Land_d_Stone_HouseSmall_V1_F", {8423.86,3808.32,0.00726318}, {{-0.680255,0.732976,0},{0,0,1}}, true }, + { "Land_i_Stone_HouseSmall_V1_F", {2257.81,4588.21,0}, {{-0.791106,0.611679,0},{0,0,1}}, true }, + { "Land_d_Stone_Shed_V1_F", {2269.17,4603.43,0}, {{-0.648101,-0.761554,0},{0,0,1}}, true }, + { "Land_u_Shed_Ind_F", {8789.78,5194.17,0}, {{0.601105,-0.79917,0},{0,0,1}}, true }, + { "Land_Atm_02_F", {8888.57,5287.76,0}, {{0.756238,0.654297,0},{0,0,1}}, true }, + { "Land_u_Barracks_V2_F", {5148.85,6040.4,0}, {{0.218867,-0.975755,0},{0,0,1}}, true }, + { "Land_i_Shed_Ind_F", {5194.09,6076.07,0.232178}, {{-0.316396,0.948627,0},{0,0,1}}, true }, + { "Land_Kiosk_gyros_F", {5291.9,6190.42,0}, {{-0.796803,0.60424,0},{0,0,1}}, true }, + { "Land_FuelStation_Build_F", {5282.78,6197.58,0.0447083}, {{0.616522,0.787337,0},{0,0,1}}, true }, + { "Land_FuelStation_Sign_F", {5257.61,6182.23,0}, {{0.796956,-0.604037,0},{0,0,1}}, true }, + { "Land_FuelStation_Feed_F", {5278.98,6190.68,0}, {{0.624789,0.780793,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {9165.78,6767.68,0}, {{0.615178,0.788388,0},{0,0,1}}, true }, + { "Land_Kiosk_gyros_F", {5962.08,7362.77,0}, {{-0.287674,-0.957728,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {8628.5,8194.71,0.534821}, {{-0.805445,-0.592671,0},{0,0,1}}, true }, + { "Land_TBox_F", {8594.89,8295.2,0}, {{0.0355016,-0.99937,0},{0,0,1}}, true }, + { "Land_spp_Mirror_F", {8615.62,8291.57,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_spp_Mirror_F", {8601.55,8291.67,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_spp_Mirror_Broken_F", {8608.53,8292.09,0.0320435}, {{0,1,0},{0,0,1}}, true }, + { "Land_Tank_rust_F", {8638.57,8297.72,-0.0530701}, {{0.996443,-0.0817715,0.0203835},{-0.0239722,-0.043148,0.998781}}, true }, + { "Land_Wreck_CarDismantled_F", {8648.33,8291.73,0.00845337}, {{0.984307,-0.170379,0.0459437},{-0.046349,0.00159984,0.998924}}, true }, + { "Land_Net_Fence_8m_F", {8653.25,8292.72,-0.03302}, {{-0.935406,0.349364,-0.0544026},{-0.0479276,0.0271584,0.998482}}, true }, + { "Land_Net_Fence_pole_F", {8651.83,8288.97,0.0039978}, {{0.000117238,0.999999,-0.00159293},{-0.0734,0.00159724,0.997301}}, true }, + { "Land_Billboard_F", {8588.54,8322.33,0}, {{0.999998,0.0019983,0},{0,0,1}}, true }, + { "Land_CarService_F", {8646.36,8303.99,-0.0171204}, {{-0.091916,-0.995767,0},{0,0,1}}, true }, + { "Land_Kiosk_redburger_F", {8607.01,8312.74,0}, {{-0.0489227,-0.998803,0},{0,0,1}}, true }, + { "Land_Kiosk_gyros_F", {8617.56,8311.95,1.52588e-005}, {{-0.103208,-0.99466,0},{0,0,1}}, true }, + { "Land_FuelStation_Build_F", {8637.88,8305.08,0}, {{-0.141157,-0.989987,0},{0,0,1}}, true }, + { "Land_LampSolar_F", {8612.1,8309.8,-1.52588e-005}, {{0.989743,-0.142859,0},{0,0,1}}, true }, + { "Land_Sunshade_02_F", {8605.09,8319.21,0.000686646}, {{0,0.999784,0.0207963},{-0,-0.0207963,0.999784}}, true }, + { "Land_Sunshade_02_F", {8609.86,8320.4,0.00161743}, {{-4.09754e-005,0.999488,0.0319855},{-0.00160074,-0.0319855,0.999487}}, true }, + { "Land_LampShabby_F", {8640.91,8306.34,0}, {{0.139255,0.990257,0},{0,0,1}}, true }, + { "Land_Sunshade_03_F", {8616.48,8319.9,0.0022583}, {{-0.000222498,0.99963,0.0271864},{-0.0143926,-0.0271868,0.999527}}, true }, + { "Land_Sunshade_03_F", {8620.38,8321.65,0.000320435}, {{1.53739e-005,0.999968,0.00800008},{0.00959886,-0.00799986,0.999922}}, true }, + { "Land_FuelStation_Sign_F", {8630.48,8324.33,1.52588e-005}, {{0.492767,0.870161,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {8609.4,8311.37,0.159393}, {{-0.999629,0.0272272,0},{0,0,1}}, true }, + { "Land_FuelStation_Feed_F", {8634.9,8316.29,0}, {{0.196116,0.980581,0},{0,0,1}}, true }, + { "Land_Noticeboard_F", {8612.33,8314.26,0.00175476}, {{-0.135821,-0.989731,-0.0445573},{-0.00159996,-0.0447549,0.998997}}, true }, + { "Land_Billboard_F", {8682.55,8318.73,0}, {{-0.761339,0.648354,0},{0,0,1}}, true }, + { "Land_Net_Fence_8m_F", {8656.08,8300.16,0.0238342}, {{-0.936602,0.350209,-0.0114279},{-0.0127992,-0.00160143,0.999917}}, true }, + { "Land_Net_Fence_4m_F", {8658.08,8305.82,-0.0890503}, {{-0.947554,0.318635,-0.0247659},{-0.0255897,0.00160104,0.999671}}, true }, + { "Land_Garbage_square3_F", {8653.31,8302.28,-0.00509644}, {{-0.999304,-0.015514,-0.0339228},{-0.0335713,-0.0223817,0.999186}}, true }, + { "Land_Bench_01_F", {8652.42,8302.73,0}, {{-0.98904,0.147649,0},{0,0,1}}, true }, + { "Land_d_Stone_HouseBig_V1_F", {9254.45,8821.8,1.16483}, {{-0.999001,0.0446854,0},{0,0,1}}, true }, + { "Land_Stone_Gate_F", {9266.31,8816.65,0.0163574}, {{0.998609,-0.0464501,0.0249342},{-0.0239894,0.0207879,0.999496}}, false }, + { "Land_Slums01_8m", {9257.59,8832.72,0.000457764}, {{-0.140746,-0.989733,-0.0248722},{-0.0191909,-0.0223902,0.999565}}, true }, + { "Land_Slums01_8m", {9260.63,8811.3,-0.00575256}, {{-0.0113376,0.99993,0.00350884},{0.0271895,-0.00319948,0.999625}}, true }, + { "Land_CarService_F", {5713.53,8895.49,0}, {{0.973764,0.227561,0},{0,0,1}}, true }, + { "Land_Kiosk_redburger_F", {6858.62,8896.26,0.000144958}, {{-0.191926,-0.981409,0},{0,0,1}}, true }, + { "Land_Garbage_square5_F", {6854.33,8898.22,-0.000640869}, {{-0.000130565,0.99998,-0.00639939},{0.00479965,0.00639994,0.999968}}, true }, + { "Land_Slum_House03_F", {4323.51,8953.5,0}, {{0.668369,0.74383,0},{0,0,1}}, true }, + { "Land_d_Stone_Shed_V1_F", {9320.16,9226.55,0}, {{0.959786,0.280731,0},{0,0,1}}, true }, + { "Land_Wreck_Truck_F", {4329.07,9307.47,0.00912476}, {{0.152089,-0.988043,-0.0252921},{-0,-0.0255898,0.999673}}, true }, + { "Land_Kiosk_blueking_F", {5530.93,9301.58,7.62939e-005}, {{0.123983,-0.992284,0},{0,0,1}}, true }, + { "Land_WIP_F", {4309.71,9392.5,1.42572}, {{0.411225,-0.911534,0},{0,0,1}}, true }, + { "Land_Slum_House02_F", {5118.97,9400.18,0}, {{-0.400845,-0.916146,0},{0,0,1}}, true }, + { "Land_i_Shed_Ind_F", {4698.06,9473.99,0.591049}, {{0.879982,0.475007,0},{0,0,1}}, true }, + { "Land_Wreck_Truck_F", {4674.4,9491.89,0.011261}, {{0.000797671,0.999264,-0.0383536},{-0.020781,0.0383619,0.999048}}, true }, + { "Land_FuelStation_Build_F", {5641.12,9879.49,0.13887}, {{0.518632,0.854997,0},{0,0,1}}, true }, + { "Land_FuelStation_Feed_F", {5638.38,9873.02,0}, {{-0.473047,-0.881037,0},{0,0,1}}, true }, + { "Land_FuelStation_Sign_F", {5622.18,9872.2,0.00012207}, {{0.852323,-0.523016,0},{0,0,1}}, true }, + { "Land_Slum_House02_F", {8678.2,9943.63,0.467712}, {{0.722561,0.691307,0},{0,0,1}}, true }, + { "Land_i_Shed_Ind_F", {9404.38,10025.6,0.448135}, {{-0.869377,0.494149,0},{0,0,1}}, true }, + { "Land_Slum_House03_F", {6140.57,10631.6,1.52588e-005}, {{0,1,0},{0,0,1}}, true }, + { "Land_cargo_house_slum_F", {6142.03,10620.6,-0.000183105}, {{0,1,0},{0,0,1}}, true }, + { "Land_WIP_F", {6097.1,10971.1,0}, {{0.943332,-0.33185,0},{0,0,1}}, true }, + { "Land_d_Stone_HouseSmall_V1_F", {8724.68,11017.6,0.0436401}, {{0.883034,-0.469309,0},{0,0,1}}, true }, + { "Land_cargo_house_slum_F", {8379.14,11076.5,0.175903}, {{-0.0939526,-0.995577,0},{0,0,1}}, true }, + { "Land_CarService_F", {6162.38,11163.9,0}, {{0.565235,0.82493,0},{0,0,1}}, true }, + { "Land_Slum_House02_F", {7953.77,11189.7,0.378326}, {{-0.858038,-0.513587,0},{0,0,1}}, true }, + { "Land_FuelStation_Sign_F", {6306.53,11247.4,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_FuelStation_Feed_F", {6317.3,11245,0}, {{-0.635136,-0.7724,0},{0,0,1}}, true }, + { "Land_FuelStation_Feed_F", {6314.38,11247.3,0}, {{-0.635136,-0.7724,0},{0,0,1}}, true }, + { "Land_cargo_house_slum_F", {8468.25,11329.9,0.165756}, {{0.999736,-0.0229824,0},{0,0,1}}, true }, + { "Land_cargo_house_slum_F", {8006.29,11374.1,0}, {{-0.99215,0.125053,0},{0,0,1}}, true }, + { "Land_Slum_House03_F", {8697.45,11398.7,1.52588e-005}, {{0.998129,-0.0611419,0},{0,0,1}}, true }, + { "Land_CarService_F", {9824.66,11380.4,0.37635}, {{0.986478,0.163892,0},{0,0,1}}, true }, + { "Land_Slum_House03_F", {7856.05,11425.2,0}, {{-0.821417,0.570328,0},{0,0,1}}, true }, + //South Takistan Trader// + { "Land_Cargo20_white_F", {6036.11,1125.46,0.010498}, {{-0.42843,0.903568,0.00337847},{-0.00795849,-0.00751236,0.99994}}, true }, + { "Land_WorkStand_F", {6028.15,1119.91,0.00125122}, {{0.775392,-0.631266,-0.0164611},{-0.00383764,-0.0307776,0.999519}}, true }, + { "Land_TablePlastic_01_F", {6037.85,1120.97,-0.000915527}, {{0.000729203,0.9992,0.0399935},{0.00388495,-0.0399961,0.999192}}, true }, + { "Land_Sink_F", {6044.6,1122.64,0.00250244}, {{0.728586,-0.682437,-0.0586787},{0.0251507,-0.0589558,0.997944}}, true }, + { "Land_Bench_F", {6029.89,1114.77,0.000244141}, {{-0.7442,0.667655,0.0200582},{-0.00320896,-0.0336024,0.99943}}, true }, + { "Land_Bench_F", {6032.85,1112.5,0.00747681}, {{-0.837352,0.546416,0.0164269},{0.000452271,-0.0293569,0.999569}}, true }, + { "Land_CampingChair_V1_F", {6038.49,1123.32,0.00387573}, {{-0.000103385,0.9992,0.0399885},{0.00642322,-0.039987,0.999179}}, true }, + { "Land_BarrelWater_grey_F", {6043.09,1124.39,0.00143433}, {{-0.00925149,0.998226,0.0588138},{-0.0130682,-0.058932,0.998176}}, true }, + { "Land_WoodenLog_F", {6051.52,1114.35,0.000610352}, {{0.00388578,0.99892,0.0462967},{0.0192068,-0.0463631,0.99874}}, true }, + { "Land_Axe_F", {6051,1113.67,-0.00332642}, {{-0.0976898,-0.99423,-0.0443034},{0.0191865,-0.0463895,0.998739}}, true }, + { "Land_WheelCart_F", {6052.01,1116.43,0.00201416}, {{0.585544,-0.80846,-0.0594177},{0.0252998,-0.0550361,0.998164}}, true }, + { "Land_ToiletBox_F", {6055.82,1112.19,0.0100098}, {{0.00262078,0.999585,0.0286989},{0.00976287,-0.0287232,0.99954}}, true }, + { "Land_cargo_addon02_V2_F", {6038.14,1122.26,0}, {{0.374381,-0.927275,0},{0,0,1}}, true }, + { "Land_InvisibleBarrier_F", {6037.96,1129.86,0}, {{0.631118,0.775506,0.0167635},{-0.012796,-0.0111996,0.999856}}, true }, + { "Land_InvisibleBarrier_F", {6025.98,1119.06,0}, {{-0.792969,0.609052,0.0159754},{-0.00320163,-0.0303862,0.999533}}, true }, + { "Land_InvisibleBarrier_F", {6043.18,1102.72,3.05176e-005}, {{0.630372,0.776021,-0.0205586},{0.0207904,0.00959709,0.999738}}, true }, + { "Land_InvisibleBarrier_F", {6028.96,1114.27,0}, {{0.630976,0.775373,0.0258171},{-0.00159586,-0.0319807,0.999487}}, true }, + { "Land_InvisibleBarrier_F", {6033.69,1110.3,0}, {{0.630791,0.77592,0.00714174},{0.00639569,-0.0144025,0.999876}}, true }, + { "Land_InvisibleBarrier_F", {6035.12,1130.01,0}, {{-0.792941,0.609299,0.000479013},{-0.00800217,-0.0112001,0.999905}}, true }, + { "Land_InvisibleBarrier_F", {6041.01,1127.43,0}, {{0.631118,0.775506,0.0167635},{-0.012796,-0.0111996,0.999856}}, true }, + { "Land_InvisibleBarrier_F", {6030.6,1112.84,0}, {{0.630976,0.775373,0.0258171},{-0.00159586,-0.0319807,0.999487}}, true }, + { "Land_InvisibleBarrier_F", {6040.03,1105.22,3.05176e-005}, {{0.630371,0.776021,-0.0205586},{0.0207904,0.00959709,0.999738}}, true }, + { "Land_InvisibleBarrier_F", {6049.45,1107.63,0}, {{-0.792716,0.608912,0.0287676},{0.023989,-0.0159943,0.999584}}, true }, + { "Land_InvisibleBarrier_F", {6028.54,1122.24,0}, {{-0.792966,0.609072,0.0153879},{-0.00639763,-0.033579,0.999416}}, true }, + { "Land_InvisibleBarrier_F", {6033.5,1128.48,0}, {{-0.792986,0.609239,0.00106654},{-0.0047996,-0.0079977,0.999957}}, true }, + { "Land_InvisibleBarrier_F", {6044.15,1124.89,0}, {{0.631136,0.775013,0.0319748},{0.0239479,-0.0606713,0.99787}}, true }, + { "Land_InvisibleBarrier_F", {6031.06,1125.35,-3.05176e-005}, {{-0.792986,0.609239,0.00106654},{-0.0047996,-0.0079977,0.999957}}, true }, + { "Land_InvisibleBarrier_F", {6036.83,1107.76,0}, {{0.630791,0.77592,0.00714174},{0.00639569,-0.0144025,0.999876}}, true }, + { "Land_InvisibleBarrier_F", {6047.28,1122.39,3.05176e-005}, {{0.631136,0.775013,0.0319748},{0.0239479,-0.0606713,0.99787}}, true }, + { "Land_Campfire_F", {6032.87,1115.99,-0.0418091}, {{0.000214814,0.999436,0.0335832},{0.00639275,-0.0335839,0.999416}}, false }, + { "Land_Pallet_MilBoxes_F", {6041.29,1125.05,-0.00198364}, {{0.827488,-0.561467,0.00430099},{-0.012796,-0.0111996,0.999856}}, true }, + { "Land_CncBarrier_stripes_F", {6040.33,1113.02,0.000823975}, {{-0.632139,-0.774606,-0.0196288},{0.0159872,-0.0383653,0.999136}}, true }, + { "Land_CncBarrier_stripes_F", {6047.36,1107.46,0.000335693}, {{-0.631868,-0.775074,-0.00173746},{0.0207925,-0.0191915,0.9996}}, true }, + { "Land_CncBarrier_stripes_F", {6037.6,1113.39,0.000396729}, {{-0.772326,0.634165,0.0367089},{0.0159872,-0.0383653,0.999136}}, true }, + { "Land_CncBarrier_stripes_F", {6045.29,1109.15,0.000244141}, {{-0.631868,-0.775074,-0.00173746},{0.0207925,-0.0191915,0.9996}}, true }, + { "Land_CncBarrier_stripes_F", {6042.68,1111.24,0.000305176}, {{-0.63192,-0.775019,-0.00476844},{0.015996,-0.0191932,0.999688}}, true }, + { "Land_CncBarrier_stripes_F", {6035.41,1110.89,-9.15527e-005}, {{-0.772423,0.634952,0.0140868},{0.00639569,-0.0144025,0.999876}}, true }, + { "Land_WoodPile_large_F", {6053.29,1114.22,-0.00335693}, {{0.596552,0.802161,0.0257612},{0.0191799,-0.0463381,0.998742}}, true }, + { "Land_InvisibleBarrier_F", {6054.37,1113.61,0}, {{-0.79274,0.608011,0.0434334},{0.0191799,-0.0463381,0.998742}}, true }, + { "Land_InvisibleBarrier_F", {6051.98,1118.6,-3.05176e-005}, {{0.630672,0.775946,0.0126463},{0.0271672,-0.0383609,0.998895}}, true }, + { "Land_InvisibleBarrier_F", {6052.1,1110.34,0}, {{-0.792943,0.609278,0.004677},{-0.00639553,-0.0159986,0.999852}}, true }, + { "Land_InvisibleBarrier_F", {6054.44,1116.41,0}, {{0.630672,0.775946,0.0126463},{0.0271672,-0.0383609,0.998895}}, true }, + + //North Takistan Trader City// + { "Land_FieldToilet_F", {4692.69,9216.02,0.00186157}, {{-0.181867,0.983211,-0.0148318},{-0.0384089,0.00796881,0.99923}}, true }, + { "Land_WoodenTable_large_F", {4699.68,9209.76,-0.000869751}, {{0.000108613,0.999872,0.0160187},{-0.00918588,-0.0160171,0.99983}}, true }, + { "Land_Sink_F", {4699.64,9212.04,-0.00198364}, {{0.999863,-0.0122077,0.0111718},{-0.0113397,-0.0137727,0.999841}}, true }, + { "Land_WheelCart_F", {4692.94,9209.78,-0.00679016}, {{-0.997144,-0.04977,0.0568083},{0.0573933,-0.0104044,0.998297}}, true }, + { "Land_WoodenTable_small_F", {4699.59,9214.76,-0.000305176}, {{-0.000309913,0.999979,0.0063879},{-0.0243413,-0.00639355,0.999683}}, true }, + { "Land_ShelvesWooden_F", {4699.63,9213.54,-0.000595093}, {{-0.000425831,0.999992,0.00400595},{-0.0247923,-0.00401527,0.999684}}, true }, + { "Land_WoodenLog_F", {4694.39,9205.16,7.62939e-005}, {{-0.00570559,0.999953,0.00788931},{-0.00645994,-0.00792613,0.999948}}, true }, + { "Land_Axe_F", {4693.92,9205.41,-0.00233459}, {{-0.671239,0.741238,-0.00216938},{-0.0121088,-0.00803886,0.999894}}, true }, + { "Land_ClutterCutter_medium_F", {4706.18,9209.04,0.499161}, {{7.679e-005,0.999872,0.0159986},{0.00479914,-0.0159987,0.999861}}, true }, + { "Land_WorkStand_F", {4721.22,9206.61,0.0012207}, {{-0.0899411,0.995695,-0.0223952},{0.0524493,0.0271904,0.998253}}, true }, + { "Land_Workbench_01_F", {4716.98,9203.52,0.0014801}, {{-0.995031,0.0855091,0.0510023},{0.0526886,0.0175805,0.998456}}, true }, + { "Land_TablePlastic_01_F", {4708.03,9201.02,0.000183105}, {{0.000125563,0.999988,0.00482595},{0.0207825,-0.00482752,0.999772}}, true }, + { "Land_WeldingTrolley_01_F", {4717.12,9206.35,0.00646973}, {{0.44751,0.894158,-0.0146909},{0.0416684,-0.00443886,0.999122}}, true }, + { "Land_Bench_EP1", {4703.71,9209.07,0.025528}, {{0.000945842,0.999869,0.016155},{0.00533934,-0.0161598,0.999855}}, true }, + { "Land_Bench_F", {4708.34,9209.1,0.000198364}, {{0.000875162,0.999872,0.0159684},{0.0272235,-0.0159863,0.999501}}, true }, + { "Land_ToolTrolley_01_F", {4717.2,9205.34,0.00149536}, {{0.997372,-0.0506515,-0.051806},{0.052756,0.017601,0.998452}}, true }, + { "Land_GasTank_02_F", {4715.34,9205.07,0.00308228}, {{-0.0178368,0.999714,-0.0159049},{0.0557274,0.0168767,0.998303}}, true }, + { "Land_CampingChair_V2_F", {4708.14,9202.72,0.000244141}, {{4.07808e-005,0.999988,0.00486258},{0.0207559,-0.00486238,0.999773}}, true }, + { "Land_GasTank_01_khaki_F", {4703.97,9201.41,0}, {{-0.000951868,0.999938,0.0111023},{-0.00172423,-0.011104,0.999937}}, true }, + { "Land_CarBattery_01_F", {4716.92,9203.31,0.768356}, {{0.708535,0.703894,-0.0501154},{0.0526328,0.0181071,0.99845}}, true }, + { "Land_TouristShelter_01_F", {4606.26,9190.24,0}, {{-0.123957,0.992288,0},{0,0,1}}, true }, + { "Land_Bench_01_F", {4606.77,9190.43,0}, {{-0.215065,0.9766,0},{0,0,1}}, true }, + { "Land_Wreck_Truck_F", {4696.15,9184.84,-0.00256348}, {{-0.000107508,0.999988,0.00479872},{-0.00959906,-0.00479953,0.999942}}, true }, + { "Land_Garbage_square5_F", {4697.1,9184.93,0.000701904}, {{-4.60715e-005,0.999989,0.00479931},{-0.00959906,-0.00479953,0.999942}}, true }, + { "Land_Garbage_square3_F", {4689.18,9186.73,0.00193787}, {{-0.000301899,0.999954,0.00959289},{-0.0207953,-0.00959709,0.999738}}, true }, + { "Land_HelipadEmpty_F", {4679.79,9199.31,0}, {{-0.000102389,0.999968,0.00799892},{-0.0127988,-0.00799958,0.999886}}, true }, + { "Land_Wreck_CarDismantled_F", {4728.13,9191.67,-0.00935364}, {{-0.952328,0.304496,-0.0188125},{0.00478809,0.0765754,0.997052}}, true }, + { "Land_WoodPile_large_F", {4720.4,9198.06,0.000762939}, {{0.202069,-0.979114,0.0224289},{0.0207862,0.0271838,0.999414}}, true }, + { "Land_InvisibleBarrier_F", {4707.33,9199.88,-1.52588e-005}, {{0.0103781,-0.999867,0.0125827},{0.0207946,0.0127965,0.999702}}, true }, + { "Land_CncBarrier_stripes_F", {4705.87,9199.76,3.05176e-005}, {{0.0559378,-0.998367,0.0116158},{0.0207946,0.0127965,0.999702}}, true }, + { "Land_CncBarrier_stripes_F", {4708.64,9199.9,0.000106812}, {{0.0559378,-0.998367,0.0116158},{0.0207946,0.0127965,0.999702}}, true }, + { "Land_Wreck_Offroad_F", {4702.51,9185.43,-0.00300598}, {{0.960804,0.277156,0.00635661},{-0.00800014,0.0047996,0.999956}}, true }, + { "Land_Grave_memorial_F", {4784.23,9154.75,-1.52588e-005}, {{0,1,0},{0,0,1}}, true }, + { "Land_cargo_addon02_V1_F", {4693.09,9207.55,0}, {{-0.999719,-0.023697,0},{0,0,1}}, true }, + { "Land_Garbage_square5_F", {4692.89,9215.92,0.000900269}, {{0.00030667,0.999968,-0.00798601},{-0.0383714,0.0079919,0.999232}}, true }, + { "Land_Wall_Tin_4", {4696.9,9218.27,-1.52588e-005}, {{0.0354173,-0.999358,-0.0054882},{-0.0255892,-0.0063967,0.999652}}, true }, + { "Land_Wall_Tin_4", {4691.39,9212.14,-0.0480499}, {{0.998071,0.0491377,0.0379338},{-0.0383714,0.0079919,0.999232}}, true }, + { "Land_Wall_Tin_4", {4691.18,9216.06,0.00137329}, {{0.998071,0.0491377,0.0379338},{-0.0383714,0.0079919,0.999232}}, true }, + { "Land_Wall_Tin_4", {4691.77,9204.26,0.000167847}, {{0.998701,0.0492313,0.0131775},{-0.0127988,-0.00799958,0.999886}}, true }, + { "Land_Wall_Tin_4", {4691.59,9208.23,0.000183105}, {{0.998703,0.0492331,0.0129413},{-0.0127992,-0.00320041,0.999913}}, true }, + { "Land_Wall_Tin_4", {4692.98,9218.15,0.000457764}, {{0.0354177,-0.999329,0.00935275},{-0.0383714,0.0079919,0.999232}}, true }, + { "Land_Garbage_line_F", {4699.61,9212.47,0.000671387}, {{7.67762e-005,0.999872,0.0159998},{-0.011199,-0.0159979,0.999809}}, true }, + { "Land_InvisibleBarrier_F", {4692.98,9218.13,0}, {{0.00961437,-0.999919,0.00836659},{-0.0383714,0.0079919,0.999232}}, true }, + { "Land_InvisibleBarrier_F", {4691.79,9204.25,0}, {{0.998708,0.0490765,0.0131764},{-0.0127988,-0.00799958,0.999886}}, true }, + { "Land_InvisibleBarrier_F", {4691.61,9208.22,0}, {{0.998711,0.0490772,0.0129409},{-0.0127992,-0.00320041,0.999913}}, true }, + { "Land_InvisibleBarrier_F", {4694.23,9202.51,0}, {{0.00999832,-0.999919,-0.00793583},{-0.00640103,-0.00800007,0.999948}}, true }, + { "Land_InvisibleBarrier_F", {4691.42,9212.13,0}, {{0.998498,0.0489143,0.0246673},{-0.0239896,-0.0143938,0.999609}}, true }, + { "Land_InvisibleBarrier_F", {4696.9,9218.27,0}, {{0.00998682,-0.999931,-0.00614284},{-0.0255892,-0.0063967,0.999652}}, true }, + { "Land_InvisibleBarrier_F", {4698.32,9202.47,0}, {{0.0100345,-0.999888,-0.0111011},{-0.00959857,-0.0111975,0.999891}}, true }, + { "Land_InvisibleBarrier_F", {4691.22,9216.05,0}, {{0.998064,0.0492895,0.0379323},{-0.0383714,0.0079919,0.999232}}, true }, + { "Land_Mil_ConcreteWall_F", {4694.23,9202.51,0}, {{-0.000102393,0.999968,0.00799958},{-0.00640103,-0.00800007,0.999948}}, true }, + { "Land_Mil_ConcreteWall_F", {4698.32,9202.46,6.10352e-005}, {{-0.000133085,0.999937,0.0111968},{-0.00959857,-0.0111975,0.999891}}, true }, + { "Land_StallWater_F", {4699.59,9207.59,0}, {{-7.16727e-005,0.999872,0.0159981},{-0.011199,-0.0159979,0.999809}}, true }, + { "Land_cargo_addon02_V2_F", {4706.99,9202.07,0}, {{0.137897,-0.990447,0},{0,0,1}}, true }, + { "Land_Wreck_Van_F", {4726.12,9201.61,0.00146484}, {{-0.00155419,0.999382,-0.0351312},{0.0303676,0.0351622,0.99892}}, true }, + { "Land_TentA_F", {4707.5,9216.53,0.000366211}, {{-5.11967e-005,0.999999,-0.00159992},{0.0319831,0.00160074,0.999487}}, true }, + { "Land_TentA_F", {4709.33,9216.42,0.00382996}, {{-0.00315945,0.999073,-0.0429281},{0.0733321,0.0430442,0.996378}}, true }, + { "Land_Wreck_UAZ_F", {4731.8,9202.18,0.00343323}, {{0.00114477,0.998693,-0.0511061},{-0.022365,0.051119,0.998442}}, true }, + { "Land_TentDome_F", {4704.91,9216.77,-0.00294495}, {{-2.04971e-005,0.999999,-0.0016013},{0.0127992,0.00160143,0.999917}}, true }, + { "Land_Wall_Tin_4_2", {4711.16,9209.09,0.00344849}, {{-0.99741,-0.0648115,0.0311907},{0.0319811,-0.0111947,0.999426}}, true }, + { "Land_Wall_Tin_4_2", {4710.8,9216.84,0.00985718}, {{-0.995122,-0.0629441,0.0759589},{0.0733321,0.0430442,0.996378}}, true }, + { "Land_Wall_Tin_4", {4708.61,9218.76,0.00636292}, {{0.0341994,-0.998589,0.0406227},{0.0733321,0.0430442,0.996378}}, true }, + { "Land_Wall_Tin_4", {4700.72,9218.49,0.000259399}, {{0.0337206,-0.999431,0.00116902},{0.0127992,0.00160143,0.999917}}, true }, + { "Land_Wall_Tin_4", {4704.68,9218.64,0.000274658}, {{0.0337206,-0.999431,0.00116902},{0.0127992,0.00160143,0.999917}}, true }, + { "Land_Wall_Tin_4", {4710.83,9212.96,0.00062561}, {{-0.997471,-0.0634533,0.0320202},{0.0319831,0.00160074,0.999487}}, true }, + { "Land_InvisibleBarrier_F", {4710.77,9203.75,0}, {{0.996154,-0.0833736,-0.0269618},{0.0271896,0.00159853,0.999629}}, true }, + { "Land_InvisibleBarrier_F", {4708.56,9218.68,0}, {{0.0181907,-0.992108,0.124063},{0.0728238,0.125068,0.989472}}, true }, + { "Land_InvisibleBarrier_F", {4704.66,9218.63,0}, {{0.00952644,-0.999954,0.00147954},{0.0127992,0.00160143,0.999917}}, true }, + { "Land_InvisibleBarrier_F", {4700.7,9218.48,0}, {{0.00952644,-0.999954,0.00147954},{0.0127992,0.00160143,0.999917}}, true }, + { "Land_InvisibleBarrier_F", {4710.81,9212.97,0}, {{-0.997574,-0.0618166,0.0320209},{0.0319831,0.00160074,0.999487}}, true }, + { "Land_InvisibleBarrier_F", {4711.04,9209.09,0}, {{-0.997634,-0.0612471,0.0312378},{0.0319811,-0.0111947,0.999426}}, true }, + { "Land_InvisibleBarrier_F", {4710.66,9216.81,0}, {{-0.995205,-0.0616866,0.0759106},{0.0733321,0.0430442,0.996378}}, true }, + { "Land_Campfire_F", {4706.18,9209.11,-0.0424957}, {{7.679e-005,0.999872,0.0159986},{0.00479914,-0.0159987,0.999861}}, false }, + { "Land_Cages_F", {4702.99,9202.33,7.62939e-005}, {{-0.120214,-0.992684,-0.011309},{-0.00159902,-0.011198,0.999936}}, true }, + { "Land_WoodPile_F", {4711.05,9209.09,-0.00050354}, {{5.74658e-008,0.999937,0.0112005},{0.0319811,-0.0111947,0.999426}}, true }, + { "Land_CncBarrier_stripes_F", {4711.09,9205.7,0.000488281}, {{0.999128,-0.0317508,-0.0271252},{0.0271896,0.00159853,0.999629}}, true }, + { "Land_CncBarrier_stripes_F", {4704.33,9202.31,3.05176e-005}, {{0.992958,0.118394,-0.00419773},{0.00479969,-0.00479969,0.999977}}, true }, + { "Land_CncBarrier_stripes_F", {4710.37,9203.08,0.000488281}, {{0.999128,-0.0317508,-0.0271252},{0.0271896,0.00159853,0.999629}}, true }, + { "Land_Graffiti_02_F", {4713.76,9202.35,1.36725}, {{-5.87669e-005,0.999999,-0.00159696},{0.0367744,0.00159804,0.999322}}, true }, + //Central Takistan Traders// + { "Land_ToiletBox_F", {6836.36,4966.53,0.00524902}, {{-0.2573,-0.964613,0.057602},{-0.0159749,0.0638468,0.997832}}, true }, + { "Land_Workbench_01_F", {6821.5,4977.54,0.00424194}, {{-0.277838,-0.958428,0.0649683},{0.0175733,0.0625488,0.997887}}, true }, + { "Land_WoodenTable_large_F", {6823.77,4977.88,0.00088501}, {{0.267291,0.962627,-0.0436357},{0.00170044,0.0448121,0.998994}}, true }, + { "Land_Sink_F", {6826.78,4995.07,0.00296021}, {{0.962627,-0.264712,0.0572465},{-0.0654692,-0.0223375,0.997604}}, true }, + { "Land_Metal_wooden_rack_F", {6816.31,4978.64,0.00466919}, {{-0.00330259,0.998043,-0.0624464},{0.0272187,0.0625133,0.997673}}, true }, + { "Land_Bench_F", {6824.73,4985.72,0.000762939}, {{0.043752,0.998042,-0.0447102},{0.002451,0.0446456,0.999}}, true }, + { "Land_Bench_F", {6827.24,4989.56,0.000732422}, {{0.965706,0.258597,0.0232349},{-0.0351482,0.0415406,0.998518}}, true }, + { "Land_ToolTrolley_01_F", {6823.86,4979.69,0.0010376}, {{-0.923417,0.383474,-0.0157385},{0.00162782,0.0449203,0.998989}}, true }, + { "Land_ChairPlastic_F", {6821.19,4980.42,0.000946045}, {{-0.00265323,0.998993,-0.0447932},{0.00160392,0.0447976,0.998995}}, true }, + { "Land_Shovel_F", {6816.23,4979.15,0.0244751}, {{-0.976334,0.194672,-0.0942079},{-0.0787972,0.0854613,0.993221}}, true }, + { "Barrels", {6816.68,5003.23,0.0267334}, {{-0.152723,-0.988101,-0.0182057},{-0.00837304,-0.0171275,0.999818}}, true }, + { "Barrel1", {6816.67,5002.12,0.0392151}, {{0.035892,0.999242,0.015058},{-0.00495461,-0.0148896,0.999877}}, true }, + { "Barrel4", {6815.84,5001.92,0.0377197}, {{0.0172242,0.999835,0.00578095},{0.00393281,-0.00584951,0.999975}}, true }, + { "Land_Tyre_F", {6822.13,5007.26,-0.00415039}, {{-0.744557,0.667329,-0.0174844},{-0.0457334,-0.0248609,0.998644}}, true }, + { "Land_WoodenLog_F", {6829.39,5006.15,0.000915527}, {{-0.00689487,0.999762,0.0207122},{-0.0399997,-0.0209719,0.99898}}, true }, + { "Land_GasTank_01_khaki_F", {6815.57,5001.34,3.05176e-005}, {{-0.0132098,0.999902,0.00463848},{0.00292144,-0.00460027,0.999985}}, true }, + { "Land_Axe_F", {6829.84,5005.77,-0.00332642}, {{0.613229,-0.789849,0.00942659},{-0.0400014,-0.0191336,0.999016}}, true }, + { "Land_cargo_addon02_V2_F", {6822.72,4978.48,0}, {{0.23174,0.972778,0},{0,0,1}}, true }, + { "Land_LampShabby_F", {6831.91,4979.58,0}, {{-0.969814,0.243846,0},{0,0,1}}, true }, + { "Land_Garbage_line_F", {6841.61,4984.06,-0.0346375}, {{0.163686,0.986502,-0.00451119},{-0.0495347,0.012786,0.998691}}, true }, + { "Land_InvisibleBarrier_F", {6808.48,4981.04,3.05176e-005}, {{0.95284,-0.302925,-0.0182415},{0.0398825,0.0654078,0.997061}}, true }, + { "Land_InvisibleBarrier_F", {6811.82,4992.36,0}, {{0.9534,-0.301682,-0.00414971},{0.0159832,0.0367673,0.999196}}, true }, + { "Land_InvisibleBarrier_F", {6809.57,4984.53,-3.05176e-005}, {{0.953208,-0.30215,-0.00997498},{0.0271543,0.0527098,0.998241}}, true }, + { "Land_InvisibleBarrier_F", {6810.78,4988.44,0}, {{0.95319,-0.302156,-0.0114244},{0.0271608,0.04793,0.998481}}, true }, + { "Land_InvisibleBarrier_F", {6813.77,4997.97,0}, {{0.953349,-0.301718,-0.00953895},{0.0175947,0.0239933,0.999557}}, true }, + { "Land_InvisibleBarrier_F", {6810.91,4977.98,3.05176e-005}, {{-0.986553,-0.155707,0.0496766},{0.0398825,0.0654078,0.997061}}, true }, + { "Land_InvisibleBarrier_F", {6806.35,4974.26,0}, {{0.953501,-0.30136,0.00434762},{0.00958955,0.0447529,0.998952}}, true }, + { "Land_InvisibleBarrier_F", {6807.23,4971.46,0}, {{0.264706,0.963246,-0.0456943},{0.00958955,0.0447529,0.998952}}, true }, + { "Land_InvisibleBarrier_F", {6811.2,4970.35,0}, {{0.263835,0.961646,-0.0750246},{0.0335006,0.0685981,0.997082}}, true }, + { "Land_InvisibleBarrier_F", {6815.31,4969.3,0}, {{0.264347,0.961823,-0.0708255},{0.0175583,0.068626,0.997488}}, true }, + { "Land_InvisibleBarrier_F", {6819.3,4968.27,0}, {{0.264399,0.95997,-0.0924669},{0.0127421,0.0923934,0.995641}}, true }, + { "Land_InvisibleBarrier_F", {6823.26,4967.27,0}, {{0.264399,0.95997,-0.0924669},{0.0127421,0.0923934,0.995641}}, true }, + { "Land_InvisibleBarrier_F", {6827.52,4966.38,-3.05176e-005}, {{0.264835,0.960678,-0.083428},{0.00159562,0.0860806,0.996287}}, true }, + { "Land_InvisibleBarrier_F", {6829.99,4965.85,-3.05176e-005}, {{0.264835,0.960678,-0.083428},{0.00159562,0.0860806,0.996287}}, true }, + { "Land_InvisibleBarrier_F", {6835.1,4964.43,0}, {{0.264658,0.960616,-0.0846927},{0.00637748,0.0860789,0.996268}}, true }, + { "Land_InvisibleBarrier_F", {6837.97,4965.67,0}, {{0.968645,-0.247941,0.015868},{-0,0.0638684,0.997958}}, true }, + { "Land_InvisibleBarrier_F", {6838.97,4969.49,0}, {{0.968549,-0.248798,-0.00359615},{0.0143855,0.0415613,0.999032}}, true }, + { "Land_InvisibleBarrier_F", {6840.01,4973.89,3.05176e-005}, {{0.968413,-0.247955,0.0263429},{-0.0271921,0,0.99963}}, true }, + { "Land_InvisibleBarrier_F", {6842.52,4982.06,0}, {{0.967901,-0.247405,0.0442585},{-0.039958,0.0223788,0.998951}}, true }, + { "Land_InvisibleBarrier_F", {6843.71,4985.92,0}, {{0.967499,-0.247644,0.0511581},{-0.0495347,0.012786,0.998691}}, true }, + { "Land_InvisibleBarrier_F", {6844.74,4989.38,0}, {{0.968008,-0.247783,0.0395533},{-0.0383733,0.0095921,0.999218}}, true }, + { "Land_InvisibleBarrier_F", {6845.97,4995.12,0}, {{0.967898,-0.2479,0.041456},{-0.0415651,0.0047956,0.999124}}, true }, + { "Land_Mil_ConcreteWall_F", {6835.13,4993.3,0}, {{0.977822,-0.209439,0},{0,0,1}}, true }, + { "Land_Mil_ConcreteWall_F", {6829.44,4976.81,0}, {{-0.36705,0.930201,0},{0,0,1}}, true }, + { "Land_Mil_ConcreteWall_F", {6825.53,4975.78,0}, {{-0.0161481,-0.99987,0},{0,0,1}}, true }, + { "Land_Mil_ConcreteWall_F", {6832.76,4981.06,0}, {{0.985853,-0.167609,0},{0,0,1}}, true }, + { "Land_Mil_ConcreteWall_F", {6833.52,4985.23,0}, {{-0.971093,0.2387,0},{0,0,1}}, true }, + { "Land_Mil_ConcreteWall_F", {6834.37,4989.17,0}, {{0.985853,-0.167609,0},{0,0,1}}, true }, + { "Land_Garbage_square3_F", {6835.88,4968.22,-0.0100098}, {{0.0010217,0.997959,-0.063852},{-0.0159663,0.0638602,0.997831}}, true }, + { "Land_Campfire_F", {6827.88,4986.2,0.000396729}, {{0.000675027,0.999816,-0.0191768},{-0.0351719,0.0191887,0.999197}}, false }, + { "Land_CncBarrier_stripes_F", {6832.8,4967.1,0}, {{0.435862,0.900013,0},{0,0,1}}, true }, + { "Land_CncBarrier_stripes_F", {6843.6,4992.37,-3.05176e-005}, {{0.965017,-0.262186,0},{0,0,1}}, true }, + { "Land_CncBarrier_stripes_F", {6836.55,4997.99,0}, {{0.965017,-0.262186,0},{0,0,1}}, true }, + { "Land_CncBarrier_stripes_F", {6814.49,4994.63,0}, {{0.938418,-0.345502,0},{0,0,1}}, true }, + { "Land_HelipadEmpty_F", {6855.04,4967.83,3.05176e-005}, {{0.000437455,0.999538,-0.0303801},{-0.0143913,0.0303832,0.999435}}, true }, + { "Land_cargo_addon02_V1_F", {6829.81,5005.98,0}, {{0.276798,0.960928,0},{0,0,1}}, true }, + { "Land_LampShabby_F", {6818.71,5011.19,0}, {{0.648908,-0.760867,0},{0,0,1}}, true }, + { "Land_Wreck_Car3_F", {6820.04,5007.16,6.10352e-005}, {{-0.000810191,0.999539,0.0303569},{-0.0303675,-0.0303675,0.999077}}, true }, + { "Land_Garbage_square5_F", {6819.1,5004.66,0}, {{-0.000422135,0.999845,0.0175897},{-0.0239884,-0.0175947,0.999557}}, true }, + { "Land_Wreck_Skodovka_F", {6823.28,5007.32,-0.00299072}, {{-0.000800088,0.999539,0.0303572},{-0.0303675,-0.0303675,0.999077}}, true }, + { "Land_WoodPile_large_F", {6831.42,5004.99,-0.000488281}, {{-0.268676,-0.962617,-0.0343869},{-0.0590849,-0.0191621,0.998069}}, true }, + { "Land_InvisibleBarrier_F", {6827.79,5009.17,0}, {{0.288008,0.95695,0.0360188},{-0.039955,-0.0255718,0.998874}}, true }, + { "Land_InvisibleBarrier_F", {6814.93,5002.01,0}, {{0.953513,-0.301319,-0.00449584},{0.00319819,-0.00479973,0.999983}}, true }, + { "Land_InvisibleBarrier_F", {6817.45,5009.85,0}, {{0.953503,-0.30135,0.0045702},{-0.0143913,-0.0303783,0.999435}}, true }, + { "Land_InvisibleBarrier_F", {6819.73,5011.49,0}, {{0.287997,0.956884,0.0378388},{-0.0303675,-0.0303675,0.999077}}, true }, + { "Land_InvisibleBarrier_F", {6816.19,5005.91,0}, {{0.95351,-0.301337,0.00385368},{-0.00960256,-0.017599,0.999799}}, true }, + { "Land_InvisibleBarrier_F", {6823.68,5010.41,0}, {{0.288173,0.957048,0.0318784},{-0.0255838,-0.0255838,0.999345}}, true }, + { "Land_InvisibleBarrier_F", {6831.6,5007.95,0}, {{0.288176,0.957051,0.0317511},{-0.046343,-0.0191799,0.998741}}, true }, + { "Land_WoodPile_F", {6830.02,5007.43,-0.0032959}, {{0.964708,-0.261382,0.0318968},{-0.039955,-0.0255718,0.998874}}, true }, + { "Land_WoodPile_F", {6828.34,5007.86,0.00384521}, {{-0.935741,0.351541,-0.02843},{-0.039955,-0.0255718,0.998874}}, true }, + //North Airfield// + + { "Land_Dome_Big_F", {5687.97,11165,0}, 222.826 }, + { "Land_Research_HQ_F", {5694.74,11152,0}, 317.013 }, + { "Land_Cargo_House_V3_F", {5689.55,11182.2,0}, 0 }, + { "Land_Cargo_Tower_V2_F", {5212.86,11249.2,0}, 176.763 }, + { "Land_u_Barracks_V2_F", {5952.81,11397.9,0}, 309.449 }, + { "Land_i_Barracks_V2_F", {6001.64,11452.8,0}, 314.46 }, + { "Land_Cargo_HQ_V3_F", {6122.37,11471,0}, 225.069 }, + { "Land_MilOffices_V1_F", {6113.1,11616.1,0}, 313.928 }, + { "Land_Research_HQ_F", {5946.27,11897,0}, 246.376 }, + //South Airfield// + { "Land_Cargo_House_V2_F", {8124.88,1754.53,0}, 244.021 }, + { "Land_Cargo_HQ_V3_F", {8350.81,1881.47,0}, 59.4836 }, + { "Land_u_Barracks_V2_F", {7966.25,1944.56,0}, 0 }, + { "Land_i_Barracks_V2_F", {7973.4,1965.71,0}, 0 }, + { "Land_Cargo_House_V3_F", {8215.93,2097.81,0}, 242.12 }, + { "Land_Dome_Small_F", {8218.37,2101.94,0}, 331.487 }, + { "Land_Cargo_House_V3_F", {8212.55,2105.49,0}, 242.12 }, + { "Land_Dome_Small_F", {8264.45,2122.29,0}, 249.537 }, + { "Land_Medevac_HQ_V1_F", {8264.1,2122.6,0}, 339.766 }, + { "Land_Medevac_house_V1_F", {8249.44,2163.63,0}, 0 }, + { "Land_Dome_Small_F", {8251.42,2157.29,0}, 249.537 }, + //Solar// + { "Land_spp_Tower_F", {8287.05,1752.38,0.0648499}, {{-0.533204,0.845987,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {7780.61,2441.84,0.432739}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {7766.5,2505.87,0.377075}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {7763.42,2564.94,0.59549}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {7765.59,2634.35,0.0740662}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {10295.7,4805.07,0.327576}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {10307.8,4871.06,0.972107}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {10305,4952.57,0.438354}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {10302,5014.5,0.149353}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {7119.45,5298.63,0.98877}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {7227.36,5291.57,0.271637}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {7328.1,5287.23,0.30069}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {7393.63,5290.79,0.190735}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {6965.36,5303.76,0.493591}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {8744.52,5598.47,0.464203}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {8781.08,5566.13,0.680725}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {8712.65,5617.67,0.594849}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {1600.56,5922.1,1.23233}, {{-0.0195322,0.999809,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {1616.69,5985.26,2.29919}, {{-0.0195322,0.999809,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {1620.23,6034.4,1.60962}, {{-0.0195322,0.999809,0},{0,0,1}}, true }, + { "Land_spp_Tower_F", {5049.4,6893.92,0}, {{0.804383,-0.594112,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {8321.2,7989.07,0.614609}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {8348.65,8109.23,1.52588e-005}, {{0,1,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {5170.32,8480.63,0.533188}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {5156.38,8546.87,0}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {5164.67,8619.12,0.751556}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {6638.35,9129.13,0.625168}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {6657.68,9212.81,0}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {6658.63,9266.7,4.82309}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {6302.91,10041.1,0.161804}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {6287.9,10089,0}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {6299.96,10166,0}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {6296.93,10260.6,0.292976}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {9934.16,10688,0.210617}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {9928.13,10762.6,0.0317841}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {10866.6,10836.5,0.0207214}, {{-0.0195322,0.999809,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {9933.14,10864.1,0.030426}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {10803.6,10874,0.167221}, {{-0.0195322,0.999809,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {9974.21,10971.6,0.0375671}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {5980.41,11172.4,0}, {{-0.632069,-0.774912,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {10081.8,11621.8,0.269196}, {{-0.0195322,0.999809,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {10112.3,11602.6,0.0422211}, {{-0.0195322,0.999809,0},{0,0,1}}, true }, + { "Land_wpp_Turbine_V2_F", {10049.7,11655.5,0.868301}, {{-0.0195322,0.999809,0},{0,0,1}}, true } + }; + + staticNpcPos[] = { + //South Trader// + { "C_man_hunter_1_F", { 6037.32,1121.89,0.00152588 }, 165.26 }, + //Northern Traders// + { "C_man_w_worker_F", { 4707.49,9201.98,0.00137329 }, 209.833 }, + { "C_man_w_worker_F", { 4719.34,9204.96,0.00131226 }, 202.364 }, + //Central Traders// + { "C_man_hunter_1_F", { 6822.1,4978.7,0.00137329 }, 88.9175 }, + { "C_man_hunter_1_F", { 6829.11,5004.53,0.00158691 }, 179.875 } + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/tanoa.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/tanoa.h new file mode 100644 index 0000000..1360c66 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/tanoa.h @@ -0,0 +1,706 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for altis. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/altis.h +*/ +class Tanoa : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 10; + // vehicles - Max vehicle slots is calculated from per vehicle limits below. Warning! Higher the number lower the performance. + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5} + }; + + allowedVehiclesList[] = { + {"C_Offroad_01_EPOCH",6}, + {"C_Quadbike_01_EPOCH",6}, + {"C_Hatchback_01_EPOCH",8}, + {"C_Hatchback_02_EPOCH",8}, + {"C_SUV_01_EPOCH",8}, + {"C_Rubberboat_EPOCH",3}, + {"C_Rubberboat_02_EPOCH",3}, + {"C_Rubberboat_03_EPOCH",3}, + {"C_Rubberboat_04_EPOCH",3}, + {"C_Van_01_box_EPOCH",6}, + {"C_Van_01_transport_EPOCH",6}, + {"C_Boat_Civil_01_EPOCH",5}, + {"C_Boat_Civil_01_police_EPOCH",3}, + {"C_Boat_Civil_01_rescue_EPOCH",3}, + {"B_Heli_Light_01_EPOCH",2}, + {"B_SDV_01_EPOCH",2}, + {"B_MRAP_01_EPOCH",3}, + {"I_MRAP_03_EPOCH", 3}, + {"B_Truck_01_transport_EPOCH",1}, + {"B_Truck_01_covered_EPOCH",2}, + {"B_Truck_01_mover_EPOCH",1}, + {"B_Truck_01_box_EPOCH",1}, + {"O_Truck_02_covered_EPOCH",2}, + {"O_Truck_02_transport_EPOCH",1}, + {"O_Truck_03_covered_EPOCH",1}, + {"O_Truck_02_box_EPOCH",1}, + {"I_Heli_light_03_unarmed_EPOCH",1}, + {"O_Heli_Light_02_unarmed_EPOCH",1}, + {"I_Heli_Transport_02_EPOCH",1}, + {"O_Heli_Transport_04_EPOCH",1}, + {"O_Heli_Transport_04_bench_EPOCH",1}, + {"O_Heli_Transport_04_box_EPOCH",1}, + {"O_Heli_Transport_04_covered_EPOCH",1}, + {"B_Heli_Transport_03_unarmed_EPOCH",1}, + {"jetski_epoch",5}, + {"K01",1}, + {"K02",1}, + {"K03",1}, + {"K04",1}, + {"ebike_epoch",5}, + {"mosquito_epoch",4}, + {"C_Heli_Light_01_civil_EPOCH",3}, + // apex + {"C_Boat_Transport_02_F",1}, + {"C_Scooter_Transport_01_F",3}, + {"C_Offroad_02_unarmed_F",2}, + {"I_C_Offroad_02_unarmed_F",2}, + {"B_T_LSV_01_unarmed_F",2}, + {"O_LSV_02_unarmed_F",2}, + {"O_T_LSV_02_unarmed_F",2}, + {"C_Plane_Civil_01_F",3}, + {"C_Plane_Civil_01_racing_F",1}, + {"B_CTRG_LSV_01_light_F",2}, + {"B_LSV_01_unarmed_F",2}, + {"B_T_VTOL_01_infantry_F",1}, + {"B_T_VTOL_01_vehicle_F",1} + }; + allowedVehiclesList_CUP[] = { + {"C_Offroad_01_EPOCH",4}, + {"C_Quadbike_01_EPOCH",4}, + {"C_Hatchback_01_EPOCH",5}, + {"C_Hatchback_02_EPOCH",5}, + {"C_SUV_01_EPOCH",5}, + {"C_Rubberboat_EPOCH",2}, + {"C_Rubberboat_02_EPOCH",2}, + {"C_Rubberboat_03_EPOCH",2}, + {"C_Rubberboat_04_EPOCH",2}, + {"C_Van_01_box_EPOCH",4}, + {"C_Van_01_transport_EPOCH",4}, + {"C_Boat_Civil_01_EPOCH",5}, + {"C_Boat_Civil_01_police_EPOCH",2}, + {"C_Boat_Civil_01_rescue_EPOCH",2}, + {"B_Heli_Light_01_EPOCH",2}, + {"B_SDV_01_EPOCH",2}, + {"B_MRAP_01_EPOCH",2}, + {"I_MRAP_03_EPOCH", 2}, + {"B_Truck_01_transport_EPOCH",1}, + {"B_Truck_01_covered_EPOCH",2}, + {"B_Truck_01_mover_EPOCH",1}, + {"B_Truck_01_box_EPOCH",1}, + {"O_Truck_02_covered_EPOCH",2}, + {"O_Truck_02_transport_EPOCH",1}, + {"O_Truck_03_covered_EPOCH",1}, + {"O_Truck_02_box_EPOCH",1}, + {"I_Heli_light_03_unarmed_EPOCH",1}, + {"O_Heli_Light_02_unarmed_EPOCH",1}, + {"I_Heli_Transport_02_EPOCH",1}, + {"O_Heli_Transport_04_EPOCH",1}, + {"O_Heli_Transport_04_bench_EPOCH",1}, + {"O_Heli_Transport_04_box_EPOCH",1}, + {"O_Heli_Transport_04_covered_EPOCH",1}, + {"B_Heli_Transport_03_unarmed_EPOCH",1}, + {"jetski_epoch",3}, + {"K01",1}, + {"K02",1}, + {"K03",1}, + {"K04",1}, + {"ebike_epoch",3}, + {"mosquito_epoch",3}, + {"C_Heli_Light_01_civil_EPOCH",2}, + {"CUP_C_Fishing_Boat_Chernarus",2}, + {"CUP_C_LR_Transport_CTK",2}, + {"CUP_B_Zodiac_USMC",2}, + {"CUP_C_Skoda_Red_CIV",2}, + {"CUP_C_Skoda_White_CIV",2}, + {"CUP_C_Skoda_Blue_CIV",2}, + {"CUP_C_Skoda_Green_CIV",2}, + {"CUP_C_SUV_CIV",2}, + {"CUP_B_HMMWV_Transport_USA",2}, + {"CUP_B_HMMWV_Unarmed_USA",2}, + {"CUP_C_SUV_TK",2}, + {"CUP_B_LR_Transport_CZ_D",2}, + {"CUP_C_Datsun_Covered",2}, + {"CUP_C_Datsun_Plain",2}, + {"CUP_C_Datsun_Tubeframe",2}, + {"CUP_C_Datsun_4seat",2}, + {"CUP_C_Datsun",2}, + {"CUP_C_Golf4_green_Civ",2}, + {"CUP_C_Golf4_red_Civ",2}, + {"CUP_C_Golf4_blue_Civ",2}, + {"CUP_C_Golf4_black_Civ",2}, + {"CUP_C_Golf4_kitty_Civ",2}, + {"CUP_C_Golf4_reptile_Civ",2}, + {"CUP_C_Golf4_camodigital_Civ",2}, + {"CUP_C_Golf4_camodark_Civ",2}, + {"CUP_C_Golf4_camo_Civ",2}, + {"CUP_B_M1030",2}, + {"CUP_C_Ural_Civ_03",2}, + {"CUP_C_Ural_Open_Civ_03",2}, + {"CUP_C_Ural_Civ_02",2}, + {"CUP_B_TowingTractor_USMC",2}, + {"CUP_C_C47_CIV",2}, + {"CUP_B_LR_Transport_CZ_W",2}, + {"CUP_C_Golf4_white_Civ",2}, + {"CUP_C_Golf4_whiteblood_Civ",2}, + {"CUP_C_Golf4_yellow_Civ",2}, + {"CUP_C_Octavia_CIV",2}, + {"CUP_C_Ural_Civ_01",2}, + {"CUP_C_Ural_Open_Civ_01",2}, + {"CUP_B_Ural_CDF",2}, + {"CUP_B_Ural_Open_CDF",2}, + {"CUP_C_Ural_Open_Civ_02",2}, + {"CUP_B_HMMWV_Ambulance_USA",2}, + {"CUP_C_UAZ_Unarmed_TK_CIV",2}, + {"CUP_C_UAZ_Open_TK_CIV",2}, + {"CUP_B_UAZ_Unarmed_CDF",2}, + {"CUP_B_Ural_Empty_CDF",2}, + {"CUP_C_DC3_CIV",2}, + //apex + {"C_Boat_Transport_02_F",1}, + {"C_Scooter_Transport_01_F",3}, + {"C_Offroad_02_unarmed_F",2}, + {"I_C_Offroad_02_unarmed_F",2}, + {"B_T_LSV_01_unarmed_F",2}, + {"O_LSV_02_unarmed_F",2}, + {"O_T_LSV_02_unarmed_F",2}, + {"C_Plane_Civil_01_F",3}, + {"C_Plane_Civil_01_racing_F",1}, + {"B_CTRG_LSV_01_light_F",2}, + {"B_LSV_01_unarmed_F",2}, + {"B_T_VTOL_01_infantry_F",1}, + {"B_T_VTOL_01_vehicle_F",1} + }; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_w_EPOCH", { -14.4316,0.112793,-10.3098, -90}, "", { 2015.21,10659.6,0 } }, + { "TP_Booth_c_EPOCH", { -0.286865,8.17383,-10.3098, 0}, "", { 5027.48,5210.25,0 } }, + { "TP_Booth_e_EPOCH", { 13.5127,0.410156,-10.3098, 90}, "", { 11779.6,13056.5,0 } } + }; + propsPos[] = { + // Western Trader Camp + { "Land_ClutterCutter_large_F", {2007.84,10661.6,-0.0380335}, {{0.347282,-0.937045,0.0366348},{0.0239934,0.0479322,0.998562}}, true }, + { "Land_PCSet_01_case_F", {2014.64,10649,0.624558}, {{-0.600211,0.799842,0},{0,0,1}}, true }, + { "Land_PCSet_01_case_F", {2014.28,10648.7,0.582048}, {{-0.600211,0.799842,0},{0,0,1}}, true }, + { "Land_PCSet_01_case_F", {2014.46,10648.9,0.603722}, {{-0.600211,0.799842,0},{0,0,1}}, true }, + { "Land_WaterCooler_01_new_F", {2014.08,10648.5,-0.260181}, {{0.811798,0.583938,0},{0,0,1}}, true }, + { "Land_SatellitePhone_F", {2014.89,10649.3,0.655825}, {{-0.632394,0.774647,0},{0,0,1}}, true }, + { "Land_CampingTable_F", {2014.92,10649.3,-0.15448}, {{0.601662,-0.798751,0},{0,0,1}}, true }, + { "Land_ClutterCutter_large_F", {2018.95,10649.5,-0.0333686}, {{0.347338,-0.935093,0.0704037},{-0.0159977,0.0691583,0.997477}}, true }, + { "Land_PortableGenerator_01_F", {2017.53,10650.7,0.0167627}, {{0.167069,0.984685,-0.0498395},{-0.0159977,0.0532507,0.998453}}, true }, + { "Land_Portable_generator_F", {2018.9,10650.6,0.000555515}, {{-0.138701,-0.989045,0.0505266},{-0.0159977,0.0532507,0.998453}}, true }, + { "Land_Laptop_device_F", {2018.59,10650.9,0.814502}, {{-0.14656,-0.98792,0.0503374},{-0.01602,0.0532506,0.998453}}, true }, + { "Land_Laptop_device_F", {2019.1,10650.6,0.814545}, {{-0.703214,-0.71048,0.0266092},{-0.01602,0.0532506,0.998453}}, true }, + { "Land_ClutterCutter_medium_F", {2025.28,10661.6,0.0389977}, {{0,0.999091,-0.0426276},{-0.206142,0.0417121,0.977633}}, true }, + { "Land_ClutterCutter_large_F", {2019.41,10663,0.0390873}, {{0,0.999201,-0.0399685},{-0.0426276,0.0399322,0.998293}}, true }, + { "Land_ClutterCutter_large_F", {2022.16,10656.5,0.0390854}, {{0,0.999712,-0.0239912},{-0.0744588,0.0239246,0.996937}}, true }, + { "Land_ClutterCutter_large_F", {2015.04,10651.8,0.287385}, {{0,0.998581,-0.0532597},{-0.0426905,0.0532112,0.99767}}, true }, + { "Land_ClutterCutter_large_F", {2016.03,10668.7,-0.0298233}, {{0.347377,-0.937048,0.0356291},{0.00532655,0.0399664,0.999187}}, true }, + { "Land_ClutterCutter_large_F", {2024.52,10672.5,-0.0130653}, {{0.347026,-0.937267,0.0332296},{-0.0452868,0.0186436,0.9988}}, true }, + { "Land_ClutterCutter_large_F", {2033.07,10678.5,-0.0347009}, {{0.347303,-0.934146,0.0821643},{-0.0213272,0.0797273,0.996589}}, true }, + { "Land_CampingTable_F", {2018.42,10650.7,0.00127506}, {{-0.112074,-0.992383,0.0511313},{-0.0159977,0.0532507,0.998453}}, true }, + { "Land_ClutterCutter_large_F", {2034.44,10765.1,0.00799751}, {{0.347371,-0.936863,-0.0402548},{0.00800059,-0.0399655,0.999169}}, true }, + { "Land_ClutterCutter_large_F", {2037.75,10757.8,0.033432}, {{0.347322,-0.932357,-0.100385},{-0.0186628,-0.113901,0.993317}}, true }, + { "Land_ClutterCutter_large_F", {2031.72,10772.4,0}, {{0.347204,-0.937485,-0.0238802},{-0.031983,-0.037287,0.998793}}, true }, + { "ArrowDesk_L_F", {2026.45,10773.7,-0.000289917}, {{-0.929983,-0.367323,0.0143572},{0.0133342,0.00532276,0.999897}}, true }, + { "ArrowDesk_L_F", {2035.43,10777.4,-0.00571823}, {{-0.929946,-0.367052,0.0217362},{0.0160037,0.0186541,0.999698}}, true }, + { "ArrowDesk_R_F", {2035.24,10777.3,0.000299454}, {{0.916943,0.398406,-0.0221131},{0.0160037,0.0186541,0.999698}}, true }, + { "ArrowDesk_R_F", {2026.26,10773.6,0.000107765}, {{0.916979,0.398678,-0.0143494},{0.0133313,0.00532603,0.999897}}, true }, + { "Land_ClutterCutter_large_F", {2056.26,10709.9,-0.0134869}, {{0.346418,-0.937394,-0.0358693},{0.0744595,-0.0106397,0.997167}}, true }, + { "Land_ClutterCutter_large_F", {2057.4,10703.7,-0.0130305}, {{0.346983,-0.937337,-0.0316501},{0.0479432,-0.0159753,0.998722}}, true }, + { "Land_ClutterCutter_large_F", {2057.99,10698.2,-0.018671}, {{0.34714,-0.937554,0.0220326},{0.0373061,0.0372803,0.998608}}, true }, + { "Land_ClutterCutter_large_F", {2058.32,10693.7,-0.0213284}, {{0.347282,-0.936475,0.0490863},{0.0239934,0.0612004,0.997837}}, true }, + { "Land_ClutterCutter_large_F", {2065.18,10700.3,-0.00999784}, {{-0.993507,-0.113753,0.00219393},{-0.00267442,0.0426275,0.999087}}, true }, + { "Land_ClutterCutter_large_F", {2051.32,10688.2,0}, {{0.347338,-0.936567,0.0468822},{0.0159937,0.0559042,0.998308}}, true }, + { "Land_ClutterCutter_large_F", {2041.39,10682.8,-0.0593615}, {{0.34655,-0.93622,0.0582668},{0.069167,0.0874509,0.993765}}, true }, + { "Land_ClutterCutter_large_F", {2045.72,10739,-0.0179958}, {{0.347026,-0.93781,0.00927076},{0.0452867,0.0266297,0.998619}}, true }, + { "Land_ClutterCutter_large_F", {2048.22,10732.7,0.00805712}, {{0.347066,-0.934018,-0.0845894},{0.0426276,-0.0743919,0.996318}}, true }, + { "Land_ClutterCutter_large_F", {2049.46,10729.7,-0.0106125}, {{0.345703,-0.93435,-0.0864863},{0.09819,-0.055642,0.993611}}, true }, + { "Land_ClutterCutter_large_F", {2051.39,10724.1,-0.00470018}, {{0.343437,-0.922599,-0.175677},{0.150273,-0.130663,0.979972}}, true }, + { "Land_ClutterCutter_large_F", {2054.08,10717.6,-0.0200381}, {{0.341318,-0.925145,-0.166157},{0.186028,-0.106788,0.976724}}, true }, + { "Land_ClutterCutter_large_F", {2040.66,10751.2,-0.00997543}, {{0.345324,-0.931118,-0.117348},{0.108686,-0.0845203,0.990476}}, true }, + { "Land_ClutterCutter_large_F", {2043.78,10744.2,0.0206614}, {{0.34714,-0.937348,-0.0295196},{-0.0373079,-0.0452552,0.998279}}, true }, + { "Land_Razorwire_F", {1997.36,10647.3,0.0347066}, {{-0.836157,-0.539158,0.10075},{0.0771031,0.0663211,0.994815}}, true }, + { "Land_Razorwire_F", {2003.48,10645.5,-0.29515}, {{0.443978,-0.893206,0.0711733},{0.132163,0.143841,0.980736}}, true }, + { "Land_HBarrier_01_big_4_green_F", {2003.41,10647.1,-0.533029}, {{-0.307788,0.951455,0},{0,0,1}}, true }, + { "Land_HBarrier_01_big_4_green_F", {2009.15,10646.8,-0.7}, {{-0.71281,-0.701357,0},{0,0,1}}, true }, + { "Land_HBarrier_01_big_4_green_F", {1998.64,10649.5,0.0644999}, {{0.806509,0.591222,0},{0,0,1}}, true }, + { "Land_Razorwire_F", {1995.89,10667.8,-0.161806}, {{0.55434,-0.832145,-0.0155343},{0.0876605,0.0398146,0.995354}}, true }, + { "Land_Razorwire_F", {2007.71,10677.8,-0.0676603}, {{0.665774,-0.746115,-0.00759386},{0.0293202,0.0159908,0.999442}}, true }, + { "Land_Razorwire_F", {2002.05,10672.6,-0.106432}, {{0.662338,-0.745321,-0.0761899},{0.0876605,-0.023901,0.995864}}, true }, + { "Land_Razorwire_F", {1993.53,10653.5,-0.209675}, {{-0.831984,-0.532798,0.154686},{0.203641,-0.0339196,0.978458}}, true }, + { "Land_HBarrier_01_big_tower_green_F", {1993.02,10661.9,-0.983466}, {{0.81747,0.575971,0},{0,0,1}}, true }, + { "Land_HBarrier_01_big_4_green_F", {1996.53,10666.8,0.0133524}, {{0.581407,-0.813399,-0.0186679},{0.0876605,0.0398146,0.995354}}, true }, + { "Land_HBarrier_01_big_4_green_F", {2008.39,10675.5,0.00380754}, {{0.570993,-0.820939,0.00513684},{0.0293202,0.0266456,0.999215}}, true }, + { "Land_HBarrier_01_big_4_green_F", {1994.23,10655.7,-0.452624}, {{0.806509,0.591222,0},{0,0,1}}, true }, + { "Land_HBarrier_01_big_4_green_F", {2002.15,10670.6,0.0120964}, {{0.626242,-0.778572,-0.0405855},{0.0876605,0.0185909,0.995977}}, true }, + { "Land_Razorwire_F", {2017.15,10641.4,0.00270033}, {{-0.107352,-0.978113,0.178246},{0.0319849,0.175791,0.983908}}, true }, + { "Land_Razorwire_F", {2010.01,10644.1,0.143356}, {{-0.579508,-0.805183,0.125902},{0.0133313,0.145101,0.989327}}, true }, + { "Land_Razorwire_F", {2028.2,10649.6,-0.011622}, {{0.959483,-0.265481,0.0944044},{-0.0876609,0.0371643,0.995457}}, true }, + { "Land_Razorwire_F", {2024.16,10643.8,-0.0291944}, {{0.514935,-0.849056,0.118091},{-0.0399685,0.11383,0.992696}}, true }, + { "Land_HBarrier_01_big_4_green_F", {2022.61,10644.7,-0.17352}, {{0.528829,-0.848728,0},{0,0,1}}, true }, + { "Land_HBarrier_01_big_4_green_F", {2015.36,10643.2,4.76837e-007}, {{0.135001,0.990846,0},{0,0,1}}, true }, + { "Land_NetFence_02_m_gate_v1_F", {2020.37,10664.9,0.0390873}, {{-0.395113,0.918633,0},{0,0,1}}, false }, + { "Land_Razorwire_F", {2030.13,10657.3,0.260143}, {{0.953535,-0.256933,0.15734},{-0.186028,-0.0913072,0.978293}}, true }, + { "Land_Razorwire_F", {2029.48,10664.7,-0.300159}, {{0.82649,0.505114,0.248545},{-0.318502,0.0555165,0.946295}}, true }, + { "Land_HBarrier_01_big_tower_green_F", {2013.94,10676.5,0.000588894}, {{-0.841341,-0.540258,0.0163131},{-0.0080009,0.0426263,0.999059}}, true }, + { "Land_HBarrier_01_wall_6_green_F", {2017.09,10657.3,0}, {{-0.512743,0.858542,0},{0,0,1}}, true }, + { "Land_HBarrier_01_wall_6_green_F", {2011.03,10652.3,0}, {{-0.698165,0.715937,0},{0,0,1}}, true }, + { "Land_HBarrier_01_wall_corridor_green_F", {2021.18,10662.7,0.039}, {{-0.980078,-0.198615,0},{0,0,1}}, true }, + { "Land_HBarrier_01_big_4_green_F", {2026.65,10650.6,0}, {{-0.955366,0.295425,0},{0,0,1}}, true }, + { "Land_HBarrier_01_big_4_green_F", {2027.22,10664.2,-0.592677}, {{-0.752581,-0.658499,0},{0,0,1}}, true }, + { "Land_HBarrier_01_big_4_green_F", {2028.32,10658.6,-0.441137}, {{-0.99605,0.0887906,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {2017.13,10654.4,-0.0457668}, {{-0.666717,0.745311,0},{0,0,1}}, true }, + { "Land_IRMaskingCover_02_F", {2015.13,10650.4,0.00850105}, {{0.628506,-0.777804,0},{0,0,1}}, true }, + { "Land_BagFence_01_long_green_F", {2013.16,10672.1,0.0394974}, {{0.605195,-0.79572,0.0238567},{0.00265199,0.0319829,0.999485}}, true }, + { "Land_BagFence_01_long_green_F", {2020.07,10674.7,0.000702858}, {{0.852466,0.521851,0.0311863},{-0.0479448,0.0186381,0.998676}}, true }, + { "Land_BagFence_01_long_green_F", {2022.01,10669.1,0.00173807}, {{0.604338,-0.795073,0.0513228},{-0.0532575,0.0239597,0.998293}}, true }, + { "Land_BagFence_01_long_green_F", {2023.92,10668.7,0.00083971}, {{0.803457,0.595343,0.00483694},{-0.0532575,0.0637782,0.996542}}, true }, + { "Land_HBarrier_01_line_1_green_F", {2024.57,10667,1.15882}, {{-0.631782,-0.775146,0},{0,0,1}}, true }, + { "Land_HBarrier_01_line_1_green_F", {2023.11,10659.8,0.0416093}, {{-0.593392,-0.804542,-0.024451},{-0.0771034,0.0265777,0.996669}}, true }, + { "Land_HBarrier_01_line_1_green_F", {2023.57,10666,0.0417771}, {{-0.630028,-0.776447,-0.0139568},{-0.0744596,0.0425093,0.996318}}, true }, + { "Land_HBarrier_01_line_1_green_F", {2023.6,10666,1.15765}, {{-0.631782,-0.775146,0},{0,0,1}}, true }, + { "Land_HBarrier_01_line_1_green_F", {2021.72,10665.3,0.0411954}, {{0.974446,0.215421,0.0636338},{-0.0744596,0.0425093,0.996318}}, true }, + { "Land_HBarrier_01_line_1_green_F", {2024.56,10667,0.0413957}, {{-0.630885,-0.775713,0.0159293},{-0.0532575,0.0637782,0.996542}}, true }, + { "Land_HBarrier_01_line_1_green_F", {2021.73,10665.2,1.24466}, {{0.977117,0.212286,0.0133301},{-0.00923216,-0.0202837,0.999752}}, true }, + { "Land_Razorwire_F", {2011.71,10681.3,-0.0506768}, {{0.447867,-0.893522,0.0321467},{0.0133313,0.0426238,0.999002}}, true }, + { "Land_Razorwire_F", {2018.59,10680,0.143998}, {{-0.784779,-0.619699,-0.00976378},{-0.0585655,0.058465,0.99657}}, true }, + { "ProtectionZone_Invisible_F", {2040.6,10679.2,0.0189996}, {{0,0.997023,-0.0771034},{0.0452867,0.0770243,0.996}}, true }, + { "Land_Razorwire_F", {2066.17,10723.7,-0.0079422}, {{0.446993,-0.884303,-0.134929},{0.0638697,-0.118902,0.99085}}, true }, + { "Land_Razorwire_F", {2062.18,10721.7,-0.0333204}, {{0.459331,-0.864679,-0.203333},{0.11392,-0.169675,0.978894}}, true }, + { "Land_Razorwire_F", {2092.83,10709.7,0.206044}, {{-0.970284,-0.241099,-0.0204909},{-0.0479448,0.108561,0.992933}}, true }, + { "Land_Razorwire_F", {2093.92,10702.1,0.222802}, {{-0.99708,0.0286685,-0.0707832},{-0.0665191,0.129278,0.989375}}, true }, + { "Land_Razorwire_F", {2073.12,10685,0.115961}, {{0.234266,-0.962929,0.133741},{-0.0876616,0.116085,0.989363}}, true }, + { "Land_Razorwire_F", {2080.73,10687,0.14086}, {{0.233909,-0.961,0.147533},{-0.103442,0.126283,0.986586}}, true }, + { "Land_Razorwire_F", {2088.47,10689,0.139478}, {{0.233909,-0.960213,0.15257},{-0.103442,0.131455,0.98591}}, true }, + { "Land_Razorwire_F", {2093.11,10693.8,-0.333518}, {{0.987821,-0.134444,0.0783198},{-0.0479448,0.215855,0.975248}}, true }, + { "Land_HelipadCircle_F", {2071.48,10704.3,-0.00210619}, {{-0.936689,-0.349214,-0.0257499},{-0.0452868,0.0478956,0.997825}}, true }, + { "Land_Razorwire_F", {2073.18,10727,0.122449}, {{0.375874,-0.910495,-0.172387},{0,-0.186028,0.982544}}, true }, + { "Land_Razorwire_F", {2080.73,10727.3,-0.0488544}, {{-0.170352,-0.975019,-0.142542},{0.0026744,-0.145114,0.989411}}, true }, + { "Land_Razorwire_F", {2091.4,10717.6,0.0276146}, {{-0.98643,-0.162834,-0.0209831},{-0.0133317,-0.0479403,0.998761}}, true }, + { "Land_Razorwire_F", {2087.72,10724.1,-0.120538}, {{-0.676026,-0.735305,-0.0481237},{0.0186626,-0.0823715,0.996427}}, true }, + // Southern Trader Camp + { "Land_ClutterCutter_medium_F", {4875.56,5073.36,-0.00800037}, {{0.602568,0.798018,0.00894003},{0.0239934,-0.0293117,0.999282}}, true }, + { "Land_ClutterCutter_medium_F", {4878,5076.53,-0.00933361}, {{0.602433,0.798145,0.0062528},{0.031983,-0.0319666,0.998977}}, true }, + { "Land_ClutterCutter_medium_F", {4881.68,5078.86,-0.00133705}, {{0.602568,0.797497,0.0301752},{0.0239934,-0.0558961,0.998148}}, true }, + { "Land_ClutterCutter_medium_F", {4885.97,5080.65,-0.00264645}, {{0.602568,0.797646,0.025935},{0.023991,-0.0505871,0.998431}}, true }, + { "Land_ClutterCutter_medium_F", {4873.23,5074.83,-0.00800133}, {{0.602482,0.79807,0.00998314},{0.0293202,-0.0346307,0.99897}}, true }, + { "ArrowDesk_R_F", {4877.19,5071.35,-0.0310087}, {{-0.716801,0.697278,0},{0,0,1}}, true }, + { "ArrowDesk_L_F", {4870.7,5075.72,-0.0186253}, {{0.856132,-0.516757,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {4912.45,5099.11,0.0294886}, {{0.602707,0.795429,0.0635422},{0.0106693,-0.0876564,0.996094}}, true }, + { "Land_ClutterCutter_medium_F", {4909.49,5095.2,0.0243626}, {{0.601798,0.7872,0.134737},{-0.0559124,-0.126765,0.990356}}, true }, + { "Land_ClutterCutter_medium_F", {4907.48,5092.55,-0.0113258}, {{0.601707,0.798336,-0.0246558},{0.0585662,-0.0133132,0.998195}}, true }, + { "Land_ClutterCutter_medium_F", {4903.96,5087.75,0.00733089}, {{0.602722,0.797561,0.0249533},{0.00799344,-0.0373049,0.999272}}, true }, + { "Land_ClutterCutter_medium_F", {4901.7,5084.75,0.0184765}, {{0.602733,0.795652,0.0604248},{0.00533751,-0.0797441,0.996801}}, true }, + { "Land_ClutterCutter_medium_F", {4899.08,5081.18,0.00763893}, {{0.602707,0.797861,0.0127175},{0.0106641,-0.0239897,0.999655}}, true }, + { "Land_ClutterCutter_medium_F", {4890.08,5081.38,-0.00733471}, {{0.602636,0.797953,0.010026},{0.0186626,-0.0266525,0.999471}}, true }, + { "Land_ClutterCutter_medium_F", {4894.65,5082.13,-0.0100012}, {{0.602322,0.798237,0.00517259},{0.0373061,-0.0346215,0.998704}}, true }, + { "Land_ClutterCutter_medium_F", {4899.21,5084.55,0.0039959}, {{0.602739,0.796778,0.0430185},{0.00265199,-0.055912,0.998432}}, true }, + { "Land_ClutterCutter_medium_F", {4918.6,5107.55,0.0193281}, {{0.602739,0.795602,0.0610208},{-0.00267442,-0.0744583,0.997221}}, true }, + { "Land_ClutterCutter_medium_F", {4915.08,5102.72,0.00866413}, {{0.602741,0.797458,0.027645},{0,-0.0346456,0.9994}}, true }, + { "Land_ClutterCutter_medium_F", {4933.8,5127.93,0.0239954}, {{0.602123,0.795533,0.0676382},{-0.0452868,-0.0505497,0.997694}}, true }, + { "Land_ClutterCutter_medium_F", {4930.54,5123.44,0.0193291}, {{0.602568,0.796034,0.0569375},{-0.0239937,-0.053242,0.998293}}, true }, + { "Land_ClutterCutter_medium_F", {4927.1,5119.03,0.015974}, {{0.602722,0.796,0.0557758},{-0.0080009,-0.0638667,0.997926}}, true }, + { "Land_ClutterCutter_medium_F", {4924.54,5115.51,0.00599861}, {{0.602722,0.797758,0.0175824},{-0.00799344,-0.015997,0.99984}}, true }, + { "Land_ClutterCutter_medium_F", {4921.65,5111.72,-0.00399971}, {{0.602379,0.798187,-0.00598711},{0.0346456,-0.0186514,0.999226}}, true }, + { "Land_ClutterCutter_medium_F", {4946.94,5145.82,-0.00533104}, {{0.602733,0.797783,-0.0159753},{0.00532655,0.0159975,0.999858}}, true }, + { "Land_ClutterCutter_medium_F", {4942.37,5139.48,0.00440884}, {{0.601886,0.798509,-0.0108183},{0.0532574,-0.0266193,0.998226}}, true }, + { "Land_ClutterCutter_medium_F", {4939.19,5135.37,0.010684}, {{0.602741,0.797211,0.0340141},{0,-0.0426276,0.999091}}, true }, + { "Land_ClutterCutter_medium_F", {4936.26,5131.33,0}, {{0.602741,0.797937,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {4956.69,5159.28,0.0226593}, {{0.602433,0.795438,0.0659758},{-0.031983,-0.0585353,0.997773}}, true }, + { "Land_ClutterCutter_medium_F", {4953.5,5154.86,-0.00599957}, {{0.602527,0.797976,-0.0139512},{0.0266571,-0.00265105,0.999641}}, true }, + { "Land_ClutterCutter_medium_F", {4950.16,5150.25,0.0253544}, {{0.602193,0.795062,0.0723807},{-0.0426276,-0.0585121,0.997376}}, true }, + { "Land_ClutterCutter_medium_F", {4977.79,5187.71,0.0113306}, {{0.602707,0.797235,0.0340688},{-0.0106641,-0.0346436,0.999343}}, true }, + { "Land_ClutterCutter_medium_F", {4975.14,5184.07,0.0133505}, {{0.602123,0.797693,0.0336793},{-0.0452868,-0.00799238,0.998942}}, true }, + { "Land_ClutterCutter_medium_F", {4972.29,5180.63,0.00711155}, {{0.602739,0.797745,0.0175453},{0.00265199,-0.0239909,0.999709}}, true }, + { "Land_ClutterCutter_medium_F", {4969.36,5176.76,0.0139971}, {{0.602636,0.796961,0.0410104},{-0.0186628,-0.0373015,0.99913}}, true }, + { "Land_ClutterCutter_medium_F", {4967.33,5173.96,0.0113306}, {{0.60226,0.797797,0.0283397},{-0.039967,-0.00532229,0.999187}}, true }, + { "Land_ClutterCutter_medium_F", {4964.87,5170.59,0.0116978}, {{0.602322,0.796809,0.047995},{-0.0373063,-0.0319607,0.998793}}, true }, + { "Land_ClutterCutter_medium_F", {4962.2,5166.89,0.0153294}, {{0.602193,0.797318,0.0405841},{-0.042629,-0.018649,0.998917}}, true }, + { "Land_ClutterCutter_medium_F", {4959.61,5163.32,0.0166636}, {{0.602739,0.796205,0.0525719},{-0.00267442,-0.0638685,0.997955}}, true }, + { "Land_ClutterCutter_medium_F", {4969.53,5189.9,0.0431604}, {{0.601707,0.79258,0.0988191},{-0.0585655,-0.0796084,0.995104}}, true }, + { "Land_ClutterCutter_medium_F", {4973.41,5187.44,0.0446777}, {{0.602123,0.793219,0.0908402},{-0.0452868,-0.0796625,0.995793}}, true }, + { "Land_ClutterCutter_medium_F", {4970.58,5183.01,0.00935173}, {{0.602739,0.797844,-0.0122361},{0.00265199,0.0133316,0.999908}}, true }, + { "Land_ClutterCutter_medium_F", {4967.68,5185.26,0.00202084}, {{0.602433,0.797609,-0.0299136},{0.031983,0.0133248,0.9994}}, true }, + { "Land_ClutterCutter_large_F", {5006.19,5219.31,9.82285e-005}, {{0,0.999304,-0.0373063},{-0.0293202,0.0372903,0.998874}}, true }, + { "Land_ClutterCutter_medium_F", {5000.25,5215.34,-0.0639887}, {{0,0.99615,-0.0876609},{0.037308,0.0875999,0.995457}}, true }, + { "Land_ClutterCutter_medium_F", {4997.36,5212.14,-0.038662}, {{0,0.999968,-0.00799344},{0.0159975,0.00799242,0.99984}}, true }, + { "Land_ClutterCutter_medium_F", {4994.27,5208.74,-9.53674e-007}, {{0.602636,0.797655,-0.0240124},{0.0186626,0.0159949,0.999698}}, true }, + { "Land_ClutterCutter_medium_F", {4991.76,5205.2,-0.00333309}, {{0.602722,0.7979,-0.00907243},{0.00800059,0.00532633,0.999954}}, true }, + { "Land_ClutterCutter_medium_F", {4988.74,5201.16,-0.0136147}, {{0.602193,0.796567,-0.053323},{0.0426276,0.0346141,0.998491}}, true }, + { "Land_ClutterCutter_medium_F", {4986.65,5197.79,-0.00598907}, {{0.602123,0.798337,-0.0102723},{0.0452867,-0.0213053,0.998747}}, true }, + { "Land_ClutterCutter_medium_F", {4983.53,5194.69,0.015708}, {{0.60226,0.797129,0.0432289},{-0.0399685,-0.0239742,0.998913}}, true }, + { "Land_ClutterCutter_medium_F", {4980.45,5191.35,0.0140123}, {{0.602604,0.797012,0.0404921},{-0.0213272,-0.0346377,0.999172}}, true }, + { "Land_GarbageContainer_closed_F", {5033.58,5206.82,0.459593}, {{-0.892229,0.451583,0},{0,0,1}}, true }, + { "Land_PCSet_01_case_F", {5029.58,5210.44,0.422398}, {{0.460556,0.887631,6.17034e-005},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Laptop_unfolded_F", {5028.99,5210.8,1.19744}, {{-0.473411,-0.880841,-8.52232e-005},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Laptop_device_F", {5028.45,5210.93,1.18959}, {{-0.0237867,-0.999717,0.000655495},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_ClutterCutter_medium_F", {5014.25,5203.64,2.86102e-006}, {{0,0.998436,-0.0559124},{0.0559122,0.055825,0.996874}}, true }, + { "Land_ClutterCutter_medium_F", {5031.64,5209.68,2.86102e-006}, {{0,0.999943,-0.0106641},{0.047947,0.0106518,0.998793}}, true }, + { "Land_ClutterCutter_medium_F", {5020.63,5211.65,2.86102e-006}, {{0,0.999911,-0.0133317},{0.0133313,0.0133305,0.999822}}, true }, + { "Land_ClutterCutter_medium_F", {5024.21,5210.86,2.86102e-006}, {{0,0.999488,-0.031983},{0.0823858,0.0318743,0.996091}}, true }, + { "Land_ClutterCutter_medium_F", {5021.08,5208.79,2.86102e-006}, {{0,0.999826,-0.018666},{0.018666,0.0186627,0.999652}}, true }, + { "Land_ClutterCutter_medium_F", {5018.24,5206.74,2.86102e-006}, {{0,0.999996,-0.00265204},{-0.0080009,0.00265196,0.999964}}, true }, + { "Land_ClutterCutter_medium_F", {5027.12,5217.84,2.86102e-006}, {{0,0.997958,-0.0638688},{0.0559122,0.0637689,0.996397}}, true }, + { "Land_ClutterCutter_medium_F", {5022.52,5215.4,2.86102e-006}, {{0,0.999996,-0.00267442},{-0.0186628,0.00267396,0.999822}}, true }, + { "Land_ClutterCutter_medium_F", {5016.34,5209.67,2.86102e-006}, {{0,0.999826,-0.0186628},{0.0159975,0.0186604,0.999698}}, true }, + { "Land_ClutterCutter_medium_F", {5035.41,5210.38,2.86102e-006}, {{0,0.998581,-0.0532575},{0.0106641,0.0532545,0.998524}}, true }, + { "Land_ClutterCutter_medium_F", {5024.85,5204.84,-0.0242786}, {{0,0.99615,-0.0876609},{0.0532574,0.0875365,0.994737}}, true }, + { "Land_ClutterCutter_medium_F", {5018.88,5200.97,2.86102e-006}, {{0,0.889825,0.456303},{0.718115,-0.317552,0.619251}}, true }, + { "Land_ClutterCutter_medium_F", {5023.95,5207.99,2.86102e-006}, {{0,0.999201,-0.0399685},{0.0638687,0.0398869,0.997161}}, true }, + { "Land_ClutterCutter_medium_F", {5027.88,5207.77,2.86102e-006}, {{0,0.997958,-0.0638688},{0.0106693,0.0638652,0.997901}}, true }, + { "Land_ClutterCutter_medium_F", {5019.85,5205.33,2.86102e-006}, {{0,0.999996,-0.00265204},{-0.0080009,0.00265196,0.999964}}, true }, + { "Land_ClutterCutter_medium_F", {5033.72,5213.95,2.86102e-006}, {{0,0.997224,-0.0744596},{0.0106693,0.0744553,0.997167}}, true }, + { "Land_ClutterCutter_medium_F", {5030.44,5213.59,2.86102e-006}, {{0,0.997605,-0.0691671},{0.0426276,0.0691043,0.996698}}, true }, + { "Land_ClutterCutter_medium_F", {5012.85,5216.94,-0.0164127}, {{0,0.995915,-0.0902964},{0.069167,0.0900801,0.99353}}, true }, + { "Land_ClutterCutter_medium_F", {5014.14,5213.29,-0.0326633}, {{0,0.99349,-0.113921},{0.0159975,0.113906,0.993363}}, true }, + { "Land_ClutterCutter_medium_F", {5016.79,5215.35,-0.0220337}, {{0,0.995673,-0.0929294},{-0.0053265,0.0929281,0.995659}}, true }, + { "Land_ClutterCutter_medium_F", {5015.13,5198.68,0.00800133}, {{0,0.999773,0.0213271},{-0.0106641,-0.0213259,0.999716}}, true }, + { "Land_ClutterCutter_medium_F", {5026.9,5212.59,2.86102e-006}, {{0,0.999996,-0.00265204},{-0.0106641,0.00265189,0.99994}}, true }, + { "Land_CampingTable_F", {5032.32,5208.81,0.542001}, {{-0.472442,-0.881361,-8.34449e-005},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_CampingTable_F", {5029.01,5210.66,0.383964}, {{-0.472442,-0.881361,-8.34449e-005},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_WeldingTrolley_01_F", {5027.78,5207.2,0.240896}, {{0.403332,0.915053,-4.10559e-005},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_ToolTrolley_02_F", {5027.46,5211.78,0.394034}, {{-0.907383,0.420302,-0.00161941},{-0.00146484,0.000690533,0.999999}}, true }, + { "WaterPump_01_forest_F", {5025.69,5207.27,0.238022}, {{0.922392,-0.38625,0.00161788},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_CampingTable_small_F", {5018.61,5198.62,-0.00429916}, {{0,0.998974,-0.0452868},{0.0026744,0.0452867,0.99897}}, true }, + { "Land_FieldToilet_F", {5014.29,5197.52,-0.0072279}, {{-0.839531,-0.542666,-0.0264603},{-0.0159977,-0.0239903,0.999584}}, true }, + { "Land_FieldToilet_F", {5015.17,5196.13,-0.0046978}, {{-0.839531,-0.542666,-0.0264603},{-0.0159977,-0.0239903,0.999584}}, true }, + { "Land_WaterTank_F", {5025.5,5209.96,0.349309}, {{0.898363,-0.439251,0.00161928},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_ToolTrolley_01_F", {5010.98,5210.33,0.00155735}, {{-0.560359,-0.824208,0.081724},{0.0319849,0.0770631,0.996513}}, true }, + { "Land_CanisterFuel_F", {5032.14,5208.95,0.535025}, {{0.878454,-0.477825,0.00161675},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_CanisterFuel_F", {5031.97,5209.02,0.527202}, {{0.878454,-0.477825,0.00161675},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Wrench_F", {5032.11,5208.77,1.34455}, {{0,1,-0.000690534},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Pliers_F", {5032,5208.86,1.33989}, {{0.391919,0.92,-6.119e-005},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Ammobox_rounds_F", {5031.82,5209.1,1.33417}, {{0.449007,0.893528,4.07134e-005},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Ammobox_rounds_F", {5031.73,5208.94,1.32801}, {{0.449007,0.893528,4.07134e-005},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Ammobox_rounds_F", {5031.91,5209.26,1.34035}, {{0.449007,0.893528,4.07134e-005},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Magazine_rifle_F", {5032.28,5209.09,1.35119}, {{0.490736,0.871308,0.000117184},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Magazine_rifle_F", {5032.16,5209.02,1.34682}, {{0.490736,0.871308,0.000117184},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Magazine_rifle_F", {5032.28,5209.08,1.36953}, {{0.490736,0.871308,0},{0,0,1}}, true }, + { "Land_Magazine_rifle_F", {5032.14,5209.17,1.38291}, {{0.490736,0.871308,0},{0,0,1}}, true }, + { "Land_Magazine_rifle_F", {5032.22,5209.15,1.36953}, {{0.490736,0.871308,0},{0,0,1}}, true }, + { "Land_Magazine_rifle_F", {5032.22,5209.15,1.3874}, {{0.490736,0.871308,0},{0,0,1}}, true }, + { "Land_Magazine_rifle_F", {5032.22,5209.15,1.35119}, {{0.490736,0.871308,0.000117184},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Magazine_rifle_F", {5032.22,5208.96,1.35157}, {{0.490172,0.871008,-0.0328185},{0.0479446,0.0106518,0.998793}}, true }, + { "Land_Magazine_rifle_F", {5032.16,5209.01,1.36578}, {{0.490736,0.871308,0},{0,0,1}}, true }, + { "Land_Magazine_rifle_F", {5032.14,5209.17,1.36516}, {{0.490736,0.871308,0},{0,0,1}}, true }, + { "Land_Magazine_rifle_F", {5032.15,5209.17,1.34682}, {{0.490736,0.871308,0.000117184},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Magazine_rifle_F", {5032.09,5209.06,1.36467}, {{0.490736,0.871308,0},{0,0,1}}, true }, + { "Land_Magazine_rifle_F", {5032.1,5209.05,1.34633}, {{0.490736,0.871308,0.000117184},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Magazine_rifle_F", {5032.16,5209.02,1.3839}, {{0.490736,0.871308,0},{0,0,1}}, true }, + { "Land_Magazine_rifle_F", {5032.09,5209.05,1.38249}, {{0.490736,0.871308,0},{0,0,1}}, true }, + { "Land_GasTank_01_khaki_F", {5031.77,5209.28,0.520709}, {{-0.514783,-0.85732,-0.000162069},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_PortableSpeakers_01_F", {5031.66,5209.46,1.3303}, {{0.924452,0.381297,0.00109088},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Tablet_02_F", {5028.77,5210.58,1.1844}, {{-0.448944,-0.89356,-4.06002e-005},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_SatelliteAntenna_01_F", {5025.15,5216.25,0.436687}, {{-0.530084,0.847944,-0.00136202},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_CampingChair_V1_F", {5015.93,5200.23,0.00102806}, {{-0.774672,-0.628261,0.0719073},{0.0559122,0.045216,0.997411}}, true }, + { "Land_CampingChair_V1_F", {5019.69,5200,0.000600815}, {{0.936153,-0.351591,-0.000647001},{0.0266571,0.0691426,0.997251}}, true }, + { "Land_CampingChair_V1_F", {5017.1,5199.44,0.00129986}, {{-0.438246,-0.896487,0.0652076},{0.0559122,0.045216,0.997411}}, true }, + { "Land_HelipadCircle_F", {4961.36,5191.7,0}, {{-0.427476,-0.903535,-0.0297957},{-0.0133317,-0.0266547,0.999556}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5008.34,5201.13,0.00773048}, {{0.811849,0.578219,-0.0810134},{0.0559122,0.0611232,0.996563}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5005.47,5207.89,-0.00196171}, {{-0.988344,-0.146947,0.0397721},{0.0346456,0.0372839,0.998704}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5007.71,5213.48,0.00213528}, {{-0.634543,0.771827,-0.040472},{0.071814,0.111017,0.99122}}, true }, + { "ProtectionZone_Invisible_F", {4995.14,5201.25,0.00053978}, {{0,0.999943,0.0106641},{0.0106641,-0.0106635,0.999886}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5006.32,5227.11,0.0114241}, {{0.329441,0.942128,-0.0621498},{-0.0399685,0.0796809,0.996019}}, true }, + { "Land_Trench_01_grass_F", {5018.82,5179.14,-0.0419836}, {{0.466524,0.884509,0},{0,0,1}}, true }, + { "Land_Trench_01_grass_F", {5021.98,5177.78,-0.00653362}, {{0.466524,0.884509,0},{0,0,1}}, true }, + { "Land_Trench_01_grass_F", {5019.78,5174.84,0.0133362}, {{0.466524,0.884509,0},{0,0,1}}, true }, + { "Land_Trench_01_grass_F", {5017.02,5176.27,-0.0733452}, {{0.466524,0.884509,0},{0,0,1}}, true }, + { "Land_CrabCages_F", {5031.22,5201.67,0.061182}, {{0.500948,0.865477,0.00013617},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Trench_01_grass_F", {5030.29,5213.15,0.000412941}, {{0.376095,0.926581,0},{0,0,1}}, true }, + { "Land_Trench_01_grass_F", {5033.39,5211.69,-0.0157623}, {{0.376095,0.926581,0},{0,0,1}}, true }, + { "Land_Trench_01_grass_F", {5036.23,5210.42,-0.0286341}, {{0.376095,0.926581,0},{0,0,1}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5034.61,5202.57,0.0100193}, {{0.923972,-0.382059,-0.0175207},{0.0452867,0.0638033,0.996934}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5038.31,5214.93,-0.00209045}, {{-0.983292,0.181567,0.013036},{0.0186626,0.0293151,0.999396}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5030.71,5197.99,-0.0630207}, {{0.487846,-0.872929,0.00131741},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5036.89,5208.68,-0.00261402}, {{-0.949739,0.312198,0.0229965},{0.0373061,0.0399392,0.998505}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5025.63,5194.95,0.00261211}, {{0.533511,-0.845767,0.00665939},{0.02133,0.0213252,0.999545}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5019.3,5192.55,0.000221252}, {{0.254755,-0.9668,-0.0199423},{-0.00267442,-0.0213271,0.999769}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5013.62,5194.4,0.00361443}, {{0.811174,0.580577,-0.0701923},{0.069168,0.0239362,0.997318}}, true }, + { "Land_Atm_01_F", {5026.35,5211.96,0.420522}, {{0.898794,-0.438371,0},{0,0,1}}, true }, + { "Land_HBarrier_01_line_1_green_F", {5012.5,5217.71,0.000192642}, {{-0.598347,0.801108,-0.0143817},{-0.0133317,0.00799273,0.999879}}, true }, + { "Land_Campfire_F", {5017.94,5201,-0.000110626}, {{0,0.997605,-0.0691671},{0.0266571,0.0691426,0.997251}}, false}, + { "Land_DataTerminal_01_F", {5028.82,5210.85,0.389002}, {{0.46898,0.883209,7.70965e-005},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_PaperBox_closed_F", {5035.39,5210.99,0.52301}, {{-0.883528,0.468376,-0.00161766},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_Scrap_MRAP_01_F", {5012.29,5208,0.000803947}, {{-0.31418,-0.948796,0.0328258},{0.031983,0.023979,0.999201}}, true }, + { "Land_Pallet_MilBoxes_F", {5034.42,5208.93,0.482203}, {{-0.884246,0.467018,-0.00161778},{-0.00146484,0.000690533,0.999999}}, true }, + { "Land_PartyTent_01_F", {5030.12,5209.09,0.463215}, {{0.43478,0.900537,0},{0,0,1}}, true }, + { "Land_WoodPile_F", {5020.4,5201.95,0.00334358}, {{-0.636255,0.771388,-0.0118191},{0.0266571,0.0372931,0.998949}}, true }, + { "Land_Pier_F", {5020.31,5196.47,-2.59}, {{-0.894755,0.446557,0},{0,0,1}}, true }, + { "Land_HBarrier_01_big_tower_green_F", {5022.42,5222.93,0.065362}, {{-0.481998,-0.876173,0},{0,0,1}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5020.01,5224.19,-0.000741005}, {{-0.634279,0.772348,-0.0341766},{0.0239934,0.0638514,0.997671}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5027.76,5228.37,-1.2022}, {{-0.33662,0.941624,-0.00562072},{0.0638701,0.0287874,0.997543}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5034.95,5227.66,-1.572}, {{0.487311,0.873228,0},{0,0,1}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5038.28,5221.87,-1.0691}, {{0.983901,0.174494,-0.0386204},{0,0.216099,0.976372}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5017.46,5222.1,0.00150108}, {{-0.634453,0.770605,-0.060305},{0.00533751,0.0823839,0.996586}}, true }, + { "Land_HBarrier_01_big_4_green_F", {5012.98,5222.69,-0.000469208}, {{0.703539,0.701686,-0.112563},{0.0452867,0.113804,0.992471}}, true }, + //Northern Trader Camp + { "Land_ClutterCutter_medium_F", {11457.6,13203.4,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11452.1,13204.9,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11447.7,13206.1,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11442.4,13207.5,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11482.2,13196.6,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11476.7,13198.3,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11470.5,13199.9,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11464.2,13201.8,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11504,13190.4,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11494.4,13193.1,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11537.8,13142.8,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11541.3,13156,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11545.5,13166.5,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11543.1,13161.4,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11547.1,13171.5,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11544.5,13178.4,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11532,13182,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11526.4,13183.8,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11520.5,13185.1,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11659.8,13096.2,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11655.8,13098.3,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11651.4,13100,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11647.2,13102.1,0}, {{0.941709,-0.336429,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11678.7,13090.2,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11671.1,13092.5,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11712.7,13078.6,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11720.9,13107.4,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11721.8,13099.1,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11706.5,13080,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11727,13125.9,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11721.5,13127.6,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11717.1,13123.4,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11715.6,13118.6,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11759.7,13069.9,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11751.4,13099.7,0}, {{0.531672,-0.846951,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11748.1,13104.2,0}, {{0.531672,-0.846951,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11745.2,13107.9,0}, {{0.531672,-0.846951,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11755.2,13095,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11758.2,13090.8,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11742.2,13111.8,0}, {{0.531672,-0.846951,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11738.1,13116.6,0}, {{0.531672,-0.846951,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11731,13125.2,0}, {{0.531672,-0.846951,0},{0,0,1}}, true }, + { "Land_Cargo20_military_green_F", {11789,13040.2,2.68044}, {{-0.961844,0.273596,0.00105012},{0.00109178,0,0.999999}}, true }, + { "Land_Cargo20_military_green_F", {11789,13040.1,0.0454512}, {{-0.961844,0.273596,0.00105012},{0.00109178,0,0.999999}}, true }, + { "Land_Cargo20_military_green_F", {11786.5,13040.9,0.048193}, {{-0.961844,0.273596,0.00105012},{0.00109178,0,0.999999}}, true }, + { "Land_JetEngineStarter_01_F", {11775,13043.7,0.0540004}, {{-0.248318,-0.968679,0.000273004},{0.00109941,0,0.999999}}, true }, + { "Land_Cargo10_red_F", {11782.7,13040.8,0.0440102}, {{0.970054,-0.242887,-0.00106649},{0.00109941,0,0.999999}}, true }, + { "Land_WoodenCart_F", {11786.1,13048.6,0.0489998}, {{0.837852,-0.545897,-0.000921144},{0.00109941,0,0.999999}}, true }, + { "Land_PalletTrolley_01_yellow_F", {11789.7,13043.9,0.0447292}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_GarbageContainer_closed_F", {11770.8,13042.2,0.0650001}, {{0,1,0},{0.00109941,0,0.999999}}, true }, + { "WaterPump_01_forest_F", {11784.7,13043.5,0.0500002}, {{-0.102393,-0.994744,0.000112572},{0.00109941,0,0.999999}}, true }, + { "Land_PCSet_01_case_F", {11789.8,13063.1,0.04461}, {{-0.973638,0.228096,0.001063},{0.00109178,0,0.999999}}, true }, + { "Land_WaterCooler_01_new_F", {11788.7,13058.8,0.046}, {{-0.255716,-0.966752,0.000281137},{0.00109941,0,0.999999}}, true }, + { "Land_Laptop_device_F", {11789.9,13063.2,0.857732}, {{0.582931,-0.812521,-0.000636434},{0.00109178,0,0.999999}}, true }, + { "Land_Laptop_device_F", {11789.5,13062.8,0.858178}, {{0.963863,-0.266397,-0.00105233},{0.00109178,0,0.999999}}, true }, + { "Land_ClutterCutter_medium_F", {11760.6,13075.1,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_CampingTable_F", {11789.6,13062.6,0.0448422}, {{0.965925,-0.258819,-0.00105458},{0.00109178,0,0.999999}}, true }, + { "Land_CampingTable_F", {11787.1,13052.8,0.0475454}, {{0.965925,-0.258819,-0.00105458},{0.00109178,0,0.999999}}, true }, + { "Land_CampingTable_F", {11788.4,13057.6,0.0461092}, {{0.965926,-0.258819,0},{0,0,1}}, true }, + { "Land_TripodScreen_01_dual_v2_F", {11789,13061.4,0.0455351}, {{0.862697,0.50572,-0.000941878},{0.00109178,0,0.999999}}, true }, + { "Land_FieldToilet_F", {11767.9,13058.1,0.0684881}, {{-0.966137,0.258029,0.00105481},{0.00109178,0,0.999999}}, true }, + { "Land_FieldToilet_F", {11768.5,13060.4,0.0659962}, {{-0.966137,0.258029,0.00105481},{0.00109178,0,0.999999}}, true }, + { "Land_FieldToilet_F", {11768.2,13059.3,0.0672598}, {{-0.966137,0.258029,0.00105481},{0.00109178,0,0.999999}}, true }, + { "Land_BottlePlastic_V2_F", {11787.4,13053.6,0.86}, {{0,1,0},{0.00109941,0,0.999999}}, true }, + { "Land_BottlePlastic_V2_F", {11787.6,13053.5,0.859724}, {{0,1,0},{0.00109941,0,0.999999}}, true }, + { "Land_BottlePlastic_V2_F", {11787.3,13053.6,0.85996}, {{0,1,0},{0.00109941,0,0.999999}}, true }, + { "Land_BottlePlastic_V2_F", {11787.3,13053.6,0.860057}, {{0,1,0},{0.00109941,0,0.999999}}, true }, + { "Land_BottlePlastic_V2_F", {11787.2,13053.7,0.860155}, {{0,1,0},{0.00109941,0,0.999999}}, true }, + { "Land_BottlePlastic_V2_F", {11787.1,13053.7,0.860594}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_BottlePlastic_V2_F", {11787.5,13053.4,0.860086}, {{0,1,0},{0,0,1}}, true }, + { "Land_BottlePlastic_V2_F", {11787.4,13053.5,0.860269}, {{0,1,0},{0,0,1}}, true }, + { "Land_BottlePlastic_V2_F", {11787.3,13053.5,0.860304}, {{0,1,0},{0,0,1}}, true }, + { "Land_BottlePlastic_V2_F", {11787.2,13053.5,0.860404}, {{0,1,0},{0.00109941,0,0.999999}}, true }, + { "Land_BottlePlastic_V2_F", {11787.1,13053.5,0.860502}, {{0,1,0},{0.00109941,0,0.999999}}, true }, + { "Land_BottlePlastic_V2_F", {11787,13053.6,0.860614}, {{0,1,0},{0.00109941,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.5,13053.3,0.860138}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.4,13053.3,0.860196}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.3,13053.4,0.860277}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.3,13053.4,0.860333}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.2,13053.4,0.860445}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.2,13053.3,0.860379}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.3,13053.3,0.860276}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.4,13053.3,0.860153}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.4,13053.2,0.860198}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.3,13053.3,0.860382}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.2,13053.3,0.860442}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.1,13053.3,0.860498}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.1,13053.4,0.860531}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787,13053.4,0.86059}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787,13053.3,0.860598}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.1,13053.3,0.8605}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11787.3,13053.2,0.860266}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_RiceBox_F", {11786.9,13052.9,0.861}, {{0.990726,-0.135871,-0.00108922},{0.00109941,0,0.999999}}, true }, + { "Land_RiceBox_F", {11787.3,13052.7,0.860408}, {{0.990726,-0.135871,-0.00108166},{0.00109178,0,0.999999}}, true }, + { "Land_RiceBox_F", {11787.2,13052.8,0.860452}, {{0.990726,-0.135871,-0.00108166},{0.00109178,0,0.999999}}, true }, + { "Land_RiceBox_F", {11787,13052.8,0.860608}, {{0.990726,-0.135871,-0.00108166},{0.00109178,0,0.999999}}, true }, + { "Land_RiceBox_F", {11787.3,13052.8,0.860398}, {{0.990726,-0.135871,-0.00108166},{0.00109178,0,0.999999}}, true }, + { "Land_RiceBox_F", {11787.2,13052.9,0.860448}, {{0.990726,-0.135871,-0.00108166},{0.00109178,0,0.999999}}, true }, + { "Land_RiceBox_F", {11787,13052.9,0.860722}, {{0.990726,-0.135871,-0.00108166},{0.00109178,0,0.999999}}, true }, + { "Land_RiceBox_F", {11786.9,13053,0.860888}, {{0.990726,-0.135871,-0.00108166},{0.00109178,0,0.999999}}, true }, + { "Land_MobileScafolding_01_F", {11778.4,13055.9,0.0570002}, {{0.763796,0.645458,-0.000839726},{0.00109941,0,0.999999}}, true }, + { "Land_MobileScafolding_01_F", {11780.6,13050.6,0.0546398}, {{0.999684,-0.0251029,-0.00109144},{0.00109178,0,0.999999}}, true }, + { "Land_ButaneTorch_F", {11777.2,13056.8,1.738}, {{0,1,0},{0.00109941,0,0.999999}}, true }, + { "Land_GasTank_01_yellow_F", {11777.5,13057,0.0580001}, {{-0.810072,-0.58633,0.000890603},{0.00109941,0,0.999999}}, true }, + { "Land_ToolTrolley_02_F", {11778.2,13056.3,0.0570002}, {{0.90335,-0.428904,-0.000993154},{0.00109941,0,0.999999}}, true }, + { "Land_WeldingTrolley_01_F", {11779.2,13055,0.0560002}, {{-0.582137,0.813091,0.000640008},{0.00109941,0,0.999999}}, true }, + { "Land_ClutterCutter_medium_F", {11761.4,13086.4,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11762,13081.9,0}, {{0.980684,-0.195597,0},{0,0,1}}, true }, + { "Land_Cargo20_military_green_F", {11791.5,13039.5,2.67775}, {{-0.961844,0.273596,0.00105012},{0.00109178,0,0.999999}}, true }, + { "Land_Cargo20_military_green_F", {11791.5,13039.4,0.0427685}, {{-0.961844,0.273596,0.00105012},{0.00109178,0,0.999999}}, true }, + { "Land_KartStand_01_F", {11791.2,13047.4,0.0430002}, {{0,1,0},{0.00109941,0,0.999999}}, true }, + { "Land_Portable_generator_F", {11792,13062.5,0.0422258}, {{-0.237024,-0.971504,0.000258778},{0.00109178,0,0.999999}}, true }, + { "Land_TacticalBacon_F", {11792.1,13064.4,0.813005}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_BottlePlastic_V2_F", {11792.1,13064.3,0.813012}, {{0,1,0},{0,0,1}}, true }, + { "Land_BottlePlastic_V2_F", {11792.1,13064.4,0.839183}, {{0,-4.37114e-008,-1},{0,1,-4.37114e-008}}, true }, + { "Land_CampingChair_V2_F", {11791.1,13065.9,0}, {{-0.964884,-0.262678,0},{0,0,1}}, true }, + { "Land_CampingChair_V2_F", {11793.7,13064.2,0}, {{0.434194,-0.90082,0},{0,0,1}}, true }, + { "Land_CampingChair_V2_F", {11791.3,13064.7,0}, {{-0.787892,-0.615813,0},{0,0,1}}, true }, + { "Land_CampingTable_small_F", {11792.4,13064.3,0}, {{0.2208,0.975319,0},{0,0,1}}, true }, + { "Land_DieselGroundPowerUnit_01_F", {11792.5,13055.3,0.0419998}, {{0,1,0},{0.00109941,0,0.999999}}, true }, + { "Land_PressureWasher_01_F", {11791.2,13055.3,0.0430002}, {{0.997338,0.0729075,-0.00109649},{0.00109941,0,0.999999}}, true }, + { "Land_ClutterCutter_medium_F", {11874.5,13048.9,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11867.6,13049.1,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11860.9,13049.4,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11852.8,13049.5,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11878.9,13049.2,0}, {{0,1,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11889.5,13047.9,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11896.4,13045.3,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11901.9,13043.8,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11904.8,13045.1,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11907.2,13052.1,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11919.5,13070.7,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11926.4,13068.4,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11940,13065.2,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11948.8,13062.2,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11953.4,13060.6,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11963.3,13057.7,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {11980,13052.9,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {12008.1,13044.7,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {12095.6,13018.4,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {12102,13016.6,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {12127,13009.4,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {12166,12979.5,0}, {{0.531672,-0.846951,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {12168.4,12975.3,0}, {{0.531672,-0.846951,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {12168.7,12968.5,0}, {{0.531672,-0.846951,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {12161.9,12987.6,0}, {{0.531672,-0.846951,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {12163.9,12983,0}, {{0.531672,-0.846951,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {12155.8,12999.7,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_ClutterCutter_medium_F", {12158.7,12993.2,0}, {{0.956847,-0.290591,0},{0,0,1}}, true }, + { "Land_PortableLight_double_F", {11781.9,13043.6,0.102902}, {{-0.750186,-0.661227,0},{0,0,1}}, false }, + { "Land_PortableLight_double_F", {11772.5,13041.9,0.0970407}, {{0.0740564,-0.997254,0},{0,0,1}}, false }, + { "Land_Scrap_MRAP_01_F", {11767,13046.1,0.0691104}, {{-0.943564,-0.33119,0.00103737},{0.00109941,0,0.999999}}, true }, + { "Land_Device_assembled_F", {11778.5,13041.2,0.0289407}, {{-0.960812,0.277197,0.00105633},{0.00109941,0,0.999999}}, true }, + { "Land_ScrapHeap_1_F", {11766.8,13050,0.0691848}, {{0.903529,0.428525,-0.000986458},{0.00109178,0,0.999999}}, true }, + { "Land_Sacks_heap_F", {11787,13047.9,1.09401}, {{-0.669737,0.696034,-0.25882},{-0.222757,0.14418,0.964153}}, true }, + { "Land_GuardRailing_01_F", {11782,13067,0}, {{-0.952161,0.305596,0},{0,0,1}}, true }, + { "Land_GuardRailing_01_F", {11787.4,13065.5,0}, {{-0.952161,0.305596,0},{0,0,1}}, true }, + { "Land_BackAlley_01_l_gate_F", {11784.3,13065.2,0.0510001}, {{0.263031,0.964787,0},{0,0,1}}, false }, + { "Land_Atm_01_F", {11788,13055.8,0}, {{0.964787,-0.263031,0},{0,0,1}}, true }, + { "Land_DataTerminal_01_F", {11789.6,13062.3,0.0448132}, {{-0.966568,0.256407,0.00105528},{0.00109178,0,0.999999}}, true }, + { "Land_Wreck_Heli_Attack_02_F", {11778.3,13052.6,0.0581093}, {{0.395257,-0.918571,-0.00043455},{0.00109941,0,0.999999}}, true }, + { "Land_PortableLight_double_F", {11784.5,13062.8,0.0500007}, {{-0.639157,0.769076,0},{0,0,1}}, false }, + { "Land_PortableLight_double_F", {11770,13068.5,0.0662217}, {{-0.639157,0.769076,0},{0,0,1}}, false }, + { "Land_PortableLight_double_F", {11782.8,13063.4,0.0522637}, {{0.940598,0.339523,0},{0,0,1}}, false }, + { "Land_ScrapHeap_2_F", {11767.1,13053.5,0.0697136}, {{0.273153,0.961971,-0.000298224},{0.00109178,0,0.999999}}, true }, + { "Land_GymRack_01_F", {11769.2,13063,0.0670271}, {{-0.956656,0.29122,0.00105176},{0.00109941,0,0.999999}}, true }, + { "Land_GymBench_01_F", {11771.6,13067.3,0.0639992}, {{0.278907,0.960318,-0.000306634},{0.00109941,0,0.999999}}, true }, + { "Land_GymRack_02_F", {11769.1,13066.3,0.0670094}, {{-0.970012,0.243056,0.00106644},{0.00109941,0,0.999999}}, true }, + { "Land_GymRack_03_F", {11774,13067.5,0.0618873}, {{0.2471,0.96899,-0.00026978},{0.00109178,0,0.999999}}, true }, + { "Land_CratesPlastic_F", {11787,13052.2,0.86069}, {{-0.96923,0.246154,0.00105819},{0.00109178,0,0.999999}}, true }, + { "Land_Wall_IndCnc_2deco_F", {11778.7,13066.8,-0.193257}, {{0.267238,0.96363,0},{0,0,1}}, true }, + { "Land_Wall_IndCnc_2deco_F", {11785,13066.9,-0.25}, {{0.263031,0.964787,0},{0,0,1}}, true }, + { "Land_Wall_IndCnc_2deco_F", {11789.9,13063.7,-0.206364}, {{0.267238,0.96363,0},{0,0,1}}, true }, + { "Land_Wall_IndCnc_2deco_F", {11787,13064.5,-0.203082}, {{0.267238,0.96363,0},{0,0,1}}, true }, + { "Land_Wall_IndCnc_2deco_F", {11781.6,13066,-0.196193}, {{0.267238,0.96363,0},{0,0,1}}, true }, + { "Land_Wall_IndCnc_2deco_F", {11783.9,13063.7,-0.199733}, {{0.267238,0.96363,0},{0,0,1}}, true }, + { "Land_Wall_IndCnc_2deco_F", {11776,13067.6,-0.19016}, {{0.267238,0.96363,0},{0,0,1}}, true }, + { "Land_Sack_F", {11788.4,13053.9,0.0461245}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_Sacks_goods_F", {11787.6,13054.3,0.0470386}, {{-0.775859,0.630906,0.000847069},{0.00109178,0,0.999999}}, true }, + { "Land_StallWater_F", {11787.2,13050.8,0.0474386}, {{0.963563,-0.267479,-0.001052},{0.00109178,0,0.999999}}, true }, + { "Land_CrabCages_F", {11793.3,13047.5,0.0418329}, {{-0.973479,0.228776,0.00106283},{0.00109178,0,0.999999}}, true }, + { "Land_PaperBox_closed_F", {11792.8,13043.2,1.27933}, {{0.299021,0.953592,-0.0353304},{0.0115648,0.0334002,0.999375}}, true }, + { "Land_PaperBox_closed_F", {11793.3,13044.6,0.0411615}, {{0.299041,0.95424,-0.000326487},{0.00109178,0,0.999999}}, true }, + { "Land_PaperBox_closed_F", {11792.8,13043.2,0.0412612}, {{0.299041,0.95424,-0.000326487},{0.00109178,0,0.999999}}, true }, + { "Land_PaperBox_closed_F", {11791.4,13043.6,0.0428081}, {{0.299041,0.95424,-0.000326487},{0.00109178,0,0.999999}}, true }, + { "Land_PaperBox_closed_F", {11793.3,13044.6,1.27985}, {{0.29893,0.953601,-0.03585},{-0.0272342,0.0460777,0.998567}}, true }, + { "Land_PaperBox_closed_F", {11791.4,13043.6,1.28312}, {{0.29893,0.953601,-0.03585},{-0.0272342,0.0460777,0.998567}}, true }, + { "Land_PaperBox_open_full_F", {11791.8,13045,0.0419908}, {{-0.957278,0.289166,0.00105244},{0.00109941,0,0.999999}}, true }, + { "Land_WoodenCrate_01_stack_x3_F", {11796.2,13060.5,0.0377216}, {{0,1,0},{0.00109178,0,0.999999}}, true }, + { "Land_WoodenCrate_01_stack_x5_F", {11797.6,13060.3,0.0361176}, {{0.973195,-0.229977,-0.00106252},{0.00109178,0,0.999999}}, true }, + { "Land_WoodenCrate_01_stack_x5_F", {11797.2,13058.6,0.0364685}, {{-0.977819,0.209448,0.00106757},{0.00109178,0,0.999999}}, true }, + { "Land_Campfire_F", {11792.8,13065.8,0}, {{0,1,0},{0,0,1}}, false }, + { "Land_PortableLight_double_F", {11795.1,13061.6,0.0388217}, {{0.932382,0.361475,0},{0,0,1}}, false }, + { "Land_Cages_F", {11796.1,13055.2,0.0374999}, {{-0.194422,-0.980918,0.000212267},{0.00109178,0,0.999999}}, true }, + { "Land_Cages_F", {11795.8,13053.7,0.0374999}, {{-0.194422,-0.980918,0.000212267},{0.00109178,0,0.999999}}, true }, + { "Land_Wall_IndCnc_2deco_F", {11792.7,13062.9,-0.25}, {{0.267238,0.96363,0},{0,0,1}}, true }, + { "Land_Sacks_heap_F", {11795.3,13052,0.0386171}, {{-0.686998,0.726659,0.000750053},{0.00109178,0,0.999999}}, true }, + { "Land_Sacks_heap_F", {11795.2,13051.4,0.0386615}, {{0.999998,-0.00192801,-0.00109178},{0.00109178,0,0.999999}}, true }, + { "Land_Sacks_heap_F", {11795.1,13050.4,0.0388002}, {{0.205024,0.978757,-0.000223842},{0.00109178,0,0.999999}}, true }, + { "Land_CratesShabby_F", {11796.6,13056.7,0.0369964}, {{-0.973384,0.229177,0.00106272},{0.00109178,0,0.999999}}, true }, + { "Land_CratesShabby_F", {11796.8,13057.5,0.036869}, {{0.96588,-0.258988,-0.00105453},{0.00109178,0,0.999999}}, true }, + { "Land_CratesShabby_F", {11796.5,13056.1,0.0375071}, {{0.96588,-0.258988,-0.00105453},{0.00109178,0,0.999999}}, true }, + { "Land_HelipadCircle_F", {11796,13104.1,0}, {{0.273294,0.961931,0},{0,0,1}}, true }, + { "Land_Pallet_MilBoxes_F", {12172.6,12960.1,0.0794954}, {{0.399485,0.91674,0},{0,0,1}}, true }, + // ATMs + { "Land_Atm_01_F", {1888.53,12125.3,0.284561}, {{0.99453,-0.104452,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {2104.35,3439.8,0.221501}, {{0.966741,0.255759,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {2457.53,7448.89,0.257828}, {{0.319877,0.947459,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {3029.85,11331.5,0.520308}, {{0.928958,0.370186,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {5176.31,8823.1,0.10381}, {{0.185896,0.982569,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {5379.75,4080.59,0.595273}, {{-0.971422,0.237357,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {5410.69,9928.31,0.277559}, {{0,1,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {5602.78,12501.4,0.149943}, {{0.616564,-0.787305,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {5676.73,10191.7,0.239613}, {{0.156531,0.987673,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {5809.5,10855.2,0.389958}, {{-0.432223,0.901767,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {6569.07,13095.4,0.0477333}, {{-0.916388,0.40029,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {7993.48,7428.29,0.172792}, {{0.179962,-0.983674,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {8333.46,9700.11,0.563959}, {{-0.483228,-0.875495,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {8506.92,12429.8,0.4888}, {{0.181498,-0.983391,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {8959.09,10338.2,0}, {{-0.855434,0.517912,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {8947,13662.5,0.27055}, {{-0.00939054,-0.999956,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {9971.03,13451.9,0.27755}, {{-0.036167,-0.999346,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {10811,6482.04,0.277501}, {{-0.906308,-0.422618,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {10944.1,9870.03,0.487091}, {{0.997449,-0.0713866,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {11178.2,5146.3,0.457275}, {{0.0413349,-0.999145,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {11634.5,13017.3,0.277599}, {{-0.314614,-0.94922,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {11674.7,2258.52,0.33217}, {{-0.887499,-0.460809,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {12624.9,7603.27,0.253271}, {{0.513825,0.857895,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {14252.6,11504.5,0.165345}, {{-0.762126,-0.647429,0},{0,0,1}}, true }, + { "Land_Atm_01_F", {14349.2,8747.38,0.588572}, {{0.0485784,0.998819,0},{0,0,1}}, true } + }; + staticNpcPos[] = { + // Southern Trader Camp + { "C_man_polo_2_F_asia", { 5031.88,5207.61, 0 }, 005 }, + { "C_man_p_fugitive_F_asia", { 5028.86, 5209.3, 0 }, 008 }, + { "C_man_shorts_1_F_asia", { 5031.05,5222.84, 0 }, 200 }, + // Eastern Trader Camp + { "C_man_hunter_1_F", { 11786,13046.8, 0 }, 312 }, + { "C_man_shorts_1_F_asia", { 11788.4,13052.3, 0 }, 284 }, + { "C_man_shorts_4_F_asia", { 11770.8,13065.7, 0 }, 125 }, + // Western Trader Camp + { "C_man_polo_2_F_asia", { 2018.09,10650.2, 0 }, 330 }, + { "C_man_p_fugitive_F_asia", { 2018.92, 10650.9, 0 }, 000 } + }; + // Prefered locations for vehicles + class whitelistedVehiclePos {}; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/vr.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/vr.h new file mode 100644 index 0000000..bf9e98b --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/vr.h @@ -0,0 +1,36 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for vr. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/vr.h +*/ +class VR : Default +{ + worldSize = 10000; + plantLimit = 0; + vehicleSpawnTypes[] = {}; + radioactiveLocations[] = {}; + radioactiveLocationsCount = 0; + allowedVehiclesList[] = {}; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_c_EPOCH", { -0.286865, 8.17383, -10.3098, 0}, "", { 4089.82, 4597.71, 0.00143433 } } + }; + lightPos[] = {}; + debugBoxClass = ""; + cloneClasses[] = {}; + propsPos[] = {}; + staticNpcPos[] = {}; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/maps/zargabad.h b/Server/@epochhive/addons/epoch_server_settings/configs/maps/zargabad.h new file mode 100644 index 0000000..d555d3f --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/maps/zargabad.h @@ -0,0 +1,47 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for Zargabad. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/zargabad.h +*/ +class Zargabad : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 5; + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5}, + {"NameLocal",2}, + {"StrongpointArea",1}, + {"VegetationBroadleaf",1}, + {"VegetationFir",1}, + {"ViewPoint",1} + }; + shipwreckLootEnabled = 0; + telePos[] = { + // N [-0.286865,8.17383,-10.3098, 0] + // S [-0.415527,-7.05298,-10.3098, 180] + // E [13.5127,0.410156,-10.3098, 90] + // W [-14.4316,0.112793,-10.3098, -90] + { "TP_Booth_n_EPOCH", { 13.5127,0.410156,-10.3098, 90}, "", "north" }, + { "TP_Booth_c_EPOCH", { -0.415527,-7.05298,-10.3098, 180}, "", "south" } + }; + + propsPos[] = { + }; + + staticNpcPos[] = { + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/security/data/custom_vars.h b/Server/@epochhive/addons/epoch_server_settings/configs/security/data/custom_vars.h new file mode 100644 index 0000000..080f4c3 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/security/data/custom_vars.h @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch AH config for whistlisted gvars + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/securty/data/custom_vars.h +*/ + +// all var names must be lowercase +custom[] = {}; +bis[] = {}; +epoch[] = {}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/security/security_checks.h b/Server/@epochhive/addons/epoch_server_settings/configs/security/security_checks.h new file mode 100644 index 0000000..d1ba1f2 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/security/security_checks.h @@ -0,0 +1,139 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Server side securty checks config + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/securty/security_checks.h +*/ +class CfgSecConf +{ + debug = "false"; + + class vehicles { + safeVehicles[] = {"I_UAV_01_F","B_Heli_Transport_01_F","Steerable_Parachute_F","NonSteerable_Parachute_F","Land_Camping_Light_F","container_epoch"}; + }; + + class remoteExecClient{ + functions[] = {"bankBalance", "resetGroup", "groupUpdate", "groupUidUpdate", "healPlayer","tradeComplete","resetTempGroup","tempGroupUpdate","tempGroupUidUpdate"}; + // code + bankBalance = "EPOCH_bankBalance = _this;"; + resetGroup = "Epoch_my_Group = []; Epoch_my_GroupUID = '';"; + groupUpdate = "Epoch_my_Group = _this; call EPOCH_Group_update;"; + groupUidUpdate = "Epoch_my_GroupUID = _this;"; + resetTempGroup = "Epoch_my_tempGroup = []; Epoch_my_tempGroupUID = '';"; + tempGroupUpdate = "Epoch_my_tempGroup = _this; call EPOCH_tempGroup_update;"; + tempGroupUidUpdate = "Epoch_my_tempGroupUID = _this;"; + healPlayer = "{[_x,(EPOCH_defaultVars select(EPOCH_customVars find _x)) - (missionnamespace getvariable format ['EPOCH_player%1',_x])] call Epoch_GiveAttributes;} foreach ['Temp','Hunger','Thirst','Toxicity','Stamina','BloodP','Alcohol','Radiation'];"; + tradeComplete = "EPOCH_TRADE_COMPLETE = _this;"; + }; + + class learning { + mode = "false"; // true = only trust uids below, false = trust everyone (use only with a passworded server and trusted players) + trustedUsers[] = {}; + }; + + class blacklist { + badDisplays[] = {-1337,17,19,30,32,45,59,69,71,125,132,155,156,157,162,165,166,167,312,1320,1321,2727,2928,2929,316000}; + animations[] = {"AmovPercMstpSnonWnonDnon_exerciseKata","AmovPercMstpSnonWnonDnon_exercisePushup","GestureSpasm1","GestureSpasm4","GestureNod"}; + }; + + class forcedQuality { + // Configs for forced viewdistances via AH matching A3 presets + class Standard + { + viewDistance = 1600; // Standard Preset = 1600 + viewDistanceObects = 1300; // Standard Preset = 1300 + terrainGrid = 10; // Standard Preset = 25 + }; + class High + { + viewDistance = 2200; // High Preset = 2200 + viewDistanceObects = 1800; // High Preset = 1800 + terrainGrid = 10; // High Preset = 12.5 + }; + class VeryHigh + { + viewDistance = 3000; // Very High Preset = 3000 + viewDistanceObects = 2600; // Very High Preset = 2600 + terrainGrid = 10; // Very High Preset = 6.25 + }; + class Ultra + { + viewDistance = 3800; // Ultra Preset = 3800 + viewDistanceObects = 3200; // Ultra Preset = 3200 + terrainGrid = 10; // Ultra Preset = 3.125 + }; + class Custom + { + viewDistance = 2500; // High+ + viewDistanceObects = 2000; // High+ + terrainGrid = 10; // Default in MP: 10 + }; + mode = "Standard"; + }; + + class addEventHandler { + checks[] = {"Fired","InventoryClosed","InventoryOpened","Killed","HandleDamage","HandleHeal","Dammaged","Hit","HitPart"}; + }; + + class variables { + class whitelist { + #include "data\custom_vars.h" // whitelisted variables + }; + badVars[] = {"EPOCH_GMODE","ESP_map","ESP_mainMap","ESP_adminMap","AntiAntiAntiAntiHax","fnc_usec_damageHandler","fnc_usec_unconscious","VAGINA_secret","yolo","VERSION","life_fnc_handleDamage","EPOCH_spawnVehicle_PVS","CLASS911_Menu","nuke_vars","JJMMEE_INIT_MENU","PLAYERON","PLAYERNEXT2","ALTISLIFEON","LY_Menu","PLAY","LY_SwaggerLikeUs","BIS_fnc_dbg_reminder_value","BIS_fnc_dbg_reminder"}; + nilVars[] = {"EPOCH_antiWallCount","EPOCH_playerEnergy","EPOCH_playerHunger","EPOCH_playerStamina","EPOCH_playerCrypto","EPOCH_target","EPOCH_ESP_TARGETS","EPOCH_ESPMAP_TARGETS","EPOCH_taxRate","EPOCH_ESP_VEHICLEPLAYER","EPOCH_ESP_PLAYER","EPOCH_ESP_VEHICLES"}; + }; + + class commandMenu { + menus[] = {"","RscSelectTeam","RscTeam","RscMenuTeam","RscMoveHigh","#GETIN","#RscStatus","#WATCH0","RscCombatMode","RscMenuReply","RscCallSupport","#CUSTOM_RADIO","#User:BIS_fnc_addCommMenuItem_menu","RscRadio","RscReply","#ACTION","RscMenuFormations","#WATCH","RscGroupRootMenu","RscMainMenu","RscMenuMove","RscWatchDir","RscWatchMoveDir","#User:BIS_Menu_GroupCommunication","RscMenuStatus","RscFormations"}; + }; + + // RscDisplay (onload, unload) scanning is automatic and will ensure data matches the server. + // Using the extra whitelist arrays this check can be extended to allow modifications client side that do not exist server side. + class displayOnload { + // Format: {rscDisplayConfigname, extra whitelisted onload data (array of string), extra whitelisted unload data (array of string)} + // The extra onload whitelist for RscDisplayConfigure is for CBA + checkDisplays[] = { + {"RscDisplayMainMap", {}, {}}, + {"RscDisplayGetReady", {}, {}}, + {"RscDisplayInventory", {}, {}}, + {"RscDisplayLoadMission", {}, {}}, + {"RscDisplayInterrupt", {}, {}}, + {"RscDisplayOptionsVideo", {}, {}}, + {"RscDisplayOptions", {}, {}}, + {"RscDisplayAVTerminal", {}, {}}, + {"RscDisplayConfigure", {"{""onLoad"",_this,""RscDisplayConfigure"",'GUI'} call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""; _this call compile preprocessfilelinenumbers ""\x\cba\addons\keybinding\gui\initDisplay.sqf"""}, {}}, + {"RscDisplayConfigureAction", {}, {}}, + {"RscDisplayConfigureControllers", {}, {}}, + {"RscDisplayControlSchemes", {}, {}}, + {"RscDisplayCustomizeController", {}, {}}, + {"RscDisplayDebriefing", {}, {}}, + {"RscDisplayDiary", {}, {}}, + {"RscDisplayGameOptions", {}, {}}, + {"RscDisplayJoystickSchemes", {}, {}}, + {"RscDisplayLoading", {}, {}}, + {"RscDisplayMicSensitivityOptions", {}, {}}, + {"RscDisplayOptionsAudio", {}, {}}, + {"RscDisplayOptionsLayout", {}, {}}, + {"RscDisplayStart", {}, {}}, + {"RscDisplayVehicleMsgBox", {}, {}}, + {"RscDisplayInsertMarker", {}, {}} + }; + }; + + class DebugActive + { + systemChat1 = "systemChat str _type;"; + systemChat2 = "systemChat format['SPAWN %1',_spawn];"; + systemChat3 = "systemChat format['Debug-Vehicle: send: 108,%1', _veh];"; + systemChat4 = "systemChat format['Debug-Vehicle: _veh: %1', _veh];"; + systemChat5 = "systemChat format['Debug-Vehicle: _this: %1', _this];"; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/configs/templates/CfgPropTemplate.h b/Server/@epochhive/addons/epoch_server_settings/configs/templates/CfgPropTemplate.h new file mode 100644 index 0000000..333ab2a --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/configs/templates/CfgPropTemplate.h @@ -0,0 +1,387 @@ +class CfgPropTemplate { + east[] = { + { "Land_HelipadEmpty_F", {-7.17188,-34.5039,-4.75}, 0, true }, + { "Land_Factory_Conv2_F", {-27.3831,-10.0508,-4.75}, 160.944, true }, + { "Land_i_Garage_V2_F", {-19.3713,-1.82568,-4.75}, 355.492, false }, + { "Land_i_Garage_V2_F", {-8.40625,-17.5952,-4.75}, 297.007, false }, + { "Land_i_Garage_V2_F", {-15.6597,-11.2949,-4.75}, 323.572, false }, + { "Land_Mil_WallBig_4m_F", {-2.47119,-23.3975,-4.76194}, 174.746, true }, + { "Land_Mil_WallBig_4m_F", {-13.8042,-18.9365,-4.76194}, 205.067, true }, + { "Land_Mil_WallBig_4m_F", {-22.5486,-6.37109,-4.76194}, 263.427, true }, + { "Land_Mil_WallBig_4m_F", {-16.0625,-16.8755,-4.76194}, 235.64, true }, + { "Land_Mil_WallBig_4m_F", {-21.137,-9.96924,-4.76194}, 232.849, true }, + { "Land_Mil_WallBig_4m_F", {-6.18701,-22.6909,-4.76194}, 205.328, true }, + { "Land_CncWall1_F", {-2.27295,-12.9634,-4.75}, 191.576, true }, + { "Land_CncWall1_F", {-12.3088,-4.62061,-4.75}, 247.048, true }, + { "Land_CncWall1_F", {-8.17139,-10.1084,-4.75}, 223.31, true }, + { "Land_LampSolar_F", {-2.32715,-12.4058,-4.75}, 103.123, true }, + { "Land_RattanTable_01_F", {-3.30396,-11.8892,-4.74999}, 0, true }, + { "MetalBarrel_burning_F", {-11.5137,-2.75098,-4.75001}, 0, false }, + { "Land_CampingChair_V2_F", {-11.7944,-4.27197,-4.74998}, 196.248, true }, + { "Land_ChairPlastic_F", {-12.2952,-1.39551,-4.74999}, 33.536, true }, + { "C_man_1", {-4.00146,-11.4497,-4.74856}, 8.80756, false }, + { "Land_i_Garage_V2_F", {-1.81787,18.9033,-4.75}, 85.2151, false }, + { "Land_i_Garage_V2_F", {-17.4939,7.91357,-4.75}, 25.8296, false }, + { "Land_i_Garage_V2_F", {-11.2908,15.3286,-4.75}, 53.2947, false }, + { "Land_cmp_Tower_F", {-7.80127,20.4507,-4.75}, 338.149, true }, + { "Land_LampSolar_F", {-4.20825,11.0264,-4.75}, 241.694, true }, + { "Land_Mil_WallBig_4m_F", {-18.9033,13.2422,-4.76194}, 295.353, true }, + { "Land_Mil_WallBig_4m_F", {-16.8428,15.7354,-4.76194}, 325.931, true }, + { "Land_Mil_WallBig_4m_F", {-23.2595,2.16602,-4.76194}, 266.892, true }, + { "Land_Mil_WallBig_4m_F", {-22.6035,5.66064,-4.76194}, 297.471, true }, + { "Land_Mil_WallBig_4m_F", {-8.33423,22.9419,-5.48809}, 158.976, true }, + { "Land_Mil_WallBig_Corner_F", {-4.96704,23.8374,-4.75}, 176.693, true }, + { "Land_Mil_WallBig_Corner_F", {-12.4094,21.0811,-4.75}, 62.9128, true }, + { "Land_CncWall1_F", {-9.99512,7.80518,-4.75}, 303.958, true }, + { "Land_CncWall1_F", {-12.9668,1.94775,-4.75}, 286.841, true }, + { "Land_CncWall1_F", {-4.46216,11.6143,-4.75}, 340.161, true }, + { "Land_CampingTable_F", {-7.72192,7.8335,-4.75}, 317.85, true }, + { "Land_CampingTable_small_F", {-8.76294,8.13574,-4.75}, 48.4779, true }, + { "Land_HelipadEmpty_F", {-27.176,21.9331,-4.74998}, 0, true }, + { "C_man_1", {-8.10059,8.51221,-4.74856}, 135.807, false }, + { "Land_i_Garage_V2_F", {10.8845,-15.7954,-4.75}, 232.576, false }, + { "Land_i_Garage_V2_F", {16.9998,-8.28369,-4.75}, 205.119, false }, + { "Land_i_Garage_V2_F", {1.51392,-19.4268,-4.75}, 264.496, false }, + { "Land_i_Garage_V2_F", {18.8501,1.48242,-4.75}, 174.781, false }, + { "Land_cmp_Tower_ruins_F", {7.47729,-21.0059,-4.75}, 160.728, true }, + { "Land_Mil_WallBig_4m_F", {18.4487,-13.7324,-4.76194}, 113.781, true }, + { "Land_Mil_WallBig_4m_F", {22.7971,-2.50439,-4.76194}, 85.1709, true }, + { "Land_Mil_WallBig_4m_F", {16.5129,-16.061,-4.76194}, 144.359, true }, + { "Land_Mil_WallBig_4m_F", {7.74438,-23.8203,-4.76194}, 181.714, true }, + { "Land_Mil_WallBig_4m_F", {10.1604,-22.2505,-6.23693}, 112.586, true }, + { "Land_Mil_WallBig_4m_F", {22.0991,-5.97314,-4.76194}, 115.749, true }, + { "Land_Mil_WallBig_Corner_F", {4.35181,-24.4116,-4.75}, 357.691, true }, + { "Land_CncWall1_F", {12.2964,-2.19824,-4.75}, 99.8808, true }, + { "Land_CncWall1_F", {9.52905,-8.34814,-4.75}, 132.575, true }, + { "Land_CncWall1_F", {4.30493,-12.4106,-4.75}, 154.376, true }, + { "Land_Atm_02_F", {12.1636,1.99023,-4.75}, 85.0679, true }, + { "Land_Icebox_F", {2.42456,-12.3418,-4.75}, 176.593, true }, + { "Land_i_Garage_V2_F", {7.94507,17.1855,-4.75}, 116.824, false }, + { "Land_i_Garage_V2_F", {15.2095,10.8452,-4.75}, 141.629, false }, + { "Land_PowerPoleConcrete_F", {19.8027,7.60107,-7.75411}, 154.907, true }, + { "Land_LampSolar_F", {11.2615,3.78809,-4.75}, 334.693, true }, + { "Land_dp_transformer_F", {19.7893,7.60547,-4.75}, 248.56, true }, + { "Land_Mil_WallBig_4m_F", {22.0918,6.25977,-4.76194}, 83.8634, true }, + { "Land_Mil_WallBig_4m_F", {2.28198,22.8496,-4.76194}, 355.875, true }, + { "Land_Mil_WallBig_4m_F", {20.7698,9.57959,-4.76194}, 52.7648, true }, + { "Land_Mil_WallBig_4m_F", {5.79028,22.3008,-4.76194}, 26.4514, true }, + { "Land_Mil_WallBig_4m_F", {13.2942,18.458,-4.76194}, 28.0884, true }, + { "Land_Mil_WallBig_4m_F", {15.5359,16.3423,-4.76194}, 50.8817, true }, + { "Land_CncWall1_F", {11.8101,4.20557,-4.75}, 70.6127, true }, + { "Land_CncWall1_F", {7.77832,9.72217,-4.75}, 45.0186, true }, + { "Land_CncWall1_F", {1.97852,12.4805,-4.75}, 7.81649, true }, + { "Land_TablePlastic_01_F", {7.50708,7.5459,-4.75}, 32.4742, true }, + { "Land_HumanSkeleton_F", {12.4023,17.6382,-4.75}, 0, true }, + { "Land_Volleyball_01_F", {11.9797,17.1353,-4.75}, 0, true }, + { "Land_HelipadEmpty_F", {21.354,25.6807,-4.74999}, 0, true }, + { "C_man_1", {7.95239,8.18945,-4.74856}, 214.411, false } + }; + west[] = { + { "Land_HelipadEmpty_F", {-7.17188,-34.5039,-4.75}, 0, true }, + { "Land_Factory_Conv2_F", {-27.3831,-10.0508,-4.75}, 160.944, true }, + { "Land_i_Garage_V2_F", {-19.3713,-1.82568,-4.75}, 355.492, false }, + { "Land_i_Garage_V2_F", {-8.40625,-17.5952,-4.75}, 297.007, false }, + { "Land_i_Garage_V2_F", {-15.6597,-11.2949,-4.75}, 323.572, false }, + { "Land_Mil_WallBig_4m_F", {-2.47119,-23.3975,-4.76194}, 174.746, true }, + { "Land_Mil_WallBig_4m_F", {-13.8042,-18.9365,-4.76194}, 205.067, true }, + { "Land_Mil_WallBig_4m_F", {-22.5486,-6.37109,-4.76194}, 263.427, true }, + { "Land_Mil_WallBig_4m_F", {-16.0625,-16.8755,-4.76194}, 235.64, true }, + { "Land_Mil_WallBig_4m_F", {-21.137,-9.96924,-4.76194}, 232.849, true }, + { "Land_Mil_WallBig_4m_F", {-6.18701,-22.6909,-4.76194}, 205.328, true }, + { "Land_CncWall1_F", {-2.27295,-12.9634,-4.75}, 191.576, true }, + { "Land_CncWall1_F", {-12.3088,-4.62061,-4.75}, 247.048, true }, + { "Land_CncWall1_F", {-8.17139,-10.1084,-4.75}, 223.31, true }, + { "Land_LampSolar_F", {-2.32715,-12.4058,-4.75}, 103.123, true }, + { "Land_RattanTable_01_F", {-3.30396,-11.8892,-4.74999}, 0, true }, + { "MetalBarrel_burning_F", {-11.5137,-2.75098,-4.75001}, 0, false }, + { "Land_CampingChair_V2_F", {-11.7944,-4.27197,-4.74998}, 196.248, true }, + { "Land_ChairPlastic_F", {-12.2952,-1.39551,-4.74999}, 33.536, true }, + { "C_man_1", {-4.00146,-11.4497,-4.74856}, 8.80756, false }, + { "Land_i_Garage_V2_F", {-1.81787,18.9033,-4.75}, 85.2151, false }, + { "Land_i_Garage_V2_F", {-17.4939,7.91357,-4.75}, 25.8296, false }, + { "Land_i_Garage_V2_F", {-11.2908,15.3286,-4.75}, 53.2947, false }, + { "Land_cmp_Tower_F", {-7.80127,20.4507,-4.75}, 338.149, true }, + { "Land_LampSolar_F", {-4.20825,11.0264,-4.75}, 241.694, true }, + { "Land_Mil_WallBig_4m_F", {-18.9033,13.2422,-4.76194}, 295.353, true }, + { "Land_Mil_WallBig_4m_F", {-16.8428,15.7354,-4.76194}, 325.931, true }, + { "Land_Mil_WallBig_4m_F", {-23.2595,2.16602,-4.76194}, 266.892, true }, + { "Land_Mil_WallBig_4m_F", {-22.6035,5.66064,-4.76194}, 297.471, true }, + { "Land_Mil_WallBig_4m_F", {-8.33423,22.9419,-5.48809}, 158.976, true }, + { "Land_Mil_WallBig_Corner_F", {-4.96704,23.8374,-4.75}, 176.693, true }, + { "Land_Mil_WallBig_Corner_F", {-12.4094,21.0811,-4.75}, 62.9128, true }, + { "Land_CncWall1_F", {-9.99512,7.80518,-4.75}, 303.958, true }, + { "Land_CncWall1_F", {-12.9668,1.94775,-4.75}, 286.841, true }, + { "Land_CncWall1_F", {-4.46216,11.6143,-4.75}, 340.161, true }, + { "Land_CampingTable_F", {-7.72192,7.8335,-4.75}, 317.85, true }, + { "Land_CampingTable_small_F", {-8.76294,8.13574,-4.75}, 48.4779, true }, + { "Land_HelipadEmpty_F", {-27.176,21.9331,-4.74998}, 0, true }, + { "C_man_1", {-8.10059,8.51221,-4.74856}, 135.807, false }, + { "Land_i_Garage_V2_F", {10.8845,-15.7954,-4.75}, 232.576, false }, + { "Land_i_Garage_V2_F", {16.9998,-8.28369,-4.75}, 205.119, false }, + { "Land_i_Garage_V2_F", {1.51392,-19.4268,-4.75}, 264.496, false }, + { "Land_i_Garage_V2_F", {18.8501,1.48242,-4.75}, 174.781, false }, + { "Land_cmp_Tower_ruins_F", {7.47729,-21.0059,-4.75}, 160.728, true }, + { "Land_Mil_WallBig_4m_F", {18.4487,-13.7324,-4.76194}, 113.781, true }, + { "Land_Mil_WallBig_4m_F", {22.7971,-2.50439,-4.76194}, 85.1709, true }, + { "Land_Mil_WallBig_4m_F", {16.5129,-16.061,-4.76194}, 144.359, true }, + { "Land_Mil_WallBig_4m_F", {7.74438,-23.8203,-4.76194}, 181.714, true }, + { "Land_Mil_WallBig_4m_F", {10.1604,-22.2505,-6.23693}, 112.586, true }, + { "Land_Mil_WallBig_4m_F", {22.0991,-5.97314,-4.76194}, 115.749, true }, + { "Land_Mil_WallBig_Corner_F", {4.35181,-24.4116,-4.75}, 357.691, true }, + { "Land_CncWall1_F", {12.2964,-2.19824,-4.75}, 99.8808, true }, + { "Land_CncWall1_F", {9.52905,-8.34814,-4.75}, 132.575, true }, + { "Land_CncWall1_F", {4.30493,-12.4106,-4.75}, 154.376, true }, + { "Land_Atm_02_F", {12.1636,1.99023,-4.75}, 85.0679, true }, + { "Land_Icebox_F", {2.42456,-12.3418,-4.75}, 176.593, true }, + { "Land_i_Garage_V2_F", {7.94507,17.1855,-4.75}, 116.824, false }, + { "Land_i_Garage_V2_F", {15.2095,10.8452,-4.75}, 141.629, false }, + { "Land_PowerPoleConcrete_F", {19.8027,7.60107,-7.75411}, 154.907, true }, + { "Land_LampSolar_F", {11.2615,3.78809,-4.75}, 334.693, true }, + { "Land_dp_transformer_F", {19.7893,7.60547,-4.75}, 248.56, true }, + { "Land_Mil_WallBig_4m_F", {22.0918,6.25977,-4.76194}, 83.8634, true }, + { "Land_Mil_WallBig_4m_F", {2.28198,22.8496,-4.76194}, 355.875, true }, + { "Land_Mil_WallBig_4m_F", {20.7698,9.57959,-4.76194}, 52.7648, true }, + { "Land_Mil_WallBig_4m_F", {5.79028,22.3008,-4.76194}, 26.4514, true }, + { "Land_Mil_WallBig_4m_F", {13.2942,18.458,-4.76194}, 28.0884, true }, + { "Land_Mil_WallBig_4m_F", {15.5359,16.3423,-4.76194}, 50.8817, true }, + { "Land_CncWall1_F", {11.8101,4.20557,-4.75}, 70.6127, true }, + { "Land_CncWall1_F", {7.77832,9.72217,-4.75}, 45.0186, true }, + { "Land_CncWall1_F", {1.97852,12.4805,-4.75}, 7.81649, true }, + { "Land_TablePlastic_01_F", {7.50708,7.5459,-4.75}, 32.4742, true }, + { "Land_HumanSkeleton_F", {12.4023,17.6382,-4.75}, 0, true }, + { "Land_Volleyball_01_F", {11.9797,17.1353,-4.75}, 0, true }, + { "Land_HelipadEmpty_F", {21.354,25.6807,-4.74999}, 0, true }, + { "C_man_1", {7.95239,8.18945,-4.74856}, 214.411, false } + }; + north[] = { + { "Land_HelipadEmpty_F", {-7.17188,-34.5039,-4.75}, 0, true }, + { "Land_Factory_Conv2_F", {-27.3831,-10.0508,-4.75}, 160.944, true }, + { "Land_i_Garage_V2_F", {-19.3713,-1.82568,-4.75}, 355.492, false }, + { "Land_i_Garage_V2_F", {-8.40625,-17.5952,-4.75}, 297.007, false }, + { "Land_i_Garage_V2_F", {-15.6597,-11.2949,-4.75}, 323.572, false }, + { "Land_Mil_WallBig_4m_F", {-2.47119,-23.3975,-4.76194}, 174.746, true }, + { "Land_Mil_WallBig_4m_F", {-13.8042,-18.9365,-4.76194}, 205.067, true }, + { "Land_Mil_WallBig_4m_F", {-22.5486,-6.37109,-4.76194}, 263.427, true }, + { "Land_Mil_WallBig_4m_F", {-16.0625,-16.8755,-4.76194}, 235.64, true }, + { "Land_Mil_WallBig_4m_F", {-21.137,-9.96924,-4.76194}, 232.849, true }, + { "Land_Mil_WallBig_4m_F", {-6.18701,-22.6909,-4.76194}, 205.328, true }, + { "Land_CncWall1_F", {-2.27295,-12.9634,-4.75}, 191.576, true }, + { "Land_CncWall1_F", {-12.3088,-4.62061,-4.75}, 247.048, true }, + { "Land_CncWall1_F", {-8.17139,-10.1084,-4.75}, 223.31, true }, + { "Land_LampSolar_F", {-2.32715,-12.4058,-4.75}, 103.123, true }, + { "Land_RattanTable_01_F", {-3.30396,-11.8892,-4.74999}, 0, true }, + { "MetalBarrel_burning_F", {-11.5137,-2.75098,-4.75001}, 0, false }, + { "Land_CampingChair_V2_F", {-11.7944,-4.27197,-4.74998}, 196.248, true }, + { "Land_ChairPlastic_F", {-12.2952,-1.39551,-4.74999}, 33.536, true }, + { "C_man_1", {-4.00146,-11.4497,-4.74856}, 8.80756, false }, + { "Land_i_Garage_V2_F", {-1.81787,18.9033,-4.75}, 85.2151, false }, + { "Land_i_Garage_V2_F", {-17.4939,7.91357,-4.75}, 25.8296, false }, + { "Land_i_Garage_V2_F", {-11.2908,15.3286,-4.75}, 53.2947, false }, + { "Land_cmp_Tower_F", {-7.80127,20.4507,-4.75}, 338.149, true }, + { "Land_LampSolar_F", {-4.20825,11.0264,-4.75}, 241.694, true }, + { "Land_Mil_WallBig_4m_F", {-18.9033,13.2422,-4.76194}, 295.353, true }, + { "Land_Mil_WallBig_4m_F", {-16.8428,15.7354,-4.76194}, 325.931, true }, + { "Land_Mil_WallBig_4m_F", {-23.2595,2.16602,-4.76194}, 266.892, true }, + { "Land_Mil_WallBig_4m_F", {-22.6035,5.66064,-4.76194}, 297.471, true }, + { "Land_Mil_WallBig_4m_F", {-8.33423,22.9419,-5.48809}, 158.976, true }, + { "Land_Mil_WallBig_Corner_F", {-4.96704,23.8374,-4.75}, 176.693, true }, + { "Land_Mil_WallBig_Corner_F", {-12.4094,21.0811,-4.75}, 62.9128, true }, + { "Land_CncWall1_F", {-9.99512,7.80518,-4.75}, 303.958, true }, + { "Land_CncWall1_F", {-12.9668,1.94775,-4.75}, 286.841, true }, + { "Land_CncWall1_F", {-4.46216,11.6143,-4.75}, 340.161, true }, + { "Land_CampingTable_F", {-7.72192,7.8335,-4.75}, 317.85, true }, + { "Land_CampingTable_small_F", {-8.76294,8.13574,-4.75}, 48.4779, true }, + { "Land_HelipadEmpty_F", {-27.176,21.9331,-4.74998}, 0, true }, + { "C_man_1", {-8.10059,8.51221,-4.74856}, 135.807, false }, + { "Land_i_Garage_V2_F", {10.8845,-15.7954,-4.75}, 232.576, false }, + { "Land_i_Garage_V2_F", {16.9998,-8.28369,-4.75}, 205.119, false }, + { "Land_i_Garage_V2_F", {1.51392,-19.4268,-4.75}, 264.496, false }, + { "Land_i_Garage_V2_F", {18.8501,1.48242,-4.75}, 174.781, false }, + { "Land_cmp_Tower_ruins_F", {7.47729,-21.0059,-4.75}, 160.728, true }, + { "Land_Mil_WallBig_4m_F", {18.4487,-13.7324,-4.76194}, 113.781, true }, + { "Land_Mil_WallBig_4m_F", {22.7971,-2.50439,-4.76194}, 85.1709, true }, + { "Land_Mil_WallBig_4m_F", {16.5129,-16.061,-4.76194}, 144.359, true }, + { "Land_Mil_WallBig_4m_F", {7.74438,-23.8203,-4.76194}, 181.714, true }, + { "Land_Mil_WallBig_4m_F", {10.1604,-22.2505,-6.23693}, 112.586, true }, + { "Land_Mil_WallBig_4m_F", {22.0991,-5.97314,-4.76194}, 115.749, true }, + { "Land_Mil_WallBig_Corner_F", {4.35181,-24.4116,-4.75}, 357.691, true }, + { "Land_CncWall1_F", {12.2964,-2.19824,-4.75}, 99.8808, true }, + { "Land_CncWall1_F", {9.52905,-8.34814,-4.75}, 132.575, true }, + { "Land_CncWall1_F", {4.30493,-12.4106,-4.75}, 154.376, true }, + { "Land_Atm_02_F", {12.1636,1.99023,-4.75}, 85.0679, true }, + { "Land_Icebox_F", {2.42456,-12.3418,-4.75}, 176.593, true }, + { "Land_i_Garage_V2_F", {7.94507,17.1855,-4.75}, 116.824, false }, + { "Land_i_Garage_V2_F", {15.2095,10.8452,-4.75}, 141.629, false }, + { "Land_PowerPoleConcrete_F", {19.8027,7.60107,-7.75411}, 154.907, true }, + { "Land_LampSolar_F", {11.2615,3.78809,-4.75}, 334.693, true }, + { "Land_dp_transformer_F", {19.7893,7.60547,-4.75}, 248.56, true }, + { "Land_Mil_WallBig_4m_F", {22.0918,6.25977,-4.76194}, 83.8634, true }, + { "Land_Mil_WallBig_4m_F", {2.28198,22.8496,-4.76194}, 355.875, true }, + { "Land_Mil_WallBig_4m_F", {20.7698,9.57959,-4.76194}, 52.7648, true }, + { "Land_Mil_WallBig_4m_F", {5.79028,22.3008,-4.76194}, 26.4514, true }, + { "Land_Mil_WallBig_4m_F", {13.2942,18.458,-4.76194}, 28.0884, true }, + { "Land_Mil_WallBig_4m_F", {15.5359,16.3423,-4.76194}, 50.8817, true }, + { "Land_CncWall1_F", {11.8101,4.20557,-4.75}, 70.6127, true }, + { "Land_CncWall1_F", {7.77832,9.72217,-4.75}, 45.0186, true }, + { "Land_CncWall1_F", {1.97852,12.4805,-4.75}, 7.81649, true }, + { "Land_TablePlastic_01_F", {7.50708,7.5459,-4.75}, 32.4742, true }, + { "Land_HumanSkeleton_F", {12.4023,17.6382,-4.75}, 0, true }, + { "Land_Volleyball_01_F", {11.9797,17.1353,-4.75}, 0, true }, + { "Land_HelipadEmpty_F", {21.354,25.6807,-4.74999}, 0, true }, + { "C_man_1", {7.95239,8.18945,-4.74856}, 214.411, false } + }; + south[] = { + { "Land_HelipadEmpty_F", {-7.17188,-34.5039,-4.75}, 0, true }, + { "Land_Factory_Conv2_F", {-27.3831,-10.0508,-4.75}, 160.944, true }, + { "Land_i_Garage_V2_F", {-19.3713,-1.82568,-4.75}, 355.492, false }, + { "Land_i_Garage_V2_F", {-8.40625,-17.5952,-4.75}, 297.007, false }, + { "Land_i_Garage_V2_F", {-15.6597,-11.2949,-4.75}, 323.572, false }, + { "Land_Mil_WallBig_4m_F", {-2.47119,-23.3975,-4.76194}, 174.746, true }, + { "Land_Mil_WallBig_4m_F", {-13.8042,-18.9365,-4.76194}, 205.067, true }, + { "Land_Mil_WallBig_4m_F", {-22.5486,-6.37109,-4.76194}, 263.427, true }, + { "Land_Mil_WallBig_4m_F", {-16.0625,-16.8755,-4.76194}, 235.64, true }, + { "Land_Mil_WallBig_4m_F", {-21.137,-9.96924,-4.76194}, 232.849, true }, + { "Land_Mil_WallBig_4m_F", {-6.18701,-22.6909,-4.76194}, 205.328, true }, + { "Land_CncWall1_F", {-2.27295,-12.9634,-4.75}, 191.576, true }, + { "Land_CncWall1_F", {-12.3088,-4.62061,-4.75}, 247.048, true }, + { "Land_CncWall1_F", {-8.17139,-10.1084,-4.75}, 223.31, true }, + { "Land_LampSolar_F", {-2.32715,-12.4058,-4.75}, 103.123, true }, + { "Land_RattanTable_01_F", {-3.30396,-11.8892,-4.74999}, 0, true }, + { "MetalBarrel_burning_F", {-11.5137,-2.75098,-4.75001}, 0, false }, + { "Land_CampingChair_V2_F", {-11.7944,-4.27197,-4.74998}, 196.248, true }, + { "Land_ChairPlastic_F", {-12.2952,-1.39551,-4.74999}, 33.536, true }, + { "C_man_1", {-4.00146,-11.4497,-4.74856}, 8.80756, false }, + { "Land_i_Garage_V2_F", {-1.81787,18.9033,-4.75}, 85.2151, false }, + { "Land_i_Garage_V2_F", {-17.4939,7.91357,-4.75}, 25.8296, false }, + { "Land_i_Garage_V2_F", {-11.2908,15.3286,-4.75}, 53.2947, false }, + { "Land_cmp_Tower_F", {-7.80127,20.4507,-4.75}, 338.149, true }, + { "Land_LampSolar_F", {-4.20825,11.0264,-4.75}, 241.694, true }, + { "Land_Mil_WallBig_4m_F", {-18.9033,13.2422,-4.76194}, 295.353, true }, + { "Land_Mil_WallBig_4m_F", {-16.8428,15.7354,-4.76194}, 325.931, true }, + { "Land_Mil_WallBig_4m_F", {-23.2595,2.16602,-4.76194}, 266.892, true }, + { "Land_Mil_WallBig_4m_F", {-22.6035,5.66064,-4.76194}, 297.471, true }, + { "Land_Mil_WallBig_4m_F", {-8.33423,22.9419,-5.48809}, 158.976, true }, + { "Land_Mil_WallBig_Corner_F", {-4.96704,23.8374,-4.75}, 176.693, true }, + { "Land_Mil_WallBig_Corner_F", {-12.4094,21.0811,-4.75}, 62.9128, true }, + { "Land_CncWall1_F", {-9.99512,7.80518,-4.75}, 303.958, true }, + { "Land_CncWall1_F", {-12.9668,1.94775,-4.75}, 286.841, true }, + { "Land_CncWall1_F", {-4.46216,11.6143,-4.75}, 340.161, true }, + { "Land_CampingTable_F", {-7.72192,7.8335,-4.75}, 317.85, true }, + { "Land_CampingTable_small_F", {-8.76294,8.13574,-4.75}, 48.4779, true }, + { "Land_HelipadEmpty_F", {-27.176,21.9331,-4.74998}, 0, true }, + { "C_man_1", {-8.10059,8.51221,-4.74856}, 135.807, false }, + { "Land_i_Garage_V2_F", {10.8845,-15.7954,-4.75}, 232.576, false }, + { "Land_i_Garage_V2_F", {16.9998,-8.28369,-4.75}, 205.119, false }, + { "Land_i_Garage_V2_F", {1.51392,-19.4268,-4.75}, 264.496, false }, + { "Land_i_Garage_V2_F", {18.8501,1.48242,-4.75}, 174.781, false }, + { "Land_cmp_Tower_ruins_F", {7.47729,-21.0059,-4.75}, 160.728, true }, + { "Land_Mil_WallBig_4m_F", {18.4487,-13.7324,-4.76194}, 113.781, true }, + { "Land_Mil_WallBig_4m_F", {22.7971,-2.50439,-4.76194}, 85.1709, true }, + { "Land_Mil_WallBig_4m_F", {16.5129,-16.061,-4.76194}, 144.359, true }, + { "Land_Mil_WallBig_4m_F", {7.74438,-23.8203,-4.76194}, 181.714, true }, + { "Land_Mil_WallBig_4m_F", {10.1604,-22.2505,-6.23693}, 112.586, true }, + { "Land_Mil_WallBig_4m_F", {22.0991,-5.97314,-4.76194}, 115.749, true }, + { "Land_Mil_WallBig_Corner_F", {4.35181,-24.4116,-4.75}, 357.691, true }, + { "Land_CncWall1_F", {12.2964,-2.19824,-4.75}, 99.8808, true }, + { "Land_CncWall1_F", {9.52905,-8.34814,-4.75}, 132.575, true }, + { "Land_CncWall1_F", {4.30493,-12.4106,-4.75}, 154.376, true }, + { "Land_Atm_02_F", {12.1636,1.99023,-4.75}, 85.0679, true }, + { "Land_Icebox_F", {2.42456,-12.3418,-4.75}, 176.593, true }, + { "Land_i_Garage_V2_F", {7.94507,17.1855,-4.75}, 116.824, false }, + { "Land_i_Garage_V2_F", {15.2095,10.8452,-4.75}, 141.629, false }, + { "Land_PowerPoleConcrete_F", {19.8027,7.60107,-7.75411}, 154.907, true }, + { "Land_LampSolar_F", {11.2615,3.78809,-4.75}, 334.693, true }, + { "Land_dp_transformer_F", {19.7893,7.60547,-4.75}, 248.56, true }, + { "Land_Mil_WallBig_4m_F", {22.0918,6.25977,-4.76194}, 83.8634, true }, + { "Land_Mil_WallBig_4m_F", {2.28198,22.8496,-4.76194}, 355.875, true }, + { "Land_Mil_WallBig_4m_F", {20.7698,9.57959,-4.76194}, 52.7648, true }, + { "Land_Mil_WallBig_4m_F", {5.79028,22.3008,-4.76194}, 26.4514, true }, + { "Land_Mil_WallBig_4m_F", {13.2942,18.458,-4.76194}, 28.0884, true }, + { "Land_Mil_WallBig_4m_F", {15.5359,16.3423,-4.76194}, 50.8817, true }, + { "Land_CncWall1_F", {11.8101,4.20557,-4.75}, 70.6127, true }, + { "Land_CncWall1_F", {7.77832,9.72217,-4.75}, 45.0186, true }, + { "Land_CncWall1_F", {1.97852,12.4805,-4.75}, 7.81649, true }, + { "Land_TablePlastic_01_F", {7.50708,7.5459,-4.75}, 32.4742, true }, + { "Land_HumanSkeleton_F", {12.4023,17.6382,-4.75}, 0, true }, + { "Land_Volleyball_01_F", {11.9797,17.1353,-4.75}, 0, true }, + { "Land_HelipadEmpty_F", {21.354,25.6807,-4.74999}, 0, true }, + { "C_man_1", {7.95239,8.18945,-4.74856}, 214.411, false } + }; + center[] = { + { "Land_HelipadEmpty_F", {-7.17188,-34.5039,-4.75}, 0, true }, + { "Land_Factory_Conv2_F", {-27.3831,-10.0508,-4.75}, 160.944, true }, + { "Land_i_Garage_V2_F", {-19.3713,-1.82568,-4.75}, 355.492, false }, + { "Land_i_Garage_V2_F", {-8.40625,-17.5952,-4.75}, 297.007, false }, + { "Land_i_Garage_V2_F", {-15.6597,-11.2949,-4.75}, 323.572, false }, + { "Land_Mil_WallBig_4m_F", {-2.47119,-23.3975,-4.76194}, 174.746, true }, + { "Land_Mil_WallBig_4m_F", {-13.8042,-18.9365,-4.76194}, 205.067, true }, + { "Land_Mil_WallBig_4m_F", {-22.5486,-6.37109,-4.76194}, 263.427, true }, + { "Land_Mil_WallBig_4m_F", {-16.0625,-16.8755,-4.76194}, 235.64, true }, + { "Land_Mil_WallBig_4m_F", {-21.137,-9.96924,-4.76194}, 232.849, true }, + { "Land_Mil_WallBig_4m_F", {-6.18701,-22.6909,-4.76194}, 205.328, true }, + { "Land_CncWall1_F", {-2.27295,-12.9634,-4.75}, 191.576, true }, + { "Land_CncWall1_F", {-12.3088,-4.62061,-4.75}, 247.048, true }, + { "Land_CncWall1_F", {-8.17139,-10.1084,-4.75}, 223.31, true }, + { "Land_LampSolar_F", {-2.32715,-12.4058,-4.75}, 103.123, true }, + { "Land_RattanTable_01_F", {-3.30396,-11.8892,-4.74999}, 0, true }, + { "MetalBarrel_burning_F", {-11.5137,-2.75098,-4.75001}, 0, false }, + { "Land_CampingChair_V2_F", {-11.7944,-4.27197,-4.74998}, 196.248, true }, + { "Land_ChairPlastic_F", {-12.2952,-1.39551,-4.74999}, 33.536, true }, + { "C_man_1", {-4.00146,-11.4497,-4.74856}, 8.80756, false }, + { "Land_i_Garage_V2_F", {-1.81787,18.9033,-4.75}, 85.2151, false }, + { "Land_i_Garage_V2_F", {-17.4939,7.91357,-4.75}, 25.8296, false }, + { "Land_i_Garage_V2_F", {-11.2908,15.3286,-4.75}, 53.2947, false }, + { "Land_cmp_Tower_F", {-7.80127,20.4507,-4.75}, 338.149, true }, + { "Land_LampSolar_F", {-4.20825,11.0264,-4.75}, 241.694, true }, + { "Land_Mil_WallBig_4m_F", {-18.9033,13.2422,-4.76194}, 295.353, true }, + { "Land_Mil_WallBig_4m_F", {-16.8428,15.7354,-4.76194}, 325.931, true }, + { "Land_Mil_WallBig_4m_F", {-23.2595,2.16602,-4.76194}, 266.892, true }, + { "Land_Mil_WallBig_4m_F", {-22.6035,5.66064,-4.76194}, 297.471, true }, + { "Land_Mil_WallBig_4m_F", {-8.33423,22.9419,-5.48809}, 158.976, true }, + { "Land_Mil_WallBig_Corner_F", {-4.96704,23.8374,-4.75}, 176.693, true }, + { "Land_Mil_WallBig_Corner_F", {-12.4094,21.0811,-4.75}, 62.9128, true }, + { "Land_CncWall1_F", {-9.99512,7.80518,-4.75}, 303.958, true }, + { "Land_CncWall1_F", {-12.9668,1.94775,-4.75}, 286.841, true }, + { "Land_CncWall1_F", {-4.46216,11.6143,-4.75}, 340.161, true }, + { "Land_CampingTable_F", {-7.72192,7.8335,-4.75}, 317.85, true }, + { "Land_CampingTable_small_F", {-8.76294,8.13574,-4.75}, 48.4779, true }, + { "Land_HelipadEmpty_F", {-27.176,21.9331,-4.74998}, 0, true }, + { "C_man_1", {-8.10059,8.51221,-4.74856}, 135.807, false }, + { "Land_i_Garage_V2_F", {10.8845,-15.7954,-4.75}, 232.576, false }, + { "Land_i_Garage_V2_F", {16.9998,-8.28369,-4.75}, 205.119, false }, + { "Land_i_Garage_V2_F", {1.51392,-19.4268,-4.75}, 264.496, false }, + { "Land_i_Garage_V2_F", {18.8501,1.48242,-4.75}, 174.781, false }, + { "Land_cmp_Tower_ruins_F", {7.47729,-21.0059,-4.75}, 160.728, true }, + { "Land_Mil_WallBig_4m_F", {18.4487,-13.7324,-4.76194}, 113.781, true }, + { "Land_Mil_WallBig_4m_F", {22.7971,-2.50439,-4.76194}, 85.1709, true }, + { "Land_Mil_WallBig_4m_F", {16.5129,-16.061,-4.76194}, 144.359, true }, + { "Land_Mil_WallBig_4m_F", {7.74438,-23.8203,-4.76194}, 181.714, true }, + { "Land_Mil_WallBig_4m_F", {10.1604,-22.2505,-6.23693}, 112.586, true }, + { "Land_Mil_WallBig_4m_F", {22.0991,-5.97314,-4.76194}, 115.749, true }, + { "Land_Mil_WallBig_Corner_F", {4.35181,-24.4116,-4.75}, 357.691, true }, + { "Land_CncWall1_F", {12.2964,-2.19824,-4.75}, 99.8808, true }, + { "Land_CncWall1_F", {9.52905,-8.34814,-4.75}, 132.575, true }, + { "Land_CncWall1_F", {4.30493,-12.4106,-4.75}, 154.376, true }, + { "Land_Atm_02_F", {12.1636,1.99023,-4.75}, 85.0679, true }, + { "Land_Icebox_F", {2.42456,-12.3418,-4.75}, 176.593, true }, + { "Land_i_Garage_V2_F", {7.94507,17.1855,-4.75}, 116.824, false }, + { "Land_i_Garage_V2_F", {15.2095,10.8452,-4.75}, 141.629, false }, + { "Land_PowerPoleConcrete_F", {19.8027,7.60107,-7.75411}, 154.907, true }, + { "Land_LampSolar_F", {11.2615,3.78809,-4.75}, 334.693, true }, + { "Land_dp_transformer_F", {19.7893,7.60547,-4.75}, 248.56, true }, + { "Land_Mil_WallBig_4m_F", {22.0918,6.25977,-4.76194}, 83.8634, true }, + { "Land_Mil_WallBig_4m_F", {2.28198,22.8496,-4.76194}, 355.875, true }, + { "Land_Mil_WallBig_4m_F", {20.7698,9.57959,-4.76194}, 52.7648, true }, + { "Land_Mil_WallBig_4m_F", {5.79028,22.3008,-4.76194}, 26.4514, true }, + { "Land_Mil_WallBig_4m_F", {13.2942,18.458,-4.76194}, 28.0884, true }, + { "Land_Mil_WallBig_4m_F", {15.5359,16.3423,-4.76194}, 50.8817, true }, + { "Land_CncWall1_F", {11.8101,4.20557,-4.75}, 70.6127, true }, + { "Land_CncWall1_F", {7.77832,9.72217,-4.75}, 45.0186, true }, + { "Land_CncWall1_F", {1.97852,12.4805,-4.75}, 7.81649, true }, + { "Land_TablePlastic_01_F", {7.50708,7.5459,-4.75}, 32.4742, true }, + { "Land_HumanSkeleton_F", {12.4023,17.6382,-4.75}, 0, true }, + { "Land_Volleyball_01_F", {11.9797,17.1353,-4.75}, 0, true }, + { "Land_HelipadEmpty_F", {21.354,25.6807,-4.74999}, 0, true }, + { "C_man_1", {7.95239,8.18945,-4.74856}, 214.411, false } + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_settings/license.txt b/Server/@epochhive/addons/epoch_server_settings/license.txt new file mode 100644 index 0000000..35440e4 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_settings/license.txt @@ -0,0 +1,9 @@ +Epoch Mod for Arma 3 +http://epochmod.com +by Epoch Mod Team +https://github.com/EpochModTeam/Epoch + +The contents of this pbo are under the following license: +http://www.bistudio.com/community/licenses/arma-public-license-share-alike + +Keep this file and file headers with attribution intact for proper use. \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_settings/treeView.txt b/Server/@epochhive/addons/epoch_server_settings/treeView.txt new file mode 100644 index 0000000..d4663fc Binary files /dev/null and b/Server/@epochhive/addons/epoch_server_settings/treeView.txt differ diff --git a/Server/@epochhive/addons/epoch_server_vip_event/$PREFIX$ b/Server/@epochhive/addons/epoch_server_vip_event/$PREFIX$ new file mode 100644 index 0000000..b5e30ac --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_vip_event/$PREFIX$ @@ -0,0 +1 @@ +epoch_server_vip_event \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_vip_event/BIS_AddonInfo.hpp b/Server/@epochhive/addons/epoch_server_vip_event/BIS_AddonInfo.hpp new file mode 100644 index 0000000..cfc5d9c --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_vip_event/BIS_AddonInfo.hpp @@ -0,0 +1,5 @@ +class BIS_AddonInfo +{ + author=""; + timepacked="1521065983"; +}; diff --git a/Server/@epochhive/addons/epoch_server_vip_event/EpochEvents/event1.sqf b/Server/@epochhive/addons/epoch_server_vip_event/EpochEvents/event1.sqf new file mode 100644 index 0000000..682d210 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_vip_event/EpochEvents/event1.sqf @@ -0,0 +1,42 @@ +/* + Author/s: + Aaron Clark - EpochMod.com + + Description: + VIP Event - Reveals the map location of a random player that possesses a specific item every x minutes. + + Improvements and or bugfixes and other contributions are welcome via the github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_vip_event/EpochEvents/event1.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_marker","_name","_owner","_player","_players","_position"]; +//[[[end]]] +params [["_item","ItemBriefcaseGold100oz"]]; +// marker name +_marker = "VIPMarker1"; +// remove any previous markers +if (_marker in allMapMarkers) then { + deleteMarker _marker; +}; +// get all alive players with the VIP item. +_players = allPlayers select {(alive _x && (_item in magazines _x))}; +// continue if players found +if !(_players isEqualTo []) then { + // select random player + _player = selectRandom _players; + _position = getpos _player; + _owner = owner _player; + _name = name _player; + // make marker + _marker = createMarker[_marker, _position]; + _marker setMarkerShape "ICON"; + _marker setMarkerType "hd_objective"; + _marker setMarkerColor "ColorRed"; + _marker setMarkerText "VIP"; + // tell player about VIP status + ["You are the VIP!", 5] remoteExec ['Epoch_message',_player]; + // broadcast to everyone else + [format["%1 is the VIP!",_name], 5] remoteExec ['Epoch_message',[-2,-_owner]]; + // debug + diag_log format["Epoch: VIP Marker triggered on %1", _player]; +}; diff --git a/Server/@epochhive/addons/epoch_server_vip_event/build.hpp b/Server/@epochhive/addons/epoch_server_vip_event/build.hpp new file mode 100644 index 0000000..ebdd628 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_vip_event/build.hpp @@ -0,0 +1 @@ +build=826; diff --git a/Server/@epochhive/addons/epoch_server_vip_event/config.cpp b/Server/@epochhive/addons/epoch_server_vip_event/config.cpp new file mode 100644 index 0000000..d694edc --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_vip_event/config.cpp @@ -0,0 +1,38 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Server Event (DynamicDebris) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_vip_event/config.cpp +*/ + +#define _ARMA_ + +class CfgPatches { + class A3_server_vip_event { + requiredVersion = 0.1; + requiredAddons[] = {"A3_server_events"}; + #include "build.hpp" + }; +}; + +// import settings +class CfgEpochServerEvents +{ + class VIP { + delay = 900; // delay in seconds between executions , + script = "\epoch_server_vip_event\EpochEvents\event1.sqf"; // script: name or full path if usePrefix is set to 0. + runOnStart = 0; // runOnStart: 0 normal delay, 1 = run script at startup. + usePrefix = 0; // usePrefix: 0 = use full file path, 1 = pre/postfix path (use if file is inside epoch settings pbo EpochEvents folder), 2 = pre/postfix path (use if file inside epoch events pbo EpochEvents folder). + runNumTimes = -1; // runNumTimes: 0 = disabled, 1+ = number of times to execute before removing event, -1 = no limit. + input[] = {"ItemBriefcaseGold100oz"}; // array input to execVM at time of run and accessed with _this inside of script. + disallowedWorlds[] = {"VR"}; + }; +}; diff --git a/Server/@epochhive/addons/epoch_server_vip_event/license.txt b/Server/@epochhive/addons/epoch_server_vip_event/license.txt new file mode 100644 index 0000000..35440e4 --- /dev/null +++ b/Server/@epochhive/addons/epoch_server_vip_event/license.txt @@ -0,0 +1,9 @@ +Epoch Mod for Arma 3 +http://epochmod.com +by Epoch Mod Team +https://github.com/EpochModTeam/Epoch + +The contents of this pbo are under the following license: +http://www.bistudio.com/community/licenses/arma-public-license-share-alike + +Keep this file and file headers with attribution intact for proper use. \ No newline at end of file diff --git a/Server/@epochhive/addons/epoch_server_vip_event/treeView.txt b/Server/@epochhive/addons/epoch_server_vip_event/treeView.txt new file mode 100644 index 0000000..771da4f Binary files /dev/null and b/Server/@epochhive/addons/epoch_server_vip_event/treeView.txt differ diff --git a/Server/@epochhive/epochah.hpp b/Server/@epochhive/epochah.hpp new file mode 100644 index 0000000..fe66b47 --- /dev/null +++ b/Server/@epochhive/epochah.hpp @@ -0,0 +1,133 @@ +// Anti Hack +antihack_Enabled = "true"; // built-in Anti-Hack +antihack_maxTravelDistance = 30; // anti-teleport max travel distance +antihack_TPcenterDistance = 30; // anti-teleport distance from start +antihack_cfgPatchesCheck = "true"; // cfgPatches (AddOn Check) +antihack_PVSPrefix = "EPAH_"; // used to help whitelist pveh variables in BE without BEC and watchdog, leave blank to use no prefix. +antihack_cfgPatchesMode[] = {2}; // 0 == BAN - 1 = LOG, 2 = KICK +antihack_ahInitAuthCfg[] = {0,180}; // 0 == BAN - 1 = LOG, 60 = ban or log if anti hack is not started in 180 seconds +antihack_whitelistedCfgPatches[] = {}; // +antihack_banReason = "EpochMod Autoban"; +antihack_kickReason = "EpochMod Autokick"; +antihack_banReasons[] = { + "Mod mismatch, check that the mods you have enabled match server." +}; +antihack_banDuration = 5; // Default 5 minute ban. -1 = permanent ban. +antihack_kickReasons[] = { + "Mod mismatch, check that the mods you have enabled match server." +}; +antihack_checkFilesNew[] = { //script check, leave it blank to disable it + {"epoch_code\compile\setup\EPOCH_clientInit.sqf", "EPOCH_clientInit"}, + {"epoch_code\compile\EPOCH_onEachFrame.sqf", "EPOCH_onEachFrame"}, + {"epoch_code\compile\setup\EPOCH_client_rejectPlayer.sqf", "EPOCH_client_rejectPlayer"}, + {"epoch_code\compile\setup\EPOCH_clientRespawn.sqf", "EPOCH_clientRespawn"} +}; +antihack_addActionCheck = "true"; // false to disable addAction checks +antihack_antiTeleportCheck = "true"; // false to disable antiTeleport checks +adminMenu_Owner[] = {}; +adminMenu_OwnerSetting[] = { + "ESP-PLAYER", + "ESP-VEHICLE", + "ESP-LOOT", + //"OLD-ESP", + //"OLD-MAP", + "PLAYER-TELEPORT", + "MAP-TELEPORT", + "INFRONT-TELEPORT", + "MAP-PLAYER", + "MAP-CORPSE", + "MAP-LOOT", + "MAP-ANIMALS", + "MAP-VEHICLE", + "MAP-AI", + "MAP-TRADER", + "MAP-BASEBUILDING", + "TARGET-HEAL", + "TARGET-AMMO", + "TARGET-KILL", + "TARGET-CRYPTO", + "TARGET-VEHICLEREPAIR", + "VEHICLEFLIP", + "BANPANNEL", + "SPAWN-MENU", + "FREE-CAM", + "INVISIBLE", + // "SPAWNLOOT", + "GODMODE", + "HEAL", + "VEHICLEREPAIR" +}; + +adminMenu_High[] = {}; +adminMenu_HighSetting[] = {"PLAYER-TELEPORT","MAP-TELEPORT","TARGET-HEAL","TARGET-AMMO","TARGET-KILL","VEHICLEFLIP","BANPANNEL"}; + +adminMenu_Low[] = {}; +adminMenu_LowSetting[] = {"PLAYER-TELEPORT","MAP-TELEPORT","TARGET-HEAL"}; + +adminMenu_BanReasons[] = {"Traderzone","Hacking","Glitch","Combat Log"}; +adminMenu_cryptoCfg[] = {2500,1000,500,100,50,-1000}; +//You can find the Key Codes here: https://community.bistudio.com/wiki/DIK_KeyCodes#F1..15 +adminMenu_menuKey = 0x3B; +adminMenu_infrontTeleport = 0x06; +adminMenu_JumpUp = 0x05; + +/* +AH CONFIG README + +adminMenu_Owner[] = { + {"STEAMID64","ADMINNAME1"}, + {"STEAMID64","ADMINNAME2"}, + {"STEAMID64","ADMINNAME3"} //<- No comma on the last entry +}; +adminMenu_High[] = { + {"STEAMID64","ADMINNAME4"}, + {"STEAMID64","ADMINNAME5"}, + {"STEAMID64","ADMINNAME6"} //<- No comma on the last entry +}; +adminMenu_Low[] = { + {"STEAMID64","ADMINNAME7"}, + {"STEAMID64","ADMINNAME8"}, + {"STEAMID64","ADMINNAME9"} //<- No comma on the last entry +}; + +ADMINNAME will be used for the Admin log instead of in-game name. + +Available Settings: +"PLAYER-TELEPORT" => Teleport Admin To Player and Player To Admin +"MAP-TELEPORT" => Click on Map to Teleport +"INFRONT-TELEPORT" => Teleport you infront +"FREE-CAM" => Free flying Cam +"INVISIBLE" => Make Playermodel invisible but other player can still hear your steps + +"GODMODE" => Godmode for yourself which heal you as well +"HEAL" => Heal yourself +"VEHICLEREPAIR" => Repeair the vehicle you're looking on, or be inside + +"MAP-PLAYER" => Player Marker +"MAP-CORPSE" => Corpse (Dead Player etc.) Marker +"MAP-LOOT" => Loot Marker +"MAP-VEHICLE" => Vehicle Marker +"MAP-AI" => AI Marker +"MAP-BASEBUILDING" => Base Building Marker + +"ESP-PLAYER" => 3D ESP for Player +"ESP-VEHICLE" => 3D ESP for Vehicles +"ESP-LOOT" => 3D ESP for Loot Objects + + +"OLD-ESP" => Old 3D ESP +"OLD-MAP" => Old Map Marker + +"TARGET-CRYPTO" => Give crypto to target +"TARGET-HEAL" => Heal Target +"TARGET-AMMO" => Give Target Ammo +"TARGET-KILL" => Kill Target +"TARGET-VEHICLEREPAIR" => Repair the Vehicle if target is inside of a vehicle + +"VEHICLEFLIP" => Flip Vehicle +"BANPANNEL" => Access to Banpannel +"SPAWNLOOT" => Spawn Loot in Buildings (within 25m) + +"SPAWN-MENU" => Access to Spawn Menu + +*/ diff --git a/Server/@epochhive/epochconfig.hpp b/Server/@epochhive/epochconfig.hpp new file mode 100644 index 0000000..b059370 --- /dev/null +++ b/Server/@epochhive/epochconfig.hpp @@ -0,0 +1,227 @@ +serverRestart = "false"; // true sends #shutdown command to server after the time specified in ForceRestartTime +forceRestartTime = 14400; // 4 hour restarts + +// Time based + StaticDateTime[] = {}; // {0,0,0,8,0} would forces the server to start at 8am each time it is started while allowing the year, month and day to stay real time. Any values left at 0 will result in no change. + timeDifference = 0; // Server uses real time this will allow you to offset just the hour. + timeMultiplier = 4; // Sets a time multiplier for in-game time. The command range is now capped at 0.1 - 120 to avoid performance problems. + +// Loot (Check CfgBuildingLootPos.hpp in mission file for more settings) + lootMultiplier = 1; // 1 = normal loot multiplier. This controls how much loot can payout per loot container. + UseLootHelper = "true"; // GroundLoot will get a visible sphere for better loot identification + +// Events + WeatherChances[] = { + 0.7, // Sun + 0.2, // Mid + 0.05, // Rain + 0.05 // Rain+ + }; + events[] = { + { + 3600, // SECOND , + "CarnivalSpawner", // EVENT + 0, //INIT 1 = run script at startup or 0 normal delay + 2, //PREPOSTFIX 1 = (epoch_settings pbo) 2 = (epoch_events pbo) 0 = use full file path + -1, //RUNNUMTIMES -1 infinite + {}, //execVM payload + {"VR"} //disallowed worlds + }, + // { 1800, "PaydayEvent", 0, 2}, + // { 1200, "MessageServer", 0, 2}, + { 120, "FastNights", 0 , 2, -1, {48,4} ,{"VR"}}, // TimeMulti Nighttime = 48 / TimeMulti Daytime = 4 + { 1200, "HeliCrash", 0 , 2, -1, {} ,{"VR"}}, + { 2700, "AirDrop", 0 , 2, -1, {} ,{"VR"}}, + { 2400, "EarthQuake", 0 , 2, -1, {} ,{"VR"}}, + { 2700, "Satellite", 0 , 2, -1, {} ,{"VR"}}, + { 900, "ChangeWeather", 1 , 2, -1, {} ,{"VR"}}, + { 1200, "ContainerSpawner", 0 , 2, -1, {} ,{"VR"}}, + { 1440, "GardenManager", 0 , 2, -1, {} ,{"VR"}}, + { 1440, "SolarChargerManager", 0 , 2, -1, {} ,{"VR"}}, + { 900, "MoneyDrop", 0 , 2 , -1, {} ,{"VR"}}, + { 300, "PlantSpawner", 0 , 2 , -1, {} ,{"VR"}} //No comma on last Entry + }; + +// Antagonists + antagonistChancePDeath = 0.33; //33% chance when player was killed from a other player (selfkill doesn't count) + +// Player Related + cloneCost = 100; // debt incurred on player death + MaxBankDebitforTrade = -50000; // If Player has less money on Bank, Crypto from Trade goes directly to Bank instead to Player + +// Default Loadout + defaultUniformFemale = "U_Test_uniform"; + defaultVestFemale = "V_F41_EPOCH"; + defaultUniformMale = "U_Test1_uniform"; + defaultVestMale = "V_41_EPOCH"; + defaultGoggles = ""; + defaultHeadgear = ""; + defaultBackpack = ""; + defaultprimaryWeapon[] = {}; // {"arifle_MX_pointer_F","","acc_pointer_IR","",{"30Rnd_65x39_caseless_mag",29},{},""}; + defaultsecondaryWeapon[] = {}; // {"launch_NLAW_F","","","",{"NLAW_F",1},{},""}; + defaulthandgunWeapon[] = {}; // {"hgun_P07_F","","","",{"16Rnd_9x21_Mag",16},{},""}; + defaultuniformItems[] = {}; // {{"FAK",1},{"30Rnd_65x39_caseless_mag",2,30},{"Chemlight_green",1,1}}; + defaultvestItems[] = {}; // {{"30Rnd_65x39_caseless_mag",3,30},{"16Rnd_9x21_Mag",2,16},{"SmokeShell",1,1},{"SmokeShellGreen",1,1},{"SmokeShellBlue",1,1},{"SmokeShellOrange",1,1},{"Chemlight_green",1,1}}; + defaultbackpackItems[] = {}; // {{"Medikit",1},{"FAK",10},{{"hgun_P07_F","","","",{"16Rnd_9x21_Mag",16},{},""},1}}; + defaultassignedItems[] = {}; // {"Rangefinder","","","",{},{},""} + defaultlinkedItems[] = { + "ItemMap", // "ItemMap" + "", // "ItemGPS" or "ItemGeigerCounter_EPOCH", + "", // "EpochRadio0" through "EpochRadio9" + "", // "ItemCompass" + "", // "ItemWatch" + "" // "NVG_EPOCH" or "radiation_mask_epoch" + }; + + UseCustomTextures = "false"; // if true, Vehicles and Building parts textures will be saved and loaded to the DB (Paintshop) + +// vehicles - Max vehicle slots is calculated from per vehicle limits below. Warning! Higher the number lower the performance. + immuneIfStartInBase = "true"; // Protect vehicles from damage in bases until first unlocked after restart + ReservedVehSlots = 50; // Reserved Vehicle Slots (only needed, if you manually spawn in additional Vehicles - AdminTool / Blackmarket...) + disableAutoRefuel = "false"; // Removes auto refuel from all buildings at server startup. + disableFuelNearPlots = "false"; // Removes auto refuel in PlotPole-Ranges at server startup. + VehLockMessages = "true"; // Give players a hint, that the Vehicle is locked / unlocked + removevehweapons[] = { // remove these Weapons from spawned Vehicles + "missiles_DAR","gatling_30mm","gatling_20mm","missiles_DAGR","cannon_30mm_Plane_CAS_02_F","Missile_AA_03_Plane_CAS_02_F","Missile_AGM_01_Plane_CAS_02_F","Rocket_03_HE_Plane_CAS_02_F", + "Rocket_03_AP_Plane_CAS_02_F","Bomb_03_Plane_CAS_02_F","Bomb_04_Plane_CAS_01_F","Rocket_04_AP_Plane_CAS_01_F","Rocket_04_HE_Plane_CAS_01_F","Missile_AGM_02_Plane_CAS_01_F","Missile_AA_04_Plane_CAS_01_F", + "Gatling_30mm_Plane_CAS_01_F","GBU12BombLauncher_Plane_Fighter_03_F","missiles_ASRAAM","missiles_SCALPEL","Twin_Cannon_20mm","missiles_Zephyr","rockets_skyfire","gatling_30mm_vtol_02" + }; + removevehmagazinesturret[] = { // Remove these Magazines from the given Turret from spawned Vehicles + {"24Rnd_missiles",{-1}}, + {"200Rnd_40mm_G_belt",{0}} + }; + disableVehicleTIE = "true"; + ReplaceCarService = "true"; // Replace all "Land_CarService_F" with "paintshop" on the Map on Server Start + PaintShopIcons = "false"; // Create MapIcons for PaintShops + +// BaseBuilding + StorageSlotsLimit = 1500; // Max storage slots allowed. Warning! Higher the number lower performance. + BuildingSlotsLimit = 1500; // Max building slots allowed. Warning! Higher the number lower performance. + AutoLockStorages = "false"; // Auto Lock Lockable Storages on Server Start / Restart (if true, unlocked storages will get locked after restarts) + UseIndestructible = "false"; // Enable / Disable Indestructible BaseObjects + IndestructibleBaseObjects[] = { // Can be Names or Classes + "Constructions_static_F", + "Buildable_Storage", + "PlotPole_EPOCH", + "LockBox_EPOCH", + "Safe_EPOCH" + }; + ExceptedBaseObjects[] = { // Not Indestructible, also if in a Class of IndestructibleBaseObjects + "Spike_TRAP_EPOCH", + "Metal_TRAP_EPOCH", + "CinderWallGarage_EPOCH", + "WoodLargeWallDoorL_EPOCH", + "WoodLargeWallDoor_EPOCH", + "WoodWall4_EPOCH" + }; + UseDeSimulateObjects = "true"; // Disable Simulation for specifed Base Objects + DeSimulateObjects[] = { // Base Objects to disable Simulation. Can be Names or Classes + "PlotPole_EPOCH", + "PlotPole_L_EPOCH", + "PlotPole_XL_EPOCH", + "WoodFoundation_EPOCH","Foundation_EPOCH", + "WoodQuarterFloor_EPOCH","WoodHalfFloor_EPOCH","WoodFloor_EPOCH", + "MetalQuarterFloor_EPOCH","MetalHalfFloor_EPOCH","MetalFloor_EPOCH", + "CinderQuarterFloor_EPOCH","CinderHalfFloor_EPOCH","CinderFloor_EPOCH", + "WoodLargeWall_EPOCH","WoodLargeWallDoorway_EPOCH","WoodLargeWallCor_EPOCH","WoodWall1_EPOCH","WoodWall2_EPOCH","WoodWallWindow_EPOCH", + "CinderWallHalf_EPOCH","CinderWall_EPOCH", + "WoodRamp_EPOCH","WoodStairs_EPOCH","WoodStairs2_EPOCH", + "SolarGen_EPOCH","SandbagWall_EPOCH","BarbedWire_EPOCH","Sink_EPOCH","BagBunker_EPOCH","WaterPump_EPOCH","Scaffolding_EPOCH","SunShade_EPOCH","WatchTower_EPOCH","SandbagWallLong_EPOCH","TankTrap_EPOCH" + }; + ExceptedDeSymObjects[] = { // Not Desymulated, also if in a Class of DeSimulateObjects + }; + DisableDoorsOnObj[] = { // Add special Vars to disable Doors (no effect in Epoch, but 3rd party addons like enhanced movement) + // {"BuildingClass", {{"Variable1",Value1},{"Variable2",Value2}, ... } }, + {"WoodLargeWallDoorL_EPOCH", {{"bis_disabled_door",1} } }, + {"WoodWall4_EPOCH", {{"bis_disabled_door",1} } }, + {"CinderWallDoorwHatch_EPOCH", {{"bis_disabled_door",1},{"bis_disabled_hatch",1} } }, + {"WoodStairs3_EPOCH", {{"bis_disabled_bars_long",1} } } + }; + +// Dynamic Simulation System + enableDynamicSimulationSystem = "true"; // enable / disable the complete dynamic simulation system + //Individual toggles for testing + vehicleDynamicSimulationSystem = "true"; // type car, air, boat + playerDynamicSimulationSystem = "true"; // clients + baseDynamicSimulationSystem = "true"; // plot pole and base pieces + // Distances and Coef + isMovingCoefValue = 2; + groupDynSimDistance = 500; + vehicleDynSimDistance = 350; + emptyVehicleDynSimDistance = 250; + propDynSimDistance = 50; + +// Traders + taxRate = 0.1; // controls the price increase for purchases +/* + starterTraderItems[] = { // Starter Items for fresh spawned trader first array is classnames second is quantity. + {"ItemSodaBurst","meatballs_epoch","MortarBucket","CinderBlocks","VehicleRepair","CircuitParts","ItemCorrugated","PartPlankPack","ItemRock","ItemRope","ItemStick"}, + {5,5,5,5,5,5,5,5,5,5,5} + }; +*/ + starterTraderItems[] = { // Starter Items for fresh spawned trader (old / above variant is also still working!) + {"ItemSodaBurst",5}, + {"meatballs_epoch",5}, + {"MortarBucket",5}, + {"CinderBlocks",5}, + {"VehicleRepair",5}, + {"CircuitParts",5}, + {"ItemCorrugated",5}, + {"PartPlankPack",5}, + {"ItemRock",5}, + {"ItemRope",5}, + {"ItemStick",5} + }; + + NPCSlotsLimit = 30; // Max number of traders static or dynamic. Warning! Higher the number lower performance. + forceStaticTraders = "true"; // disables traders moving from work to home + TraderGodMode = "false"; // If true, Trader can not be killed by Players + storedVehicleLimit = 15; // Vehicles more than x stored in ALL Traders will automatically be deleted on Restart. + StaticTraderItemPurge[] = {100,15}; // {ItemCount,ReducePercent} - If a static trader have more than x different items, on restart the items will be reduced by y percent + DynamicTraderRespawnCount = 100; // If a dynamic Trader have more than x different Items, he will respawn on another Spot (with start Items) + TraderItemCountPerItem[] = {50,5}; // If the Trader has more than x pieces of an Item, it will be reduced to y pieces (on Restart) + TraderItemsDeleteInstant[] = { // List of Items, that will be deleted from Trader instant after sell + // "ItemVehDoc1", + // "ItemVehDoc2", + // "ItemVehDoc3", + // "ItemVehDoc4" + }; + TraderItemsDeleteRestart[] = { // List of Items, that will be deleted from Trader on Restart + // "ItemLockbox", + // "ItemSafe", + // "ItemGoldBar10oz" + }; + TraderDeco = "true"; // If true, Traders get around Halloween / Christmas some seasonal decoration + +// Spawntables + forcedVehicleSpawnTable = ""; // leave blank for default. Options: "allowedVehiclesList","allowedVehiclesList_CUP","allowedVehiclesList_MAD","allowedVehiclesList_MADCUP" + forcedLootSpawnTable = ""; // leave blank for default. Options: "CfgLootTable","CfgLootTable_CUP","CfgLootTable_MAD","CfgLootTable_MADCUP" + +// Markers + showEarthQuakes = "true"; // show mineral viens caused by earthquakes + showSatellites = "true"; // show crashed Satellites + showShippingContainers = "true"; // Show location of events based loots (plants, shipping container, Carnival) + SHOW_TRADERS = "true"; // Show locations of traders + SHOW_JAMMERS = "false"; // Shows location of base jammers + SHOW_BOATLOOT = "true"; // Shows the location of shipwreck loot + DEBUG_VEH = "false"; // DEBUG ONLY used to debug spawing of vehicles + +// Hive Related + vehicleLockTime = "1800"; // Controls how many seconds it takes to allow another person/group to unlock vehicle (outside your own PlotPole Range). + vehicleLockTimeHome = "259200"; // Controls how many seconds it takes to allow another person/group to unlock vehicle (inside your own PlotPole Range). + expiresBuilding = "604800"; // expiration date in seconds for buildings + expiresPlayer = "2592000"; // expiration date in seconds for players + expiresBank = "7776000"; // expiration date in seconds for players bank + expiresVehicle = "604800"; // expiration date in seconds for vehicles + expiresAIdata = "604800"; // expiration date in seconds for NPC Trader inventory + expiresCommunityStats = "7776000"; // expiration date in seconds for players community stats + expiresPlayerTopStats = "604800"; // expiration date in seconds for players listed in TopStats - remove inactive players from TopStats, but will get in again on next login + +// Admin Features + hiveAdminCmdExec = "false"; // true = enables extra (To Be Released) feature to allow execution of code via hive. + hiveAdminSavePlayerList = "true"; // true = enables saving of playerUID array to hive value PLAYERS:#InstanceID. + hiveAdminCmdTime = 5; // how many seconds between each command queue call. + +// DEBUG + useOldLoadVehicles = "false"; + enableUnitTestOnStart = 1; // enable extra debug for database calls. 1 = enabled. diff --git a/Server/DB/start-redis.cmd b/Server/DB/start-redis.cmd new file mode 100644 index 0000000..d6a6088 --- /dev/null +++ b/Server/DB/start-redis.cmd @@ -0,0 +1 @@ +START redis-server.exe redis.conf \ No newline at end of file diff --git a/Server/Tools/log-rotator.cmd b/Server/Tools/log-rotator.cmd new file mode 100644 index 0000000..04fe8c0 --- /dev/null +++ b/Server/Tools/log-rotator.cmd @@ -0,0 +1,117 @@ +@echo off + +:::::::::::::: CONFIG :::::::::::::::::: + +:: Set your Arma3 Epoch Base installation directory. LEAVE OFF THE ENDING \ +set arma3srvpath=C:\Program Files (x86)\Steam\SteamApps\common\Arma 3 + +:: Set your Default server profile name. This is the name of the directory that stores your server.cfg +:: This will be used in the case that you don't launch this script without the server param. +:: Example: SC, US6, Chicago13, ect +:: DEFAULTPROFILE +set srvname=SC +:: Delete Original log files after they have been rotated? This keeps your logs more organized and saves space. +:: This will not work unless the server is stopped first. This option works best set to 1 when using FireDaemon's Pre/Post Service tab +set deloriglogs=1 + +::::::::::: ADVANCED CONFIG :::::::::::: +:: Don't touch anything below this point unless you know what your doing. + +:: Setting Server Profile to Use +IF "%1"=="" ( +set servername=%srvname% +) else ( +set servername=%1 +) + +TITLE ArmaIII Epoch %servername% Server Log Rotater + +:: Set Debug Mode +set debug=0 +:: Set Debug Timeout in seconds +set dbsecs=10 + +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +::::::::::::::::::::::::::: STOP EDITING :::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +:: Display Debug output +if %debug% == 1 ( +echo Server Name = %servername% +echo ArmaIII Server Path = "%arma3srvpath%" +timeout %dbsecs% +) + +:: Set Time and Date +SET HOUR=%time:~0,2% +SET dtStamp9=%date:~-4%%date:~4,2%%date:~7,2%_0%time:~1,1%%time:~3,2%_%time:~6,2% +SET dtStamp24=%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%_%time:~6,2% +::Make Date Stamp +if "%HOUR:~0,1%" == " " (SET dtStamp=%dtStamp9%) else (SET dtStamp=%dtStamp24%) +ECHO Todays Date and time (%date%)(%time%) / %dtStamp% +if %debug% == 1 ( +timeout %dbsecs% +) + +echo (%date%) (%time%) Starting Log Rotation. + +:: Make the Rotated Log Directorys +if exist "%arma3srvpath%\%servername%\RotatedLogs" goto maketsdir +mkdir "%arma3srvpath%\%servername%\RotatedLogs" +:maketsdir +if exist "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%" goto makebedir +mkdir "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%" +:makebedir +if exist "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye" goto rotatelogs +mkdir "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye" + +if exist "%arma3srvpath%\DBbackups\RotatedLogs\%dtStamp%\DBbackups" goto rotatelogs +mkdir "%arma3srvpath%\DBbackups\RotatedLogs\%dtStamp%\DBbackups" + +:rotatelogs +:: Starting Log Rotation. If there are any other logs, just follow the format below, and make sure to NOT touch any of the varibles. +copy "%arma3srvpath%\%servername%\BattlEye\scripts.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\scripts.log" +copy "%arma3srvpath%\%servername%\BattlEye\createvehicle.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\createvehicle.log" +copy "%arma3srvpath%\%servername%\BattlEye\deletevehicle.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\deletevehicle.log" +copy "%arma3srvpath%\%servername%\BattlEye\attachto.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\attachto.log" +copy "%arma3srvpath%\%servername%\BattlEye\publicvariable.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\publicvariable.log" +copy "%arma3srvpath%\%servername%\BattlEye\remoteexec.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\remoteexec.log" +copy "%arma3srvpath%\%servername%\BattlEye\selectplayer.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\selectplayer.log" +copy "%arma3srvpath%\%servername%\BattlEye\setpos.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\setpos.log" +copy "%arma3srvpath%\%servername%\BattlEye\setvariable.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\setvariable.log" +copy "%arma3srvpath%\%servername%\BattlEye\setdamage.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\setdamage.log" +copy "%arma3srvpath%\%servername%\BattlEye\addmagazinecargo.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\addmagazinecargo.log" +copy "%arma3srvpath%\%servername%\BattlEye\addbackpackcargo.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\addbackpackcargo.log" +copy "%arma3srvpath%\%servername%\BattlEye\addweaponcargo.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\addweaponcargo.log" +copy "%arma3srvpath%\%servername%\BattlEye\mpeventhandler.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\BattlEye\mpeventhandler.log" +::copy "%arma3srvpath%\dump.rdb" "%arma3srvpath%\DBbackups\RotatedLogs\%dtStamp%\DBbackups\dump.rdb" +copy "%arma3srvpath%\DB\dump.rdb" "%arma3srvpath%\DBbackups\RotatedLogs\%dtStamp%\DBbackups\dump.rdb" +copy "%arma3srvpath%\%servername%\A3Master_*.log" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\A3Master_*.log" +copy "%arma3srvpath%\%servername%\arma3server_*.rpt" "%arma3srvpath%\%servername%\RotatedLogs\%dtStamp%\arma3server_*.rpt" + + +echo (%date%) (%time%) Logs are backed up now... +echo (%date%) (%time%) Removing original log files. +del /Q /F "%arma3srvpath%\%servername%\BattlEye\scripts.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\createvehicle.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\attachto.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\deletevehicle.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\selectplayer.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\publicvariable.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\remoteexec.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\setpos.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\setvariable.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\addmagazinecargo.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\addbackpackcargo.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\addweaponcargo.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\mpeventhandler.log" +del /Q /F "%arma3srvpath%\%servername%\BattlEye\setdamage.log" +del /Q /F "%arma3srvpath%\%servername%\A3Master_*.log" +del /Q /F "%arma3srvpath%\%servername%\arma3server_*.rpt" + +if %debug% == 1 ( +timeout %dbsecs% +) + +:: Done +exit \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/$PREFIX$ b/Server/mpmissions/epoch.Bornholm/$PREFIX$ new file mode 100644 index 0000000..b7d5379 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/$PREFIX$ @@ -0,0 +1 @@ +\ \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/config.bin b/Server/mpmissions/epoch.Bornholm/config.bin new file mode 100644 index 0000000..478edfc Binary files /dev/null and b/Server/mpmissions/epoch.Bornholm/config.bin differ diff --git a/Server/mpmissions/epoch.Bornholm/description.ext b/Server/mpmissions/epoch.Bornholm/description.ext new file mode 100644 index 0000000..a076c83 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/description.ext @@ -0,0 +1,2 @@ +// Epoch Survival Gamemode +#include "epoch_config\sandbox_config.hpp" diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/System/EPOCH_zombie_brain.fsm b/Server/mpmissions/epoch.Bornholm/epoch_code/System/EPOCH_zombie_brain.fsm new file mode 100644 index 0000000..15d02b8 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/System/EPOCH_zombie_brain.fsm @@ -0,0 +1,877 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"brainz",0,250,-25.000000,75.000000,75.000000,125.000000,0.000000,"brainz"}; +item1[] = {"_",8,218,125.000000,-175.000000,225.000000,-125.000000,0.000000,""}; +item2[] = {"instinct",2,250,125.000000,-250.000000,225.000000,-200.000000,0.000000,"instinct"}; +item3[] = {"check",4,218,275.000000,-250.000000,375.000000,-200.000000,5.000000,"check"}; +item4[] = {"pre_dispose",2,4346,-75.000000,-100.000000,25.000000,-50.000000,0.000000,"pre dispose"}; +item5[] = {"dispose_1",4,218,-75.000000,-275.000000,25.000000,-225.000000,100.000000,"dispose"}; +item6[] = {"wait_dispose",4,218,-100.000000,-25.000000,0.000000,25.000000,0.000000,"wait" \n "dispose"}; +item7[] = {"reset_vars",2,250,125.000000,-100.000000,225.000000,-50.000000,0.000000,"reset vars"}; +item8[] = {"do_attack",4,218,550.000000,-100.000000,650.000000,-50.000000,60.000000,"do attack"}; +item9[] = {"dispose",4,218,-75.000000,-200.000000,25.000000,-150.000000,200.000000,"dispose"}; +item10[] = {"imaginary_target",4,218,600.000000,-150.000000,700.000000,-100.000000,70.000000,"imaginary" \n "target"}; +item11[] = {"move",4,218,375.000000,-375.000000,475.000000,-325.000000,60.000000,"move"}; +item12[] = {"checking_status",2,250,400.000000,-175.000000,500.000000,-125.000000,0.000000,"checking status"}; +item13[] = {"smell",4,218,475.000000,-325.000000,575.000000,-275.000000,90.000000,"smell"}; +item14[] = {"final_checks___r",4,218,375.000000,-75.000000,475.000000,-25.000000,10.000000,"final" \n "checks / resets"}; +item15[] = {"done",4,218,275.000000,-100.000000,375.000000,-50.000000,100.000000,"done"}; +item16[] = {"moan",4,218,300.000000,-400.000000,400.000000,-350.000000,70.000000,"moan"}; +item17[] = {"Wait_random",4,218,25.000000,-25.000000,125.000000,25.000000,10.000000,"Wait random"}; +item18[] = {"end",1,250,-150.000000,75.000000,-50.000000,125.000000,0.000000,"end"}; +item19[] = {"attack",4,218,-50.000000,-350.000000,50.000000,-300.000000,90.000000,"attack"}; +item20[] = {"stuck",4,218,475.000000,-50.000000,575.000000,0.000000,30.000000,"stuck"}; +item21[] = {"pre_vars___check",4,218,375.000000,-300.000000,475.000000,-250.000000,95.000000,"pre vars / checks"}; +item22[] = {"sight___target",4,218,550.000000,-275.000000,650.000000,-225.000000,85.000000,"sight / target"}; +item23[] = {"hearing___target",4,218,600.000000,-225.000000,700.000000,-175.000000,80.000000,"hearing / target"}; +item24[] = {"spin",2,250,-50.000000,-425.000000,50.000000,-375.000000,0.000000,"spin"}; +item25[] = {"wait",4,218,75.000000,-425.000000,175.000000,-375.000000,0.000000,"wait"}; +item26[] = {"scream",4,218,200.000000,-425.000000,300.000000,-375.000000,80.000000,"scream"}; +item27[] = {"____FAKE____",9,0,0.000000,0.000000,5135053892148252000000000000000000.000000,0.000000,0.000000,"____FAKE____"}; +link0[] = {0,17}; +link1[] = {1,2}; +link2[] = {2,3}; +link3[] = {2,5}; +link4[] = {2,9}; +link5[] = {2,11}; +link6[] = {2,16}; +link7[] = {2,19}; +link8[] = {2,26}; +link9[] = {3,12}; +link10[] = {4,6}; +link11[] = {5,2}; +link12[] = {6,18}; +link13[] = {7,1}; +link14[] = {7,9}; +link15[] = {8,12}; +link16[] = {9,4}; +link17[] = {10,12}; +link18[] = {11,2}; +link19[] = {12,8}; +link20[] = {12,13}; +link21[] = {12,14}; +link22[] = {12,15}; +link23[] = {12,20}; +link24[] = {12,21}; +link25[] = {12,22}; +link26[] = {12,23}; +link27[] = {13,12}; +link28[] = {14,12}; +link29[] = {15,7}; +link30[] = {16,2}; +link31[] = {17,7}; +link32[] = {19,24}; +link33[] = {20,12}; +link34[] = {21,12}; +link35[] = {22,12}; +link36[] = {23,12}; +link37[] = {24,25}; +link38[] = {25,2}; +link39[] = {26,2}; +link40[] = {27,10}; +globals[] = {0.000000,0,0,0,0,640,480,1,267,6316128,1,-268.969421,732.515686,320.848328,-611.003845,978,884,1}; +window[] = {2,-1,-1,-1,-1,733,208,1233,208,3,996}; +*//*%FSM*/ +class FSM +{ + fsmName = "zombie"; + class States + { + /*%FSM*/ + class brainz + { + name = "brainz"; + itemno = 0; + init = /*%FSM*/"_zombie = _this select 0;" \n + "_sBomb = _this select 1;" \n + "_head = objNull;" \n + "_lastAlert = diag_tickTime;" \n + "_trgt = player;" \n + "" \n + "//Defaults" \n + "_fsmPath = ""epoch_code\system"";" \n + "_zombie setBehaviour ""CARELESS"";" \n + "_zombie setUnitPos ""UP""; " \n + "_trgtArr = [""Epoch_Male_F"",""Epoch_Female_F"",""LandVehicle"",""Ship"",""Air"",""Tank""];" \n + "" \n + "_trgt = player;" \n + "_t = diag_tickTime;" \n + "_zedPos = getPosATL _zombie;" \n + "" \n + "//Behaviour Vars" \n + "_attackDist = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""attackDist"");" \n + "_groanTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""groanTrig"");" \n + "_zDisposeRange = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""disposeRange"");" \n + "_sHideTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""hideLevel""); " \n + "_moveTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""chargeLevel""); " \n + "_sHardness = floor (random 6) max 1;" \n + "_checkFreq = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""reflexSpeed"");" \n + "_welcomeWait = random 4;" \n + "_config = 'CfgEpochClient' call EPOCH_returnConfig;" \n + "_zSmell = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""smell"");" \n + "_zSight = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""sight"");" \n + "_zHear = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""hearing"");" \n + "_zMem = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""memory"");" \n + "_zMoans = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""moans"");" \n + "_zScreams = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""screams"");" \n + "" \n + "//Smell" \n + "_smellDist = _zSmell select 0;" \n + "_smellCoeff = _zSmell select 1;" \n + "" \n + "//Sight" \n + "_sightDist = _zSight select 0;" \n + "_sightCoeff = _zSight select 1;" \n + "_sight = [_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _trgt];" \n + "" \n + "//Hearing" \n + "_hearDist = _zHear select 0;" \n + "_hearCoeff = _zHear select 1;" \n + "_zFiredNear = _zombie getVariable [""zFiredNear"",[objNull, 0]];" \n + "_shotDist = 0;" \n + "" \n + "//Memory" \n + "_memTime = _zMem select 0;" \n + "_memCoeff = _zMem select 1;" \n + "_m = _t;" \n + "_spottedPos = [0,0,0];" \n + "" \n + "//Moving" \n + "_moveTo = [0,0,0];" \n + "" \n + "//Init moveTo" \n + "_zombie moveTo _zedPos;" \n + "" \n + "//Attack" \n + "_lastAttack = _t;" \n + "_doAttack = false;" \n + "" \n + "//Sounds" \n + "_doMoan = false;" \n + "_doScream = false;" \n + "_lastMoan = _t;" \n + "" \n + "//Missions" \n + "_traderDispose = false;" \n + "" \n + "//FSM" \n + "_walkHandle = -1;" \n + "" \n + "_requestDispose = false;" \n + "_nrstTrgt = objNull;" \n + "_lowDist = 0;" \n + "_currDist = 0;" \n + "_filterBuilds = [""Land_i_Addon_03_V1_F"",""Land_Offices_01_V1_F""];" \n + "" \n + "_u = _t;" \n + "_c = _u;" \n + "_f = _c;" \n + "_h = _f;" \n + "_d2 = _h;" \n + "" \n + "" \n + "" \n + "_dirTo = 0;" \n + "_lDist = 0;" \n + "_checkEntry = """";" \n + "" \n + "_decisionMade = false;" \n + "_actionDone = false;" \n + "_zombiePos=[0,0,0];" \n + "_moveTo=[0,0,0];" \n + "_trgtPos=[0,0,0];" \n + "_hidePos = [0,0,0];" \n + "_nrPlyrs = [];" \n + "_circlePos = [0,0,0];" \n + "_behindPos = [0,0,0];" \n + "_sSide = 90;" \n + "" \n + "_vectTot = [0,0,0];" \n + "" \n + "_lastAction = """";" \n + "_maxStalkDist = 48;" \n + "_maxStalkDistPerm = 48;" \n + "_minStalkDist = 12;" \n + "_minStalkDistPerm = 12;" \n + "_doWander = false;" \n + "_callHide = false;" \n + "_callMove = false;" \n + "_callGroan = false;" \n + "" \n + "//Feeling vars" \n + "_sAnger = 50;" \n + "_sFear = 50;" \n + "_threateLevel = 0;" \n + "_addThreat = 0;" \n + "_sHit = [objNull, 0];" \n + "" \n + "_angerCoeff = random 1;" \n + "_calmAngerCoeff = 1 - _angerCoeff;" \n + "_fearCoeff = random 1;" \n + "_calmFearCoeff = 1 - _fearCoeff;" \n + "" \n + "_stuckCount = 0;" \n + "" \n + "_traderDispose = false;" \n + "" \n + "_doMove = false;" \n + "_sanityCheckDone = false;" \n + "_canSee = ([_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _trgt] >= 0.5);" \n + "_nrTrgts = [];" \n + "_threatLevel = 0;" \n + "_trgtDist = _trgt distance _zombie;" \n + "_sanityCheck = 0;" \n + "_doHide = false;" \n + "_doAttack = false;" \n + "_firedNear = 0;" \n + "" \n + "" \n + "" \n + "" \n + "//Debug - Uncomment Sounds for live" \n + "_randomGroan = {" \n + "/*" \n + "_sounds = [""sapper_groan0"",""sapper_groan1"",""sapper_groan2""];" \n + "_sound = selectRandom _sounds;" \n + "" \n + "_zombie say3D _sound;" \n + "[player, _zombie, _sound, Epoch_personalToken] remoteExec [""EPOCH_server_handle_say3D"",2];" \n + "*/" \n + "};" \n + "" \n + "_doInterrupt = {" \n + "_actionDone = true;" \n + "_criteria = ""(true)"";" \n + "};" \n + "" \n + "//DEBUG" \n + "_doDebug = false;" \n + "axeDebug = _doDebug ;" \n + "if(_doDebug)then{" \n + "axeDebug = true;" \n + "axeZed = _zombie;" \n + "_debugDo = ""START"";" \n + "_mkrName = """";" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait_random + { + itemno = 17; + priority = 10.000000; + to="reset_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _t) > _welcomeWait;"/*%FSM*/; + action=/*%FSM*/"call _randomGroan;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class instinct + { + name = "instinct"; + itemno = 2; + init = /*%FSM*/"//systemchat format[""I %1"",diag_tickTime];" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class dispose + { + itemno = 9; + priority = 200.000000; + to="pre_dispose"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doDispose || !(alive _zombie)"/*%FSM*/; + action=/*%FSM*/"if(_walkHandle < 0)then{" \n + "_walkHandle setFSMVariable [""_callDispose"", true];" \n + "};" \n + "_zombie removeAllEventHandlers ""Hit"";" \n + "_zombie removeAllEventHandlers ""FiredNear"";" \n + "//[] call EPOCH_zombieSpawn;" \n + "" \n + "_t = diag_tickTime;" \n + "" \n + "//systemChat ""Dispose/Respawn"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class dispose_1 + { + itemno = 5; + priority = 100.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(alive _zombie) || _traderDispose || _trgtDist > _zDisposeRange;"/*%FSM*/; + action=/*%FSM*/"_doDispose = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class attack + { + itemno = 19; + priority = 90.000000; + to="spin"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doAttack"/*%FSM*/; + action=/*%FSM*/"_zombie moveTo _zedPos;" \n + "_aslPos = ATLToASL _zedPos;" \n + "_trgtPos = getPosASLVisual _trgt;" \n + "_unitV = velocity _zombie;" \n + "_unitvDir = vectorDir _zombie;" \n + "_vDir = _aslPos vectorFromTo _trgtPos;" \n + "_unitvUp = vectorUp _trgt;" \n + "_lastAttack = _t;" \n + "_doAttack = false;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class scream + { + itemno = 26; + priority = 80.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doScream"/*%FSM*/; + action=/*%FSM*/"_random = selectRandom _zScreams;" \n + "playSound format [""%1"",_random];" \n + "_doScream = false;" \n + "_debugDo = ""SCREAM"";" \n + "//systemChat ""Scream"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class moan + { + itemno = 16; + priority = 70.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doMoan && diag_tickTime - _lastMoan > 8"/*%FSM*/; + action=/*%FSM*/"_random = selectRandom _zMoans;" \n + "playSound format [""%1"",_random];" \n + "_doMoan = false;" \n + "_lastMoan = _t;" \n + "_debugDo = ""SOUNDS"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class move + { + itemno = 11; + priority = 60.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_moveTo isEqualTo [0,0,0]) && moveToCompleted _zombie"/*%FSM*/; + action=/*%FSM*/"if(_walkHandle < 0)then{" \n + "_walkHandle = [""EPOCH_zombie_walking"",_fsmPath,[_zombie]] call EPOCH_fnc_dynamicFSM;" \n + "};" \n + "_walkHandle setFSMVariable [""_nextPos"", _moveTo];" \n + "_walkHandle setFSMVariable [""_deadTrgts"", _deadTrgts];" \n + "_moveTo = [0,0,0];" \n + "_debugDo = ""MOVE"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class check + { + itemno = 3; + priority = 5.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime > _u + _checkFreq"/*%FSM*/; + action=/*%FSM*/"_sanityCheck = 100;" \n + "_debugDo = ""CHECK"";" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class pre_dispose + { + name = "pre_dispose"; + itemno = 4; + init = /*%FSM*/"_nrTrgts = (_zedPos nearEntities [_trgtArr, 480]) select {isPlayer _x};" \n + "_canSee = [];" \n + "{" \n + " if !(lineIntersects [eyePos _trgt, eyePos _zombie, _zombie, _trgt]) then{" \n + " _canSee pushBack _x;" \n + " };" \n + "}forEach _nrTrgts;" \n + "if (count _canSee < 1)then{" \n + "deleteVehicle _zombie;" \n + "_t = _t + 480;" \n + "}else{" \n + "_zombie setdamage 1;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class wait_dispose + { + itemno = 6; + priority = 0.000000; + to="end"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _t > 480;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class reset_vars + { + name = "reset_vars"; + itemno = 7; + init = /*%FSM*/"//System Vars" \n + "_t = diag_tickTime;" \n + "_u = _t;" \n + "" \n + "_doLoiter = false;" \n + "_loiterType = 0;" \n + "" \n + "_doMove = false;" \n + "_moving = false;" \n + "_moveCount = 0;" \n + "_attempts = 0;" \n + "" \n + "_doGroan = false;" \n + "" \n + "" \n + "_rnd = 0;" \n + "_sWait = 0;" \n + "_doDispose = false;" \n + "_chooseTarget = false;" \n + "" \n + "_nrTrgts=[];" \n + "_doHide = false;" \n + "" \n + "//Moving" \n + "_moving = false;" \n + "" \n + "//Sight" \n + "//_spottedPos = [0,0,0];" \n + "" \n + "//Safezones" \n + "_inSafe = false;" \n + "" \n + "//Dispose" \n + "" \n + "//FSM" \n + "" \n + "" \n + "//Brain Vars" \n + "_override = false;" \n + "_criteria =""(false)"";" \n + "_criteriaMet = false;" \n + "_criteriaMetAction = nil;" \n + "_allowInterrupt = false;" \n + "_interruptReason = ""(false)"";" \n + "" \n + "_debugDo = ""RESET"";" \n + "" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class dispose + { + itemno = 9; + priority = 200.000000; + to="pre_dispose"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doDispose || !(alive _zombie)"/*%FSM*/; + action=/*%FSM*/"if(_walkHandle < 0)then{" \n + "_walkHandle setFSMVariable [""_callDispose"", true];" \n + "};" \n + "_zombie removeAllEventHandlers ""Hit"";" \n + "_zombie removeAllEventHandlers ""FiredNear"";" \n + "//[] call EPOCH_zombieSpawn;" \n + "" \n + "_t = diag_tickTime;" \n + "" \n + "//systemChat ""Dispose/Respawn"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 1; + priority = 0.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class checking_status + { + name = "checking_status"; + itemno = 12; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class done + { + itemno = 15; + priority = 100.000000; + to="reset_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck < 1" \n + ""/*%FSM*/; + action=/*%FSM*/"_debugDo = ""CHECKED"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class pre_vars___check + { + itemno = 21; + priority = 95.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 95;"/*%FSM*/; + action=/*%FSM*/"//Zed" \n + "_zedPos = getPosATL _zombie;" \n + "_zedSpeed = speed _zombie;" \n + "" \n + "//Target" \n + "_trgtDist = _trgt distance _zombie;" \n + "_trgtPos = getPosATL _trgt;" \n + "_deadTrgts = [];" \n + "" \n + "//Smell" \n + "_smellVect = [0,0,0];" \n + "_smellPos = [0,0,0];" \n + "_canSmellCount = 0;" \n + "" \n + "//Sight" \n + "_canSee = false;" \n + "_visTrgts = [];" \n + "_sightVect = [0,0,0];" \n + "_spottedVect = [0,0,0];" \n + "" \n + "//Attack" \n + "_sight = 0;" \n + "" \n + "" \n + "//Hearing" \n + "_hearVect = [0,0,0];" \n + "" \n + "//Target" \n + "_spottedVect = [0,0,0];" \n + "" \n + "//Wander - Imaginary Target" \n + "_wanderVect = [0,0,0];" \n + "" \n + "_vectTot = [0,0,0];" \n + "_vectDiv = 0;" \n + "" \n + "//EH" \n + "_zFiredNear = _zombie getVariable [""zFiredNear"",[objNull, 0]];" \n + "_shotDist = _zFiredNear select 1;" \n + "" \n + "//Memory" \n + "if(diag_tickTime - _m > _memTime)then{" \n + "_spottedPos = [0,0,0];" \n + "};" \n + "" \n + "//Safe Zones" \n + "" \n + "_restricted = nearestObjects [player, [""ProtectionZone_Invisible_F""], 30];" \n + "if !(_restricted isEqualTo []) then {" \n + "_inSafe = true;" \n + "};" \n + "" \n + "_sanityCheck = 95;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class smell + { + itemno = 13; + priority = 90.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 90 && !_moving && _smellCoeff > 0 && !_inSafe"/*%FSM*/; + action=/*%FSM*/"_nrstTrgt = objNull;" \n + "_nrTrgts = (_zedPos nearEntities [_trgtArr, _sightDist]) select {isPlayer _x};" \n + "_avPos = [0,0,0];" \n + "_upwindPos = [0,0,0];" \n + "_smellTrgtPos = [];" \n + "" \n + "{" \n + " if(alive _x)then{" \n + " _upwindPos = [_x, _smellDist, winddir] call BIS_fnc_relPos;" \n + " if(_zombie distance _upwindPos < _smellDist + 1)exitWith{" \n + " _smellTrgtPos = getPosATL _x;" \n + " _canSmellCount =_canSmellCount + 1;" \n + " };" \n + " }else{" \n + " _deadTrgts pushBack _x;" \n + " };" \n + "} forEach _nrTrgts;" \n + "" \n + "" \n + "if(_canSmellCount > 0)then{" \n + "_smellVect = _zedPos vectorDiff _smellTrgtPos;" \n + "_vectDiv = _vectDiv + 1;" \n + "};" \n + "" \n + "" \n + "_sanityCheck = 90;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class sight___target + { + itemno = 22; + priority = 85.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 85 && _sightCoeff > 0 && !_inSafe"/*%FSM*/; + action=/*%FSM*/"_nrTrgts = (_zedPos nearEntities [_trgtArr, _sightDist]) select {isPlayer _x};" \n + "_sightPos = [0,0,0];" \n + "_avPos = [0,0,0];" \n + "" \n + "_trgtCount = count _nrTrgts;" \n + "_visTrgts = [];" \n + "" \n + "if(_trgtCount > 0)then{" \n + "" \n + "" \n + "" \n + " {" \n + " _sight = [_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos (driver _x)];" \n + " if(alive _x)then{" \n + " if(_sight >= 0.62)then{" \n + " _thisPos = getPosATL _x;" \n + " _relDir = _zombie getRelDir _thisPos;" \n + " if(_relDir < 42 || _relDir > 318)then{" \n + " _visTrgts pushBack _x;" \n + " _avPos = _avPos vectorAdd _thisPos;" \n + " };" \n + " };" \n + " }else{" \n + " _deadTrgts pushBack _x;" \n + " };" \n + " } forEach _nrTrgts;" \n + "" \n + " if(count _visTrgts > 0)then{" \n + " _spottedPos = getPosATL (_visTrgts select 0);" \n + " //_sightVect = _zedPos vectorDiff ([_avPos,_trgtCount,false] call EPOCH_fnc_vectorDivide);" \n + " _sightVect = _zedPos vectorDiff _spottedPos;" \n + " _sightVect = [_sightVect,_sightCoeff] call BIS_fnc_vectorMultiply;" \n + " _vectDiv = _vectDiv + 1;" \n + " _canSee = true;" \n + " }; " \n + "" \n + "};" \n + "_sanityCheck = 85;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class hearing___target + { + itemno = 23; + priority = 80.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 80 && !_moving && (_shotDist > 0 && _shotDist < _hearDist) && _hearCoeff > 0 && !_inSafe"/*%FSM*/; + action=/*%FSM*/"_trgt = (_zFiredNear select 0);" \n + "_hearTrgtPos = getPosATL _trgt;" \n + "_hearVect = _zedPos vectorDiff _hearTrgtPos;" \n + "_hearVect = [_hearVect,_hearCoeff] call BIS_fnc_vectorMultiply;" \n + "_vectDiv = _vectDiv + 1;" \n + "_zombie setVariable [""zFiredNear"", nil];" \n + "_sanityCheck = 80;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class do_attack + { + itemno = 8; + priority = 60.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 60 && _sight > 0.6 && _trgtDist < _attackDist && diag_tickTime - _lastAttack > 3 && !_inSafe"/*%FSM*/; + action=/*%FSM*/"_doAttack = true;" \n + "_doScream = true;" \n + "_sanityCheck = 60;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class stuck + { + itemno = 20; + priority = 30.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 30 && _moving && _attempts > 6 && _zedSpeed < 0.4" \n + "" \n + "" \n + ""/*%FSM*/; + action=/*%FSM*/"" \n + " if (!(_moveTo isEqualTo [0,0,0])) then {" \n + "" \n + "// _moveTo = [_moveTo, floor(random 2), floor(random 360)] call BIS_fnc_relPos;" \n + " _zombie moveTo _zedPos;" \n + " _attempts = 0;" \n + " //systemChat format[""UnSticking: %1"", diag_tickTime];" \n + " };" \n + "" \n + "_sanityCheck = 30;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class final_checks___r + { + itemno = 14; + priority = 10.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/; + action=/*%FSM*/"" \n + "_sAnger =_sAnger min 100 max 0;" \n + "_sFear =_sFear min 100 max 0;" \n + "" \n + "if(_vectDiv > 0)then{" \n + "_vectTot = _smellVect vectorAdd _sightVect vectorAdd _hearVect vectorAdd _spottedVect vectorAdd _wanderVect;" \n + "_moveTo = _zedPos vectorDiff ([_vectTot,_vectDiv,false] call EPOCH_fnc_vectorDivide);" \n + "_doMoan = true;" \n + "//_moveTo = [_moveTo, floor(random 2), floor(random 360)] call BIS_fnc_relPos;" \n + "};" \n + "" \n + "" \n + "if(_zedPos distance _spottedPos < 3)then{" \n + "_spottedPos = [0,0,0];" \n + "};" \n + "" \n + "if(_zombie getVariable [""EPOCH_callGroan"",false])then{_zombie setVariable [""EPOCH_callGroan"",false];_callGroan = true; _doGroan = true;};" \n + "if(_zombie getVariable [""EPOCH_callBoom"",false])then{_zombie setVariable [""EPOCH_callBoom"",false];_callBoom = true; _doBoom = true;};" \n + "" \n + "" \n + "if(_doDebug)then{" \n + "_plyrVel = velocity player;" \n + "_plyrVelSpeed = (_plyrVel select 0) + (_plyrVel select 1);" \n + "_plyRelDir = (player getRelDir _zedPos) - 180; " \n + "hintSilent format [""ZOMBIE (%4)\nStalk: %1 / %2\nDist To Move: %3 | Plyr:%6\nSee: %5 (%20)\nAnger: %7\nFear: %8\nHit: %9\nNear: %10\nSmell: %11\nMoved(ing):%12(%17)\nAttempts: %15\nPlyr Vel: %13\nRDir: %14\nSpeed: %16\nVectors: %18\nFPS: %19"",_minStalkDist,_maxStalkDist,_moveTo distance _zombie,_debugDo, _canSee,_zombie distance _trgt,_sAnger,_sFear,_sHit,_zFiredNear,_canSmellCount,moveToCompleted _zombie, _plyrVelSpeed,_plyRelDir,_attempts,_zedSpeed,_moving,_vectDiv,diag_FPS,_sight];" \n + "[_zombie,_zedPos,wind,""Sign_Arrow_Direction_Pink_F""] call EPOCH_fncHordeMemberVelPointer;" \n + "[""target"",0.8,_moveTo]call EPOCH_fnc_DebugMarker;" \n + "[""zed"",0.8,_zedPos]call EPOCH_fnc_DebugMarker;" \n + "};" \n + "" \n + "_sHit = [objNull, 0];" \n + "_zFiredNear = [objNull, 0];" \n + "_sanityCheck = 0;" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + name = "end"; + itemno = 18; + init = /*%FSM*/"if (!isNull _zombie) then {" \n + "deleteVehicle _zombie;//Move to cleanup" \n + "};" \n + "" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class spin + { + name = "spin"; + itemno = 24; + init = /*%FSM*/"_t = diag_tickTime;" \n + "_zombie setVelocityTransformation [_aslPos,_aslPos,_unitV,_unitV,_unitvDir,_vDir,_unitvUp,_unitvUp,2];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class wait + { + itemno = 25; + priority = 0.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _t > 0.6;"/*%FSM*/; + action=/*%FSM*/"[_zombie,_trgt] call EPOCH_client_bitePlayer;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ____FAKE____ + { + name = "____FAKE____"; + itemno = 27; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class imaginary_target + { + itemno = 10; + priority = 70.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 70 && _vectDiv < 1"/*%FSM*/; + action=/*%FSM*/"_rndPos = [_zedPos, random 360, ((random 4) max 1)] call BIS_fnc_relPos;" \n + "_wanderVect = _zedPos vectorDiff _rndPos;" \n + "_vectDiv = _vectDiv + 1;" \n + "_sanityCheck = 70;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="brainz"; + finalStates[] = + { + "end", + }; +}; +/*%FSM*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/System/EPOCH_zombie_walking.fsm b/Server/mpmissions/epoch.Bornholm/epoch_code/System/EPOCH_zombie_walking.fsm new file mode 100644 index 0000000..8bfbaac --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/System/EPOCH_zombie_walking.fsm @@ -0,0 +1,290 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"zombie",0,250,-100.000000,-250.000000,0.000000,-200.000000,0.000000,"zombie"}; +item1[] = {"instinct",2,250,150.000000,-175.000000,250.000000,-125.000000,0.000000,"instinct"}; +item2[] = {"action",2,250,150.000000,-25.000000,250.000000,25.000000,0.000000,"action"}; +item3[] = {"dispose",4,218,150.000000,-250.000000,250.000000,-200.000000,90.000000,"dispose"}; +item4[] = {"_",8,218,150.000000,75.000000,250.000000,125.000000,0.000000,""}; +item5[] = {"reset___control",2,250,-100.000000,-100.000000,0.000000,-50.000000,0.000000,"reset / control"}; +item6[] = {"_",8,218,-100.000000,-175.000000,0.000000,-125.000000,0.000000,""}; +item7[] = {"complete",4,218,-100.000000,-25.000000,0.000000,25.000000,100.000000,"complete"}; +item8[] = {"end",1,4346,-100.000000,75.000000,0.000000,125.000000,0.000000,"end"}; +item9[] = {"dispose",4,218,25.000000,75.000000,125.000000,125.000000,120.000000,"dispose"}; +item10[] = {"instinct_done",4,218,150.000000,-100.000000,250.000000,-50.000000,100.000000,"instinct done"}; +item11[] = {"move",4,218,300.000000,-175.000000,400.000000,-125.000000,60.000000,"move"}; +item12[] = {"_",8,218,25.000000,-175.000000,125.000000,-125.000000,0.000000,""}; +item13[] = {"move",4,218,300.000000,-25.000000,400.000000,25.000000,10.000000,"move"}; +item14[] = {"do_move",2,250,300.000000,75.000000,400.000000,125.000000,0.000000,"do move"}; +link0[] = {0,6}; +link1[] = {1,3}; +link2[] = {1,10}; +link3[] = {1,11}; +link4[] = {2,7}; +link5[] = {2,9}; +link6[] = {2,13}; +link7[] = {3,1}; +link8[] = {4,2}; +link9[] = {5,12}; +link10[] = {6,5}; +link11[] = {7,5}; +link12[] = {9,8}; +link13[] = {10,2}; +link14[] = {11,1}; +link15[] = {12,1}; +link16[] = {13,14}; +link17[] = {14,4}; +globals[] = {25.000000,0,0,0,0,640,480,1,246,6316128,1,-246.574387,523.779114,344.046051,-352.794586,1006,910,1}; +window[] = {2,-1,-1,-1,-1,793,389,1414,268,3,1024}; +*//*%FSM*/ +class FSM +{ + fsmName = "zombie walking"; + class States + { + /*%FSM*/ + class zombie + { + name = "zombie"; + itemno = ; + init = /*%FSM*/"//Developer code" \n + "//Author: axeman (Andrew Gregory | andrew@andgregor.co.uk)" \n + "" \n + "//systemChat ""INIT WALKING"";" \n + "_unit = _this select 0;" \n + "" \n + "_moveTo = [];" \n + "_nextPos = [];" \n + "" \n + "_callDispose = false;" \n + "_doDispose = false;" \n + "_decisionMade = false;" \n + "_t = diag_tickTime;" \n + "_c = diag_tickTime;" \n + "_sFreqCheck = 1.5;" \n + "_lFreqCheck = 12;" \n + "_doneCheck = false;" \n + "" \n + "//Debug" \n + "_showDebug = {" \n + "hint format [""SAPPER\nAnger: %2\nCanSee: %3\nTarget: %4\nHit: %5\nNear: %6FPS:%1"",diag_fps,_sAnger,_canSee,_trgt,_sHit,_sFiredNear];" \n + "};" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = ; + priority = 0.000000; + to="reset___control"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class instinct + { + name = "instinct"; + itemno = ; + init = /*%FSM*/"//systemchat format [""WI:%1"",diag_tickTime];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class instinct_done + { + itemno = ; + priority = 100.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_decisionMade;"/*%FSM*/; + action=/*%FSM*/"_decisionMade = false;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class dispose + { + itemno = ; + priority = 90.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _unit || _callDispose;"/*%FSM*/; + action=/*%FSM*/"_doDispose = true;" \n + "_decisionMade = true;" \n + "" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class move + { + itemno = ; + priority = 60.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_moveTo isEqualTo _nextPos)"/*%FSM*/; + action=/*%FSM*/"_doMove = true;" \n + "_decisionMade = true;" \n + "_moveTo = +_nextPos;" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class action + { + name = "action"; + itemno = ; + init = /*%FSM*/"//systemchat format [""WA:%1"",diag_tickTime];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class dispose + { + itemno = ; + priority = 120.000000; + to="end"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doDispose;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class complete + { + itemno = ; + priority = 100.000000; + to="reset___control"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/; + action=/*%FSM*/"" \n + "if(!isNil ""_criteriaMetAction"")then{" \n + "call _criteriaMetAction;" \n + "};" \n + "" \n + "" \n + "" \n + "" \n + "" \n + "" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class move + { + itemno = ; + priority = 10.000000; + to="do_move"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doMove;" \n + ""/*%FSM*/; + action=/*%FSM*/"_doMove = false;" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class reset___control + { + name = "reset___control"; + itemno = ; + init = /*%FSM*/"//Brain Vars" \n + "_criteria =""(false)"";" \n + "_criteriaMetAction = nil;" \n + "_actionDone = false;" \n + "_sWait = 0;" \n + "" \n + "_newTrgt = false;" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = ; + priority = 0.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + name = "end"; + itemno = ; + init = /*%FSM*/"//systemchat format[""Walk Disposing for %1"",_unit];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class do_move + { + name = "do_move"; + itemno = ; + init = /*%FSM*/"_unit moveTo _moveTo;" \n + "" \n + "" \n + "_actionDone = true;" \n + "_criteria = ""moveToCompleted _unit || _newTrgt"";" \n + "_sWait = (_unit distance _moveTo) * 2;" \n + "" \n + "if(axeDebug)then{" \n + "[_unit, _moveTo, ""Sign_Arrow_F""] call EPOCH_fnc_debugArrow;" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = ; + priority = 0.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="zombie"; + finalStates[] = + { + "end", + }; +}; +/*%FSM*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/System/dummy.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/System/dummy.sqf new file mode 100644 index 0000000..d1abe40 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/System/dummy.sqf @@ -0,0 +1,2 @@ +Epoch_loadFailed = true; +publicVariableServer "Epoch_loadFailed"; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/System/player_login.fsm b/Server/mpmissions/epoch.Bornholm/epoch_code/System/player_login.fsm new file mode 100644 index 0000000..24926e8 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/System/player_login.fsm @@ -0,0 +1,1555 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"INIT",0,250,-25.000000,-375.000000,75.000000,-325.000000,0.000000,"INIT"}; +item1[] = {"FINISH",1,250,-156.564148,1645.189819,-56.564148,1695.189819,0.000000,"FINISH"}; +item2[] = {"true",8,218,-150.000000,-125.000000,-50.000000,-75.000000,0.000000,"true"}; +item3[] = {"Version_Check",2,250,-25.000000,-75.000000,75.000000,-25.000000,0.000000,"Version Check"}; +item4[] = {"Player_Object_Re",4,218,-150.000000,75.000000,-50.000000,125.000000,0.000000,"Player" \n "Object Ready"}; +item5[] = {"Check_Player_UID",2,250,-25.000000,125.000000,75.000000,175.000000,0.000000,"Check Player UID"}; +item6[] = {"PlayerUID_Okay",4,218,-150.000000,175.000000,-50.000000,225.000000,10.000000,"PlayerUID" \n "Okay"}; +item7[] = {"Wrong_Version",4,218,125.000000,-75.000000,225.000000,-25.000000,10.000000,"Wrong" \n "Version"}; +item8[] = {"",7,210,471.000061,-54.000099,478.999939,-45.999901,0.000000,""}; +item9[] = {"ERROR_Wrong_Version",2,250,275.000000,-75.000000,375.000000,-25.000000,0.000000,"ERROR" \n "Wrong Version" \n "Epoch"}; +item10[] = {"Disconnect",2,250,600.000000,1225.000000,700.000000,1275.000000,0.000000,"Disconnect"}; +item11[] = {"Server_Okay",4,218,-125.000000,425.000000,-25.000000,475.000000,0.000000,"Server" \n "Okay"}; +item12[] = {"Empty_PlayerUID",4,218,125.000000,125.000000,225.000000,175.000000,0.000000,"Empty" \n "PlayerUID"}; +item13[] = {"ERROR_PlayerUID",2,250,275.000000,125.000000,375.000000,175.000000,0.000000,"ERROR" \n "PlayerUID Empty"}; +item14[] = {"",7,210,471.000061,145.999908,478.999939,154.000092,0.000000,""}; +item15[] = {"Timeout_No_Respo",4,218,125.000000,875.000000,225.000000,925.000000,0.000000,"Timeout" \n "No Response"}; +item16[] = {"Response",4,218,-150.000000,825.000000,-50.000000,875.000000,0.000000,"Response"}; +item17[] = {"Setup_Player_Var",2,250,-32.100952,1201.397339,67.899048,1251.397339,0.000000,"Setup Player" \n "Variables"}; +item18[] = {"Request_Hive",2,250,-25.000000,575.000000,75.000000,625.000000,0.000000,"Request Hive"}; +item19[] = {"Timeout_No_Respo",4,218,125.000000,575.000000,225.000000,625.000000,0.000000,"Timeout" \n "No Response"}; +item20[] = {"ERROR_Server_not",2,250,275.000000,875.000000,375.000000,925.000000,0.000000,"ERROR" \n "Server not" \n "Response"}; +item21[] = {"",7,210,471.000000,895.999939,479.000000,904.000061,0.000000,""}; +item22[] = {"Timeout_No_Respo",4,218,125.000000,775.000000,225.000000,825.000000,0.000000,"Timeout" \n "No Response"}; +item23[] = {"Wrong_Server_Ver",4,218,125.000000,475.000000,225.000000,525.000000,10.000000,"Wrong" \n "Server Version"}; +item24[] = {"Player_In_Game",8,218,-157.100952,1251.397339,-57.100952,1301.397339,0.000000,"Player" \n "In Game"}; +item25[] = {"ERROR_Wrong_Server",2,250,275.000000,475.000000,375.000000,525.000000,0.000000,"ERROR" \n "Wrong" \n "Server Version"}; +item26[] = {"Display_Message",4,218,600.000000,1150.000000,700.000000,1200.000000,0.000000,"" \n "Display Message" \n "Wait..."}; +item27[] = {"Setup_Player_Obj",2,250,-32.100952,1101.397339,67.899048,1151.397339,0.000000,"Setup Player" \n "Object"}; +item28[] = {"Check_if_Player",4,218,750.000000,1225.000000,850.000000,1275.000000,0.000000,"Check if" \n "Player got Kicked"}; +item29[] = {"Preload_done",8,218,-157.100952,1551.397339,-57.100952,1601.397339,0.000000,"Preload" \n "done"}; +item30[] = {"",7,210,471.000000,796.000000,479.000000,804.000000,0.000000,""}; +item31[] = {"",7,210,471.000000,796.000000,479.000000,804.000000,0.000000,""}; +item32[] = {"true",8,218,417.899048,1201.397339,517.899048,1251.397339,0.000000,"true"}; +item33[] = {"Display_Message",2,250,600.000000,1075.000000,700.000000,1125.000000,0.000000,"Display" \n "Message"}; +item34[] = {"Server_Ready",4,218,-25.000000,300.000000,75.000000,350.000000,0.000000,"Server" \n "Ready"}; +item35[] = {"Check_Server",2,250,-25.000000,375.000000,75.000000,425.000000,0.000000,"Check Server"}; +item36[] = {"Server_not_worki",4,218,125.000000,375.000000,225.000000,425.000000,10.000000,"Server" \n "not working"}; +item37[] = {"ERROR_Server_not_1",2,250,275.000000,375.000000,375.000000,425.000000,0.000000,"ERROR" \n "Server not Ready"}; +item38[] = {"",7,210,471.000000,396.000000,479.000000,404.000000,0.000000,""}; +item39[] = {"Check_Server_1",2,250,-25.000000,225.000000,75.000000,275.000000,0.000000,"Check Server"}; +item40[] = {"Timeout_No_Respo",4,218,125.000000,225.000000,225.000000,275.000000,0.000000,"Timeout" \n "No Response"}; +item41[] = {"ERROR_Server_not_2",2,250,275.000000,225.000000,375.000000,275.000000,0.000000,"ERROR" \n "Server not Ready"}; +item42[] = {"",7,210,471.000000,246.000031,479.000000,253.999969,0.000000,""}; +item43[] = {"Reject_without_B",1,250,900.000000,1225.000000,1000.000000,1275.000000,0.000000,"Reject without" \n "BattlEye"}; +item44[] = {"true",8,218,-150.000000,-25.000000,-50.000000,25.000000,0.000000,"true"}; +item45[] = {"Arma_Version_Che",2,250,-25.000000,25.000000,75.000000,75.000000,0.000000,"Arma Version" \n "Check"}; +item46[] = {"Outdated_Version",4,218,125.000000,25.000000,225.000000,75.000000,10.000000,"Outdated" \n "Version"}; +item47[] = {"ERROR_Wrong_Version_1",2,250,275.000000,25.000000,375.000000,75.000000,0.000000,"ERROR" \n "Wrong Version" \n "ArmA"}; +item48[] = {"",7,210,471.000061,45.999908,478.999939,54.000092,0.000000,""}; +item49[] = {"new_player_____p",4,218,-157.100952,1151.397339,-57.100952,1201.397339,0.000000,"new player == " \n "player"}; +item50[] = {"Setup_EH_s_and_H",2,250,-32.100952,1301.397339,67.899048,1351.397339,0.000000,"Setup EH's" \n "and" \n "HitPoints"}; +item51[] = {"no_weapons",4,218,-32.100952,1401.397339,67.899048,1451.397339,0.000000,"no weapons"}; +item52[] = {"Process",2,250,-32.100952,1501.397339,67.899048,1551.397339,0.000000,"Process"}; +item53[] = {"Has_Current_Weap",4,218,92.899048,1301.397339,192.899048,1351.397339,10.000000,"Has" \n "Current" \n "Weapon"}; +item54[] = {"Find_Active_Weap",2,250,217.899048,1301.397339,317.899048,1351.397339,0.000000,"Find" \n "Active" \n "Weapon"}; +item55[] = {"Current_Weapon_Not",4,218,142.899048,1351.397339,242.899048,1401.397339,0.000000,"Current" \n "Weapon" \n "Not Selected"}; +item56[] = {"Current_Weapon_S",4,218,292.899048,1351.397339,392.899048,1401.397339,0.000000,"Current" \n "Weapon" \n "Selected"}; +item57[] = {"Select_Weapon",2,250,142.899048,1426.397339,242.899048,1476.397339,0.000000,"Select" \n "Weapon"}; +item58[] = {"true",8,218,217.899048,1501.397339,317.899048,1551.397339,0.000000,"true"}; +item59[] = {"Do_nothing",2,250,292.899048,1426.397339,392.899048,1476.397339,0.000000,"Do nothing"}; +item60[] = {"Check_New_Player",2,250,-20.739410,880.680786,79.260590,930.680786,0.000000,"Check" \n "New Player"}; +item61[] = {"check_1_new__pla",4,218,-147.159637,930.680786,-47.159637,980.680786,0.000000,"check 1 new " \n "player"}; +item62[] = {"true",4,218,-150.000000,-325.000000,-60.000000,-275.000000,0.000000,"true"}; +item63[] = {"Process_1",2,250,-25.000000,-275.000000,75.000000,-225.000000,0.000000,"Process"}; +item64[] = {"Wait_ArmA_Loading",4,218,-150.000000,-225.000000,-50.000000,-175.000000,0.000000,"Wait ArmA" \n "Loading Screen" \n "Done"}; +item65[] = {"Start_Loading_Sc",2,250,-25.000000,-175.000000,75.000000,-125.000000,0.000000,"Start Loading" \n "Screen"}; +item66[] = {"Timeout_",4,218,117.899048,1101.397339,217.899048,1151.397339,0.000000,"" \n "Timeout" \n ""}; +item67[] = {"ERROR_Player_Setup",2,250,267.899048,1101.397339,367.899048,1151.397339,0.000000,"ERROR" \n "Player Setup" \n "Invalid"}; +item68[] = {"",7,210,463.899048,1122.397339,471.899048,1130.397339,0.000000,""}; +item69[] = {"Server_Version_C",2,250,-25.000000,475.000000,75.000000,525.000000,0.000000,"Server Version" \n "Check"}; +item70[] = {"Version_Okay",4,218,-125.000000,525.000000,-25.000000,575.000000,0.000000,"Version" \n "Okay"}; +item71[] = {"",7,210,471.000000,496.000000,479.000000,504.000000,0.000000,""}; +item72[] = {"ERROR_Server_not_3",2,250,275.000000,575.000000,375.000000,625.000000,0.000000,"ERROR" \n "Server not" \n "Response"}; +item73[] = {"",7,210,471.000000,596.000000,479.000000,604.000000,0.000000,""}; +item74[] = {"new_character",4,218,-250.000000,675.000000,-150.000000,725.000000,10.000000,"new" \n "character"}; +item75[] = {"Hive_Response",4,218,-125.000000,625.000000,-25.000000,675.000000,0.000000,"Hive" \n "Response"}; +item76[] = {"load_old_charact",4,218,-125.000000,725.000000,-25.000000,775.000000,0.000000,"load old" \n "character"}; +item77[] = {"Process_2",2,250,-25.000000,675.000000,75.000000,725.000000,0.000000,"Process"}; +item78[] = {"Open_Gender_Selection",2,250,-400.000000,675.000000,-300.000000,725.000000,0.000000,"Open Gender" \n "Selection Dialog"}; +item79[] = {"Reopen_when_client",4,218,-400.000000,600.000000,-300.000000,650.000000,0.000000,"Reopen" \n "when client hit" \n "escape"}; +item80[] = {"Gender_Selected",4,218,-450.000000,750.000000,-350.000000,800.000000,10.000000,"Gender" \n "Selected"}; +item81[] = {"Timeout",4,218,-350.000000,750.000000,-250.000000,800.000000,0.000000,"Timeout"}; +item82[] = {"Send_character_s",2,250,-400.000000,825.000000,-300.000000,875.000000,0.000000,"Send" \n "character" \n "selection"}; +item83[] = {"Process_3",2,250,-25.000000,775.000000,75.000000,825.000000,0.000000,"Process"}; +item84[] = {"ERROR_Server_not_4",2,250,275.000000,775.000000,375.000000,825.000000,0.000000,"ERROR" \n "Server not" \n "Response"}; +item85[] = {"Check_New_Player_1",2,250,-29.260529,995.716492,70.739471,1045.716309,0.000000,"Check" \n "New Player" \n "Setup"}; +item86[] = {"check_2_new__pla",4,4314,-154.260574,1044.296387,-54.260574,1094.296387,0.000000,"check 2 new " \n "player"}; +item87[] = {"Timeout_No_Respo",4,218,127.840363,997.136780,227.840363,1047.136475,0.000000,"Timeout" \n "No Response"}; +item88[] = {"ERROR_Server_not_5",2,250,266.478851,995.716614,366.478851,1045.716309,0.000000,"ERROR" \n "Server not" \n "Response"}; +item89[] = {"",7,210,466.446442,1000.643677,474.446442,1008.643677,0.000000,""}; +link0[] = {0,62}; +link1[] = {2,3}; +link2[] = {3,7}; +link3[] = {3,44}; +link4[] = {4,5}; +link5[] = {5,6}; +link6[] = {5,12}; +link7[] = {6,39}; +link8[] = {7,9}; +link9[] = {8,48}; +link10[] = {9,8}; +link11[] = {10,28}; +link12[] = {11,69}; +link13[] = {12,13}; +link14[] = {13,14}; +link15[] = {14,42}; +link16[] = {15,20}; +link17[] = {16,60}; +link18[] = {17,24}; +link19[] = {18,19}; +link20[] = {18,75}; +link21[] = {19,72}; +link22[] = {20,21}; +link23[] = {21,89}; +link24[] = {22,84}; +link25[] = {23,25}; +link26[] = {24,50}; +link27[] = {25,71}; +link28[] = {26,10}; +link29[] = {27,49}; +link30[] = {27,66}; +link31[] = {28,43}; +link32[] = {29,1}; +link33[] = {31,21}; +link34[] = {32,33}; +link35[] = {33,26}; +link36[] = {34,35}; +link37[] = {35,11}; +link38[] = {35,36}; +link39[] = {36,37}; +link40[] = {37,38}; +link41[] = {38,71}; +link42[] = {39,34}; +link43[] = {39,40}; +link44[] = {40,41}; +link45[] = {41,42}; +link46[] = {42,38}; +link47[] = {44,45}; +link48[] = {45,4}; +link49[] = {45,46}; +link50[] = {46,47}; +link51[] = {47,48}; +link52[] = {48,14}; +link53[] = {49,17}; +link54[] = {50,51}; +link55[] = {50,53}; +link56[] = {51,52}; +link57[] = {52,29}; +link58[] = {53,54}; +link59[] = {54,55}; +link60[] = {54,56}; +link61[] = {55,57}; +link62[] = {56,59}; +link63[] = {57,58}; +link64[] = {58,52}; +link65[] = {59,58}; +link66[] = {60,15}; +link67[] = {60,61}; +link68[] = {61,85}; +link69[] = {62,63}; +link70[] = {63,64}; +link71[] = {64,65}; +link72[] = {65,2}; +link73[] = {66,67}; +link74[] = {67,68}; +link75[] = {68,32}; +link76[] = {69,23}; +link77[] = {69,70}; +link78[] = {70,18}; +link79[] = {71,73}; +link80[] = {72,73}; +link81[] = {73,31}; +link82[] = {74,78}; +link83[] = {75,77}; +link84[] = {76,83}; +link85[] = {77,74}; +link86[] = {77,76}; +link87[] = {78,79}; +link88[] = {78,80}; +link89[] = {78,81}; +link90[] = {79,78}; +link91[] = {80,82}; +link92[] = {81,82}; +link93[] = {82,76}; +link94[] = {83,16}; +link95[] = {83,22}; +link96[] = {84,31}; +link97[] = {85,86}; +link98[] = {85,87}; +link99[] = {86,27}; +link100[] = {87,88}; +link101[] = {88,89}; +link102[] = {89,68}; +globals[] = {0.000000,0,0,0,0,640,480,1,258,6316128,1,-228.686249,247.871552,1378.466309,648.349915,577,884,1}; +window[] = {2,-1,-1,-1,-1,845,78,1062,78,3,595}; +*//*%FSM*/ +class FSM +{ + fsmName = "Epoch Login"; + class States + { + /*%FSM*/ + class INIT + { + name = "INIT"; + itemno = 0; + init = /*%FSM*/"titleCut ["""", ""BLACK FADED"", 1337];" \n + "0 fadeSound 0;" \n + "" \n + "// use config to control extra debug" \n + "_debug = [""CfgEpochClient"", ""debug"", false] call EPOCH_fnc_returnConfigEntryV2;" \n + "" \n + "_myTime = diag_tickTime;" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Init"";" \n + "};" \n + "" \n + "// init vars " \n + "_hitpoints = [];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 62; + priority = 0.000000; + to="Process_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class FINISH + { + name = "FINISH"; + itemno = 1; + init = /*%FSM*/"[] spawn EPOCH_masterLoop;" \n + "" \n + "// fade in sound and screen" \n + "3 fadeSound 1;" \n + "titleCut ["""", ""BLACK IN"", 1];" \n + "1338 cutText ["""",""PLAIN"",0]; " \n + "" \n + "progressLoadingScreen 1.0;" \n + "endLoadingScreen;" \n + "EPOCH_loadingScreenDone = true;" \n + "" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Finish!"";" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Version_Check + { + name = "Version_Check"; + itemno = 3; + init = /*%FSM*/"if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Version Check"";" \n + "};" \n + "" \n + "// SHOULD BE:" \n + "_epoch_assets0 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_assets"");" \n + "_epoch_assets1 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_assets_1"");" \n + "_epoch_assets2 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""epoch_objects"");" \n + "_epoch_assets3 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_assets_3"");" \n + "_epoch_config = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_config"");" \n + "_epoch_language = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_language"");" \n + "_epoch_community = getText(configFile >> ""Epoch"" >> ""Version"" >> ""a3_epoch_community"");" \n + "_epoch_vehicles = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_vehicles"");" \n + "_epoch_weapons = getText(configFile >> ""Epoch"" >> ""Version"" >> ""a3_epoch_weapons"");" \n + "" \n + "" \n + "// IS:" \n + "_my_epoch_assets0 = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_assets"" >> ""epochVersion"");" \n + "_my_epoch_assets1 = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_assets_1"" >> ""epochVersion"");" \n + "_my_epoch_assets2 = getText(configFile >> ""CfgPatches"" >> ""epoch_objects"" >> ""epochVersion"");" \n + "_my_epoch_assets3 = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_assets_3"" >> ""epochVersion"");" \n + "_my_epoch_config = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_config"" >> ""epochVersion"");" \n + "_my_epoch_language = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_language"" >> ""epochVersion"");" \n + "_my_epoch_community = getText(configFile >> ""CfgPatches"" >> ""a3_epoch_community"" >> ""epochVersion"");" \n + "_my_epoch_vehicles = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_vehicles"" >> ""epochVersion"");" \n + "_my_epoch_weapons = getText(configFile >> ""CfgPatches"" >> ""a3_epoch_weapons"" >> ""epochVersion"");" \n + "" \n + "progressLoadingScreen 0.1;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wrong_Version + { + itemno = 7; + priority = 10.000000; + to="ERROR_Wrong_Version"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_epoch_assets0 != _epoch_assets0 ||" \n + "_my_epoch_assets1 != _epoch_assets1 ||" \n + "_my_epoch_assets2 != _epoch_assets2 ||" \n + "_my_epoch_assets3 != _epoch_assets3 ||" \n + "_my_epoch_config != _epoch_config ||" \n + "_my_epoch_language != _epoch_language ||" \n + "_my_epoch_community != _epoch_community ||" \n + "_my_epoch_vehicles != _epoch_vehicles ||" \n + "_my_epoch_weapons != _epoch_weapons"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class true + { + itemno = 44; + priority = 0.000000; + to="Arma_Version_Che"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Player_UID + { + name = "Check_Player_UID"; + itemno = 5; + init = /*%FSM*/"if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Check PlayerUID"";" \n + "};" \n + "" \n + "_playerUID = getPlayerUID player;" \n + "" \n + "progressLoadingScreen 0.2;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class PlayerUID_Okay + { + itemno = 6; + priority = 10.000000; + to="Check_Server_1"; + precondition = /*%FSM*/"!isNil ""_playerUID"""/*%FSM*/; + condition=/*%FSM*/"_playerUID != """""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Empty_PlayerUID + { + itemno = 12; + priority = 0.000000; + to="ERROR_PlayerUID"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Wrong_Version + { + name = "ERROR_Wrong_Version"; + itemno = 9; + init = /*%FSM*/"_msg = ""You have an outdated version of Epoch"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_EPOCHVERSION = true;" \n + " publicVariableServer ""PLAYER_REJECT_EPOCHVERSION"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Disconnect + { + name = "Disconnect"; + itemno = 10; + init = /*%FSM*/"endLoadingScreen;" \n + "1338 cutText [_msg,""PLAIN"",0]; " \n + "deleteVehicle player;" \n + "call _rejectPlayer;" \n + "_myTime = diag_tickTime;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Check_if_Player + { + itemno = 28; + priority = 0.000000; + to="Reject_without_B"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 2"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_PlayerUID + { + name = "ERROR_PlayerUID"; + itemno = 13; + init = /*%FSM*/"_msg = ""Can not setup Player Object! (Error 01)"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_UID = true;" \n + " publicVariableServer ""PLAYER_REJECT_UID"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Setup_Player_Var + { + name = "Setup_Player_Var"; + itemno = 17; + init = /*%FSM*/"diag_log format[""DEBUG TIME WAITED: %1"", (diag_tickTime - _myTime)];" \n + "{" \n + " missionNamespace setVariable[(format[""EPOCH_player%1"", EPOCH_customVars select _forEachIndex]), _x];" \n + "} forEach _playerVariables;" \n + "{" \n + " missionNamespace setVariable[(format[""EPOCH_total%1"", EPOCH_communityStats select _forEachIndex]), _x];" \n + "} forEach _communityStats;" \n + """Loading Player Variables and Community Stats... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.7;" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Setup Player Variables and Community Stats"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Player_In_Game + { + itemno = 24; + priority = 0.000000; + to="Setup_EH_s_and_H"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"getClientStateNumber > 8"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Request_Hive + { + name = "Request_Hive"; + itemno = 18; + init = /*%FSM*/"_myTime = diag_tickTime;" \n + "" \n + "[player,_thisFSM] remoteExec [""EPOCH_server_checkPlayer"",2];" \n + "" \n + """Loading Player Data... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.5;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Hive_Response + { + itemno = 75; + priority = 0.000000; + to="Process_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""_checkPlayer_PVC"""/*%FSM*/; + action=/*%FSM*/"_newChar = _checkPlayer_PVC;" \n + "_checkPlayer_PVC = nil;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Timeout_No_Respo + { + itemno = 19; + priority = 0.000000; + to="ERROR_Server_not_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 30"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Server_not + { + name = "ERROR_Server_not"; + itemno = 20; + init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_NoResponse2 = true;" \n + " publicVariableServer ""PLAYER_REJECT_NoResponse2"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Wrong_Server + { + name = "ERROR_Wrong_Server"; + itemno = 25; + init = /*%FSM*/"_msg = format[""Server and Client running with different Version! (You: %1 // Server: %2)"",getText(configFile >> ""CfgMods"" >> ""Epoch"" >> ""version""),Epoch_ServerVersion];" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_ServerVersion = true;" \n + " publicVariableServer ""PLAYER_REJECT_ServerVersion"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Setup_Player_Obj + { + name = "Setup_Player_Obj"; + itemno = 27; + init = /*%FSM*/"_ply = player;" \n + "_group = group player;" \n + "_goggles = goggles _playerObject;" \n + "" \n + "selectPlayer _playerObject;" \n + "" \n + "deleteVehicle _ply;" \n + "deleteGroup _group;" \n + "" \n + """Loading Player Body... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.8;" \n + "" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Setup Player Object"";" \n + "};" \n + "" \n + "_myTime = diag_tickTime;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Timeout_ + { + itemno = 66; + priority = 0.000000; + to="ERROR_Player_Setup"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 30"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class new_player_____p + { + itemno = 49; + priority = 0.000000; + to="Setup_Player_Var"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_playerObject == player && local _playerObject"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Display_Message + { + name = "Display_Message"; + itemno = 33; + init = /*%FSM*/"[] spawn {" \n + " waitUntil{!isNull (findDisplay 46)};" \n + " (findDisplay 46) displayAddEventHandler [""KeyDown"",""true""];" \n + " (findDisplay 46) displayAddEventHandler [""KeyUp"",""true""];" \n + "};" \n + "_myTime = diag_tickTime;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Display_Message + { + itemno = 26; + priority = 0.000000; + to="Disconnect"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 10"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Server + { + name = "Check_Server"; + itemno = 35; + init = /*%FSM*/"_myTime = diag_tickTime;" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Check Server"";" \n + "};" \n + """Checking Server... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.4;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Server_not_worki + { + itemno = 36; + priority = 10.000000; + to="ERROR_Server_not_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""EPOCH_BADHIVE""" \n + ""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Server_Okay + { + itemno = 11; + priority = 0.000000; + to="Server_Version_C"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""Epoch_ServerVersion"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Server_not_1 + { + name = "ERROR_Server_not_1"; + itemno = 37; + init = /*%FSM*/"_msg = ""Server not Ready (Error 03)"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_NotReady2 = true;" \n + " publicVariableServer ""PLAYER_REJECT_NotReady2"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Server_1 + { + name = "Check_Server_1"; + itemno = 39; + init = /*%FSM*/"progressLoadingScreen 0.3;" \n + """Server initializing... Please wait!"" call Epoch_updateLoadingScreen;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Timeout_No_Respo + { + itemno = 40; + priority = 0.000000; + to="ERROR_Server_not_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 180"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Server_Ready + { + itemno = 34; + priority = 0.000000; + to="Check_Server"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""EPOCH_SERVER_READY"""/*%FSM*/; + action=/*%FSM*/"EPOCH_SERVER_READY = nil;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Server_not_2 + { + name = "ERROR_Server_not_2"; + itemno = 41; + init = /*%FSM*/"_msg = ""Server not Ready (Error 02)"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_NotReady1 = true;" \n + " publicVariableServer ""PLAYER_REJECT_NotReady1"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Reject_without_B + { + name = "Reject_without_B"; + itemno = 43; + init = /*%FSM*/"[] spawn {" \n + " waitUntil{!isNull (findDisplay 46)};" \n + " waitUntil {" \n + " (findDisplay 46) closeDisplay 0;" \n + " isNull (findDisplay 46)" \n + " };" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Arma_Version_Che + { + name = "Arma_Version_Che"; + itemno = 45; + init = /*%FSM*/"progressLoadingScreen 0.15;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Outdated_Version + { + itemno = 46; + priority = 10.000000; + to="ERROR_Wrong_Version_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"productVersion select 2 < getNumber(getMissionConfig ""CfgEpochClient"" >> ""ArmAVersion"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Player_Object_Re + { + itemno = 4; + priority = 0.000000; + to="Check_Player_UID"; + precondition = /*%FSM*/"!isNull player"/*%FSM*/; + condition=/*%FSM*/"player == player"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Wrong_Version_1 + { + name = "ERROR_Wrong_Version_1"; + itemno = 47; + init = /*%FSM*/"_msg = ""You have an outdated version of ArmA 3"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_ARMAVERSION = true;" \n + " publicVariableServer ""PLAYER_REJECT_ARMAVERSION"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Setup_EH_s_and_H + { + name = "Setup_EH_s_and_H"; + itemno = 50; + init = /*%FSM*/"" \n + "if (!_newChar || !(_goggles isEqualTo """")) then {" \n + " removeGoggles player;" \n + " player addGoggles _goggles" \n + "};" \n + "{" \n + " player addEventHandler [_x,([""CfgEpochClient"", _x, """"] call EPOCH_fnc_returnConfigEntryV2)];" \n + "} forEach ([""CfgEpochClient"", ""addEventHandler"", []] call EPOCH_fnc_returnConfigEntryV2);" \n + "" \n + "// set inital hitpoints" \n + "{" \n + " player setHitIndex [_forEachIndex, _x];" \n + "}forEach _hitpoints;" \n + "" \n + "" \n + "[5,100] spawn EPOCH_niteLight;" \n + "" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Setup EH's"";" \n + "};" \n + "" \n + """Loading... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.9;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Has_Current_Weap + { + itemno = 53; + priority = 10.000000; + to="Find_Active_Weap"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_currentWeapon != """""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class no_weapons + { + itemno = 51; + priority = 0.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_currentWeapon == """""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Process + { + name = "Process"; + itemno = 52; + init = /*%FSM*/"progressLoadingScreen 0.975;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Preload_done + { + itemno = 29; + priority = 0.000000; + to="FINISH"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"preloadCamera _playerPos"/*%FSM*/; + action=/*%FSM*/"call compile _extraPayload;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Find_Active_Weap + { + name = "Find_Active_Weap"; + itemno = 54; + init = /*%FSM*/"_activeWeapon = currentWeapon player;" \n + "progressLoadingScreen 0.95;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Current_Weapon_S + { + itemno = 56; + priority = 0.000000; + to="Do_nothing"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_activeWeapon == _currentWeapon"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Current_Weapon_Not + { + itemno = 55; + priority = 0.000000; + to="Select_Weapon"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_activeWeapon != _currentWeapon"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Select_Weapon + { + name = "Select_Weapon"; + itemno = 57; + init = /*%FSM*/"_currentWeapon spawn {" \n + " uiSleep 1; " \n + " player selectWeapon _this;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 58; + priority = 0.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Do_nothing + { + name = "Do_nothing"; + itemno = 59; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 58; + priority = 0.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Check_New_Player + { + name = "Check_New_Player"; + itemno = 60; + init = /*%FSM*/"_myTime = diag_tickTime;" \n + "player reveal _playerObject;" \n + """Loading Player Inventory... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.6;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class check_1_new__pla + { + itemno = 61; + priority = 0.000000; + to="Check_New_Player_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_state = false;" \n + "_playerCheck = !(isNull _playerObject);" \n + "_PlayerPosCheck = false;" \n + "_playerCheckMass = false;" \n + "if (_playerCheck) then {" \n + " _PlayerPosCheck = !((_playerObject getVariable [""FinalDest"",[]]) isequalto []);" \n + " if (_PlayerPosCheck) then {" \n + " _playerCheckMass = ((abs(_loadabs - (loadabs _playerObject))) < 1);" \n + " if (_playerCheckMass) then {" \n + " _state = true;" \n + " };" \n + " };" \n + "};" \n + "if (_debug) then {" \n + " diag_log format[""DEBUG: Checking Player Object: %1"", [""FAILED"",""OK""] select _playerCheck];" \n + " diag_log format[""DEBUG: Checking Player PosVar: %1"", [""FAILED"",""OK""] select _PlayerPosCheck];" \n + " diag_log format[""DEBUG: Final Player mass check: %1 (%2 != %3)"", [""FAILED"",""OK""] select _playerCheckMass, _loadabs, (loadabs _playerObject)];" \n + "};" \n + "_state"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Timeout_No_Respo + { + itemno = 15; + priority = 0.000000; + to="ERROR_Server_not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 30"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Process_1 + { + name = "Process_1"; + itemno = 63; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait_ArmA_Loading + { + itemno = 64; + priority = 0.000000; + to="Start_Loading_Sc"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(call BIS_fnc_isLoading)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Start_Loading_Sc + { + name = "Start_Loading_Sc"; + itemno = 65; + init = /*%FSM*/"startLoadingScreen ["""",""EpochLoadingScreen""];" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Start Loadingscreen"";" \n + "};" \n + """Starting Epoch... Please wait!"" call Epoch_updateLoadingScreen;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 2; + priority = 0.000000; + to="Version_Check"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Player_Setup + { + name = "ERROR_Player_Setup"; + itemno = 67; + init = /*%FSM*/"_msg = ""Problem setting up player"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_InvalidSetup = true;" \n + " publicVariableServer ""PLAYER_REJECT_InvalidSetup"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Server_Version_C + { + name = "Server_Version_C"; + itemno = 69; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wrong_Server_Ver + { + itemno = 23; + priority = 10.000000; + to="ERROR_Wrong_Server"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"Epoch_ServerVersion != getText(configFile >> ""CfgMods"" >> ""Epoch"" >> ""version"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Version_Okay + { + itemno = 70; + priority = 0.000000; + to="Request_Hive"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Server_not_3 + { + name = "ERROR_Server_not_3"; + itemno = 72; + init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_HiveNotResponse = true;" \n + " publicVariableServer ""PLAYER_REJECT_HiveNotResponse"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Process_2 + { + name = "Process_2"; + itemno = 77; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class new_character + { + itemno = 74; + priority = 10.000000; + to="Open_Gender_Selection"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_newChar"/*%FSM*/; + action=/*%FSM*/"endLoadingScreen;" \n + "_myGenderTime = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class load_old_charact + { + itemno = 76; + priority = 0.000000; + to="Process_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_myTime = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Open_Gender_Selection + { + name = "Open_Gender_Selection"; + itemno = 78; + init = /*%FSM*/"_forcegender = [""CfgEpochClient"", ""ForceGender"", """"] call EPOCH_fnc_returnConfigEntryV2;" \n + "switch (tolower _forcegender) do {" \n + " case ""male"": {EPOCH_PlayerIsMale = true;};" \n + " case ""female"": {EPOCH_PlayerIsMale = false;};" \n + " default {createdialog ""SelectGender"";}" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Gender_Selected + { + itemno = 80; + priority = 10.000000; + to="Send_character_s"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""EPOCH_PlayerIsMale"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Timeout + { + itemno = 81; + priority = 0.000000; + to="Send_character_s"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _myGenderTime) > 30)"/*%FSM*/; + action=/*%FSM*/"EPOCH_PlayerIsMale = true;" \n + "closeDialog 0;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Reopen_when_client + { + itemno = 79; + priority = 0.000000; + to="Open_Gender_Selection"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!dialog && isNil ""EPOCH_PlayerIsMale"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Send_character_s + { + name = "Send_character_s"; + itemno = 82; + init = /*%FSM*/"startLoadingScreen ["""",""EpochLoadingScreen""];" \n + """Gender Selected... Please wait!"" call Epoch_updateLoadingScreen;" \n + "" \n + "[player,EPOCH_PlayerIsMale,_thisFSM] remoteExec [""EPOCH_server_loadPlayer"",2];" \n + "EPOCH_PlayerIsMale = nil;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class load_old_charact + { + itemno = 76; + priority = 0.000000; + to="Process_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_myTime = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Process_3 + { + name = "Process_3"; + itemno = 83; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Timeout_No_Respo + { + itemno = 22; + priority = 0.000000; + to="ERROR_Server_not_4"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 30"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Response + { + itemno = 16; + priority = 0.000000; + to="Check_New_Player"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""_C_SET"""/*%FSM*/; + action=/*%FSM*/"_playerObject = _C_SET deleteAt 0;" \n + "_playerVariables = _C_SET deleteAt 0;" \n + "_currentWeapon = _C_SET deleteAt 0;" \n + "_loadabs = _C_SET deleteAt 0;" \n + "" \n + "Epoch_my_GroupUID = _C_SET deleteAt 0;" \n + "Epoch_my_tempGroupUID = """";" \n + "Epoch_canBeRevived = _C_SET deleteAt 0;" \n + "Epoch_personalToken = _C_SET deleteAt 0;" \n + "Epoch_my_Group = _C_SET deleteAt 0;" \n + "_communityStats = _C_SET deleteAt 0;" \n + "_hitpoints = _C_SET deleteAt 0;" \n + "" \n + "_extraPayload = _C_SET deleteAt 0;" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Server_not_4 + { + name = "ERROR_Server_not_4"; + itemno = 84; + init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_HiveLoadChar = true;" \n + " publicVariableServer ""PLAYER_REJECT_HiveLoadChar"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Check_New_Player_1 + { + name = "Check_New_Player_1"; + itemno = 85; + init = /*%FSM*/"_myTime = diag_tickTime;" \n + "_playerPos = (_playerObject getvariable [""FinalDest"",[[0,0,0],0]]) select 0;" \n + "[player,_playerobject] remoteexec [""EPOCH_server_SetFinalPlayerPos"",2];" \n + """Setting final Player Position... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.7;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Timeout_No_Respo + { + itemno = 87; + priority = 0.000000; + to="ERROR_Server_not_5"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 30"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class check_2_new__pla + { + itemno = 86; + priority = 0.000000; + to="Setup_Player_Obj"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_state = false;" \n + "_playerCheck = !(isNull _playerObject);" \n + "_playerCheckSetup = false;" \n + "_playerCheckObjectsReady = false;" \n + "_playerPosCheck = false;" \n + "_HiddenCheck = false;" \n + "if (_playerCheck) then {" \n + " _playerCheckSetup = _playerObject getVariable [""SETUP"",false];" \n + " if (_playerCheckSetup) then {" \n + " _playerCheckObjectsReady = _playerPos nearObjectsReady 10;" \n + " if (_playerCheckObjectsReady) then {" \n + " _playerPosCheck = (getposatl _playerObject distance _playerPos < 100);" \n + " if (_playerPosCheck) then {" \n + " _HiddenCheck = !(isObjectHidden _playerObject);" \n + " if (_HiddenCheck) then {" \n + " _state = true;" \n + " };" \n + " };" \n + " };" \n + " };" \n + "};" \n + "if (_debug) then {" \n + " diag_log format[""DEBUG: Checking Player Object: %1"", [""FAILED"",""OK""] select _playerCheck];" \n + " diag_log format[""DEBUG: Checking Player is setup: %1"", [""FAILED"",""OK""] select _playerCheckSetup];" \n + " diag_log format[""DEBUG: Checking world preloaded: %1"", [""FAILED"",""OK""] select _playerCheckObjectsReady];" \n + " diag_log format[""DEBUG: Pos check: _playerObj: %1 - Player: %2 - dist: %3"", getposatl _playerObject, _playerPos, getposatl _playerObject distance _playerPos];" \n + " diag_log format[""DEBUG: Checking is Object is visible: %1"", [""FAILED"",""OK""] select _HiddenCheck];" \n + "};" \n + "_state"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Server_not_5 + { + name = "ERROR_Server_not_5"; + itemno = 88; + init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_NoResponse2 = true;" \n + " publicVariableServer ""PLAYER_REJECT_NoResponse2"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="INIT"; + finalStates[] = + { + "FINISH", + "Reject_without_B", + }; +}; +/*%FSM*/ \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/System/task_control.fsm b/Server/mpmissions/epoch.Bornholm/epoch_code/System/task_control.fsm new file mode 100644 index 0000000..fadb860 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/System/task_control.fsm @@ -0,0 +1,1654 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"task_control",0,250,-225.000000,-625.000000,-125.000000,-575.000000,0.000000,"task control"}; +item1[] = {"delay",4,218,-500.000000,-250.000000,-400.000000,-200.000000,0.000000,"delay"}; +item2[] = {"setup",2,250,-650.000000,-625.000000,-550.000000,-575.000000,0.000000,"setup"}; +item3[] = {"_",8,218,-500.000000,-625.000000,-400.000000,-575.000000,0.000000,""}; +item4[] = {"items_and_vars",2,250,-500.000000,-175.000000,-400.000000,-125.000000,0.000000,"items" \n "and" \n "vars"}; +item5[] = {"task_completed",4,218,300.000000,75.000000,400.000000,125.000000,15.000000,"task" \n "completed"}; +item6[] = {"end",1,250,-775.000000,350.000000,-675.000000,400.000000,0.000000,"end"}; +item7[] = {"no_item_spawn",4,218,-350.000000,-175.000000,-250.000000,-125.000000,0.000000,"no item spawn"}; +item8[] = {"do_monitor",2,250,-75.000000,-25.000000,25.000000,25.000000,0.000000," do monitor"}; +item9[] = {"next",2,250,300.000000,-25.000000,400.000000,25.000000,0.000000,"next"}; +item10[] = {"loop",4,218,75.000000,-25.000000,175.000000,25.000000,5.000000,"loop"}; +item11[] = {"_",8,218,-75.000000,-100.000000,25.000000,-50.000000,0.000000,""}; +item12[] = {"_",8,218,75.000000,-325.000000,175.000000,-275.000000,0.000000,""}; +item13[] = {"chat_conditions",2,250,-75.000000,-175.000000,25.000000,-125.000000,0.000000,"chat conditions"}; +item14[] = {"event_conditions",2,250,300.000000,-325.000000,400.000000,-275.000000,0.000000,"event" \n "conditions"}; +item15[] = {"_",8,218,300.000000,-250.000000,400.000000,-200.000000,0.000000,""}; +item16[] = {"comms",2,250,-500.000000,-350.000000,-400.000000,-300.000000,0.000000,"comms"}; +item17[] = {"_",8,218,300.000000,-100.000000,400.000000,-50.000000,0.000000,""}; +item18[] = {"task_conditions",2,250,300.000000,-175.000000,400.000000,-125.000000,0.000000,"task" \n "conditions"}; +item19[] = {"chat_1",4,218,75.000000,-100.000000,175.000000,-50.000000,5.000000,"chat 1"}; +item20[] = {"chat_2",4,218,75.000000,-175.000000,175.000000,-125.000000,10.000000,"chat 2"}; +item21[] = {"chat_3",4,218,75.000000,-250.000000,175.000000,-200.000000,15.000000,"chat 3"}; +item22[] = {"item_spawn",4,218,-650.000000,-175.000000,-550.000000,-125.000000,5.000000,"item spawn"}; +item23[] = {"actions",2,250,-350.000000,-25.000000,-250.000000,25.000000,0.000000,"actions"}; +item24[] = {"point",4,218,-150.000000,350.000000,-50.000000,400.000000,0.000000,"point"}; +item25[] = {"spawn_item",2,250,-650.000000,-25.000000,-550.000000,25.000000,0.000000,"spawn item"}; +item26[] = {"ready",4,218,-500.000000,-25.000000,-400.000000,25.000000,0.000000,"ready"}; +item27[] = {"in_house",4,218,-775.000000,50.000000,-675.000000,100.000000,10.000000,"in house"}; +item28[] = {"hidden_nearby",4,218,-775.000000,-175.000000,-675.000000,-125.000000,5.000000,"hidden nearby"}; +item29[] = {"near_player",4,218,-775.000000,-25.000000,-675.000000,25.000000,15.000000,"near player"}; +item30[] = {"event_1",4,218,425.000000,-400.000000,525.000000,-350.000000,10.000000,"event 1"}; +item31[] = {"event_2",4,218,300.000000,-400.000000,400.000000,-350.000000,15.000000,"event 2"}; +item32[] = {"event_3",4,218,175.000000,-400.000000,275.000000,-350.000000,20.000000,"event 3"}; +item33[] = {"_",8,218,-650.000000,-400.000000,-550.000000,-350.000000,0.000000,""}; +item34[] = {"completed",2,250,175.000000,75.000000,275.000000,125.000000,0.000000,"completed"}; +item35[] = {"diag_1",4,218,300.000000,150.000000,400.000000,200.000000,15.000000,"diag 1"}; +item36[] = {"diag_2",4,218,175.000122,210.091980,275.000122,260.091980,10.000000,"diag 2"}; +item37[] = {"pause",4,218,300.000000,275.000000,400.000000,325.000000,0.000000,"pause"}; +item38[] = {"reward",2,250,25.000000,275.000000,125.000000,325.000000,0.000000,"reward"}; +item39[] = {"comms_1",2,4346,-150.000000,425.000000,-50.000000,475.000000,0.000000,"comms"}; +item40[] = {"mission_complete",4,218,-650.000000,350.000000,-550.000000,400.000000,10.000000,"mission complete"}; +item41[] = {"_",8,218,25.000000,75.000000,125.000000,125.000000,0.000000,""}; +item42[] = {"_",8,218,-350.000000,100.000000,-250.000000,150.000000,0.000000,""}; +item43[] = {"markers",2,250,-225.000000,175.000000,-125.000000,225.000000,0.000000,"markers"}; +item44[] = {"continue",4,218,-75.000000,175.000000,25.000000,225.000000,100.000000,"continue"}; +item45[] = {"radius",4,218,-300.000000,350.000000,-200.000000,400.000000,0.000000,"radius"}; +item46[] = {"marker_pos",4,218,-350.000000,225.000000,-250.000000,275.000000,0.000000,"marker pos"}; +item47[] = {"do_markers",2,250,-225.000000,275.000000,-125.000000,325.000000,0.000000,"do markers"}; +item48[] = {"find_spot",2,250,-900.000000,-175.000000,-800.000000,-125.000000,0.000000,"find spot"}; +item49[] = {"task_failed",4,218,450.000000,-25.000000,550.000000,25.000000,10.000000,"task" \n "failed"}; +item50[] = {"failed",2,250,450.000000,75.000000,550.000000,125.000000,0.000000,"failed"}; +item51[] = {"diag",4,218,575.000000,-25.000000,675.000000,25.000000,5.000000,"diag"}; +item52[] = {"fsm",4,218,575.000000,75.000000,675.000000,125.000000,10.000000,"fsm"}; +item53[] = {"sqf",4,218,575.000000,150.000000,675.000000,200.000000,15.000000,"sqf"}; +item54[] = {"call",4,218,575.000000,225.000000,675.000000,275.000000,20.000000,"call"}; +item55[] = {"clean_up",2,250,300.000000,425.000000,400.000000,475.000000,0.000000,"clean up"}; +item56[] = {"_",8,218,25.000000,425.000000,125.000000,475.000000,0.000000,""}; +item57[] = {"markers",4,218,525.000000,350.000000,625.000000,400.000000,5.000000,"markers"}; +item58[] = {"fsm",4,218,-225.000000,-100.000000,-125.000000,-50.000000,15.000000,"fsm"}; +item59[] = {"sqf",4,218,-225.000000,-25.000000,-125.000000,25.000000,10.000000,"sqf"}; +item60[] = {"call",4,218,-225.000000,50.000000,-125.000000,100.000000,20.000000,"call"}; +item61[] = {"not_hidden",4,218,-900.000000,-100.000000,-800.000000,-50.000000,10.000000,"not hidden"}; +item62[] = {"is_hidden",4,218,-775.000000,-100.000000,-675.000000,-50.000000,5.000000,"is hidden"}; +item63[] = {"gui",2,250,-775.000000,-250.000000,-675.000000,-200.000000,0.000000,"gui"}; +item64[] = {"no_dialogoue",4,218,-650.000000,-250.000000,-550.000000,-200.000000,10.000000,"no dialogoue"}; +item65[] = {"dialogue",4,218,-900.000000,-250.000000,-800.000000,-200.000000,5.000000,"dialogue"}; +item66[] = {"remind_dialogue",4,218,200.000000,350.000000,300.000000,400.000000,10.000000,"remind" \n "dialogue"}; +item67[] = {"_",8,218,-300.000000,425.000000,-200.000000,475.000000,0.000000,""}; +item68[] = {"next_task",2,250,-500.000000,425.000000,-400.000000,475.000000,0.000000,"next task"}; +item69[] = {"clean_up",4,218,400.000000,350.000000,500.000000,400.000000,15.000000,"clean up"}; +item70[] = {"comms_2",2,250,-75.000000,-325.000000,25.000000,-275.000000,0.000000,"comms"}; +item71[] = {"server",4,218,-75.000000,-250.000000,25.000000,-200.000000,10.000000,"server"}; +item72[] = {"simple_task",4,218,-225.000000,-450.000000,-125.000000,-400.000000,10.000000,"simple" \n "task"}; +item73[] = {"skip",4,218,-500.000000,225.000000,-400.000000,275.000000,5.000000,"skip"}; +item74[] = {"run_test",4,218,-500.000000,-525.000000,-400.000000,-475.000000,20.000000,"run test"}; +item75[] = {"override_for_task",2,250,-500.000000,-450.000000,-400.000000,-400.000000,0.000000,"override for" \n "task Editor"}; +item76[] = {"bin_it",4,218,425.000000,-325.000000,525.000000,-275.000000,5.000000,"bin it"}; +item77[] = {"",7,210,708.500000,-141.500000,716.500000,-133.500000,0.000000,""}; +item78[] = {"",7,210,708.500000,446.000000,716.500000,454.000000,0.000000,""}; +item79[] = {"next_task",4,218,-650.000000,425.000000,-550.000000,475.000000,5.000000,"next task"}; +item80[] = {"",7,210,-929.000000,446.000000,-921.000000,454.000000,0.000000,""}; +item81[] = {"",7,210,-929.000000,-604.000000,-921.000000,-596.000000,0.000000,""}; +item82[] = {"call",4,218,103.990662,149.799805,193.990662,199.799805,5.000000,"call"}; +link0[] = {0,3}; +link1[] = {1,4}; +link2[] = {2,33}; +link3[] = {2,72}; +link4[] = {2,74}; +link5[] = {3,2}; +link6[] = {4,7}; +link7[] = {4,22}; +link8[] = {5,34}; +link9[] = {7,23}; +link10[] = {8,11}; +link11[] = {9,5}; +link12[] = {9,10}; +link13[] = {9,49}; +link14[] = {10,8}; +link15[] = {11,13}; +link16[] = {12,14}; +link17[] = {13,12}; +link18[] = {13,19}; +link19[] = {13,20}; +link20[] = {13,21}; +link21[] = {13,71}; +link22[] = {14,15}; +link23[] = {14,30}; +link24[] = {14,31}; +link25[] = {14,32}; +link26[] = {14,76}; +link27[] = {15,18}; +link28[] = {16,1}; +link29[] = {17,9}; +link30[] = {18,17}; +link31[] = {19,13}; +link32[] = {20,13}; +link33[] = {21,13}; +link34[] = {22,25}; +link35[] = {23,42}; +link36[] = {23,58}; +link37[] = {23,59}; +link38[] = {23,60}; +link39[] = {23,73}; +link40[] = {24,47}; +link41[] = {25,26}; +link42[] = {25,27}; +link43[] = {25,28}; +link44[] = {25,29}; +link45[] = {26,23}; +link46[] = {27,25}; +link47[] = {28,48}; +link48[] = {29,25}; +link49[] = {30,14}; +link50[] = {31,14}; +link51[] = {32,14}; +link52[] = {33,16}; +link53[] = {34,35}; +link54[] = {34,36}; +link55[] = {34,41}; +link56[] = {34,82}; +link57[] = {35,34}; +link58[] = {36,34}; +link59[] = {37,55}; +link60[] = {38,37}; +link61[] = {39,67}; +link62[] = {40,6}; +link63[] = {41,38}; +link64[] = {42,43}; +link65[] = {43,44}; +link66[] = {43,46}; +link67[] = {44,8}; +link68[] = {45,47}; +link69[] = {46,47}; +link70[] = {47,24}; +link71[] = {47,44}; +link72[] = {47,45}; +link73[] = {48,61}; +link74[] = {48,62}; +link75[] = {49,50}; +link76[] = {50,37}; +link77[] = {50,51}; +link78[] = {50,52}; +link79[] = {50,53}; +link80[] = {50,54}; +link81[] = {51,50}; +link82[] = {52,50}; +link83[] = {53,50}; +link84[] = {54,50}; +link85[] = {55,56}; +link86[] = {55,57}; +link87[] = {55,66}; +link88[] = {55,69}; +link89[] = {56,39}; +link90[] = {57,55}; +link91[] = {58,23}; +link92[] = {59,23}; +link93[] = {60,23}; +link94[] = {61,48}; +link95[] = {62,25}; +link96[] = {63,64}; +link97[] = {63,65}; +link98[] = {64,4}; +link99[] = {65,63}; +link100[] = {66,55}; +link101[] = {67,68}; +link102[] = {68,40}; +link103[] = {68,79}; +link104[] = {69,55}; +link105[] = {70,12}; +link106[] = {71,70}; +link107[] = {72,23}; +link108[] = {73,68}; +link109[] = {74,75}; +link110[] = {75,33}; +link111[] = {75,72}; +link112[] = {76,77}; +link113[] = {77,78}; +link114[] = {78,55}; +link115[] = {79,80}; +link116[] = {80,81}; +link117[] = {81,2}; +link118[] = {82,34}; +globals[] = {0.000000,0,0,0,0,640,480,1,402,6316128,1,-1036.249023,990.485596,688.632874,-753.906189,1242,884,1}; +window[] = {2,-1,-1,-1,-1,642,365,1390,117,3,1260}; +*//*%FSM*/ +class FSM +{ + fsmName = "task control client"; + class States + { + /*%FSM*/ + class task_control + { + name = "task_control"; + itemno = 0; + init = /*%FSM*/"_plyr = player;" \n + "_taskName = _this select 0;" \n + "_unit = objNull;" \n + "_taskItem = objNull;" \n + "_taskID = 0;" \n + "_editorTest = false;" \n + "if(count _this > 1)then{" \n + "_editorTest = _this select 1;" \n + "};" \n + "if(count _this > 2)then{" \n + "_taskID = _this select 2;" \n + "};" \n + "if(count _this > 3)then{" \n + "_unit = _this select 3;" \n + "};" \n + "if(count _this >4)then{" \n + "_plyr = _this select 4;" \n + "};" \n + "_trgt = _plyr;" \n + "if(count _this > 5)then{" \n + "_trgt = _this select 5;" \n + "};" \n + "" \n + "//Common Vars" \n + "_plyrArr = [""Epoch_Man_Base_F"",""Epoch_Female_base_F""];" \n + "_config = 'inGameTasks' call EPOCH_returnConfig;" \n + "_scriptPath = getText ( _config >> ""file"");" \n + "_fsmPath = ""epoch_code\system"";" \n + "_filterBuilds = getArray ( _config >> ""filterBuilds"");" \n + "" \n + "//DECLARE" \n + "_taskCall = """";" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 3; + priority = 0.000000; + to="setup"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class setup + { + name = "setup"; + itemno = 2; + init = /*%FSM*/"" \n + "//_config = missionConfigFile;" \n + "" \n + "//Mission Control - WIP. TODO: Move to serverside mission control UINamespace not secure." \n + "//uiNameSpace setVariable [""axeTask"",_taskName];" \n + "_plyrVar = missionNamespace getVariable [""EPOCH_playerMissionArray"",[]];" \n + "_taskIndex = ((_plyrVar apply {_x find ""axeTask"" > -1;}) find true);" \n + "if(_taskIndex > -1)then{" \n + "_plyrVar deleteAt _taskIndex;" \n + "};" \n + "_plyrVar pushBack [""axeTask"",_taskName];" \n + "missionNamespace setVariable [""EPOCH_playerMissionArray"",_plyrVar];" \n + "" \n + "missionNameSpace setVariable [""axeTask"",_taskName];" \n + "" \n + "//Built in Vars" \n + "_startTime = diag_tickTime;" \n + "EPOCH_task_startTime = _startTime;" \n + "EPOCH_taskLastLoop = EPOCH_task_startTime;" \n + "EPOCH_taskItem = objNull;" \n + "if(isNil ""EPOCH_taskMarkerName"")then{EPOCH_taskMarkerName = """";};" \n + "" \n + "//Task Vars from Config with relevant local vars" \n + "//TODO - Move relevant ones into FSM so only called if required." \n + "_taskTitle = getText ( _config >> _taskName >> ""title"");" \n + "EPOCH_taskTitle = _taskTitle;" \n + "_taskDesc = getText ( _config >> _taskName >> ""desc"");" \n + "_taskImg = getText ( _config >> _taskName >> ""img"");" \n + "_taskSimple = getNumber ( _config >> _taskName >> ""simpleTask"");" \n + "_taskDelay = getNumber ( _config >> _taskName >> ""triggerDelay"");" \n + "_taskTrigger = getText ( _config >> _taskName >> ""triggerCondition"");" \n + "_taskFSM = getText ( _config >> _taskName >> ""initfsm"");" \n + "_taskSQF = getText ( _config >> _taskName >> ""initsqf"");" \n + "_taskCall = getText ( _config >> _taskName >> ""initcall"");" \n + "_binTask = getNumber ( _config >> _taskName >> ""callEventBinTask"");" \n + "_taskEventCond1 = compile getText ( _config >> _taskName >> ""callEventCondition1"");" \n + "_taskEventCond2 = compile getText ( _config >> _taskName >> ""callEventCondition2"");" \n + "_taskEventCond3 = compile getText ( _config >> _taskName >> ""callEventCondition3"");" \n + "_taskEventSQF1 = getText ( _config >> _taskName >> ""callEventSQF1"");" \n + "_taskEventSQF2 = getText ( _config >> _taskName >> ""callEventSQF2"");" \n + "_taskEventSQF3 = getText ( _config >> _taskName >> ""callEventSQF3"");" \n + "_taskEventFSM1 = getText ( _config >> _taskName >> ""callEventFSM1"");" \n + "_taskEventFSM2 = getText ( _config >> _taskName >> ""callEventFSM2"");" \n + "_taskEventFSM3 = getText ( _config >> _taskName >> ""callEventFSM3"");" \n + "_taskEventCALL1 = compile getText ( _config >> _taskName >> ""callEventCALL1"");" \n + "_taskEventCALL2 = compile getText ( _config >> _taskName >> ""callEventCALL2"");" \n + "_taskEventCALL3 = compile getText ( _config >> _taskName >> ""callEventCALL3"");" \n + "_taskEventTask1 = getText ( _config >> _taskName >> ""callEventTask1"");" \n + "_taskEventTask2 = getText ( _config >> _taskName >> ""callEventTask2"");" \n + "_taskEventTask3 = getText ( _config >> _taskName >> ""callEventTask3"");" \n + "_event1Done = false;" \n + "_event2Done = false;" \n + "_event3Done = false;" \n + "_taskItems = getArray ( _config >> _taskName >> ""items"");" \n + "_taskItemSpawn = getNumber ( _config >> _taskName >> ""itemSpawn"");" \n + "_taskMarkerType = getNumber ( _config >> _taskName >> ""markerType"");" \n + "_taskMarkerRad = getNumber ( _config >> _taskName >> ""markerRadius"");" \n + "_taskMarkerText = getText ( _config >> _taskName >> ""markerText"");" \n + "_taskMarkerVis = getNumber ( _config >> _taskName >> ""markerVisible"");" \n + "_taskDiagSquelch = getNumber ( _config >> _taskName >> ""diagSquelch"");" \n + "_lastChat = diag_tickTime;" \n + "_taskDiagCond1 = compile getText ( _config >> _taskName >> ""diag1Condition"");" \n + "_taskDiagCond2 = compile getText ( _config >> _taskName >> ""diag2Condition"");" \n + "_taskDiagCond3 = compile getText ( _config >> _taskName >> ""diag3Condition"");" \n + "_taskDiag1 = getArray ( _config >> _taskName >> ""dialogue1"");" \n + "_taskDiag2 = getArray ( _config >> _taskName >> ""dialogue2"");" \n + "_taskDiag3 = getArray ( _config >> _taskName >> ""dialogue3"");" \n + "_chat1Done = false;" \n + "_chat2Done = false;" \n + "_chat3Done = false;" \n + "" \n + "//Failed" \n + "_taskFailedCond = compile getText ( _config >> _taskName >> ""failedCondition"");" \n + "_taskFailDist = getNumber ( _config >> _taskName >> ""abandonDist"");" \n + "if(_taskFailDist < 1)then{_taskFailDist=999999;};" \n + "_taskFailTime = getNumber ( _config >> _taskName >> ""abandonTime"");" \n + "if(_taskFailTime < 1)then{_taskFailTime=999999;};" \n + "_taskFailed = false;" \n + "//Failed Calls and Diag done in task failed." \n + "_taskFailedCall = compile """";" \n + "" \n + "//Completed" \n + "_taskCompleteCond = compile getText ( _config >> _taskName >> ""completeCondition"");" \n + "_taskReward = getArray ( _config >> _taskName >> ""reward"");" \n + "_taskCompleteDiag1 = getArray ( _config >> _taskName >> ""completed1"");" \n + "_taskCompleteDiag2 = getArray ( _config >> _taskName >> ""completed2"");" \n + "_taskCompleteCall = compile getText ( _config >> _taskName >> ""completedCALL"");" \n + "_diag1Done = false;" \n + "_diag2Done = false;" \n + "_taskReminder = getArray ( _config >> _taskName >> ""reminder"");" \n + "_taskCheckTime = getNumber ( _config >> _taskName >> ""taskCheckTime"");" \n + "" \n + "" \n + "_taskNextTrigger = getArray ( _config >> _taskName >> ""nextTask"");" \n + "_taskCleanup = getNumber ( _config >> _taskName >> ""cleanUp"");" \n + "_missionCleanUp = getArray ( _config >> _taskName >> ""cleanUpCalls"");" \n + "" \n + "_completed = false;" \n + "" \n + "//Custom Vars" \n + "_customVars = [];" \n + "_varNames = getArray ( _config >> ""varName"");" \n + "_varDatas = getArray ( _config >> ""varData"");" \n + "_serverCmd = [];" \n + "_doSkip = false;" \n + "_taskFailed = false;" \n + "_doBin = false;" \n + "" \n + "if(count _varNames > 0)then{" \n + "" \n + "{" \n + "call compile format [""missionNamespace setVariable%3""""%1"""", %2%4;"",parseText _x,_varDatas select _forEachIndex,parseText ""["",parseText ""]""];" \n + "//systemChat format [""%1 = %2"",parseText (_x),(_varDatas select _forEachIndex)];" \n + "//_customVars pushBack (_varDatas select _forEachIndex);" \n + "}forEach _varNames;" \n + "" \n + "};" \n + "" \n + "//Functions" \n + "_execFSM = {" \n + "//systemChat format[""execing FSM %1"",_this];" \n + "call compile format [""[_taskName,_plyr,_unit,_taskItem] execFSM """"%1"""""",_this];" \n + "};" \n + "" \n + "_execSQF = {" \n + "//systemChat format[""execing SQF %1"",_this];" \n + "call compile format [""[_taskName,_plyr,_unit,_taskItem] execVM """"%1"""""",_this];" \n + "};" \n + "" \n + "_spawnWH = {" \n + "_retTaskWH = objNull;" \n + "_retTaskWH = createVehicle[""GroundWeaponHolder"",_this select 0,[],0,""CAN_COLLIDE""];" \n + "_retTaskWH" \n + "};" \n + "" \n + "//SystemChat format [""INIT: %1"",_taskTitle];" \n + "_debugDo = ""INIT"";" \n + "_showDebug = {" \n + "//hint format [""%4\n%1\nStage: %2\nMsg: %3\nTask: %4"", _debugDo,_missionStage,_msg1,_missionName,_taskTitle];" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class run_test + { + itemno = 74; + priority = 20.000000; + to="override_for_task"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_editorTest"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class simple_task + { + itemno = 72; + priority = 10.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskSimple > 0;"/*%FSM*/; + action=/*%FSM*/"_doSkip = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 33; + priority = 0.000000; + to="comms"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class items_and_vars + { + name = "items_and_vars"; + itemno = 4; + init = /*%FSM*/"//SystemChat format [""START: Do Spawn: %1"",_taskItemSpawn];" \n + "_taskStartPos = getPosATL _plyr;" \n + "_startTime = diag_tickTime;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class item_spawn + { + itemno = 22; + priority = 5.000000; + to="spawn_item"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskItemSpawn > 0 && count _taskItems > 0"/*%FSM*/; + action=/*%FSM*/"_taskItem = objNull;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class no_item_spawn + { + itemno = 7; + priority = 0.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskItemSpawn < 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + name = "end"; + itemno = 6; + init = /*%FSM*/"//uiNameSpace setVariable [""axeTask"",nil];" \n + "if!(_doBin)then{" \n + "_plyrVar = missionNamespace getVariable [""EPOCH_playerMissionArray"",[]];" \n + "_taskIndex = ((_plyrVar apply {_x find ""axeTask"" > -1;}) find true);" \n + "if(_taskIndex > -1)then{" \n + "_plyrVar deleteAt _taskIndex;" \n + "};" \n + "missionNamespace setVariable [""EPOCH_playerMissionArray"",_plyrVar];" \n + "};" \n + "if(count _missionCleanUp > 0)then{" \n + "{" \n + "call compile _x;" \n + "} forEach _missionCleanUp;" \n + "};" \n + "_debugDo = ""DISPOSE"";" \n + "diag_log format [""Task Failed: %1"",_taskName];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class do_monitor + { + name = "do_monitor"; + itemno = 8; + init = /*%FSM*/"_lastLoop = diag_tickTime;" \n + "EPOCH_taskLastLoop = _lastLoop;" \n + "_plyPos = getPosATL _plyr;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 11; + priority = 0.000000; + to="chat_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class next + { + name = "next"; + itemno = 9; + init = /*%FSM*/"//Clean Up / Other Options here"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class task_completed + { + itemno = 5; + priority = 15.000000; + to="completed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_completed && diag_tickTime - _lastLoop > _taskCheckTime"/*%FSM*/; + action=/*%FSM*/"_lastLoop = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class task_failed + { + itemno = 49; + priority = 10.000000; + to="failed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskFailed"/*%FSM*/; + action=/*%FSM*/"_taskFailedDiag = [];" \n + "_taskFailedFSM = """";" \n + "_taskFailedSQF = """";" \n + "_taskFailedCall = compile """";" \n + "" \n + "if!(_editorTest)then{" \n + "_taskFailedDiag = getArray ( _config >> _taskName >> ""failed"");" \n + "_taskFailedFSM = getText ( _config >> _taskName >> ""failedFSM"");" \n + "_taskFailedSQF = getText ( _config >> _taskName >> ""failedSQF"");" \n + "_taskFailedCall = compile getText ( _config >> _taskName >> ""failedCall"");" \n + "_nextTask = getArray ( _config >> _taskName >> ""failedTask"");" \n + "}else{" \n + "_taskFailedDiag = parseText axeValCacheList select 41;" \n + "_taskFailedFSM = axeValCacheList select 42;" \n + "_taskFailedSQF = axeValCacheList select 43;" \n + "_taskFailedCall = axeValCacheList select 44;" \n + "_nextTask = parseText axeValCacheList select 45;" \n + "};" \n + "" \n + "_taskReminder = [];"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class loop + { + itemno = 10; + priority = 5.000000; + to="do_monitor"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((!_completed) || (!_taskFailed)) && diag_tickTime - _lastLoop > _taskCheckTime"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class chat_conditions + { + name = "chat_conditions"; + itemno = 13; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class chat_3 + { + itemno = 21; + priority = 15.000000; + to="chat_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _lastChat > _taskDiagSquelch && call _taskDiagCond3 && count _taskDiag3 > 0"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskDiag3;" \n + "" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "" \n + "" \n + "_chat3Done = true;" \n + "_lastChat = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class chat_2 + { + itemno = 20; + priority = 10.000000; + to="chat_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _lastChat > _taskDiagSquelch && call _taskDiagCond2 && count _taskDiag2 > 0"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskDiag2;" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "_chat2Done = true;" \n + "_lastChat = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class server + { + itemno = 71; + priority = 10.000000; + to="comms_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _serverCmd > 0"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class chat_1 + { + itemno = 19; + priority = 5.000000; + to="chat_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!_chat1Done) && call _taskDiagCond1 && count _taskDiag1 > 0"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskDiag1;" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "_chat1Done = true;" \n + "_lastChat = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 12; + priority = 0.000000; + to="event_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class event_conditions + { + name = "event_conditions"; + itemno = 14; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class event_3 + { + itemno = 32; + priority = 20.000000; + to="event_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!_event3Done) && call _taskEventCond3"/*%FSM*/; + action=/*%FSM*/"if!(_taskEventFSM3 == """")then{" \n + "_taskEventFSM3 call _execFSM;" \n + "};" \n + "" \n + "if!(_taskEventSQF3 == """")then{" \n + "_taskEventSQF3 call _execSQF;" \n + "};" \n + "" \n + "if!(str(_taskEventCALL3) == ""{}"")then{" \n + "call _taskEventCALL3;" \n + "};" \n + "" \n + "if!(_taskEventTask3 == """")then{" \n + "call compile format[""epochTaskHandle = [""""%2""""] execFSM """"%1\task_control.fsm"""";"",_fsmPath,_taskEventTask3];" \n + "" \n + "if(_binTask > 0)then{" \n + "_doBin = true;" \n + "};" \n + "" \n + "};" \n + "" \n + "_event3Done = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class event_2 + { + itemno = 31; + priority = 15.000000; + to="event_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!_event2Done) && call _taskEventCond2"/*%FSM*/; + action=/*%FSM*/"if!(_taskEventFSM2 == """")then{" \n + "_taskEventFSM2 call _execFSM;" \n + "};" \n + "" \n + "if!(_taskEventSQF2 == """")then{" \n + "_taskEventSQF2 call _execSQF;" \n + "};" \n + "" \n + "if!(str(_taskEventCALL2) == ""{}"")then{" \n + "call _taskEventCALL2;" \n + "};" \n + "" \n + "if!(_taskEventTask2 == """")then{" \n + "call compile format[""epochTaskHandle = [""""%2""""] execFSM """"%1\task_control.fsm"""";"",_fsmPath,_taskEventTask2];" \n + "" \n + "if(_binTask > 0)then{" \n + "_doBin = true;" \n + "};" \n + "" \n + "};" \n + "" \n + "_event2Done = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class event_1 + { + itemno = 30; + priority = 10.000000; + to="event_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!_event1Done) && call _taskEventCond1"/*%FSM*/; + action=/*%FSM*/"if!(_taskEventFSM1 == """")then{" \n + "_taskEventFSM1 call _execFSM;" \n + "};" \n + "" \n + "if!(_taskEventSQF1 == """")then{" \n + "_taskEventSQF1 call _execSQF;" \n + "};" \n + "" \n + "if!(str(_taskEventCALL1) == ""{}"")then{" \n + "call _taskEventCALL1;" \n + "};" \n + "" \n + "if!(_taskEventTask1 == """")then{" \n + "//TODO: Allow new separate mission from here." \n + "call compile format[""epochTaskHandle = [""""%2""""] execFSM """"%1\task_control.fsm"""";"",_fsmPath,_taskEventTask1];" \n + "" \n + "if(_binTask > 0)then{" \n + "_doBin = true;" \n + "};" \n + "" \n + "};" \n + "" \n + "_event1Done = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class bin_it + { + itemno = 76; + priority = 5.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doBin"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 15; + priority = 0.000000; + to="task_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class comms + { + name = "comms"; + itemno = 16; + init = /*%FSM*/"//[_plyr,0,_taskID] remoteExec [""EPOCH_Server_missionComms"",3];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class delay + { + itemno = 1; + priority = 0.000000; + to="items_and_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime > _startTime + _taskDelay"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class task_conditions + { + name = "task_conditions"; + itemno = 18; + init = /*%FSM*/"if((_plyPos distance _taskStartPos > _taskFailDist) || (diag_tickTIme - _startTime > _taskFailTime) || (call _taskFailedCond))then{" \n + "_taskFailed = true;" \n + "};" \n + "" \n + "if(call _taskCompleteCond)then{" \n + "_completed = true;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 17; + priority = 0.000000; + to="next"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class actions + { + name = "actions"; + itemno = 23; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class call + { + itemno = 60; + priority = 20.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_taskCall == """")" \n + "//USE isNill NOT == """""/*%FSM*/; + action=/*%FSM*/"call compile _taskCall;" \n + "_taskCall = """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class fsm + { + itemno = 58; + priority = 15.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_taskFSM == """")"/*%FSM*/; + action=/*%FSM*/"_taskFSM call _execFSM;" \n + "_taskFSM = """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class sqf + { + itemno = 59; + priority = 10.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_taskSQF == """")"/*%FSM*/; + action=/*%FSM*/"systemChat ""SQF NOT NIL"";" \n + "_taskSQF call _execSQF;" \n + "_taskSQF = """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class skip + { + itemno = 73; + priority = 5.000000; + to="next_task"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doSkip"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 42; + priority = 0.000000; + to="markers"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class spawn_item + { + name = "spawn_item"; + itemno = 25; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class near_player + { + itemno = 29; + priority = 15.000000; + to="spawn_item"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskItemSpawn == 3"/*%FSM*/; + action=/*%FSM*/"_pos = getPosATL player;" \n + "_taskItem = [_pos] call _spawnWH;" \n + "_taskItemSpawn = -1;" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class in_house + { + itemno = 27; + priority = 10.000000; + to="spawn_item"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskItemSpawn == 1"/*%FSM*/; + action=/*%FSM*/"_nrBuilds = nearestObjects [_plyr,[""house""],50];" \n + "_arrGarr = [];" \n + "_bldMap = [];" \n + "_pos = getPosATL _plyr;" \n + "" \n + "{" \n + "" \n + "if(!((typeOf _x) in _filterBuilds))then{" \n + "" \n + " _garrCount = 0;" \n + "" \n + " while {format [""%1"", _x buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n + " _garrCount = _garrCount + 1;" \n + " };" \n + "" \n + " if(_garrCount > 0)then{" \n + " _arrGarr pushBack [_x,_garrCount];" \n + " };" \n + "" \n + "};" \n + "" \n + "}forEach _nrBuilds;" \n + "" \n + "if(count _arrGarr > 0)then{" \n + "" \n + " {" \n + " _garrPos = (_x select 0) buildingPos (floor random (_x select 1));" \n + " _bldMap pushBack _garrPos;" \n + "" \n + " }forEach _arrGarr;" \n + "" \n + "};" \n + "" \n + "if(count _bldMap > 0)then{" \n + "_pos = _bldMap select (floor random (count _bldMap));" \n + "};" \n + "" \n + "" \n + "//_taskItem = createVehicle[""WeaponHolderSimulated"",_pos,[],0,""CAN_COLLIDE""];" \n + "_taskItem = [_pos] call _spawnWH;" \n + "" \n + "" \n + "_taskItemSpawn = -1;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class hidden_nearby + { + itemno = 28; + priority = 5.000000; + to="find_spot"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskItemSpawn == 2"/*%FSM*/; + action=/*%FSM*/"_taskItemSpawn = -1;" \n + "_posSafe = false;" \n + "_done = false;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class ready + { + itemno = 26; + priority = 0.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNull _taskItem"/*%FSM*/; + action=/*%FSM*/"[player,Epoch_personalToken,_taskItems,[],_taskItem,false] remoteExec [""EPOCH_Server_createObject"",2];" \n + "EPOCH_taskItem = _taskItem;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class completed + { + name = "completed"; + itemno = 34; + init = /*%FSM*/"//Put more checks in for empty dialogue array so as not just waiting a set time"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class diag_1 + { + itemno = 35; + priority = 15.000000; + to="completed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_diag1Done && count _taskCompleteDiag1 > 0"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskCompleteDiag1;" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "_diag1Done = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class diag_2 + { + itemno = 36; + priority = 10.000000; + to="completed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_diag1Done && (!_diag2Done) && diag_tickTime - _lastLoop > 20 && count _taskCompleteDiag2 > 0"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskCompleteDiag2;" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "_diag2Done = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class call + { + itemno = 82; + priority = 5.000000; + to="completed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(str(_taskCompleteCall) == ""{}"")"/*%FSM*/; + action=/*%FSM*/"call _taskCompleteCall;" \n + "_taskCompleteCall = compile """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 41; + priority = 0.000000; + to="reward"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class reward + { + name = "reward"; + itemno = 38; + init = /*%FSM*/"if(count _taskReward > 0)then{" \n + "" \n + "diag_log format [""spawn reward: %1"",_taskReward];" \n + "" \n + "_rewardHolder = [getPosATL player] call _spawnWH;" \n + "" \n + "[player,Epoch_personalToken,_taskReward,[],_rewardHolder,false] remoteExec [""EPOCH_Server_createObject"",2];" \n + "" \n + "};" \n + "" \n + "_debugDo = ""REWARD"";"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class pause + { + itemno = 37; + priority = 0.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _lastLoop > _taskCheckTime"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class comms_1 + { + name = "comms_1"; + itemno = 39; + init = /*%FSM*/"//[_plyr,1,_taskID] remoteExec [""EPOCH_Server_missionComms"",3];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 67; + priority = 0.000000; + to="next_task"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class markers + { + name = "markers"; + itemno = 43; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class continue + { + itemno = 44; + priority = 100.000000; + to="do_monitor"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"//no marker" \n + "_taskMarkerType < 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class marker_pos + { + itemno = 46; + priority = 0.000000; + to="do_markers"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskMarkerType > 0"/*%FSM*/; + action=/*%FSM*/"_markerPos = [];" \n + "if(isNil ""EPOCH_taskMarkerPos"")then{" \n + "if!(isNull _trgt)then{" \n + "_markerPos = getPos _trgt;" \n + "};" \n + "" \n + "if!(isNull _unit)then{" \n + "_markerPos = getPos _unit;" \n + "};" \n + "" \n + "if!(isNull _taskItem)then{" \n + "_markerPos = getPos _taskItem;" \n + "};" \n + "" \n + "}else{" \n + "_markerPos = EPOCH_taskMarkerPos;" \n + "};" \n + "" \n + "_mkrName = format[""EPOCHTaskMark%1%2"", _taskName,diag_tickTime];" \n + "EPOCH_taskMarkerName = _mkrName;" \n + "_markerText = getText ( _config >> _taskName >> ""markerText"");" \n + "_markerRad = getNumber ( _config >> _taskName >> ""markerRadius"");" \n + "" \n + "if(_taskMarkerType == 2)then{" \n + "_markerPos set [0, (_markerPos select 0) + (floor (random _markerRad) - (_markerRad / 2))];" \n + "_markerPos set [1, (_markerPos select 1) + (floor (random _markerRad) - (_markerRad / 2))];" \n + "};" \n + "" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class do_markers + { + name = "do_markers"; + itemno = 47; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class continue + { + itemno = 44; + priority = 100.000000; + to="do_monitor"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"//no marker" \n + "_taskMarkerType < 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class radius + { + itemno = 45; + priority = 0.000000; + to="do_markers"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskMarkerType == 2"/*%FSM*/; + action=/*%FSM*/"[[_taskMarkerVis,player],_markerPos,""ELLIPSE"",""mil_dot"",_markerText,""ColorYellow"",[_taskMarkerRad,_taskMarkerRad], ""SolidBorder"", 42, 0.6,_taskTitle] remoteExec [""EPOCH_server_makeMarker"",2];" \n + "_taskMarkerType = -1;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class point + { + itemno = 24; + priority = 0.000000; + to="do_markers"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskMarkerType == 1"/*%FSM*/; + action=/*%FSM*/"[[_taskMarkerVis,player],_markerPos,""ICON"",""mil_dot"",_markerText,""ColorYellow"",[0.8,0.8], ""SolidBorder"", 42, 0.6,_taskTitle] remoteExec [""EPOCH_server_makeMarker"",2];" \n + "_taskMarkerType = -1;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class find_spot + { + name = "find_spot"; + itemno = 48; + init = /*%FSM*/"//TODO: try catch used incorrectly here" \n + "try{" \n + "_pos = [(getPosATL _plyr), (floor (random 80) + 42), floor random 360] call BIS_fnc_relPos;" \n + "" \n + "if (!lineIntersects [eyePos _plyr, _pos, _plyr, _unit]) then {_posSafe = true;};" \n + "" \n + "if(_posSafe)then{" \n + "//_taskItem = createVehicle[""GroundWeaponHolder"",_pos,[],0,""CAN_COLLIDE""];" \n + "_taskItem = [_pos] call _spawnWH;" \n + "_taskItemSpawn = -1;" \n + "_done = true;" \n + "};" \n + "" \n + "}catch{" \n + "systemchat format[""CATCH:%1"",_exception];" \n + "done = true;" \n + "_taskItemSpawn = 1;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class not_hidden + { + itemno = 61; + priority = 10.000000; + to="find_spot"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_posSafe;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class is_hidden + { + itemno = 62; + priority = 5.000000; + to="spawn_item"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_done;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class failed + { + name = "failed"; + itemno = 50; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class call + { + itemno = 54; + priority = 20.000000; + to="failed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(str(_taskFailedCall) == ""{}"")"/*%FSM*/; + action=/*%FSM*/"call _taskFailedCall;" \n + "_taskFailedCall = compile """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class sqf + { + itemno = 53; + priority = 15.000000; + to="failed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_taskFailedSQF == """")"/*%FSM*/; + action=/*%FSM*/"_taskFailedSQF call _execSQF;" \n + "_taskFailedSQF = """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class fsm + { + itemno = 52; + priority = 10.000000; + to="failed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_taskFailedFSM == """")"/*%FSM*/; + action=/*%FSM*/"_taskFailedFSM call _execFSM;" \n + "_taskFailedFSM = """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class diag + { + itemno = 51; + priority = 5.000000; + to="failed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _taskFailedDiag > 0"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskFailedDiag;" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "_taskFailedDiag = [];"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class pause + { + itemno = 37; + priority = 0.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _lastLoop > _taskCheckTime"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class clean_up + { + name = "clean_up"; + itemno = 55; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class clean_up + { + itemno = 69; + priority = 15.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskCleanup > 0"/*%FSM*/; + action=/*%FSM*/"//deleteVehicle _taskItem;" \n + "//[_plyr,0,_taskID,_taskItem] remoteExec [""EPOCH_Server_missionComms"",3];" \n + "_taskCleanup = -1;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class remind_dialogue + { + itemno = 66; + priority = 10.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _taskReminder > 0 && !_taskFailed"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskReminder;" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "_taskReminder = [];"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class markers + { + itemno = 57; + priority = 5.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(isNil ""EPOCH_taskMarkerName"") && (_taskCleanup > 0 || _taskFailed)"/*%FSM*/; + action=/*%FSM*/"[player,_taskMarkerVis,EPOCH_taskMarkerName] remoteExec [""EPOCH_server_removeMarker"",2];" \n + "_mkrName = nil;" \n + "EPOCH_taskMarkerName = nil;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 56; + priority = 0.000000; + to="comms_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class gui + { + name = "gui"; + itemno = 63; + init = /*%FSM*/"//GUI dialogue Options for Raymix :)"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class no_dialogoue + { + itemno = 64; + priority = 10.000000; + to="items_and_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskTitle == """""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class dialogue + { + itemno = 65; + priority = 5.000000; + to="gui"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_taskTitle == """")"/*%FSM*/; + action=/*%FSM*/"" \n + "axeTaskTitle = _taskTitle;" \n + "axeTaskDesc = _taskDesc;" \n + "axeTaskImg = _taskImg;" \n + "createDialog ""taskAccept"";" \n + "" \n + "_taskTitle = """";"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class next_task + { + name = "next_task"; + itemno = 68; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class mission_complete + { + itemno = 40; + priority = 10.000000; + to="end"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _taskNextTrigger < 1 || !alive _plyr || _taskFailed || _doBin"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class next_task + { + itemno = 79; + priority = 5.000000; + to="setup"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _taskNextTrigger > 0 && !_taskFailed"/*%FSM*/; + action=/*%FSM*/"_taskName = selectRandom _taskNextTrigger;" \n + "diag_log format [""Trigger Next Task: %1"",_taskName];" \n + "_taskNextTrigger = [];"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class comms_2 + { + name = "comms_2"; + itemno = 70; + init = /*%FSM*/"" \n + "systemChat format [""SERVER CMD: %1"",_serverCmd];" \n + "" \n + "_serverCmd = [];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 12; + priority = 0.000000; + to="event_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class override_for_task + { + name = "override_for_task"; + itemno = 75; + init = /*%FSM*/"_taskAuthor = axeValCacheList select 0;" \n + "_taskTitle = axeValCacheList select 1;" \n + "_taskSimple = parseNumber (axeValCacheList select 2);" \n + "_taskDesc = ""Test Task"";" \n + "_taskImg = ""NOIMG"";" \n + "_taskTrigger = axeValCacheList select 3;" \n + "_taskLimit = parseNumber (axeValCacheList select 4);" \n + "_taskCheckTime = parseNumber (axeValCacheList select 5);" \n + "_taskDelay = parseNumber (axeValCacheList select 6);" \n + "_taskItems = parseText axeValCacheList select 7;" \n + "_taskItemSpawn = parseNumber (axeValCacheList select 8);" \n + "_taskMarkerType = parseNumber (axeValCacheList select 9);" \n + "_taskMarkerRad = parseNumber (axeValCacheList select 10);" \n + "_taskMarkerText = axeValCacheList select 11;" \n + "_taskFSM = axeValCacheList select 12;" \n + "_taskSQF = axeValCacheList select 13;" \n + "_taskCall = axeValCacheList select 14;" \n + "_binTask = parseNumber (axeValCacheList select 15);" \n + "_taskEventCond1 = axeValCacheList select 16;" \n + "_taskEventCond2 = axeValCacheList select 17;" \n + "_taskEventCond3 = axeValCacheList select 18;" \n + "_taskEventCALL1 = axeValCacheList select 19;" \n + "_taskEventFSM1 = axeValCacheList select 20;" \n + "_taskEventSQF1 = axeValCacheList select 21;" \n + "_taskEventTask1 = axeValCacheList select 22;" \n + "_taskEventCALL2 = axeValCacheList select 23;" \n + "_taskEventFSM2 = axeValCacheList select 24;" \n + "_taskEventSQF2 = axeValCacheList select 25;" \n + "_taskEventTask2 = axeValCacheList select 26;" \n + "_taskEventCALL3 = axeValCacheList select 27;" \n + "_taskEventFSM3 = axeValCacheList select 28;" \n + "_taskEventSQF3 = axeValCacheList select 29;" \n + "_taskEventTask3 = axeValCacheList select 30;" \n + "_taskDiagCond1 = axeValCacheList select 31;" \n + "_taskDiag1 = parseText axeValCacheList select 32;" \n + "_taskDiagSquelch = parseNumber (axeValCacheList select 33);" \n + "_taskDiagCond2 = axeValCacheList select 34;" \n + "_taskDiag2 = parseText axeValCacheList select 35;" \n + "_taskDiagCond3 = axeValCacheList select 36;" \n + "_taskDiag3 = parseText axeValCacheList select 37;" \n + "_taskFailedCond = axeValCacheList select 38;" \n + "_taskFailDist = parseNumber (axeValCacheList select 39);" \n + "_taskFailTime = parseNumber (axeValCacheList select 40);" \n + "//See task failed for this bit" \n + "_taskCleanup = parseNumber (axeValCacheList select 46);" \n + "_taskCompleteCond = axeValCacheList select 47;" \n + "_taskReward = parseText axeValCacheList select 48;" \n + "_taskCompleteDiag1 = parseText axeValCacheList select 49;" \n + "_taskCompleteDiag2 = parseText axeValCacheList select 50;" \n + "_taskReminder = axeValCacheList select 51;" \n + "_taskNextTrigger = parseText axeValCacheList select 52;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class simple_task + { + itemno = 72; + priority = 10.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskSimple > 0;"/*%FSM*/; + action=/*%FSM*/"_doSkip = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 33; + priority = 0.000000; + to="comms"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="task_control"; + finalStates[] = + { + "end", + }; +}; +/*%FSM*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_AutoRun.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_AutoRun.sqf new file mode 100644 index 0000000..516c9ad --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_AutoRun.sqf @@ -0,0 +1,65 @@ +/* + Author: He-Man + + Contributors: + + Description: Autorun script + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_AutoRun.sqf +*/ + +private ["_myheight","_nextpos","_newheight"]; + +// _EPOCH_Autorunspeed is NOT a private variable, it is defined in Masterloop init! + +_myheight = (getposasl player) select 2; +_nextpos = player modelToWorld [0,1,0]; +_nextpos set [2,0]; +_newheight = (atltoasl _nextpos) select 2; +if (surfaceiswater position player || ((getposatl player) select 2) > 0.5) then { + _newheight = _myheight; +}; +if (_myheight-_newheight > 0.8 || _myheight-_newheight < -0.6) then { + if (_EPOCH_Autorunspeed != 1) then { + player playActionnow 'PlayerWalkF'; + } + else { + player playAction 'PlayerWalkF'; + }; + _EPOCH_Autorunspeed = 1; +} +else { + if (_myheight-_newheight > 0.5 || _myheight-_newheight < -0.35) then { + if (_EPOCH_Autorunspeed != 2) then { + player playActionnow 'PlayerSlowF'; + } + else { + player playAction 'PlayerSlowF'; + }; + _EPOCH_Autorunspeed = 2; + } + else { + if (getFatigue player < 0.8) then { + if (_EPOCH_Autorunspeed != 3) then { + player playActionnow 'FastF'; + } + else { + player playAction 'FastF'; + }; + _EPOCH_Autorunspeed = 3; + } + else { + if (_EPOCH_Autorunspeed != 2) then { + player playActionnow 'PlayerSlowF'; + } + else { + player playAction 'PlayerSlowF'; + }; + _EPOCH_Autorunspeed = 2; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_AutoRun_Check.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_AutoRun_Check.sqf new file mode 100644 index 0000000..e101ea1 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_AutoRun_Check.sqf @@ -0,0 +1,49 @@ +/* + Author: He-Man + + Contributors: + + Description: Check, if Player can Autorun + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_AutoRun_Check.sqf + + Usage: call EPOCH_AutoRun_Check; + + Returns: + BOOL +*/ + +private["_canAutoRun","_currentPos"]; +_canAutoRun = true; +if !(alive player) exitwith { + false +}; +/* +if !(istouchingground player) exitwith { + false +}; +*/ +if !((vehicle player) == player) exitwith { + false +}; +if ((getPosasl player) select 2 < -0.5) exitwith { + false +}; +if ((player getHitPointDamage "HitLegs") >= 0.5) exitwith { + ["Can not AutoRun - Your legs are Broken!",5] call Epoch_Message; + false +}; +if !(player nearObjects["Const_All_Walls_F", 6] isEqualTo[]) then { + _currentPos = player modelToWorld [0, 1, 1]; + if !(surfaceIsWater _currentPos) then { + _currentPos = ATLtoASL _currentPos; + }; + if (lineIntersects[eyePos player, _currentPos, player, objNull]) then { + _canAutoRun = false; + }; +}; +_canAutoRun diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_CamUse.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_CamUse.sqf new file mode 100644 index 0000000..c9308cc --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_CamUse.sqf @@ -0,0 +1,133 @@ +/* + Author: He-Man + + Contributors: + + Description: BaseCam Script + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_CamUse.sqf +*/ + +private ["_mycams","_curcam"]; + +_mycams = EPOCH_BaseCams select {(_x getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID player, Epoch_my_GroupUID]}; +if (["CfgEpochClient", "BaseCamOnlyHome",true] call EPOCH_fnc_returnConfigEntryV2) then { + _mycams = _mycams select { + _cam = _x; + _jammer = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {_cam distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))}; + !((_jammer select {(_x getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID player, Epoch_my_GroupUID]}) isequalto []) + }; +}; +if !(_mycams isequalto []) then { + _curcam = _mycams find Epoch_ActiveCam; + if (_curcam > -1 && (count _mycams) > (_curcam + 1)) then { + Epoch_ActiveCam = _mycams select (_curcam + 1); + } + else { + Epoch_ActiveCam = _mycams select 0; + }; +} +else { + Epoch_ActiveCam = objnull; +}; + +if !(isnull (finddisplay -1200)) exitwith {}; +if (isnull Epoch_ActiveCam) exitwith { + ["No Camera found",5] call Epoch_Message; +}; + +_mycams spawn { + private ["_mycams","_display","_AutoCam","_ActiveCam","_campos","_CamFov","_CamDir","_CamDist","_EpochCam","_targetheight","_targetpos","_dirs","_intensity","_sharpness","_h","_oldalpha","_newalpha"]; + _mycams = _this; + createdialog 'Epoch_CamDialog'; + waituntil {!isnull finddisplay -1200}; + _display = finddisplay -1200; + (_display displayctrl 1000) ctrlsettext format ["Cam %1",(_mycams find Epoch_ActiveCam) + 1]; + (_display displayctrl 1001) ctrlsetstructuredtext parseText format [ + "Controls:

Cam Up: %1
Cam Down: %2
Cam Left: %3
Cam Right: %4
Zoom In: %5
Zoom Out: %6

AutoCam: %7
NextCam: %8", + keyName Epoch_KB_BaseCamUp,keyName Epoch_KB_BaseCamDown,keyName Epoch_KB_BaseCamLeft,keyName Epoch_KB_BaseCamRight,keyName Epoch_KB_BaseCamZoomIn,keyName Epoch_KB_BaseCamZoomOut,keyName Epoch_KB_BaseCamAutoCam,keyName Epoch_KB_BaseCamNextCam + ]; + Epoch_AutoCam = true; + _AutoCam = Epoch_AutoCam; + Epoch_CamAdjust = [0,0,0]; + _ActiveCam = Epoch_ActiveCam; + _campos = Epoch_ActiveCam getRelPos [0.2,180]; + _campos set [2,(getposatl Epoch_ActiveCam select 2)]; + if (isnil "Epoch_CamFilmGrain") then { + Epoch_CamFilmGrain = ppEffectCreate ["FilmGrain", 2000 + 25]; + }; + Epoch_CamFilmGrain ppEffectEnable true; + _intensity = ((player distance Epoch_ActiveCam) / 10000) min 1; + _sharpness = 1.25 - _intensity; + Epoch_CamFilmGrain ppEffectAdjust [_intensity,_sharpness,2.01,0.75,1.0,true]; + Epoch_CamFilmGrain ppEffectCommit 0; + _CamFov = 0.7; + _CamDir = 0; + _CamDist = 250; + _EpochCam = 'camera' camCreate _campos; + showCinemaBorder true; + _EpochCam cameraEffect ['internal', 'front']; + _EpochCam camCommit 0; + _targetheight = ((getposasl Epoch_ActiveCam) select 2)-50; + _targetpos = Epoch_ActiveCam getRelPos [_CamDist, 180+_CamDir]; + _targetpos set [2,_targetheight]; + if !(surfaceiswater _targetpos) then { + _targetpos = ASLtoATL _targetpos; + }; + _EpochCam camSetTarget _targetpos; + _EpochCam camCommit 0; + _dirs = [5,10,15,20,25,30,35,40,45,40,35,30,25,20,15,10,5,0,-5,-10,-15,-20,-25,-30,-35,-40,-45,-40,-35,-30,-25,-20,-15,-10,-5,0]; + while {!isnull _display} do { + Epoch_CamAdjust params ["_dir","_height","_zoom"]; + _AutoCam = Epoch_AutoCam; + if !(_ActiveCam isequalto Epoch_ActiveCam) then { + _ActiveCam = Epoch_ActiveCam; + camDestroy _EpochCam; + _campos = Epoch_ActiveCam getRelPos [0.2,180]; + _campos set [2,(getposatl Epoch_ActiveCam select 2)]; + _CamFov = 0.7; + _CamDir = 0; + _EpochCam = 'camera' camCreate _campos; + showCinemaBorder true; + _EpochCam cameraEffect ['internal', 'front']; + _EpochCam camCommit 0; + _targetheight = ((getposasl Epoch_ActiveCam) select 2)-50; + _intensity = ((player distance Epoch_ActiveCam) / 10000) min 1; + _sharpness = 1.25 - _intensity; + Epoch_CamFilmGrain ppEffectAdjust [_intensity,_sharpness,2.01,0.75,1.0,true]; + Epoch_CamFilmGrain ppEffectCommit 0; + (_display displayctrl 1000) ctrlsettext format ["Cam %1",(_mycams find Epoch_ActiveCam) + 1]; + }; + if !(Epoch_AutoCam) then { + _targetheight = ((_targetheight + _height) min 50) max -150; + _CamDir = ((_CamDir + _dir) max -45) min 45; + _CamFov = ((_CamFov + _zoom) min 1.25) max 0.35; + } + else { + _targetheight = ((getposasl Epoch_ActiveCam) select 2)-50; + _CamFov = 0.7; + _CamDir = _dirs deleteat 0; + _dirs pushback _CamDir; + }; + _targetpos = Epoch_ActiveCam getRelPos [_CamDist, 180+_CamDir]; + _targetpos set [2,_targetheight]; + if !(surfaceiswater _targetpos) then { + _targetpos = ASLtoATL _targetpos; + }; + _EpochCam camSetTarget _targetpos; + _EpochCam camSetFov _CamFov; + _EpochCam camCommit 0.75; + Epoch_CamAdjust = [0,0,0]; + waitUntil {camCommitted _EpochCam || isnull _display || isnull Epoch_ActiveCam || !(_ActiveCam isequalto Epoch_ActiveCam)}; + if (isnull Epoch_ActiveCam) exitwith {}; + }; + player cameraEffect ['Terminate', 'FRONT']; + camDestroy _EpochCam; + _display closedisplay 0; + Epoch_ActiveCam = objnull; + Epoch_CamFilmGrain ppEffectEnable false; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_DefibrillatorUse.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_DefibrillatorUse.sqf new file mode 100644 index 0000000..2866041 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_DefibrillatorUse.sqf @@ -0,0 +1,57 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Epoch use Defibrillator function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_DefibrillatorUse.sqf +*/ + +private ["_item","_energyneeded","_totalDefis","_CurDefiArr"]; + +params ["_unit"]; + +if (isplayer _unit) then { + _item = 'ItemDefibrillator'; + if (_item in magazines player) then { + _energyneeded = 3; + _totalDefis = (magazinesammo player) select {(_x select 0) isequalto _item}; + _CurDefiArr = []; + { + if ((_x select 1) >= _energyneeded) exitwith { + _CurDefiArr = _totalDefis deleteat _foreachindex; + }; + } foreach _totalDefis; + if (_CurDefiArr isequalto []) exitwith { + ["Defibrillator needs more Energy",5] call Epoch_Message; + }; + if ((_CurDefiArr select 1) - _energyneeded > 0) then { + _CurDefiArr set [1,(_CurDefiArr select 1) - _energyneeded]; + _totalDefis pushback _CurDefiArr; + }; + player removemagazines _item; + { + _x call EPOCH_fnc_addMagazineOverflow; + } foreach _totalDefis; + _unit spawn { + player playMove 'AinvPknlMstpSnonWrflDnon_medic0'; + player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd'; + uisleep 8; + if (alive player && isplayer _this) then { + [_this,player,Epoch_personalToken] remoteExec ['EPOCH_server_revivePlayer',2]; + }; + }; + } + else { + ['You need a Defibrillator to Revive',5] call Epoch_Message; + }; +} +else { + ['This Player can not be revived',5] call Epoch_Message; +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_DefuseBomb.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_DefuseBomb.sqf new file mode 100644 index 0000000..1c04798 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_DefuseBomb.sqf @@ -0,0 +1,32 @@ +_object = _this; +_type = typeof _object; +if (({alive _x && isplayer _x} count (_object nearentities 6)) > 1) exitwith { + ["You should not defuse Bombs next to other Players!",5] call Epoch_Message; +}; +player playMove 'AinvPknlMstpSnonWrflDnon_medic0'; +player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd'; +_object say3d 'vehicle_repair'; +_starttime = diag_ticktime; +waituntil {uisleep 0.5; diag_ticktime - _starttime > 8 || player distance _object > 5 || EPOCH_IsAutoRunning || isnull _object || !alive player}; +if (player distance _object > 5 || EPOCH_IsAutoRunning || isnull _object || !alive player) exitwith { + ["Defusing abort... ",5] call Epoch_Message; +}; +_reward = gettext (configfile >> "cfgammo" >> _type >> "defaultMagazine"); +if !(_reward isequalto "") then { + _chance = ["CfgEpochClient", "DefuseBombChance", 0.6] call EPOCH_fnc_returnConfigEntryV2; + if (_chance >= ((random 100) / 100)) then { + [_object,false,player,Epoch_personalToken] remoteexec ["EPOCH_server_DefuseBomb",2]; + } + else { + ['Oh No... The Bomb will explode in a few seconds... RUN!!!!',5] call Epoch_Message; + for '_i' from 1 to 6 do { + playSound3D ['a3\sounds_f\air\heli_attack_02\alarm.wss', player, false,getposasl _object, 1, 1, 300]; + uisleep 1; + }; + [_object,true,player,Epoch_personalToken] remoteexec ["EPOCH_server_DefuseBomb",2]; + }; +} +else { + [format ['Sorry, can not defuse %1',_type],5] call Epoch_Message; +}; + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_EnterBuilding.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_EnterBuilding.sqf new file mode 100644 index 0000000..e2e0ac1 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_EnterBuilding.sqf @@ -0,0 +1,22 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch request teleport + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf +*/ +if !(isNull _this) then{ + if (!isnil "HALV_senddeftele") exitwith { + if (isnull (finddisplay 7777)) then { + [] execVM "addons\halv_spawn\opendialog.sqf"; + }; + }; + [player,_this,Epoch_personalToken] remoteExec ["EPOCH_server_teleportPlayer",2]; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_LootIT.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_LootIT.sqf new file mode 100644 index 0000000..a8c79b4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_LootIT.sqf @@ -0,0 +1,17 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Request loot event + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_LootIT.sqf +*/ +if (!isNull _this) then { + [_this,player,Epoch_personalToken] remoteExec ["EPOCH_server_lootContainer",2]; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_PlayerStatsDialog.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_PlayerStatsDialog.sqf new file mode 100644 index 0000000..e9c8b2b --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_PlayerStatsDialog.sqf @@ -0,0 +1,33 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Fill Player Stats Dialog + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_PlayerStatsDialog.sqf +*/ +private ["_display","_UsedStats","_ctrlNo","_txt","_value"]; +disableSerialization; +_display = findDisplay -1200; +if (isnull _display) exitwith {}; +_UsedStats = ["CfgEpochClient", "PlayerStatsDialogEntries", []] call EPOCH_fnc_returnConfigEntryV2; +_ctrlNo = 1100; +{ + _ctrl = _display displayCtrl _ctrlNo; + _txt = ''; + { + _x params ["_stattype","_entrytext",["_calc","%1"]]; + _value = missionNamespace getVariable [format ['EPOCH_total%1',_stattype],0]; + _value = format [_calc,_value]; + _value = call compile _value; + _txt = _txt + format [' %1: %2
',_entrytext,_value]; + } foreach _x; + _ctrl ctrlSetStructuredText parseText _txt; + _ctrlNo = _ctrlNo + 1; +} foreach _UsedStats; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_PutHandler.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_PutHandler.sqf new file mode 100644 index 0000000..7839df4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_PutHandler.sqf @@ -0,0 +1,25 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Tells server when a radio is equpped for use with custom radio channels + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_PutHandler.sqf +*/ +params ["_unit", "_container", "_class"]; +//Radio Check +if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _class)) == "ItemRadio") then { + if !(_class in(assignedItems player)) then { + EPOCH_equippedItem_PVS = [_class,false,player]; + }; +}; + +if (_class in ["EnergyPack","EnergyPackLg"] && (typeof _container) in ["SolarCharger_EPOCH","SolarChargerXL_EPOCH"]) then { + ["Charging ...",5,[[0,1,0,0.2],[1,1,1,1]]] call Epoch_Message; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_QuickTakeAll.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_QuickTakeAll.sqf new file mode 100644 index 0000000..9b0e8ae --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_QuickTakeAll.sqf @@ -0,0 +1,43 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Quick take concept for underwater looting + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_QuickTakeAll.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_items","_magazines","_weapons"]; +//[[[end]]] +closeDialog 0; +{ + if ((_x getvariable ["EPOCH_Loot",false]) || _x iskindof "container_epoch") then { + _nearplayers = (player nearEntities ["Man", 12]) select {alive _x && isplayer _x && !(_x == player)}; + if (count _nearplayers > 0) exitwith { + ["Take all not allowed near other Players",5] call Epoch_message; + }; + _magazines = magazinesAmmoCargo _x; + clearMagazineCargoGlobal _x; + { + [_x select 0,1] call EPOCH_fnc_addItemOverflow; + } foreach _magazines; + + _items = itemCargo _x; + clearItemCargoGlobal _x; + { + _x call EPOCH_fnc_addItemOverflow; + } foreach _items; + + _weapons = weaponCargo _x; + clearWeaponCargoGlobal _x; + { + _x call EPOCH_fnc_addItemOverflow; + } foreach _weapons; + }; +} foreach nearestObjects[player, ["container_epoch","weaponholdersimulated","GroundWeaponHolder"], 5]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_QuickTakeLoad.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_QuickTakeLoad.sqf new file mode 100644 index 0000000..3b7a579 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_QuickTakeLoad.sqf @@ -0,0 +1,42 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Quick take load function concept for underwater looting + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_QuickTakeLoad.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_index"]; +//[[[end]]] +createDialog "QuickTake"; +{ + if ((_x getvariable ["EPOCH_Loot",false]) || _x iskindof "container_epoch") then { + { + _index = lbAdd[1500, getText(configfile >> "CfgMagazines" >> (_x select 0) >> "DisplayName")]; + lbSetData[1500, _index, _x select 0]; + lbSetValue[1500, _index, _x select 1]; + lbSetPicture[1500, _index, _x select 0 call EPOCH_itemPicture]; + } foreach (magazinesAmmoCargo _x); + + { + _index = lbAdd[1500, getText(configfile >> "CfgWeapons" >> _x >> "DisplayName")]; + lbSetData[1500, _index, _x]; + lbSetValue[1500, _index, _x]; + lbSetPicture[1500, _index, _x call EPOCH_itemPicture]; + } foreach (itemcargo _x); + + { + _index = lbAdd[1500, getText(configfile >> "CfgWeapons" >> _x >> "DisplayName")]; + lbSetData[1500, _index, _x]; + lbSetValue[1500, _index, _x]; + lbSetPicture[1500, _index, _x call EPOCH_itemPicture]; + } foreach (weaponCargo _x); + }; +} foreach (nearestObjects[player, ["container_epoch","weaponholdersimulated","GroundWeaponHolder"], 5]); \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_ServerStatsDialog.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_ServerStatsDialog.sqf new file mode 100644 index 0000000..e983db3 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_ServerStatsDialog.sqf @@ -0,0 +1,207 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Fill Server Stats Dialog + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_ServerStatsDialog.sqf +*/ + +private [ + "_display","_UsedStats","_Stat1Pos","_MainDistX","_MainDistY","_SubDistX1","_SubDistX2","_SubDistY1","_SubDistY2","_MainWidth","_SubWidth1","_SubWidth2","_SubWidth3", + "_MainHeight","_SubHeight","_ZeroX","_ZeroY","_c","_posX","_posY","_ListedStats","_ctrl","_SubPosY","_ImIn","_SubPosX" +]; + +disableSerialization; +_display = findDisplay -1200; +if (isnull _display) exitwith {}; +_UsedStats = ["CfgEpochClient", "TopStatsDialogEntries", []] call EPOCH_fnc_returnConfigEntryV2; +_Stat1Pos = [ + 0.0720312 * safezoneW + safezoneX, + 0.071 * safezoneH + safezoneY, + 0.134062 * safezoneW, + 0.033 * safezoneH + ]; +_MainDistX = 0.216406-0.0720312; +_MainDistY = 0.489-0.071; +_SubDistX1 = 0.0926562-0.0720312; +_SubDistX2 = 0.175156-0.0926562; +_SubDistY1 = 0.115-0.071; +_SubDistY2 = 0.148-0.115-0.002; +_MainWidth = 0.134062; +_SubWidth1 = 0.0154688; +_SubWidth2 = 0.0773437; +_SubWidth3 = 0.0309375; +_MainHeight = 0.033; +_SubHeight = 0.022; + +_ZeroX = 0.0720312; +_ZeroY = 0.071; + + +_c = 1; +_posX = _ZeroX; +_posY = _ZeroY; +_ListedStats = []; +{ + _x params ["_stattype","_entrytext",["_calc","%1"]]; + _ctrl = _display ctrlCreate['RscText', -1]; + _ctrl ctrlSetPosition [ + -_MainWidth * safezoneW + safezoneX, + _posY * safezoneH + safezoneY, + _MainWidth * safezoneW, + _MainHeight * safezoneH + ]; + _ctrl ctrlSetText _entrytext; + _ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6]; + _ctrl ctrlsetTextColor [1,1,0,1]; + _ctrl ctrlCommit 0; + _ctrl ctrlSetPosition [ + _posX * safezoneW + safezoneX, + _posY * safezoneH + safezoneY + ]; + _ctrl ctrlCommit 0.02; + _SubPosY = _posY+_SubDistY1; + _ImIn = false; + { + _x params ["_value","_UID","_name"]; + _SubPosX = _posX; + _ctrl = _display ctrlCreate['RscText', -1]; + _ctrl ctrlSetPosition [ + -_MainWidth * safezoneW + safezoneX, + _SubPosY * safezoneH + safezoneY, + _SubWidth1 * safezoneW, + _SubHeight * safezoneH + ]; + _ctrl ctrlCommit 0; + _ctrl ctrlSetText str (_foreachindex + 1); + _ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6]; + _ctrl ctrlSetPosition [ + _SubPosX * safezoneW + safezoneX, + _SubPosY * safezoneH + safezoneY + ]; + _ctrl ctrlCommit 0.02; + _SubPosX = _SubPosX + _SubDistX1; + _ctrl = _display ctrlCreate['RscText', -1]; + _ctrl ctrlSetPosition [ + -_MainWidth * safezoneW + safezoneX, + _SubPosY * safezoneH + safezoneY, + _SubWidth2 * safezoneW, + _SubHeight * safezoneH + ]; + _ctrl ctrlCommit 0; + _ctrl ctrlSetText _name; + if ((_x select 1) isequalto (getplayeruid player)) then { + _ctrl ctrlsetTextColor [0,1,0,1]; + _ImIn = true; + }; + _ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6]; + _ctrl ctrlSetPosition [ + _SubPosX * safezoneW + safezoneX, + _SubPosY * safezoneH + safezoneY + ]; + _ctrl ctrlCommit 0.02; + _SubPosX = _SubPosX + _SubDistX2; + _ctrl = _display ctrlCreate['RscText', -1]; + _ctrl ctrlSetPosition [ + -_MainWidth * safezoneW + safezoneX, + _SubPosY * safezoneH + safezoneY, + _SubWidth3 * safezoneW, + _SubHeight * safezoneH + ]; + _value = format [_calc,_value]; + _value = call compile _value; + if (_value isEqualType "") then { + _ctrl ctrlSetText _value; + } + else { + _ctrl ctrlSetText str _value; + }; + _ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6]; + _ctrl ctrlCommit 0; + _ctrl ctrlSetPosition [ + _SubPosX * safezoneW + safezoneX, + _SubPosY * safezoneH + safezoneY + ]; + _ctrl ctrlCommit 0.015; + waituntil {ctrlCommitted _ctrl}; + _SubPosY = _SubPosY+_SubDistY2; + } foreach (EPOCH_Topstats select _foreachindex); + if (!_ImIn) then { + _SubPosX = _posX; + _ctrl = _display ctrlCreate['RscText', -1]; + _ctrl ctrlSetPosition [ + -_MainWidth * safezoneW + safezoneX, + _SubPosY * safezoneH + safezoneY, + _SubWidth1 * safezoneW, + _SubHeight * safezoneH + ]; + _ctrl ctrlCommit 0; + _ctrl ctrlSetText '#'; + _ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6]; + _ctrl ctrlSetPosition [ + _SubPosX * safezoneW + safezoneX, + _SubPosY * safezoneH + safezoneY + ]; + _ctrl ctrlCommit 0.02; + _SubPosX = _SubPosX + _SubDistX1; + _ctrl = _display ctrlCreate['RscText', -1]; + _ctrl ctrlSetPosition [ + -_MainWidth * safezoneW + safezoneX, + _SubPosY * safezoneH + safezoneY, + _SubWidth2 * safezoneW, + _SubHeight * safezoneH + ]; + _ctrl ctrlCommit 0; + _txt = name player; + _ctrl ctrlSetText _txt; + _ctrl ctrlsetTextColor [0,1,0,1]; + _ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6]; + _ctrl ctrlSetPosition [ + _SubPosX * safezoneW + safezoneX, + _SubPosY * safezoneH + safezoneY + ]; + _ctrl ctrlCommit 0.02; + _SubPosX = _SubPosX + _SubDistX2; + _ctrl = _display ctrlCreate['RscText', -1]; + _ctrl ctrlSetPosition [ + -_MainWidth * safezoneW + safezoneX, + _SubPosY * safezoneH + safezoneY, + _SubWidth3 * safezoneW, + _SubHeight * safezoneH + ]; + _value = missionNamespace getVariable [format ['Epoch_total%1',_stattype],0]; + _value = format [_calc,_value]; + _value = call compile _value; + if (_value isEqualType "") then { + _ctrl ctrlSetText _value; + } + else { + _ctrl ctrlSetText str _value; + }; + _ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6]; + _ctrl ctrlCommit 0; + _ctrl ctrlSetPosition [ + _SubPosX * safezoneW + safezoneX, + _SubPosY * safezoneH + safezoneY + ]; + _ctrl ctrlCommit 0.02; + waituntil {ctrlCommitted _ctrl}; + _SubPosY = _SubPosY+_SubDistY2; + }; + _c = _c + 1; + if (_c > 6) then { + _posX = _ZeroX; + _posY = _posY+_MainDistY; + _c = 1; + } + else { + _posX = _posX+_MainDistX; + }; +} foreach _UsedStats; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf new file mode 100644 index 0000000..f94fadd --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf @@ -0,0 +1,37 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + test code to spawn trader milita (unused) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_allpositions","_grp","_nrBuilds","_rndHouse","_startPos","_unit"]; +//[[[end]]] + +_nrBuilds = nearestObjects [player,["house"],50]; + +_grp = createGroup [RESISTANCE, true]; +for "_i" from 1 to 3 step 1 do +{ + _startPos = []; + while {count _startPos < 1} do { + _rndHouse = selectRandom _nrBuilds; + _allpositions = _rndHouse buildingPos -1; + if !(_allpositions isEqualTo []) then { + _startPos = selectRandom _allpositions; + }; + }; + + _unit = _grp createUnit["B_G_Soldier_F", _startPos, [], 0, "CAN_COLLIDE"]; + _unit addEventHandler ["FiredNear", "group (_this select 0) setVariable[""shotsFired"",[(_this select 1),(_this select 2)]]"]; + _unit addEventHandler ["Killed", "group (_this select 0) setVariable[""killer"",_this select 1]"]; + [_unit] execFSM "\x\addons\a3_epoch_code\System\Trader_Militia.fsm"; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_UnisexCheck.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_UnisexCheck.sqf new file mode 100644 index 0000000..e40a9b1 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_UnisexCheck.sqf @@ -0,0 +1,91 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Unisex check for vests, gives swing ammo and performs radio changed check + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_UnisexCheck.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_config","_femaleVariant","_mags","_maleVariant","_vest","_vestItems","_woman"]; +//[[[end]]] +params ["_unit","_container","_item"]; + +// check for access of a locked container +if (_container getVariable['EPOCH_Locked', false]) then { + // kick player, TODO: temp ban? + EPOCH_kicked = format ["%1 attempted to access a locked %2 with %3",_unit,_container,_item]; + publicVariableServer "EPOCH_kicked"; +}; + +_mags = (magazines player) + (handgunMagazine player); +// TODO optimize +if (_item in ["Hatchet","CrudeHatchet"]) then { + if !("Hatchet_swing" in _mags) then { + player addMagazine "Hatchet_swing"; + }; +}; +if (_item in ["MeleeSledge","MeleeMaul","MeleeSword","Power_Sword"]) then { + if !("sledge_swing" in _mags) then { + player addMagazine "sledge_swing"; + }; +}; +if (_item in ["WoodClub","Plunger","MeleeRod"]) then { + if !("stick_swing" in _mags) then { + player addMagazine "stick_swing"; + }; +}; + +//Radio Check +if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _item)) == "ItemRadio") then { + if (_item in(assignedItems player)) then { + EPOCH_equippedItem_PVS = [_item,true,player]; + }; +}; + +if (_item in ["EnergyPack","EnergyPackLg"] && (typeof _container) in ["SolarCharger_EPOCH","SolarChargerXL_EPOCH"]) then { + ["Stop Charging ...",5,[[1,0,0,0.2],[1,1,1,1]]] call Epoch_Message; +}; + +// Unisex vest check +_woman = getNumber(configFile >> "CfgVehicles" >> (typeOf player) >> "woman"); +_config = configfile >> "cfgweapons" >> _item; +if (_woman == 1) then { + if (isClass _config) then { + if (isText (_config >> "femaleVest")) then { + _femaleVariant = getText (_config >> "femaleVest"); + _vest = vest player; + if (_item == _vest) then { + if (_femaleVariant != _vest) then { + // get items in existing vest + _vestItems = vestItems player; + // remove vest + removeVest player; + // replace with female variant + player addVest _femaleVariant; + // readd items to players vest + {player addItemToVest _x} forEach _vestItems; + }; + }; + }; + }; +} else { + if (isClass _config) then { + if (isText (_config >> "maleVest")) then { + _maleVariant = getText (_config >> "maleVest"); + _vest = vest player; + if (_item == _vest) then { + if (_maleVariant != _vest) then { + removeVest player; + player addVest _maleVariant; + }; + }; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_callSapperMigration.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_callSapperMigration.sqf new file mode 100644 index 0000000..108ae25 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_callSapperMigration.sqf @@ -0,0 +1,60 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + A3 Epoch call sapper migration + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_callSapperMigration.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_abortAfter","_axeSapper","_dirTo","_disableAI","_finish","_notReady","_nrPlyrs","_pos","_sapperCount","_start","_trgt"]; +//[[[end]]] + + _disableAI = { + {_this disableAI _x}forEach["TARGET","AUTOTARGET","FSM"]; +}; + +_trgt = player; +if(count _this > 0)then{ +_trgt = _this select 0; +}; +_sapperCount = 8; +if(count _this > 1)then{ +_sapperCount = _this select 1; +}; +_notReady = true; +_abortAfter = 0; +_start = []; +_finish = []; +while {_notReady} do { + _start = _trgt getPos [480, random 360]; + _dirTo = [_start,_trgt,18] call EPOCH_fnc_dirToFuzzy; + _finish = _start getPos [((_start distance _trgt) * 2),_dirTo]; + _nrPlyrs = nearestObjects [_start, ["Epoch_Female_base_F","Epoch_Man_base_F"],200]; + if((!(surfaceIsWater _start) && !(surfaceIsWater _finish) && (count _nrPlyrs < 1)) || _abortAfter > 41)then{ + _notReady = false; + }; + _abortAfter = _abortAfter + 1; +}; + +if(_abortAfter < 42)then{ + + [_sapperCount,_start,_disableAI,_finish]spawn{ + params["_sapperCount","_start","_disableAI","_finish",["_pos",[]],["_axeSapper", objNull]]; + for "_i" from 1 to _sapperCount step 1 do { + _pos = _start findEmptyPosition [0,20,"Epoch_Sapper_F"]; + _axeSapper = createAgent ["Epoch_Sapper_F", _pos, [], 12, "FORM"]; + waitUntil {_axeSapper == _axeSapper}; + _axeSapper call _disableAI; + EPOCHSapperMigrationHandle = [_axeSapper,_finish] execFSM "\x\addons\a3_epoch_code\System\sapperSwarmMember.fsm"; + uiSleep 0.75; + }; + Epoch_axeMigrationRunning = true; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_chopWood.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_chopWood.sqf new file mode 100644 index 0000000..9ded829 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_chopWood.sqf @@ -0,0 +1,46 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Chopwood function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_chopWood.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_currentPos","_getWorldTypes","_object","_objects","_sel_object","_type","_worldTypes"]; +//[[[end]]] + +_currentPos = player modelToWorld[0, 5, 0]; +if !(surfaceIsWater _currentPos) then { + _currentPos = ATLtoASL _currentPos; +}; + +_objects = lineIntersectsObjs[eyePos player, _currentPos, player, objNull, true, 2]; +_object = objNull; +_type = 0; + +{ + _sel_object = _x; + _worldTypes = ["tree","bush"]; + _getWorldTypes = [_x, _worldTypes] call EPOCH_worldObjectType; + { + if (_getWorldTypes param [_worldTypes find _x, false]) exitWith { + _type = _forEachIndex; + _object = _sel_object; + }; + } forEach _worldTypes; + + if !(isNull _object) exitWith {}; +}foreach _objects; + +if (!isNull _object) then { + if (alive _object) then { + [_object,_type,player,EPOCH_personalToken] remoteExec ["EPOCH_server_knockDownTree",2]; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_consumeItem.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_consumeItem.sqf new file mode 100644 index 0000000..a9d6d26 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_consumeItem.sqf @@ -0,0 +1,477 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch consume item function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_consumeItem.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_buildClass","_buildingCountLimit","_canCapacity","_cfgBaseBuilding","_cfgItemInteractions","_color","_currentDMG","_currentFuel","_currentHIT","_fuelCapacity","_ghostClass","_highestDMG","_inputCount","_interactAttributes","_interactOption","_interactReturnOnUse","_isOk","_isStorage","_magazineSize","_magazineSizeMax","_magazinesAmmoFull","_msg","_newDMG","_newFuel","_object","_otherObjects","_output","_paintCanColor","_paintCanIndex","_partCheck","_pos","_removeItem","_transportFuel","_unifiedInteract","_vehicle","_vehicles"]; +//[[[end]]] + +EPOCH_InteractedItem params ["_text","_item","_pic"]; + +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +_cfgItemInteractions = ["CfgItemInteractions", _item] call EPOCH_returnConfigV2; +// _cfgItemInteractions = (('CfgItemInteractions' call EPOCH_returnConfig) >> _item); + +_interactOption = getNumber(_cfgItemInteractions >> "interactAction"); +_interactAttributes = getArray(_cfgItemInteractions >> "interactAttributes"); +_interactReturnOnUse = getText(_cfgItemInteractions >> "interactReturnOnUse"); + +_inputCount = count _this; +if (_inputCount >= 1) then { + _interactOption = param [0,0]; +}; +if (_inputCount >= 2) then { + _interactAttributes = param [1,[]]; +}; +if (_inputCount >= 3) then { + _interactReturnOnUse = param [2,""]; +}; + +// diag_log format["DEBUG: %1",[_interactOption,_interactAttributes,_interactReturnOnUse]]; + +_removeItem = {([player,_this] call BIS_fnc_invRemove) == 1}; + +_unifiedInteract = { + private ["_removed","_multi","_maxMagRnd","_totalMags","_remove"]; + _removed = false; + _multi = 1; + _maxMagRnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + if (_maxMagRnd > 1) then { + _totalMags = (magazinesammo player) select {(_x select 0) isequalto _item}; + if !(_totalMags isequalto []) then { + _remove = _totalMags deleteat 0; + _removed = true; + _remove params ["_class","_rounds"]; + _multi = _rounds / _maxMagRnd; + player removemagazines _item; + { + _x call EPOCH_fnc_addMagazineOverflow; + } foreach _totalMags; + }; + } + else { + _removed = _item call _removeItem; + }; + if (_removed) then { + if (_interactReturnOnUse != "") then { + _interactReturnOnUse call EPOCH_fnc_addItemOverflow; + }; + { + _output = [_x select 0, round ((_x select 1) * _multi)] call EPOCH_giveAttributes; + if (_output != "") then { + [_output, 5] call Epoch_message_stack; + }; + } foreach _interactAttributes; + }; + _removed +}; + +switch _interactOption do { + case 0: { + _magazineSizeMax = getNumber (configfile >> "CfgMagazines" >> _item >> "count"); + // allow repack for all magazines with greater than 1 bullet + if (_magazineSizeMax > 1) then { + [_item,_magazineSizeMax] spawn { + params ["_item","_magazineSizeMax"]; + if (player == vehicle player) then { + closeDialog 0; + player playMove 'AinvPknlMstpSnonWrflDnon_medic0'; + player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd'; + uisleep 5; + }; + _magazineSize = 0; + _magazinesAmmoFull = magazinesAmmoFull player; + { + if (_item isEqualTo (_x select 0)) then { + if (!(_x select 2)) then { + _magazineSize = _magazineSize + (_x select 1); + }; + }; + } forEach _magazinesAmmoFull; + player removeMagazines _item; + for "_i" from 1 to floor (_magazineSize / _magazineSizeMax) do + { + [_item, _magazineSizeMax] call EPOCH_fnc_addMagazineOverflow; + }; + if ((_magazineSize % _magazineSizeMax) > 0) then { + [_item, floor (_magazineSize % _magazineSizeMax)] call EPOCH_fnc_addMagazineOverflow; + }; + ["Ammo Repacked", 5] call Epoch_message; + }; + }; + }; + case 1: _unifiedInteract; // Eat 1 + case 2: _unifiedInteract; //Drink 2 + case 3: { // Build 3 + closeDialog 0; + _partCheck = _item in (magazines player); + + _buildClass = getText(_cfgItemInteractions >> "buildClass"); + if (_buildClass != "" && _partCheck) then { + _isStorage = getNumber(_cfgItemInteractions >> "isStorage"); + + _isOk = if (_isStorage == 1 || _buildClass isKindOf "Secure_Storage_Temp") then { EPOCH_StorageSlotsCount > 0 } else { EPOCH_BuildingSlotCount > 0 }; + + if (isNil "EPOCH_simulSwap_Lock") then { + if !(isNil "_isOk") then { + if (_isOk) then { + + if (_buildClass call EPOCH_isBuildAllowed) then { + + if (EPOCH_playerEnergy > 0) then { + + EPOCH_buildMode = 1; + EPOCH_buildDirection = 0; + + // base building + _pos = player modelToWorldVisual[0, 5, 0]; + _pos set[2, getPosATL player select 2]; + + if (_buildClass isKindOf "ThingX") then { + // prevent spawning if another simulated object exists still + _otherObjects = nearestObjects[player, [_buildClass], 100]; + if (_otherObjects isEqualTo []) then { + _object=createVehicle[_buildClass,_pos,[],0,"CAN_COLLIDE"]; + _object setDir ((getDir player) - 180); + [format["Press '%1' to drop object.", "1"], 5] call Epoch_message; + if (([player, _item] call BIS_fnc_invRemove) == 1) then { + [_object] spawn EPOCH_simulSwap; + }; + } + else { + ["Building Disallowed: Frequency Unstable", 5] call Epoch_message; + }; + } + else { + // use ghost GhostPreview if set + _ghostClass = getText(_cfgBaseBuilding >> _buildClass >> "GhostPreview"); + if !(_ghostClass isEqualTo "") then { + _buildClass = _ghostClass; + }; + _object=createVehicle[_buildClass,_pos,[],0,"CAN_COLLIDE"]; + _object setDir ((getDir player) - 180); + [format["Press '%1' to drop object.", "1"], 5] call Epoch_message; + [_object,_item] spawn EPOCH_staticMove; + }; + } + else { + ["Need Energy", 5] call Epoch_message; + }; + }; + } else { + ["World limit reached", 5] call Epoch_message; + }; + }; + }; + }; + }; + case 4: { // Refuel 4 + if !(player == vehicle player) exitwith { + ["Fill from outside!", 5] call Epoch_message; + }; + _vehicles = player nearEntities [["LandVehicle","Ship","Air","Tank"], 30]; + if (cursorTarget in _vehicles) then { + _vehicle = cursorTarget; + _currentFuel = fuel _vehicle; + _canCapacity = _interactAttributes param [0,10]; + _fuelCapacity = getNumber (configfile >> "CfgVehicles" >> (typeOf _vehicle) >> "fuelCapacity"); + _currentFuel = _currentFuel * _fuelCapacity; + _newFuel = _currentFuel + _canCapacity; + _newFuel = _newFuel / _fuelCapacity; + + if (_item call _removeItem) then { + [_interactReturnOnUse,_vehicle,_newFuel] spawn { + params ["_interactReturnOnUse","_vehicle","_newFuel"]; + closeDialog 0; + player playMove 'AinvPknlMstpSnonWrflDnon_medic0'; + player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd'; + uisleep 5; + _interactReturnOnUse call EPOCH_fnc_addItemOverflow; + [_vehicle,_newFuel,player,Epoch_personalToken] remoteExec ["EPOCH_server_fillVehicle",2]; + ["Fuel Added", 5] call Epoch_message; + }; + }; + }; + }; + case 5: { + if !(player == vehicle player) exitwith { + ["Fill from outside!", 5] call Epoch_message; + }; + _vehicles = player nearEntities [["LandVehicle","Ship","Air","Tank"], 30]; + _canCapacity = _interactAttributes param [0,10]; + if (cursorTarget in _vehicles) then { + _vehicle = cursorTarget; + _fuelCapacity = getNumber (configfile >> "CfgVehicles" >> (typeOf _vehicle) >> "fuelCapacity"); + _newFuel = (((fuel _vehicle) * _fuelCapacity) - _canCapacity) / _fuelCapacity; + if (_newFuel > 0) then { + if (_item call _removeItem) then { + [_interactReturnOnUse,_vehicle,_newFuel,_item] spawn { + params ["_interactReturnOnUse","_vehicle","_newFuel","_item"]; + closeDialog 0; + player playMove 'AinvPknlMstpSnonWrflDnon_medic0'; + player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd'; + uisleep 5; + _interactReturnOnUse call EPOCH_fnc_addItemOverflow; + [_vehicle,_newFuel,player,Epoch_personalToken] remoteExec ["EPOCH_server_fillVehicle",2]; + [format["%1 Filled",_item call EPOCH_itemDisplayName], 5] call Epoch_message; + }; + }; + } else { + ["Not Enough Fuel", 5] call Epoch_message; + }; + } else { + + // find any other nearby fuel sources + _transportFuel = 0; + { + _transportFuel = _transportFuel + getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "transportFuel"); + } forEach (player nearObjects["ALL", 6]); + + if (_transportFuel > _canCapacity) then { + if (_item call _removeItem) then { + [_interactReturnOnUse,_item] spawn { + params ["_interactReturnOnUse","_item"]; + closeDialog 0; + player playMove 'AinvPknlMstpSnonWrflDnon_medic0'; + player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd'; + uisleep 5; + _interactReturnOnUse call EPOCH_fnc_addItemOverflow; + [format["%1 Filled",_item call EPOCH_itemDisplayName], 5] call Epoch_message; + }; + }; + } else { + ["Not Enough Fuel", 5] call Epoch_message; + }; + }; + }; + case 6: _unifiedInteract; //Clean -25 + case 7: _unifiedInteract; //Warm + 1 + case 8: _unifiedInteract; //Cold -1 + case 9: _unifiedInteract; //Energy 100 + case 10: { // Repair 10 - Lite + if !(player == vehicle player) exitwith { + ["Repair from outside!", 5] call Epoch_message; + }; + _vehicles = player nearEntities [["LandVehicle","Ship","Air","Tank"], 30]; + _vehicle = cursorTarget; + if (_vehicle in _vehicles) then { + + if (_item call _removeItem) then { + [_vehicle] spawn { + params ["_vehicle"]; + closeDialog 0; + player playMove 'AinvPknlMstpSnonWrflDnon_medic0'; + player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd'; + _vehicle say3d 'vehicle_repair'; + uisleep 5; + _highestDMG = 0; + _currentHIT = -1; + _currentDMG = 0; + { + _currentDMG = _x; + if (_currentDMG > _highestDMG) then { + _highestDMG = _currentDMG; + _currentHIT = _forEachIndex; + }; + }forEach ((getAllHitPointsDamage _vehicle) param [2,[]]); + if (_highestDMG > 0) then { + _newDMG = ((_highestDMG - 0.5) max 0); + if (local _vehicle) then { + [_vehicle, [[_currentHIT, _newDMG]] ] call EPOCH_client_repairVehicle; + } else { + [_vehicle,[[_currentHIT,_newDMG]],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + }; + } else { + if ((damage _vehicle) > 0) then { + [_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + }; + }; + ["Vehicle Partially Repaired", 5] call Epoch_message; + }; + }; + }; + }; + case 11: { // Repair 11 - Heavy + if !(player == vehicle player) exitwith { + ["Repair from outside!", 5] call Epoch_message; + }; + _vehicles = player nearEntities [["LandVehicle","Ship","Air","Tank"], 30]; + _vehicle = cursorTarget; + if (_vehicle in _vehicles) then { + if (_item call _removeItem) then { + [_vehicle] spawn { + params ["_vehicle"]; + closeDialog 0; + player playMove 'AinvPknlMstpSnonWrflDnon_medic0'; + player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd'; + uisleep 5; + _vehicle say3d 'vehicle_repair'; + [_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + ["Vehicle Fully Repaired", 5] call Epoch_message; + }; + }; + }; + }; + + // case 12 consume paincan and set texture on base object (only if has slot and is static) + case 12: { + closeDialog 0; + _vehicles = player nearObjects["Const_WoodWalls_static_F", 5]; + _vehicle = cursorTarget; + if (_vehicle in _vehicles) then { + if ("" call EPOCH_isBuildAllowed) then { + _color = getArray(_cfgBaseBuilding >> (typeOf _vehicle) >> "availableTextures"); + if !(_color isEqualTo[]) then { + + if (_item call _removeItem) then { + + // find _paintCanIndex from config + _paintCanIndex = getNumber(_cfgItemInteractions >> "textureIndex"); + _paintCanColor = getText(_cfgItemInteractions >> "colorName"); + + [_vehicle,_paintCanIndex,player,Epoch_personalToken] remoteExec ["EPOCH_server_paintBUILD",2]; + + [format["Wall Painted %1", _paintCanColor], 5] call Epoch_message; + }; + }; + } + else { + ["Disallowed", 5] call Epoch_message; + }; + }; + }; + + case 13: { //Heal Player + _vehicles = player nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 6]; + _vehicle = cursorTarget; + if !(_vehicle in _vehicles) then { + _vehicle = player; + }; + if (damage _vehicle != 0 || {_x > 0} count ((getallhitpointsdamage _vehicle) select 2) > 0) then { + if (_item call _removeItem) then { + [_vehicle] spawn { + params ["_vehicle"]; + if (player == vehicle player) then { + closeDialog 0; + player playMove 'AinvPknlMstpSnonWrflDnon_medic0'; + player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd'; + uisleep 5; + }; + [_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + if (_vehicle isEqualTo player) then { + ["Healed yourself", 5] call Epoch_message; + } else { + ["Healed other player", 5] call Epoch_message; + }; + }; + }; + }; + }; + + case 14: { // Unpack Backpack + if (_item call _removeItem) then { + [_interactReturnOnUse,player,Epoch_personalToken] remoteExec ["EPOCH_server_unpackBackpack",2]; + ["Unpacked backpack", 5] call Epoch_message; + }; + }; + + case 15: { // Read + _msg = getArray(missionConfigFile >> "CfgReadingDocuments" >> _item >> "displayMessage"); + if!(_msg isEqualTo [])then{ + { + [_x,5] call Epoch_message_stack; + }forEach _msg; + }else{ + ["This document can't be read yet. Blame DirtySanchez!",5] call Epoch_message; + }; + }; + + case 16: { // Morphine + _vehicle = player; + if (damage _vehicle != 0 || {_x > 0} count ((getallhitpointsdamage _vehicle) select 2) > 0) then { + if (call _unifiedInteract) then { + [_vehicle,_item] spawn { + params ["_vehicle","_item"]; + if (player == vehicle player) then { + closeDialog 0; + player playMove 'AinvPknlMstpSnonWrflDnon_medic0'; + player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd'; + uisleep 5; + }; + private _out = []; + { + if (_x > 0) then { + _out pushback [_foreachindex,((_x - 0.2) min 0.45) max 0]; + }; + }forEach ((getAllHitPointsDamage _vehicle) param [2,0]); + if (_out isequalto []) then { + if ((damage _vehicle) > 0) then { + _out = ["ALL",0]; + }; + }; + if !(_out isequalto []) then { + [_vehicle,_out,player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + }; + [format["Used %1 on yourself",_item call EPOCH_itemDisplayName], 5] call Epoch_message; + }; + }; + } else { + [format["%1 is not needed at this time",_item call EPOCH_itemDisplayName], 5] call Epoch_message; + }; + }; + case 17: { // Defibrillator + _maxMagRnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + _totalDefis = (magazinesammo player) select {(_x select 0) isequalto _item}; + _totalMags = (magazinesammo player) select {(_x select 0) in ["EnergyPackLg","EnergyPack"]}; + if (_totalDefis isequalto []) exitwith {}; + if !(_totalMags isequalto []) then { + _CurDefiArr = []; + { + if ((_x select 1) < _maxMagRnd) exitwith { + _CurDefiArr = _totalDefis deleteat _foreachindex; + }; + } foreach _totalDefis; + if (_CurDefiArr isequalto []) exitwith { + ["Defibrillator is already fully charged",5] call Epoch_Message; + }; + _remove = _totalMags deleteat 0; + _remove params ["_class","_rounds"]; + _charge = _rounds min (_maxMagRnd - (_CurDefiArr select 1)); + if (_rounds - _charge > 0) then { + _remove set [1,_rounds - _charge]; + _totalMags pushback _remove; + }; + if (_charge > 0) then { + _CurDefiArr set [1,(_CurDefiArr select 1) + _charge]; + _totalDefis pushback _CurDefiArr; + player removemagazines _item; + player removemagazines "EnergyPackLg"; + player removemagazines "EnergyPack"; + { + _x call EPOCH_fnc_addMagazineOverflow; + } foreach _totalMags; + { + _x call EPOCH_fnc_addMagazineOverflow; + } foreach _totalDefis; + [format ["Recharged Defibrillator with %1 Energy",_charge],5] call Epoch_Message; + }; + } + else { + ["You need an Energy Pack",5] call Epoch_Message; + }; + }; + + default { + ["Found nothing", 5] call Epoch_message; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_effectCrypto.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_effectCrypto.sqf new file mode 100644 index 0000000..438e334 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_effectCrypto.sqf @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch display kyrpto changes + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_effectCrypto.sqf +*/ +if (_this isEqualType 0) then { + EPOCH_playerCrypto = _this; + 9992 cutRsc["EpochGameUI2", "PLAIN", 2, false]; + ((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto]; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_fish.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_fish.sqf new file mode 100644 index 0000000..df3b177 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_fish.sqf @@ -0,0 +1,73 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch fishing function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_fish.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_bobber","_castTime","_currentPos","_diffTime","_fish","_fishes","_objects","_randomChance","_randomChanceMax"]; +//[[[end]]] + +_currentPos = player modelToWorld[0, 5 + (random 5), 0]; +if (surfaceIsWater _currentPos) then { + + _objects = lineIntersectsObjs[eyePos player, _currentPos, player, objNull, true, 2]; + if (_objects isEqualTo []) then{ + + // Cast bobber and set for cleanup + _bobber = missionNamespace getVariable ["EPOCH_myBobber", objNull]; + if (isNull _bobber) then { + _bobber = createVehicle ["Bobber_EPOCH",_currentPos, [], 0, "CAN_COLLIDE"]; + [_bobber] remoteExec ["EPOCH_localCleanup",2]; + _bobber setPosASL _currentPos; + _bobber setVariable ["EPOCH_bobberTime", diag_tickTime]; + EPOCH_myBobber = _bobber; + } else { + if (_bobber distance player > 12) then { + ["No bobber found within 12m.", 5] call Epoch_message; + } else { + _castTime = _bobber getVariable ["EPOCH_bobberTime", diag_tickTime]; + _diffTime = (diag_tickTime - _castTime) / 10; + + if (_diffTime == 0) then { + _bobber setVariable ["EPOCH_bobberTime", diag_tickTime]; + } else { + + // max out chance when fish on line within last 10 seconds + if ((diag_tickTime - (_bobber getVariable ["EPOCH_fishOnLine" , 0])) <= 10) then { + _diffTime = 100; + }; + + // make bobber move and delete + _bobber setVelocity [0,-1,-10]; + _bobber spawn { + uiSleep 0.5; + deleteVehicle _this; + }; + + _randomChanceMax = (100 - _diffTime) max 1 min 99; + _randomChance = random 100; + + if (_randomChance > _randomChanceMax) then { + _fishes = ["CfgEpochClient", "fishLoots", ["ItemTuna","ItemSeaBass","ItemSeaBass","ItemSeaBass","ItemTrout","ItemTrout","ItemTrout","ItemTrout","ItemTrout","ItemTrout"]] call EPOCH_fnc_returnConfigEntryV2; + _fish = selectRandom _fishes; + if (_fish != "") then { + _fish call EPOCH_fnc_addItemOverflow; + ["Fish Caught", 5,[[0,0,0,0.5],[0,1,0,1]]] call Epoch_message; + }; + } else { + ["Fish Got Away", 5,[[0,0,0,0.5],[1,0,0,1]]] call Epoch_message; + }; + }; + }; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_handleServerMessage.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_handleServerMessage.sqf new file mode 100644 index 0000000..97220d8 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_handleServerMessage.sqf @@ -0,0 +1,22 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch handle localized message function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_handleServerMessage.sqf + + Example: + [_this select 1, _this select 2] remoteExec ['EPOCH_handleServerMessage',_x]; + +*/ +params [["_str",""],["_input",""]]; +if (isLocalized _str) then{ + [format["%1", format[localize _str, _input]], 5] call Epoch_message; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_interact.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_interact.sqf new file mode 100644 index 0000000..9c724ff --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_interact.sqf @@ -0,0 +1,33 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + store all interacted vehicles for update + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_interact.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_storSlot","_vehSlot","_buildSlot"]; +//[[[end]]] +0 call EPOCH_refeshUI; +if (!isNull _this) then { + _vehSlot = _this getVariable ["VEHICLE_SLOT", "ABORT"]; + if !(_vehSlot isEqualTo "ABORT") then { + EPOCH_arr_interactedObjs pushBackUnique _this; + }; + _storSlot = _this getVariable["STORAGE_SLOT", "ABORT"]; + if !(_storSlot isEqualTo "ABORT") then { + EPOCH_arr_interactedObjs pushBackUnique _this; + }; + _buildSlot = _this getVariable["BUILD_SLOT", "ABORT"]; + if !(_buildSlot isEqualTo "ABORT") then { + EPOCH_arr_interactedObjs pushBackUnique _this; + }; +}; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_localCleanup.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_localCleanup.sqf new file mode 100644 index 0000000..e0cdf11 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_localCleanup.sqf @@ -0,0 +1 @@ +// left empty on purpose diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_lootTrash.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_lootTrash.sqf new file mode 100644 index 0000000..88bf0af --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_lootTrash.sqf @@ -0,0 +1,121 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Request trash loot event + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_lootTrash.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_animal","_animalPos","_animals","_bankTerminal","_blood","_bloodPos","_cfgItemInteractions","_cfgObjectInteractions","_config","_destroyTrashObj","_found","_foundLootObject","_foundObjConfig","_foundObjType","_foundTerminal","_getWorldTypes","_id","_index","_inputWorldTypes","_interactAttributes","_lootAnimalObj","_objects","_output","_randomAIClass","_return","_trashClasses","_trashType"]; +//[[[end]]] +_return = false; +if (diag_tickTime - EPOCH_lastTrash > 2) then { + EPOCH_lastTrash = diag_tickTime; + + _config = 'CfgEpochClient' call EPOCH_returnConfig; + + _interactAttributes = []; + _cfgObjectInteractions = 'CfgObjectInteractions' call EPOCH_returnConfig; + _inputWorldTypes = ["bankTerminal"]; + _trashClasses = getArray(_config >> worldname >> "TrashClasses"); + _inputWorldTypes append _trashClasses; + + _destroyTrashObj = objNull; + _lootAnimalObj = objNull; + _bankTerminal = objNull; + _trashType = 0; + _objects = nearestObjects[player, [], 2]; + { + _found = false; + _foundTerminal = false; + _foundLootObject = false; + + _foundObjType = typeOf _x; + _foundObjConfig = (_cfgObjectInteractions >> _foundObjType); + + if (alive _x) then { + _getWorldTypes = [_x, _inputWorldTypes] call EPOCH_worldObjectType; + { + _found = _getWorldTypes param [_inputWorldTypes find _x, false]; + if (_found) exitWith{ _trashType = _forEachIndex }; + } forEach _trashClasses; + _foundTerminal = _getWorldTypes param [_inputWorldTypes find "bankTerminal", false]; + _foundLootObject = ((getNumber(_foundObjConfig >> "interactMode") == 3) && (getNumber (_foundObjConfig >> "aliveState") == 0)); + } else { + _foundLootObject = (getNumber(_foundObjConfig >> "interactMode") == 3); + }; + + if (_found) exitWith{ _destroyTrashObj = _x }; + if (_foundLootObject) exitWith{ _lootAnimalObj = _x }; + if (_foundTerminal) exitWith{ _bankTerminal = _x }; + + }forEach _objects; + + if (!isNull _lootAnimalObj) then { + + _cfgItemInteractions = (_cfgObjectInteractions >> (typeOf _lootAnimalObj)); + _interactAttributes = getArray(_cfgItemInteractions >> "interactAttributes"); + + _bloodPos = getPosATL _lootAnimalObj; + _blood = "BloodSplat" createVehicleLocal _bloodPos; + _blood setPosATL _bloodPos; + + // send + [_lootAnimalObj, player, Epoch_personalToken] remoteExec ["EPOCH_server_lootAnimal",2]; + _return = true; + }; + if (!isNull _destroyTrashObj) then { + [_destroyTrashObj, _trashType, player, Epoch_personalToken] remoteExec ["EPOCH_server_destroyTrash",2]; + _interactAttributes = [["Soiled",1]]; + _return = true; + // Snake Den + if (random 1 < 0.04) then { + _animalPos = getposATL _destroyTrashObj; + _randomAIClass = selectRandom ["Snake_random_EPOCH", "Snake2_random_EPOCH"]; + _animals = []; + for "_i" from 1 to 2 step 1 do { + _animal = createAgent[_randomAIClass, _animalPos, [], 0, "CAN_COLLIDE"]; + _animal setVariable["BIS_fnc_animalBehaviour_disable", true]; + _id = [_animal, true] execFSM "\x\addons\a3_epoch_code\System\Animal_brain.fsm"; + _animals pushBack _animal; + }; + _animals remoteExec ["EPOCH_localCleanup",2]; + }; + }; + if (!isNull _bankTerminal) then { + _AtmBlockedAtPlot = ["CfgEpochClient", "AtmBlockedAtPlot", false] call EPOCH_fnc_returnConfigEntryV2; + _jammer = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {player distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))}; + if (!(_jammer isequalto []) && _AtmBlockedAtPlot) exitwith { + ["Bank Terminal blocked by Jammer Signal",5] call Epoch_Message; + }; + // make balance request + if (isNil "EPOCH_bankTransferActive") then { + [player, [], Epoch_personalToken] remoteExec ["EPOCH_server_storeCrypto",2]; + + closeDialog 0; + createDialog "InteractBank"; + + lbClear 21500; + { + _index = lbAdd[21500, name _x]; + lbSetData[21500, _index, netId _x]; + } forEach(allPlayers - [player]); + }; + _return = true; + }; + + { + _output = _x call EPOCH_giveAttributes; + if (_output != "") then { + [_output, 5] call Epoch_message; + }; + } foreach _interactAttributes; +}; +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_makeMarker.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_makeMarker.sqf new file mode 100644 index 0000000..d81d0a0 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_makeMarker.sqf @@ -0,0 +1,41 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Create a local marker, with options. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_makeMarker.sqf + + Example: + [player, position player, "ICON", "mil_dot", "ColorBlack", [0.7,0.7], "Border", 42, "Hi, I am a marker.. yay.", 0.6,"markerName"] call EPOCH_makeMarker + + Parameter(s): + _this select 0: Target Object - Used if name not supplied + _this select 1: ARRAY / OBJECT - Marker Position (Object should be acceptable) + _this select 2 - 9: STRING(S) - Marker parameters. + + Returns: + +*/ +//[[[cog import generate_private_arrays ]]] +private ["_mName","_mrkr"]; +//[[[end]]] +params [["_trgt", str(diag_tickTime)],["_mPos", position player],["_mShape","ICON"],["_mType","mil_dot"],["_mColor","ColorBlack"],["_mSize",[0.7,0.7]],["_mBrush",""],["_mDir",0],["_mText",""],["_mAlpha",1],["_mName",""]]; +diag_log format["Epoch: DEBUG: Creating marker at %1 called %2 (Params:%3).", _mPos, _trgt, _this]; + +if(_mName == "")then{_mName = str(_trgt) + str(diag_tickTime);}; +_mrkr = createMarkerLocal [_mName, _mPos]; +_mName setMarkerShapeLocal _mShape; +_mName setMarkerTypeLocal _mType; +if!(_mText == "")then{_mName setMarkerTextLocal _mText;}; +_mName setMarkerSizeLocal _mSize; +_mName setMarkerColorLocal _mColor; +if!(_mBrush == "")then{_mName setMarkerBrushLocal _mBrush;}; +_mName setMarkerDirLocal _mDir; +_mName setMarkerAlphaLocal _mAlpha; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_mineRocks.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_mineRocks.sqf new file mode 100644 index 0000000..0839fe3 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_mineRocks.sqf @@ -0,0 +1,48 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Request mine rocks and scrap metal + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_mineRocks.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_currentPos","_found","_foundIndex","_getWorldTypes","_object","_objects","_worldTypes"]; +//[[[end]]] +if ((diag_tickTime - EPOCH_lastMineRocks) >= 2) then { + EPOCH_lastMineRocks = diag_tickTime; + if (random 1 < 0.33) then { + + _currentPos = player modelToWorld[0, 5, 0]; + if !(surfaceIsWater _currentPos) then { + _currentPos = ATLtoASL _currentPos; + }; + + _objects = lineIntersectsWith[eyePos player, _currentPos, player, objNull, true]; + _object = objNull; + + _found = false; + _foundIndex = -1; + { + _worldTypes = ["rock","cinder","wreck","ore"]; + _getWorldTypes = [_x, _worldTypes] call EPOCH_worldObjectType; + { + if (_getWorldTypes param [_worldTypes find _x, false]) exitWith { + _found = true; + _foundIndex = _forEachIndex; + }; + } forEach _worldTypes; + if (_found)exitWith{_object = _x}; + }foreach _objects; + + if (!isNull _object && {alive _object}) then { + [_object, _foundIndex, player, Epoch_personalToken] remoteExec ["EPOCH_server_mineRocks",2]; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_niteLight.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_niteLight.sqf new file mode 100644 index 0000000..31426b7 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_niteLight.sqf @@ -0,0 +1,35 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Andrew Gregory + + Description: + setup nightlight to provide improved night vision + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_niteLight.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_config","_nlSettings","_pos"]; +//[[[end]]] +if (!isNull EP_light) then { + deleteVehicle EP_light; +}; +_config = 'CfgEpochClient' call EPOCH_returnConfig; +_nlSettings = getArray( _config >> "niteLight"); +_nlSettings params [["_nlEnabled",1],["_nlBright",1.88],["_nlZ",22]]; +if (_nlEnabled isEqualTo 1) then { + _pos = (getPosATL vehicle player); + _pos set [2,_nlZ]; + EP_light = "#lightpoint" createvehiclelocal _pos; + EP_light setposATL _pos; + EP_light attachTo [vehicle player,[0,8.11,_nlZ]]; //offset infront of vehicle player so that the darkness is 'following' them. + EP_light setLightDayLight false; //Sets light so it can only be used at night. + EP_light setLightBrightness _nlBright; + EP_light setLightAmbient [0.435, 0.439, 0.439];//Using new Colours. + EP_light setlightcolor [0.435, 0.439, 0.439]; +}; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_onEachFrame.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_onEachFrame.sqf new file mode 100644 index 0000000..229d2bb --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_onEachFrame.sqf @@ -0,0 +1,199 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + code that executes onEachFrame is used for 3d movment, ESP, and 3d icons. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf +*/ +if (!isNull EPOCH_currentTarget && vehicle player == player) then { + _currentTarget = EPOCH_currentTarget; + + _distance = player distance _currentTarget; + if (_distance < 9) then { + + _stability = 0; + _color = [1, 1, 1, 1]; + _text = format ["Hold (%1)",EPOCH_keysAction call BIS_fnc_keyCode]; + _icon = "\x\addons\a3_epoch_code\Data\UI\ui_question_ca.paa"; + + switch EPOCH_currentTargetMode do { + case 0: { + _stability = 100 - round(damage _currentTarget * 100); + _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa"; + _color = [100,0,_stability,1] call EPOCH_colorRange; + }; + case 1: { + // _text = if (EPOCH_buildMode > 0) then[{_text}, { format ["Hold (%1)",EPOCH_keysBuildMode1 call BIS_fnc_keyCode] }]; + _stability = if (EPOCH_buildMode > 0) then[{_currentTarget getVariable["stability", 100]}, {100 - round(damage _currentTarget * 100)}]; + _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa"; + _color = [100,0,_stability,1] call EPOCH_colorRange; + }; + case 2: { + if (alive _currentTarget) then{ + // TODO move accept trade into dynamic menu + _text = format["%1 - %2", if (isStreamFriendlyUIEnabled && isPlayer _currentTarget) then[{"Player"}, { name _currentTarget }],_text]; + _stability = 100 - round(damage _currentTarget * 100); + _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa"; + _color = [100,0,_stability,1] call EPOCH_colorRange; + } else { + //_text = "Press (Inventory)"; + _icon = "\x\addons\a3_epoch_code\Data\UI\ui_crossbones_ca.paa"; + }; + }; + case 3: { + // Animals, Drone, Sappers + if (!alive _currentTarget && _distance < 2) then{ + _text = format ["Gut - %1",_text]; + _icon = "\x\addons\a3_epoch_code\Data\UI\ui_crossbones_ca.paa"; + _color = [1,1,1,1]; + }; + }; + case 4: { + // Base Objects With Storage + _text = if (EPOCH_buildMode > 0) then[{_text}, { format ["Hold (%1) or (%2)",EPOCH_keysAction call BIS_fnc_keyCode, ((actionKeys "Gear" select 0) call BIS_fnc_keyCode),_text] }]; + _stability = if (EPOCH_buildMode > 0) then[{_currentTarget getVariable["stability", 100]}, {100 - round(damage _currentTarget * 100)}]; + _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa"; + _color = [100,0,_stability,1] call EPOCH_colorRange; + }; + }; + + if (!isNull EPOCH_stabilityTarget) then { + if (([10] call EPOCH_fnc_cursorTarget) != EPOCH_stabilityTarget) then { + EPOCH_stabilityTarget = objNull; + } else { + _text = ""; + if ((diag_tickTime - EPOCH_lastTargetTime) >= 0.05) then { + _stability = (_stability - 1) max 0; + EPOCH_stabilityTarget setVariable["stability", _stability]; + EPOCH_lastTargetTime = diag_tickTime; + }; + if (_stability == 0) then { + switch EPOCH_buildOption do { + case 0: {EPOCH_stabilityTarget call EPOCH_removeBUILD}; + case 1: {EPOCH_stabilityTarget call EPOCH_upgradeBUILD}; + case 2: {EPOCH_stabilityTarget call EPOCH_fnc_SelectTargetBuild}; + }; + EPOCH_stabilityTarget = objNull; + }; + }; + }; + + _pos = visiblePositionASL _currentTarget; + _pos set[2, (_currentTarget modelToWorld[0, 0, 0]) select 2]; + _size = 2.5; + drawIcon3D[format[_icon, _stability], _color, _pos, _size, _size, 0, _text, 0, _size / 60, "PuristaMedium"]; + }; +} else { + EPOCH_stabilityTarget = objNull; +}; + +if (EPOCH_drawIcon3d) then { + { + if (!isPlayer _x) then { + _pos = visiblePositionASL _x; + _pos set[2, (_x modelToWorld[0, 0, 0]) select 2]; + _endTime = _x getVariable["EPOCH_endTime", 0]; + _num = (round(_endTime - diag_tickTime)) max 0; + _color = [10,0,_num,1] call EPOCH_colorRange; + drawIcon3D[format["\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa", _num], _color, _pos, 4, 4, 0, "", 1, 0.05, "PuristaMedium"]; + }; + }forEach EPOCH_arr_countdown; +}; + +if !(isnull EPOCH_target) then { + if (EPOCH_velTransform) then { + if (EPOCH_playerEnergy > 0) then { + _pos1 = getPosASL EPOCH_target; + _vel1 = velocity EPOCH_target; + _dir1 = vectorDir EPOCH_target; + _up1 = vectorUp EPOCH_target; + _interval = 0.1; + + if !(EP_velocityTransformation isEqualTo []) then { + EPOCH_target setvelocitytransformation[_pos1, (EP_velocityTransformation select 0), _vel1, (EP_velocityTransformation select 1), _dir1, (EP_velocityTransformation select 2), _up1, (EP_velocityTransformation select 3), _interval]; + } else { + _pos2 = player modelToWorld[EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET]; + if !(EPOCH_maxBuildingHeight == 0) then { + if (_pos2 select 2 > EPOCH_maxBuildingHeight) then { + _pos2 set[2, EPOCH_maxBuildingHeight]; + }; + }; + if ((_pos2 select 2) < 0) then { _pos2 set[2, 0] }; + if ((_pos1 distance _pos2) > 0) then { + _newpos = AGLtoASL _pos2; + if (surfaceiswater _pos2) then { + _newpos = _pos2; + }; + EPOCH_target setvelocitytransformation[_pos1, _newpos, _vel1, _vel1, _dir1, _dir1, _up1, _up1, _interval]; + }; + }; + } else { + EPOCH_velTransform = false; + }; + }; + { + _distance = player distance _x; + if (_distance < 9) then { + _pos = _x; + _color = [1, 1, 0, 0.7]; + _size = 1; + drawIcon3D["x\addons\a3_epoch_code\Data\UI\snap_ca.paa", _color, _pos, _size, _size, 0, "", 1, _size / 60, "PuristaMedium"]; + }; + }forEach EPOCH_arr_snapPoints; + if !(EPOCH_arr_snapObjects isequalto []) then { + EPOCH_arr_snapObjects params [["_SnapObj1",objNull],["_SnapObj2",objNull]]; + drawIcon3D ["\a3\ui_f\data\map\diary\icons\unitgroup_ca.paa", [1,0,0,1], ASLtoATL (getposASL _SnapObj1), 1.5, 1.5,0]; + drawLine3D [ASLToAGL (getposasl _SnapObj1),ASLToAGL (getposasl _SnapObj2), [1,0,0,1]]; + }; +}; + +{ + if (!isNull _x) then { + _pos = visiblePositionASL _x; + _pos set[2, (_x modelToWorld[0, 0, 0]) select 2]; + _dmg = damage _x; + _color = [0,1,_dmg,1] call EPOCH_colorRange; + _text = format['%1 : %2m', [typeOf _x,name _x] select (isPlayer _x), round(player distance _x)]; + drawIcon3D["\x\addons\a3_epoch_code\Data\Member.paa", _color, _pos, 1, 1, 0, _text, 1, 0.025, "PuristaMedium"]; + }; +}forEach EPOCH_ESP_TARGETS; + +if (EPOCH_ESP_PLAYER || EPOCH_ESP_VEHICLES) then { + _viewDistance = viewDistance max 1000 min 2500; + { + if (!isNull _x) then { + _distance = round(player distance _x); + _pos = visiblePositionASL _x; + if (isPlayer _x) then { + if (EPOCH_ESP_PLAYER) then { + _pos set[2, (_x modelToWorld[0, 0, 1.8]) select 2]; + _text = ''; + if (vehicle _x == _x) then { + _text = format['%1 (%2m)', name _x, _distance]; + } + else { + _name = []; + {if (alive _x && isPlayer _x) then { _id = _name pushBack(name _x) }} count crew vehicle _x; + _text = format['%1 (%2m) - %3', _name, _distance, getText(configFile >> "CfgVehicles" >> typeOf vehicle _x >> "displayName")]; + }; + drawIcon3D['', [1, 0, 0, abs((_distance) / _viewDistance - 1)], _pos, 0.2, 0.2, 0, _text, 1, 0.03, "PuristaMedium"]; + }; + } + else { + if (EPOCH_ESP_VEHICLES) then { + _pos set[2, (_x modelToWorld[0, 0, 0]) select 2]; + drawIcon3D['', [0, 0.5, 1, abs((_distance) / _viewDistance - 1)], _pos, 0.2, 0.2, 0, getText(configFile >> "CfgVehicles" >> typeOf _x >> "displayName"), 1, 0.03, "PuristaMedium"]; + }; + }; + }; + } forEach EPOCH_ESP_VEHICLEPLAYER; +}; + +call Epoch_custom_OnEachFrame; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_removeMarker.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_removeMarker.sqf new file mode 100644 index 0000000..4c95c1b --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_removeMarker.sqf @@ -0,0 +1,28 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Create a local marker, with options. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_removeMarker.sqf + + Example: + ["markerName"] call EPOCH_removeMarker + + Parameter(s): + _this select 0: STRING - Marker Name + + Returns: + +*/ +params [["_mName",""]]; +diag_log format["Epoch: ADMIN: Removing marker %1.", _mName]; + +if(_mName == "")exitWith{}; +deleteMarkerLocal _mName; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_supportCopter.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_supportCopter.sqf new file mode 100644 index 0000000..fadb68f --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_supportCopter.sqf @@ -0,0 +1,41 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark + + Description: + Spawn drone function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_supportCopter.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_SpawnTypes","_Spawncounts","_UnitType","_arrUnits","_idx","_maxunitCount","_minunitCount","_unitCount"]; +//[[[end]]] +params ["_pos","_copter"]; + +_arrUnits = getArray (getMissionConfig "CfgEpochUAVSupport" >> "unitTypes"); +_minunitCount = getNumber (getMissionConfig "CfgEpochUAVSupport" >> "minUnitNum"); +_maxunitCount = getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxUnitNum"); +_unitCount = _minunitCount + round (random (_maxunitCount - _minunitCount)); + +_SpawnTypes = []; +_Spawncounts = []; +for "_i" from 1 to _unitCount do { + _UnitType = selectRandom _arrUnits; + _idx = _SpawnTypes find _UnitType; + if (_idx == -1) then { + _SpawnTypes pushback _UnitType; + _Spawncounts pushback 1; + } + else { + _Spawncounts set [_idx,(_Spawncounts select _idx)+ 1]; + }; +}; + +{ + [_SpawnTypes select _foreachindex, player, true, _x, _this] call EPOCH_unitSpawn; +} forEach _Spawncounts; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_unitSpawn.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_unitSpawn.sqf new file mode 100644 index 0000000..7b21977 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_unitSpawn.sqf @@ -0,0 +1,221 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Andrew Gregory + + Description: + Antagonist spawn function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_aiskill","_arrSkills","_arrUnits","_arrVals","_bomb","_config","_currentLimit","_disableAI","_driver","_grp","_index","_jammers","_loop","_minspawndist","_maxspawndist","_minAISkill","_missionConfig","_nonJammer","_nonTrader","_nonTraderAIRange","_playerSpawnArray","_playerSpawnArrayKeyFinal","_pos","_restricted","_sapperHndl","_sapperNum","_spawnLimit","_targetPos","_unit","_units"]; +//[[[end]]] +params ["_unitClass",["_trgt",player],["_doVariable",false],["_unitCount",1],["_extraData",[]] ]; + +_bomb = objNull; + +_index = EPOCH_spawnIndex find _unitClass; +_spawnLimit = 0; +if (_index != -1) then { + _playerSpawnArrayKeyFinal = "EPOCH_playerSpawnArray"; + if !(isNil "_playerSpawnArrayKey") then {_playerSpawnArrayKeyFinal = _playerSpawnArrayKey}; + _playerSpawnArray = missionNamespace getVariable [_playerSpawnArrayKeyFinal,[]]; + _spawnLimit = _playerSpawnArray select _index; +}; +_currentLimit = count(_trgt nearEntities[_unitClass, 800]); +if (!_doVariable && (_currentLimit >= _spawnLimit)) exitWith { + diag_log format["DEBUG: too many %1 exiting unitspawn",_unitClass]; +}; + +_nonJammer = ["CfgEpochClient", "nonJammerAI", ["B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperG_F","Epoch_SapperB_F","I_UAV_01_F","EPOCH_RyanZombie_1"]] call EPOCH_fnc_returnConfigEntryV2; +_nonTrader = ["CfgEpochClient", "nonTraderAI", ["B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperG_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F","GreatWhite_F","EPOCH_RyanZombie_1"]] call EPOCH_fnc_returnConfigEntryV2; +_nonTraderAIRange = ["CfgEpochClient", "nonTraderAIRange", 150] call EPOCH_fnc_returnConfigEntryV2; +_loop = false; +_unit = objNull; + +_targetPos = getPosATL _trgt; +_targetPos set [2,0]; + +_jammers = (nearestObjects[_targetPos, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {_targetPos distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))}; +if(!(_jammers isEqualTo []) && (_unitClass in _nonJammer))exitWith{}; + +_restricted = nearestObjects [_targetPos, ["ProtectionZone_Invisible_F"], _nonTraderAIRange]; +if(!(_restricted isEqualTo []) && (_unitClass in _nonTrader))exitWith{}; + +_disableAI = { + {_this disableAI _x}forEach["TARGET","AUTOTARGET","FSM"]; +}; +_units = []; +switch _unitClass do { + case "Epoch_Cloak_F": { + for "_i" from 0 to (_unitCount-1) do { + _unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"]; + _units pushBack _unit; + _unit call _disableAI; + [_unit,_trgt] execFSM "\x\addons\a3_epoch_code\System\cloak.fsm"; + _unit addEventHandler ["Killed", {[_this, "AntagonistKills", 1, true] call Epoch_unit_onKilledEH;}]; + }; + }; + case "GreatWhite_F": { + if (surfaceIsWater _targetPos) then{ + if (((_targetPos vectorDiff getPosASL _trgt) select 2) > 25) then{ + for "_i" from 0 to (_unitCount-1) do { + _unit = createAgent[_unitClass, _targetPos, [], 120, "FORM"]; + _units pushBack _unit; + _unit call _disableAI; + [_unit] execFSM "\x\addons\a3_epoch_code\System\Shark_Brain.fsm"; + _unit addEventHandler ["Killed", {[_this, "AntagonistKills", 1, true] call Epoch_unit_onKilledEH;}]; + }; + }; + }; + }; + case "Epoch_Sapper_F": { + if(random 100 < 6 && isNull _trgt)then{ + _config = 'CfgEpochSapper' call EPOCH_returnConfig; + _sapperNum = 8; + if(getNumber(_config >> "sapperMigrationCount") > 0)then{ + _sapperNum = getNumber(_config >> "sapperMigrationCount"); + }; + [_trgt,_sapperNum] execVM "epoch_code\compile\EPOCH_callSapperMigration.sqf"; + }else{ + for "_i" from 0 to (_unitCount-1) do { + _unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"]; + _units pushBack _unit; + _bomb = createVehicle ["Sapper_Charge_Ammo", _targetPos, [], 0, "CAN_COLLIDE"]; + _bomb attachTo [_unit, [0,0,0],"Pelvis"]; + _unit call _disableAI; + _sapperHndl = [_unit, _bomb, _trgt] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain.fsm"; + _unit setVariable ["sapperHndl",_sapperHndl]; + _unit addEventHandler ["FiredNear", format ["%1 setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];",_sapperHndl]]; + _unit addEventHandler ["Hit", format ["%1 setFSMVariable [""_sHit"",[_this select 1, _this select 2]];",_sapperHndl]]; + _unit addEventHandler ["Killed", {[_this, "AntagonistKills", 1, true] call Epoch_unit_onKilledEH;}]; + }; + }; + }; + case "Epoch_SapperG_F": { + for "_i" from 0 to (_unitCount-1) do { + _unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"]; + _units pushBack _unit; + _bomb = createVehicle ["SmokeShellToxicSapper", _targetPos, [], 0, "CAN_COLLIDE"]; + _bomb attachTo [_unit, [0,0,0],"Pelvis"]; + [_bomb, player, Epoch_personalToken,_unit,false] remoteExec ["EPOCH_server_handle_sapperObjs",2]; + _bomb = createVehicle ["Sapper_Charge_Ammo", _targetPos, [], 0, "CAN_COLLIDE"]; + _bomb attachTo [_unit, [0,0,0],"Pelvis"]; + _unit call _disableAI; + _sapperHndl = [_unit, _bomb, _trgt] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain2.fsm"; + _unit setVariable ["sapperHndl",_sapperHndl]; + _unit addEventHandler ["FiredNear", format ["%1 setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];",_sapperHndl]]; + _unit addEventHandler ["Hit", format ["%1 setFSMVariable [""_sHit"",[_this select 1, _this select 2]];",_sapperHndl]]; + _unit addEventHandler ["Killed", {[_this, "AntagonistKills", 1, true] call Epoch_unit_onKilledEH;}]; + }; + }; + case "Epoch_SapperB_F": { + for "_i" from 0 to (_unitCount-1) do { + _unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"]; + _units pushBack _unit; + _bomb = createVehicle["SapperB_Charge_Ammo", _targetPos, [], 0, "CAN_COLLIDE"]; + _bomb attachTo[_unit, [0, 0, 0], "Pelvis"]; + _unit call _disableAI; + _sapperHndl = [_unit, _bomb, _trgt] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain2.fsm"; + _unit setVariable ["sapperHndl",_sapperHndl]; + _unit addEventHandler ["FiredNear", format ["%1 setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];",_sapperHndl]]; + _unit addEventHandler ["Hit", format ["%1 setFSMVariable [""_sHit"",[_this select 1, _this select 2]];",_sapperHndl]]; + _unit addEventHandler ["Killed", {[_this, "AntagonistKills", 1, true] call Epoch_unit_onKilledEH;}]; + }; + }; + case "I_UAV_01_F": { + for "_i" from 0 to (_unitCount-1) do { + _targetPos = [_targetPos, 600, 1200, 5, 0, 400, 0] call BIS_fnc_findSafePos; + _targetPos set[2, 600]; + _unit = createVehicle["I_UAV_01_F", _targetPos, [], 0, "FLY"]; + _unit disableTIEquipment true; + _units pushBack _unit; + addToRemainsCollector[_unit]; + _unit flyInHeight 600; + _grp = createGroup [RESISTANCE, true]; + _driver = _grp createUnit["I_UAV_AI", position _unit, [], 0, "CAN_COLLIDE"]; + _driver moveInAny _unit; + [_unit, _trgt] execFSM "\x\addons\a3_epoch_code\System\Copter_brain.fsm"; + _unit addEventHandler ["Killed", {[_this, "AIKills", 1, true] call Epoch_unit_onKilledEH;}]; + }; + }; + case "PHANTOM": { + [] execFSM "\x\addons\a3_epoch_code\System\Phantom_Brain.fsm"; + }; + case "B_Heli_Transport_01_F": { + [] execFSM "\x\addons\a3_epoch_code\System\Event_Air_Drop.fsm"; + }; + case "EPOCH_RyanZombie_1": { + for "_i" from 1 to (_spawnLimit - _currentLimit) do + { + _unit = [] call EPOCH_zombieSpawn; + _units pushBack _unit; + }; + }; + case "I_Soldier_EPOCH": { + _extraData params [["_pos",[]],["_copter",objnull]]; + _missionConfig = getMissionConfig "CfgEpochSoldier"; + _minspawndist = getNumber (_missionConfig >> "minspawndist"); + _maxspawndist = getNumber (_missionConfig >> "maxspawndist"); + if (_pos isEqualTo []) then { + _pos = [_targetPos,_minspawndist,_maxspawndist,1,true] call EPOCH_fnc_findSafePos; + }; + _pos set [2,0]; + _grp = createGroup [RESISTANCE, true]; + _grp setBehaviour "COMBAT"; + _grp setCombatMode "RED"; + _minAISkill = getNumber (_missionConfig >> "minAISkill"); + _arrUnits = getArray (_missionConfig >> "unitTypes"); + _arrSkills = ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"]; + _arrVals = [ + getNumber (_missionConfig >> "maxAimingAccuracy"), + getNumber (_missionConfig >> "maxAimingShake"), + getNumber (_missionConfig >> "maxAimingSpeed"), + getNumber (_missionConfig >> "maxEndurance"), + getNumber (_missionConfig >> "maxSpotDistance"), + getNumber (_missionConfig >> "maxSpotTime"), + getNumber (_missionConfig >> "maxCourage"), + getNumber (_missionConfig >> "maxReloadSpeed"), + getNumber (_missionConfig >> "maxCommanding"), + getNumber (_missionConfig >> "maxGeneral") + ]; + for "_i" from 0 to (_unitCount - 1) do { + _unit = _grp createUnit[selectRandom _arrUnits, _pos, [], 0, "FORM"]; + _units pushBack _unit; + _unit setRank "Private"; + _unit enableAI "TARGET"; + _unit enableAI "AUTOTARGET"; + _unit enableAI "MOVE"; + _unit enableAI "ANIM"; + _unit disableAI "FSM"; + _unit addEventHandler ["Killed", {[_this, "AIKills", 1, true] call Epoch_unit_onKilledEH;}]; + // randomize skill + for "_i" from 0 to ((count _arrSkills)-1) do { + _aiskill = floor random (_arrVals select _i); + if (_aiskill < _minAISkill) then {_aiskill = _minAISkill}; + _unit setSkill [_arrSkills select _i,_arrVals select _i]; + }; + // spawn brains only on leader + if (_i == 0) then { + _grp selectLeader _unit; + [_pos,_copter,_trgt,_unit] execFSM "\x\addons\a3_epoch_code\System\Group_Leader_Brain.fsm"; + }; + }; + }; +}; + +if(_doVariable && (!isNull _unit) && (!isNull _trgt))then{ + _trgt setVariable ["EPOCH_antagObj", _unit, true]; + if!(isNull _bomb)then{ + _trgt setVariable ["EPOCH_antagBomb", _bomb, true]; + }; +}; + +if !(_units isEqualTo []) then { + _units remoteExec ["EPOCH_localCleanup",2]; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf new file mode 100644 index 0000000..a05426c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf @@ -0,0 +1,25 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Antagonist spawn chance decrease function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_index","_playerSpawnArray","_playerSpawnArrayKeyFinal"]; +//[[[end]]] +params ["_spawnName", ["_decrease",1]]; +_index = EPOCH_spawnIndex find _spawnName; +if (_index != -1) then{ + _playerSpawnArrayKeyFinal = "EPOCH_playerSpawnArray"; + if !(isNil "_playerSpawnArrayKey") then {_playerSpawnArrayKeyFinal = _playerSpawnArrayKey}; + _playerSpawnArray = missionNamespace getVariable [_playerSpawnArrayKeyFinal,[]]; + _playerSpawnArray set[_index, ((_playerSpawnArray select _index) - _decrease) max 0]; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf new file mode 100644 index 0000000..0a10858 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf @@ -0,0 +1,25 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Antagonist spawn chance increase function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_index","_playerSpawnArray","_playerSpawnArrayKeyFinal"]; +//[[[end]]] +params ["_spawnName", ["_increase",1]]; +_index = EPOCH_spawnIndex find _spawnName; +if (_index != -1) then{ + _playerSpawnArrayKeyFinal = "EPOCH_playerSpawnArray"; + if !(isNil "_playerSpawnArrayKey") then {_playerSpawnArrayKeyFinal = _playerSpawnArrayKey}; + _playerSpawnArray = missionNamespace getVariable [_playerSpawnArrayKeyFinal,[]]; + _playerSpawnArray set[_index, ((_playerSpawnArray select _index) + _increase) min (EPOCH_spawnLimits select _index)]; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_unit_onKilledEH.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_unit_onKilledEH.sqf new file mode 100644 index 0000000..5a7df72 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_unit_onKilledEH.sqf @@ -0,0 +1,25 @@ +/* + Author: DirtySanchez - EpochMod.com + + Contributors: + + Description: + Antagonist killed event handler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_unit_onKilledEH.sqf +*/ +params [ ["_killedEH",[]], ["_statType","AIKills"], ["_adjust", 0], ["_toClient", false] ]; +if(_killedEH isEqualTo [])exitWith{diag_log "EPOCHDebug: unit_onKilledEH -1- EH sent empty array";}; +if(_statType isEqualTo "")exitWith{diag_log "EPOCHDebug: unit_onKilledEH -2- stat Type is empty string";}; +if(_adjust isEqualTo 0)exitWith{diag_log "EPOCHDebug: unit_onKilledEH -3- stat adjustment is 0";}; + +_unit = _killedEH select 0; +_killer = _killedEH select 1; +if(_unit isEqualTo _killer)exitWith{ + //diag_log "EPOCHDebug: unit_onKilledEH -4- unit is killer"; +}; +[player, _killer, _statType, _adjust, _toClient, Epoch_personalToken] remoteExec ["EPOCH_fnc_updatePlayerStats",2]; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_updateLoadingScreen.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_updateLoadingScreen.sqf new file mode 100644 index 0000000..03829e2 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_updateLoadingScreen.sqf @@ -0,0 +1,22 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: + + Description: + Update loading screen message + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_updateLoadingScreen.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_display"]; +//[[[end]]] +_display = uiNameSpace getVariable ["EPOCH_loadingScreen",displayNull]; +if (!isNull _display) then { + (_display displayCtrl 50) ctrlSetText _this; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_zombieSpawn.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_zombieSpawn.sqf new file mode 100644 index 0000000..2dbac50 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/EPOCH_zombieSpawn.sqf @@ -0,0 +1,54 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Call a zombie. (Ryans required) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_zombieSpawn.sqf + + Example: + [] call EPOCH_zombieSpawn; + + Parameter(s): + + Returns: + OBJECT - Zombie Agent +*/ +//[[[cog import generate_private_arrays ]]] +private ["_clutterPos","_disableAI","_grave","_unit","_unitClass","_zMax","_zRange","_zedHandle","_zeds"]; +//[[[end]]] +params [["_justSpawn",false]]; +_disableAI = {{_this disableAI _x}forEach["TARGET","AUTOTARGET","FSM"];}; + +_zRange = getNumber (getMissionConfig "CfgEpochRyanZombie" >> "range"); +_zeds = getArray (getMissionConfig "CfgEpochRyanZombie" >> "zeds"); +// _zMax = getNumber (getMissionConfig "CfgEpochRyanZombie" >> "maxNumber"); + +_unitClass = selectRandom _zeds; +_unit = createAgent[_unitClass, position player, [], _zRange, "FORM"]; +// todo cleanup this object after some time +//_clutterPos = getPosATL _unit; +//if!(isOnRoad _unit)then{ + // _grave = createVehicle ["Land_Grave_dirt_F", _clutterPos, [], 0, "CAN_COLLIDE"]; +//}; +_unit call _disableAI; +_unit switchMove "AmovPercMstpSnonWnonDnon_SaluteOut"; +[player, "AmovPercMstpSnonWnonDnon_SaluteOut", Epoch_personalToken, _unit] remoteExec ["EPOCH_server_handle_switchMove",2]; + +_unit setmimic "dead"; +// _unit setface (selectRandom ["RyanZombieFace1", "RyanZombieFace2", "RyanZombieFace3", "RyanZombieFace4", "RyanZombieFace5"]); +removegoggles _unit; +_zedHandle = [_unit,true] execFSM "epoch_code\system\EPOCH_zombie_brain.fsm"; +_unit addEventHandler ["FiredNear", "(_this select 0) setVariable [""zFiredNear"",[_this select 1, _this select 2]];"]; +_unit addEventHandler ["Hit", "(_this select 0) setVariable [""zHit"",[_this select 1, _this select 2]];"]; +_unit addEventHandler ["Killed", { + [player, _this select 1, "ZombieKills", 1, true, Epoch_personalToken] remoteExec ["EPOCH_fnc_updatePlayerStats",2]; +}]; + +_unit diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/bis_functions/returnVector.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/bis_functions/returnVector.sqf new file mode 100644 index 0000000..70b2779 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/bis_functions/returnVector.sqf @@ -0,0 +1,14 @@ +// BIS function +//[[[cog import generate_private_arrays ]]] +private ["_d","_v","_x","_y"]; +//[[[end]]] +_v = +(_this select 0); +_d = _this select 1; + +_x = _v select 0; +_y = _v select 1; + +_v set [0, (cos _d)*_x - (sin _d)*_y]; +_v set [1, (sin _d)*_x + (cos _d)*_y]; + +_v diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/both/EPOCH_compiler.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/both/EPOCH_compiler.sqf new file mode 100644 index 0000000..3b10939 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/both/EPOCH_compiler.sqf @@ -0,0 +1,98 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Custom functions compiler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/both/EPOCH_compiler.sqf + + Example: + "CfgServerFunctions" call EPOCH_fnc_compiler; + or + "CfgClientFunctions" call EPOCH_fnc_compiler; + + Parameter(s): + _this: STRING - Config class name + + Returns: + BOOL +*/ +//[[[cog import generate_private_arrays ]]] +private ["_code","_config","_config_name","_customVarNames","_customVarsInit","_file","_file_raw","_file_tag","_fnc_path","_header","_missionConfig","_randomValues","_rng","_tag","_var_name","_version"]; +//[[[end]]] +params [["_configName","",[""] ] ]; + +_config = (configfile >> _configName); +_missionConfig = (getMissionConfig _configName); +if (isClass _missionConfig) then{ + _config = _missionConfig; +}; + +// custom header for interscript communications +_customVarsInit = getArray(getMissionConfig "CfgEpochClient" >> "customVarsDefaults"); +_customVarNames = _customVarsInit apply {_x param [0,""]}; +_randomValues = []; +_header = ""; +{ + while {true} do { + _rng = round(diag_tickTime + random 99999); + if !(_rng in _randomValues) exitWith { + _randomValues pushBack _rng; + _header = _header + format["_player%1Key = 'EPOCH_%2';",_x, _rng]; + }; + }; +} forEach _customVarNames; + +_version = getNumber(_config >> "version"); +if (_version >= 1) then { + { + if (isClass(_x)) then { + _tag = getText(_x >> "tag"); + _file = getText(_x >> "file"); + _file_tag = _file; + { + if (isClass(_x)) then { + _file = _file_tag; + _file_raw = getText(_x >> "file"); + if (_file_raw == "") then { + _file = format["%1\%2", _file, configName _x]; + } else { + _file = _file_raw; + }; + { + _config_name = configName _x; + //version 2 More like BI standard fnc / fn_ + _var_name = format["%1_fnc_%2", _tag, _config_name]; + _fnc_path = format["%1\fn_%2.sqf", _file, _config_name]; + if (_version == 1) then { + //version 1 TAG + _ + configName + _var_name = format["%1_%2", _tag, _config_name]; + _fnc_path = format["%1\%2.sqf", _file, _var_name]; + }; + _file_raw = getText(_x >> "file"); + if (_file_raw != "") then { + _fnc_path = _file_raw; + }; + _code = ""; + if (getNumber(_x >> "customHeader") == 1) then { + _code = _header + (preprocessFileLineNumbers _fnc_path); + } else { + _code = (preprocessFileLineNumbers _fnc_path); + }; + + missionNamespace setvariable [_var_name,compileFinal _code]; + if (getNumber(_x >> "preInit") == 1) then { + call (missionNamespace getvariable _var_name); + }; + } forEach (configProperties [_x, "isClass _x", true]); + } + } forEach (configProperties [_x, "isClass _x", true]); + }; + } forEach (configProperties [_config, "isClass _x", true]); +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/both/EPOCH_isAny.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/both/EPOCH_isAny.sqf new file mode 100644 index 0000000..2aa1c8a --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/both/EPOCH_isAny.sqf @@ -0,0 +1,26 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Config compare function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/both/EPOCH_isAny.sqf + + Example: + _return = [_item, "CfgVehicles"] call EPOCH_fnc_isAny; + + Parameter(s): + _this select 0: STRING - Item Class + _this select 1: STRING - Parent Class + + Returns: + BOOL +*/ +params ["_item","_type"]; +(str(configFile >> _type >> _item) != "") diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/both/EPOCH_itemDisplayName.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/both/EPOCH_itemDisplayName.sqf new file mode 100644 index 0000000..7782e18 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/both/EPOCH_itemDisplayName.sqf @@ -0,0 +1,43 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Returns the DisplayName of a Vehicle, Weapon, or Magazine. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf + + Example: + _displayName = _part call EPOCH_itemDisplayName; + + Parameter(s): + _this: STRING - Vehicle, Weapon, or Magazine config class name + + Returns: + STRING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_displayName","_return"]; +//[[[end]]] +params ["_item"]; +_return = ""; +if ([_item, "CfgVehicles"] call EPOCH_fnc_isAny) then { + _return = getText(configfile >> "CfgVehicles" >> _item >> "DisplayName"); +} else { + if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then { + _return = getText(configfile >> "CfgWeapons" >> _item >> "DisplayName"); + } else { + if ([_item, "CfgMagazines"] call EPOCH_fnc_isAny) then { + _return = getText(configfile >> "CfgMagazines" >> _item >> "DisplayName"); + }; + }; +}; +if (_return isequalto "") then { + _return = _item; +}; +_return; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/both/EPOCH_weightedArray.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/both/EPOCH_weightedArray.sqf new file mode 100644 index 0000000..8c921e5 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/both/EPOCH_weightedArray.sqf @@ -0,0 +1,101 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Generates loot tables from configs + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/both/EPOCH_weightedArray.sqf + + Usage: + _lootTable = ["CfgMainTable", _type, "tables"] call EPOCH_fnc_weightedArray; + _loot = selectRandomWeighted _lootTable; +*/ +//[[[cog import generate_private_arrays ]]] +private ["_allow","_itemType","_lootTableArray","_lootTableName","_return","_totalChances","_value","_weightedArray"]; +//[[[end]]] +params ["_configName","_keyName","_arrayName"]; + +_debug = ["CfgEpochClient", "debug", false] call EPOCH_fnc_returnConfigEntryV2; +_lootTableName = format["EPOCH_LT_%1_%2_%3",_configName,_keyName,_arrayName]; +_return = missionNamespace getVariable[_lootTableName,[]]; + +// check for compiled loot table +if(_return isEqualTo[]) then { + // Since no cached version is found, make one. + _lootTableArray = []; + _weightedArray = []; + { + if(_x isEqualType []) then { + _x params ["_tname","_tqty",["_extraLogicRaw", [] ]]; + _tname params ["_item",["_itemType","NA"]]; + _allow = true; + if !(_extraLogicRaw isEqualTo[]) then { + _extraLogicRaw params [["_extraLogicType",""],["_extraLogicName",""],["_extraLogicCond",""],["_extraLogicData",""]]; + // check extra logic + _value = switch _extraLogicType do { + case "getDate": { + date select _extraLogicName + }; + case "getSunorMoon": { + sunOrMoon + }; + case "getMissionNamespaceVariable": { + missionNamespace getVariable [_extraLogicName, _extraLogicData] + }; + // not really needed + default { + _extraLogicName + }; + }; + _allow = [_value,_extraLogicCond,_extraLogicData] call EPOCH_fnc_arrayToLogic; + }; + // Check if config item actually exists + if (_allow) then { + switch _itemType do { + case "magazine": { + _allow = isClass (configFile >> "CfgMagazines" >> _item); + }; + case "backpack": { + _allow = isClass (configFile >> "CfgVehicles" >> _item); + }; + case "item"; + case "weapon": { + _allow = isClass (configFile >> "CfgWeapons" >> _item); + }; + }; + }; + // add to loot table + if (_allow) then { + _lootTableArray pushBack _tname; + _weightedArray pushBack _tqty; + }; + } else { + _lootTableArray pushBack _x; + _weightedArray pushBack 1; + }; + }forEach getArray((_configName call EPOCH_returnConfig) >> _keyName >> _arrayName); + + // compile to selectRandomWeighted format. + private _totalChances = 0; + {_totalChances = _totalChances + _x} count _weightedArray; + _return = []; + { + _return append [_lootTableArray select _forEachIndex,linearConversion [0,_totalChances,_x,0,1]]; + } forEach _weightedArray; + + // cache loot final loot table + missionNamespace setVariable[_lootTableName,_return]; + + // debug + if (_debug) then { + diag_log format["DEBUG: LootTable: %1 DATA: %2",_lootTableName,_return]; + }; +}; + +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_changeWallState.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_changeWallState.sqf new file mode 100644 index 0000000..f42e979 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_changeWallState.sqf @@ -0,0 +1,119 @@ +/* +Author: Aaron Clark - EpochMod.com + +Contributors: + +Description: +Epoch Change wall state + +Licence: +Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + +Github: +https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf + +Example: +[_this,"NWall",1] call EPOCH_changeWallState; + +Parameter(s): +_this select 0: OBJECT - Base building object +_this select 1: STRING - Name of animation +_this select 1: SCALAR - state +0: true = add wall +1: false = remove wall + +Returns: +NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_config","_craftItem","_craftQty","_currentCount","_hasRecipeItems","_items","_mags","_msg","_numRemoved","_objClass","_recipe","_recipeCount","_recipeItem","_recipeQty"]; +//[[[end]]] +params[ + ["_object", objNull], + ["_anim", ""], + ["_state", 0] +]; +if !(isNull _object) then{ + _msg = "Missing Items"; + // Get config + _config = 'CfgBaseBuilding' call EPOCH_returnConfig; + // upgradeBuildingPart + _objClass = typeOf _object; + // Add part + if (_state == 1) then{ + _recipe = getArray(_config >> _objClass >> "upgradeBuildingPart"); + _mags = magazines player; + _recipeCount = 0; + _numRemoved = 0; + _hasRecipeItems = true; + // Dry Run + { + _recipeItem = _x; + _recipeQty = 1; + _x params [["_recipeItem",_recipeItem],["_recipeQty",_recipeQty]]; + _recipeCount = _recipeCount + _recipeQty; + _currentCount = { _x == _recipeItem } count _mags; + if (_currentCount < _recipeQty) exitWith{ + _hasRecipeItems = false; + _msg = format["Need %2 %1 Have %3", _recipeItem call EPOCH_itemDisplayName, _recipeCount, _currentCount]; + }; + }forEach _recipe; + // remove item + if (_hasRecipeItems) then{ + { + _recipeItem = _x; + _recipeQty = 1; + _x params [["_recipeItem",_recipeItem],["_recipeQty",_recipeQty]]; + if ([_recipeItem, "CfgWeapons"] call EPOCH_fnc_isAny) then{ + _items = items player; + _currentCount = { _x == _recipeItem } count _items; + if (_currentCount >= _recipeQty) then{ + for "_i" from 1 to _recipeQty do { + if (_recipeItem in _items) then{ + player removeItem _recipeItem; + _numRemoved = _numRemoved + 1; + }; + }; + }; + } else { + _mags = magazines player; + _currentCount = { _x == _recipeItem } count _mags; + if (_currentCount >= _recipeQty) then{ + for "_i" from 1 to _recipeQty do { + if (_recipeItem in _mags) then{ + player removeMagazine _recipeItem; + _numRemoved = _numRemoved + 1; + }; + }; + }; + }; + }forEach _recipe; + }; + if (_numRemoved == _recipeCount) then{ + _object animate[_anim, _state, true]; + // push interacted object to queue to save later + EPOCH_arr_interactedObjs pushBackUnique _object; + [format["%1 part on %2", "Added", _objClass call EPOCH_itemDisplayName], 5] call Epoch_message; + } else { + [_msg, 5] call Epoch_message; + }; + } else { + // Remove part + _recipe = getArray(_config >> _objClass >> "removeBuildingPart"); + _object animate[_anim, _state, true]; + // push interacted object to save queue to save later + EPOCH_arr_interactedObjs pushBackUnique _object; + { + _craftItem = _x; + _craftQty = 1; + if (_x isEqualType[]) then{ + _craftItem = _x select 0; + _craftQty = _x select 1; + }; + for "_i" from 1 to _craftQty do { + _craftItem call EPOCH_fnc_addItemOverflow; + }; + }forEach _recipe; + [format["%1 part on %2", "Removed", _objClass call EPOCH_itemDisplayName], 5] call Epoch_message; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_checkBuild.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_checkBuild.sqf new file mode 100644 index 0000000..56c3967 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_checkBuild.sqf @@ -0,0 +1,49 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Raimonds Virtoss + + Description: + Epoch Check build + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf + + Example: + cursorTarget call EPOCH_checkBuild; + + Parameter(s): + _this select 0: OBJECT - Base building object + + Returns: + ARRAY of BOOLs +*/ +//[[[cog import generate_private_arrays ]]] +private ["_config","_objType","_out"]; +//[[[end]]] +_out = [false, false, false]; + +if !(isNil "EPOCH_simulSwap_Lock") exitWith{ _out }; +if !(isNull EPOCH_Target) exitWith{ _out }; + +params [["_object",objNull]]; + +if (isNull _object) exitWith{ _out }; +if ((player distance _object) > 9) exitWith { _out }; + +if !(EPOCH_buildMode > 0) exitWith {_out}; +if (EPOCH_playerEnergy <= 0) exitWith{ ["Need energy", 5] call Epoch_message; _out }; + +_objType = typeOf _object; +_config = 'CfgBaseBuilding' call EPOCH_returnConfig; + +_out = +[ + !(getArray(_config >> _objType >> "upgradeBuilding") isEqualTo []), + !(getArray(_config >> _objType >> "removeParts") isEqualTo []), + (_object isKindOf "ThingX") +]; +_out diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_countdown.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_countdown.sqf new file mode 100644 index 0000000..f0dbd74 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_countdown.sqf @@ -0,0 +1,84 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Raimonds Virtoss + + Description: + Epoch build countdown + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_countdown.sqf + + Example: + _currentTarget spawn EPOCH_countdown; + + Parameter(s): + _this select 0: OBJECT - Base building object + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfgBaseBuilding","_class","_endTime","_newObj","_objClass","_posObj","_previousBuildPos","_saveCheck","_savedBuildPos","_startTime","_worldspace"]; +//[[[end]]] + +if (!isNull _this) then { + + while {true} do { + if (!isNull _this) exitWith {}; + _posObj = (getPosATL _this); + _savedBuildPos = _this getVariable ["BUILD_SAVED_POS", []]; + _previousBuildPos = _this getVariable ["BUILD_POS", []]; + if (_previousBuildPos isEqualTo _posObj) exitWith {}; + _this setVariable ["BUILD_POS",_posObj]; + uiSleep 1; + }; + + // make sure it still there after exiting loop above ^ + if (!isNull _this) then { + + _startTime = diag_tickTime; + _endTime = _startTime + 30; + + _this setVariable["EPOCH_endTime", _endTime]; + + EPOCH_arr_countdown pushBackUnique _this; + + _saveCheck = true; + + EPOCH_drawIcon3d = true; + + while {diag_tickTime < _endTime} do { + if (EPOCH_Target == _this) exitWith{ _saveCheck = false; }; + if (isNull _this) exitWith{ _saveCheck = false; }; + if (EPOCH_stabilityTarget == _this) then { + _endTime = diag_tickTime + 30; + }; + uiSleep 0.1; + }; + + EPOCH_arr_countdown = EPOCH_arr_countdown - [_this]; + EPOCH_drawIcon3d = !(EPOCH_arr_countdown isEqualTo []); + + _objClass = typeOf _this; + // Spawn temporary static item insead of saving. + _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + if (getNumber(_cfgBaseBuilding >> _objClass >> "isTemporary") == 1) then { + _worldspace = [getposATL _this, vectordir _this, vectorup _this]; + deleteVehicle _this; + _class = getText(_cfgBaseBuilding >> _objClass >> "staticClass"); + if (_class != "") then { + _newObj = createVehicle[_class, (_worldspace select 0), [], 0, "CAN_COLLIDE"]; + _newObj setposATL(_worldspace select 0); + _newObj setVectorDirAndUp[_worldspace select 1, _worldspace select 2]; + }; + } else { + if (_saveCheck) then { + [_this, player, Epoch_personalToken] remoteExec["EPOCH_server_saveBuilding", 2]; + }; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf new file mode 100644 index 0000000..2e19fda --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf @@ -0,0 +1,61 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Raimonds Virtoss + + Description: + Epoch build select target + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf + + Example: + cursorTarget call EPOCH_fnc_SelectTargetBuild; + + Parameter(s): + _this select 0: OBJECT - Base building object + + Returns: + BOOL +*/ +//[[[cog import generate_private_arrays ]]] +private ["_stability","_targeter"]; +//[[[end]]] + +if !(isNil "EPOCH_simulSwap_Lock") exitWith{ false }; +if !(isNull EPOCH_Target) exitWith{ false }; +if (EPOCH_playerEnergy <= 0) exitWith{ ["Need energy", 5] call Epoch_message; false }; + +params [["_object",objNull]]; + +EPOCH_buildOption = 2; + +if (isNull _object) exitWith{ false }; +if ((player distance _object) > 9) exitWith { false }; +if (!(_object isKindOf "ThingX") && !(_object isKindOf "Constructions_static_F") && !(_object isKindOf "Constructions_foundation_F")) exitWith{ false }; + +// check if another player has target +_targeter = _object getVariable["last_targeter", objNull]; + +if (!isNull _targeter && _targeter != player && (player distance _object > _targeter distance _object)) exitWith{ EPOCH_stabilityTarget = objNull; false }; + +_stability = _object getVariable["stability", 100]; +if (_stability > 0) exitWith{ + if (isNull EPOCH_stabilityTarget) then { + _object setVariable["last_targeter", player, true]; + EPOCH_stabilityTarget = _object; + }; +}; + +/* +if (_object isKindOf "Infostand_base_F") then { + EPOCH_SURVEY pushBackUnique _object; +}; +*/ + +[_object] spawn EPOCH_simulSwap; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf new file mode 100644 index 0000000..dcb7563 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf @@ -0,0 +1,220 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Raimonds Virtoss + + Description: + check if building is allowed + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf + + Example: + _isAllowed = "" call EPOCH_isBuildAllowed; + _isAllowed = _objType call EPOCH_isBuildAllowed; + + Parameter(s): + _this select 0: OBJECT - Base building object + + Returns: + BOOL +*/ +//[[[cog import generate_private_arrays ]]] +private ["_StorageClasses","_BuildingClasses","_CamCountLimit","_alljammer","_buildingAllowed","_buildingCountLeader","_buildingCountLimit","_buildingCountPerMember","_buildingJammerRange","_bypassJammer","_c","_cfgBaseBuilding","_config","_ghostClass","_isAllowed","_jammer","_jammerGLOnly","_jammerPerGroup","_limitNearby","_maxBuildingHeight","_membercount","_myPosATL","_nearestJammer","_obj","_objType","_objectscount","_ownedJammerExists","_range","_restricted","_restrictedArray","_restrictedLocations","_restrictedLocationsArray","_restrictedLocationsRange","_simulClass","_staticClass","_storageCountLeader","_storageCountLimit","_storageCountPerMember","_useGroupCountLimits","_useSplitCountLimits"]; +//[[[end]]] + +_buildingAllowed = true; +_ownedJammerExists = false; +_useSplitCountLimits = false; +_useGroupCountLimits = true; +_nearestJammer = objNull; +_jammerGLOnly = true; + +// reject building if in vehicle +if (vehicle player != player)exitWith{["Building Disallowed: Inside Vehicle", 5] call Epoch_message; false }; + +// defaults +_config = 'CfgEpochClient' call EPOCH_returnConfig; +_JammerConfig = (_config >> "CfgJammers"); +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +if(getNumber(_config >> "useGroupCountLimits") == 0)then{_useGroupCountLimits=false}; +if(getNumber(_config >> "splitCountLimits") == 1)then{_useSplitCountLimits=true}; +if(getNumber(_config >> "jammerGLOnly") == 0)then{_jammerGLOnly=false}; + +_StorageClasses = ["CfgEpochClient", "StorageClasses", ["Buildable_Storage","Buildable_Storage_SIM","Buildable_Storage_Ghost","Constructions_lockedstatic_F","Secure_Storage_Temp"]] call EPOCH_fnc_returnConfigEntryV2; +_BuildingClasses = ["CfgEpochClient", "BuildingClasses", ["Constructions_static_F","Constructions_foundation_F","Const_Ghost_EPOCH"]] call EPOCH_fnc_returnConfigEntryV2; +_minJammerDistance = ["CfgEpochClient", "minJammerDistance", 650] call EPOCH_fnc_returnConfigEntryV2; +_maxBuildingHeight = ["CfgEpochClient", "maxBuildingHeight", 100] call EPOCH_fnc_returnConfigEntryV2; +_jammerPerGroup = ["CfgEpochClient", "jammerPerGroup", 1] call EPOCH_fnc_returnConfigEntryV2; + +_JammerClasses = call EPOCH_JammerClasses; +_JammerGhosts = call EPOCH_JammerGhosts; +_JammerCheckClasses = _JammerClasses + _JammerGhosts; + +// input +params ["_objType"]; +_obj = objNull; +if (_objType isEqualType objNull) then { + _obj = _objType; + _objType = typeOf _objType; +}; + +_staticClass = getText(_cfgBaseBuilding >> _objType >> "staticClass"); +_simulClass = getText(_cfgBaseBuilding >> _objType >> "simulClass"); +_ghostClass = getText(_cfgBaseBuilding >> _objType >> "GhostPreview"); +_bypassJammer = getNumber(_cfgBaseBuilding >> _staticClass >> "bypassJammer"); + +// Jammer +_jammer = (nearestObjects[player, _JammerCheckClasses, _minJammerDistance]-[_obj]); +if !(_jammer isEqualTo []) then { + if (_objType in _JammerCheckClasses) then { + { + if (alive _x) exitWith{ + _buildingAllowed = false; + ["Building Disallowed: Existing Jammer Signal", 5] call Epoch_message; + }; + } foreach _jammer; + } + else { + { + if (alive _x && player distance _x < (getnumber (_JammerConfig >> (typeof _x) >> "buildingJammerRange"))) exitWith{ + _nearestJammer = _x; + _JammerConfig = (_JammerConfig >> (typeof _nearestJammer)); + }; + } foreach _jammer; + if !(isNull _nearestJammer) then { + if !((_nearestJammer getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) exitwith { + _buildingAllowed = false; + ["Building Disallowed: Frequency Blocked", 5] call Epoch_message; + }; + _ownedJammerExists = true; + _membercount = 0; + Epoch_my_Group params [ + ["_groupName",""], + ["_leaderName",""], + ["_groupSize",0], + ["_modArray",[]], + ["_memberArray",[]] + ]; + _membercount = count _modArray + count _memberArray; + _buildingJammerRange = getnumber (_JammerConfig >> "buildingJammerRange"); + _storageCountLimit = (getnumber (_JammerConfig >> "storageCountLimit")) + ((getnumber (_JammerConfig >> "storageCountPerMember")) * _membercount); + _buildingCountLimit = (getnumber (_JammerConfig >> "buildingCountLimit")) + ((getnumber (_JammerConfig >> "buildingCountPerMember")) * _membercount); + _CamCountLimit = getnumber (_JammerConfig >> "maxCams"); + + if (_useSplitCountLimits) then { + if({_objType iskindof _x} count _StorageClasses > 0) then { + if ((count (nearestObjects[_nearestJammer,_StorageClasses,_buildingJammerRange]-[_obj])) >= _storageCountLimit) exitwith { + _buildingAllowed = false; + [format["Building Disallowed: Max. %1 Storage Objects",_storageCountLimit],5] call Epoch_message + }; + } + else { + if ((count (nearestObjects[_nearestJammer,_BuildingClasses,_buildingJammerRange]-[_obj])) >= _buildingCountLimit) exitwith { + _buildingAllowed = false; + [format["Building Disallowed: Max. %1 Constructions",_buildingCountLimit],5] call Epoch_message + }; + }; + } + else { + if ((count (nearestObjects [_nearestJammer,(_StorageClasses + _BuildingClasses),_buildingJammerRange]-[_obj])) >= _buildingCountLimit) exitwith { + _buildingAllowed = false; + [format["Building Disallowed, Frequency Overloaded: Limit %1",_buildingCountLimit],5] call Epoch_message + }; + }; + if !((getPosATL player) select 2 < _maxBuildingHeight) exitwith { + _buildingAllowed = false; + ["Building Disallowed: Max building height reached",5] call Epoch_message; + }; + if (_objType isequalto "BaseCam_EPOCH" && _buildingAllowed) then { + if ((count (nearestObjects[_nearestJammer,["BaseCam_EPOCH","BaseCam_SIM_EPOCH","BaseCam_Ghost_EPOCH"],_buildingJammerRange]-[_obj])) >= _CamCountLimit) then { + _buildingAllowed = false; + [format["Building Disallowed: Max %1 Cams per Base!", _CamCountLimit], 5] call Epoch_message; + }; + }; + }; + }; +} +else { + if (_objType in _JammerCheckClasses) then { + if (!(EPOCH_my_groupUID isequalto "") && !((getplayeruid player) isequalto EPOCH_my_groupUID) && _jammerGLOnly) exitwith { + _buildingAllowed = false; + ["The Group Leader must place the Jammer!", 5] call Epoch_message; + }; + _c = 0; + { + if ((_x getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) then { + _c = _c+1; + }; + } foreach (missionnamespace getvariable ["Epoch_Plotpoles",call {_allplots = [];{_allplots append (allmissionobjects _x)} foreach (call EPOCH_JammerClasses);_allplots}]); + if (_c >= _jammerPerGroup) then { + _buildingAllowed = false; + [format["Building Disallowed: Max %1 Jammer per Group!", _jammerPerGroup], 5] call Epoch_message; + }; + }; +}; +if !(_buildingAllowed)exitWith{ false }; + +// Max object +if (!_ownedJammerExists) then{ + _limitNearby = getNumber(_cfgBaseBuilding >> _staticClass >> "limitNearby"); + + if (_limitNearby > 0) then{ + // remove current target from objects + _objectscount = count (nearestObjects[player, [_staticClass, _simulClass], 100]-[_obj]); + if (_objectscount >= _limitNearby) then{ + _buildingAllowed = false; + [format["Building Disallowed: Limit %1", _limitNearby], 5] call Epoch_message; + }; + }; +}; +if !(_buildingAllowed)exitWith{ false }; + +// require jammer check if not found as owner of jammer +if (getNumber(_config >> "buildingRequireJammer") == 1 && _bypassJammer == 0) then{ + if !(_objType in _JammerCheckClasses) then { + _buildingAllowed = _ownedJammerExists; + if !(_buildingAllowed) then { + ["Building Disallowed: Frequency Jammer Needed", 5] call Epoch_message; + }; + }; +}; +if !(_buildingAllowed)exitWith{ false }; + +if (getNumber(_config >> "buildingNearbyMilitary") == 0) then{ + _range = getNumber(_config >> "buildingNearbyMilitaryRange"); + if (_range > 0) then { + _restrictedArray = ["ProtectionZone_Invisible_F"]; + _restrictedArray append getArray(_config >> "buildingNearbyMilitaryClasses"); + _restricted = nearestObjects [player, _restrictedArray, _range]; + }; +} else { + _restricted = nearestObjects [player, ["ProtectionZone_Invisible_F"], 300]; +}; +if !(_restricted isEqualTo []) then { + _buildingAllowed = false; + ["Building Disallowed: Area Blocked", 5] call Epoch_message; +}; + +_restrictedLocationsArray = getArray(_config >> "restrictedLocations"); +_restrictedLocationsRange = getNumber(_config >> "restrictedLocationsRange"); +if !(_restrictedLocationsArray isEqualTo []) then { + _restrictedLocations = nearestLocations [player, _restrictedLocationsArray, _restrictedLocationsRange]; + if !(_restrictedLocations isEqualTo []) then { + _buildingAllowed = false; + ["Building Disallowed: Area Blocked", 5] call Epoch_message; + }; +}; + +_myPosATL = getPosATL player; +{ + if ((_x select 0) distance _myPosATL < (_x select 1)) exitWith { + _buildingAllowed = false; + ["Building Disallowed: Area Blocked", 5] call Epoch_message; + }; +} forEach(getArray(_config >> worldname >> "blockedArea")); + +_buildingAllowed diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_lockCheck.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_lockCheck.sqf new file mode 100644 index 0000000..226b9dc --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_lockCheck.sqf @@ -0,0 +1,38 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Base building object lock check code + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf + + Example: + call EPOCH_lockCheck + + Parameter(s): + NONE + + Returns: + BOOL +*/ +//[[[cog import generate_private_arrays ]]] +private ["_jammed","_jammer"]; +//[[[end]]] + +_jammer = (nearestObjects[cameraon, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {cameraon distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))}; +_jammed = false; +if !(_jammer isEqualTo[]) then { + { + if (alive _x) then { + _jammed = !((_x getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID player, Epoch_my_GroupUID]); + }; + if (_jammed) exitWith{}; + } forEach _jammer; +}; +_jammed diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_maintainIT.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_maintainIT.sqf new file mode 100644 index 0000000..a539534 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_maintainIT.sqf @@ -0,0 +1,62 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Base building maintain base code + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf + + Example: + cursorTarget call EPOCH_maintainIT; + + Parameter(s): + _this: OBJECT - Base building object ("Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Constructions_lockedstatic_F") + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_buildingJammerRange","_maintainCount","_rnd"]; +//[[[end]]] + +if !(isNil "EPOCH_maintainLockout") exitWith {["Already Maintaining a base.", 5] call Epoch_message;}; +if (EPOCH_playerCrypto > 0) then { + _buildingJammerRange = getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _this) >> "buildingJammerRange"); + if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; }; + + _maintainCount = {(damage _x) > 0} count nearestObjects[_this, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Constructions_lockedstatic_F"], _buildingJammerRange]; + if (_maintainCount > 0) then { + + if (EPOCH_playerCrypto < _maintainCount) exitwith { + [format ["You need %1 Crypto to maintain your base.",_maintainCount], 5] call Epoch_message; + }; + + _rnd = format ["rmx_var_temp%1%2",floor random 100, selectRandom ["A","B","C","D","E","F"]]; + [_this modelToWorld [0,0,0.2],20,"x\addons\a3_epoch_code\Data\UI\buttons\timer.paa", "Maintaining",60,_rnd] call epoch_gui3dWorldPos; + + EPOCH_maintainLockout = true; + + [_this, player, _maintainCount, Epoch_personalToken] remoteExec ["EPOCH_server_maintBUILD",2]; + + [_rnd,_maintainCount] spawn { + params ["_rnd","_maintainCount"]; + uiSleep _maintainCount; + missionNamespace setVariable [_rnd,false]; + uiSleep 1; + missionNamespace setVariable [_rnd,nil]; + EPOCH_maintainLockout = nil; + }; + + [format["Cost %1 Crypto to maintain base.", _maintainCount], 5] call Epoch_message; + } else { + ["Nothing needs Maintaining", 5] call Epoch_message; + }; +} else { + ["You need Krypto to maintain a base.", 5] call Epoch_message; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_removeBUILD.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_removeBUILD.sqf new file mode 100644 index 0000000..377bb44 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_removeBUILD.sqf @@ -0,0 +1,87 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Base building maintain base code + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf + + Example: + cursorTarget call EPOCH_removeBUILD; + + Parameter(s): + _this: OBJECT - Base building object + + Returns: + BOOL - true if removed +*/ +//[[[cog import generate_private_arrays ]]] +private ["_buildingAllowed","_jammer","_nearestJammer","_objType","_ownedJammerExists","_removeParts","_return","_stability","_targeter"]; +//[[[end]]] + +_buildingAllowed = true; +_ownedJammerExists = false; +_nearestJammer = objNull; + +EPOCH_buildOption = 0; + +params [["_object",objNull]]; + +if (isNull _object) exitWith{ false }; + +_objType = typeOf _object; + +// check if another player has target +_targeter = _object getVariable["last_targeter", objNull]; + +if (!isNull _targeter && _targeter != player && (player distance _object > _targeter distance _object)) exitWith{ EPOCH_stabilityTarget = objNull; false }; + +_stability = _object getVariable["stability", 100]; +if (_stability > 0) exitWith{ + if (isNull EPOCH_stabilityTarget) then { + _object setVariable["last_targeter", player, true]; + EPOCH_stabilityTarget = _object; + }; +}; + +if (_objType in (call EPOCH_JammerClasses)) then { + if ((_object getVariable["BUILD_OWNER", "-1"]) != getPlayerUID player) then{ + _buildingAllowed = false; + ["Remove Disallowed: Frequency Blocked", 5] call Epoch_message; + }; +} +else { + _jammer = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {player distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))}; + if !(_jammer isEqualTo[]) then{ + { + if (alive _x) exitWith{ + _nearestJammer = _x; + }; + } foreach _jammer; + + if !(isNull _nearestJammer) then{ + if ((_nearestJammer getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) then{ + _ownedJammerExists = true; + } else { + _buildingAllowed = false; + ["Remove Disallowed: Frequency Blocked", 5] call Epoch_message; + }; + }; + }; +}; + +if !(_buildingAllowed)exitWith{false}; + +_removeParts = getArray(('CfgBaseBuilding' call EPOCH_returnConfig) >> _objType >> "removeParts"); +if !(_removeParts isEqualTo[]) then{ + [_this, player, Epoch_personalToken] remoteExec ["EPOCH_server_removeBUILD",2]; + _return = true; + ["Removed", 5] call Epoch_message; +}; +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_simulSwap.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_simulSwap.sqf new file mode 100644 index 0000000..e4935e7 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_simulSwap.sqf @@ -0,0 +1,252 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Base building base building with physics + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf + + Example: + [_object] spawn EPOCH_simulSwap; + + Parameter(s): + _this select 0: OBJECT - Base building object + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_allowedSnapObjects","_allowedSnapPoints","_cfgBaseBuilding","_class","_create","_currentTarget","_dir2","_direction","_disallowed","_distance","_distanceMod","_distanceNear","_energyCost","_isSnap","_lastCheckTime","_maxHeight","_nearestObject","_nearestObjectRaw","_newObj","_objSlot","_objType","_object","_oemType","_offset","_onContactEH","_pOffset","_playerEnergy","_playerEnergyKeyFinal","_playerdistance","_pos2","_prevSnapDistance","_previousDistanceNear","_rejectMove","_return","_simulClassConfig","_snapArrayPara","_snapArrayPerp","_snapConfig","_snapDistance","_snapObjects","_snapPointsPara","_snapPointsPerp","_snapPos","_snapPosition","_snapType","_textureSlot","_up2","_vel2","_velocityTransformation","_worldspace"]; +//[[[end]]] + +if !(isNil "EPOCH_simulSwap_Lock") exitWith{}; + +_object = param [0,objNull]; +if (isNull _object) exitWith{ EPOCH_target = objNull; }; + +_objType = typeOf _object; + +_isSnap = false; + +_playerEnergyKeyFinal = "EPOCH_playerEnergy"; +if !(isNil "_playerEnergyKey") then {_playerEnergyKeyFinal = _playerEnergyKey}; +_playerEnergy = missionNamespace getVariable [_playerEnergyKeyFinal,0]; + +if (_playerEnergy <= 0) exitWith { + ["Need Energy", 5] call Epoch_message; +}; +if !(_object call EPOCH_isBuildAllowed) exitWith{}; + +EPOCH_simulSwap_Lock = true; +_return = _object; +_velocityTransformation = []; +_prevSnapDistance = 0; +_distanceMod = 0; +_oemType = (typeOf _object); + +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + +_simulClassConfig = (_cfgBaseBuilding >> _oemType >> "simulClass"); +if (isText(_simulClassConfig)) then { + _class = getText(_simulClassConfig); + _create = true; + _allowedSnapPoints = getArray(_cfgBaseBuilding >> _class >> "allowedSnapPoints"); + _allowedSnapObjects = ["Constructions_static_F"]; + _snapObjects = _cfgBaseBuilding >> _class >> "allowedSnapObjects"; + _energyCost = getNumber(_cfgBaseBuilding >> _class >> "energyCost"); + _maxHeight = getNumber(_cfgBaseBuilding >> _class >> "maxHeight"); + if (_energyCost == 0) then { + _energyCost = 0.1; + }; + if (_maxHeight == 0) then { + _maxHeight = 500; + }; + if !(EPOCH_maxBuildingHeight == 0) then { + _maxHeight = _maxHeight min EPOCH_maxBuildingHeight; + }; + if (isArray(_snapObjects)) then { + _allowedSnapObjects = getArray(_snapObjects); + }; + _newObj = _object; + if (_create) then { + _worldspace = [(getposATL _object),(vectordir _object),(vectorup _object)]; + _objSlot = _object getVariable["BUILD_SLOT", -1]; + _textureSlot = _object getVariable["TEXTURE_SLOT", 0]; + deleteVehicle _object; + waitUntil {sleep 0.01; isNull _object}; + _newObj = createVehicle [_class, (_worldspace select 0), [], 0, "CAN_COLLIDE"]; + if (_objSlot != -1) then { + _newObj setVariable ["BUILD_SLOT",_objSlot,true]; + }; + + _newObj setposATL (_worldspace select 0); + _newObj setVectorDirAndUp [_worldspace select 1,_worldspace select 2]; + + if (_textureSlot != 0) then { + [_newObj, _textureSlot, player, Epoch_personalToken] remoteExec ["EPOCH_server_paintBUILD",2]; + }; + }; + EP_velocityTransformation = []; + EPOCH_oldTarget = EPOCH_target; + EPOCH_target = _newObj; + _currentTarget = EPOCH_target; + EPOCH_velTransform = true; + EPOCH_objHold = 0; + _onContactEH = _currentTarget addEventHandler["EpeContactStart", { if ((_this select 1) isKindOf "LandVehicle" || (_this select 1) isKindOf "Air" || (_this select 1) isKindOf "Ship" || (_this select 1) isKindOf "Tank") then{ EPOCH_target = objNull }; }]; + EP_snap = objNull; + _previousDistanceNear = 0; + _offset = player worldToModel (getposATL _currentTarget); + if (surfaceiswater (getpos _currentTarget)) then { + _offset = player worldToModel (getposASL _currentTarget); + }; + EPOCH_X_OFFSET = _offset select 0; + EPOCH_Y_OFFSET = _offset select 1; + EPOCH_Z_OFFSET = _offset select 2; + _lastCheckTime = diag_tickTime; + while {EPOCH_target == _currentTarget} do { + _playerEnergy = missionNamespace getVariable [_playerEnergyKeyFinal,0]; + if (_playerEnergy <= 0) exitWith { EPOCH_target = objNull; }; + _rejectMove = false; + if ((diag_tickTime - _lastCheckTime) > 10) then { + _lastCheckTime = diag_tickTime; + _rejectMove = !(EPOCH_target call EPOCH_isBuildAllowed); + }; + if (_rejectMove) exitWith { EPOCH_target = objNull; }; + _playerdistance = player distance EPOCH_target; + if (_playerdistance < 10) then { + _isSnap = false; + _snapPosition = [0,0,0]; + _snapType = "para"; + _nearestObject = objNull; + + // see if this can prevent riding on object + if (EPOCH_Y_OFFSET < 3.6) then { + EPOCH_Y_OFFSET = EPOCH_Y_OFFSET + 0.1; + }; + + _pos2 = player modelToWorld[EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET]; + if (_pos2 select 2 > _maxHeight) then { + _pos2 set[2, _maxHeight]; + }; + _distance = _pos2 distance EPOCH_target; + if (EPOCH_buildMode == 1) then { + if (isNull _nearestObject) then { + { + _nearestObjectRaw = nearestObject [EPOCH_target,_x]; + _distanceNear = EPOCH_target distance _nearestObjectRaw; + if (_distanceNear < _previousDistanceNear) then { + _nearestObject = _nearestObjectRaw; + }; + _previousDistanceNear = _distanceNear; + } forEach _allowedSnapObjects; + }; + if (!isNull _nearestObject) then { + _snapConfig = _cfgBaseBuilding >> (typeOf _nearestObject); + _snapPointsPara = getArray(_snapConfig >> "snapPointsPara"); + _snapPointsPerp = getArray(_snapConfig >> "snapPointsPerp"); + _snapArrayPara = []; + { + if (_x in _allowedSnapPoints) then { + _pOffset = getArray (_snapConfig >> _x); + _snapPos = _nearestObject modelToWorld _pOffset; + if ((_pos2 distance _snapPos) < 3) then { + _snapArrayPara pushBackUnique _snapPos; + }; + }; + } forEach _snapPointsPara; + _snapArrayPerp = []; + { + if (_x in _allowedSnapPoints) then { + _pOffset = getArray (_snapConfig >> _x); + _snapPos = _nearestObject modelToWorld _pOffset; + if ((_pos2 distance _snapPos) < 3) then { + _snapArrayPerp pushBackUnique _snapPos; + }; + }; + } forEach _snapPointsPerp; + { + _snapDistance = _pos2 distance _x; + if (_snapDistance < 1 && (_snapDistance < _prevSnapDistance)) exitWith { + _isSnap = true; + _snapPosition = _x; + _snapType = "para"; + }; + _prevSnapDistance = _snapDistance; + } forEach _snapArrayPara; + { + _snapDistance = _pos2 distance _x; + if (_snapDistance < 1 && (_snapDistance < _prevSnapDistance)) exitWith { + _isSnap = true; + _snapPosition = _x; + _snapType = "perp"; + }; + _prevSnapDistance = _snapDistance; + } forEach _snapArrayPerp; + }; + if (_isSnap && _distance < 5) then { + _pos2 = _snapPosition; + _vel2 = (velocity _nearestObject); + _direction = getDir _nearestObject; + if (_snapType == "perp") then { + _direction = _direction - (_snapPosition getDir _nearestObject); + } else { + _direction = 0; + }; + if (EPOCH_snapDirection > 0) then { + if (EPOCH_snapDirection == 1) then { + _direction = _direction + 90; + }; + if (EPOCH_snapDirection == 2) then { + _direction = _direction + 180; + }; + if (EPOCH_snapDirection == 3) then { + _direction = _direction + 270; + }; + }; + if (_direction > 360) then { + _direction = _direction - 360; + }; + if (_direction < 0) then { + _direction = 360 + _direction; + }; + _dir2 = [vectorDir _nearestObject, _direction] call BIS_fnc_returnVector; + _up2 = (vectorUp _nearestObject); + EP_velocityTransformation = [AGLToASL _pos2,_vel2,_dir2,_up2]; + EPOCH_arr_snapObjects = [_nearestObject, _currentTarget]; + }; + }; + if (!_isSnap) then { + if (EPOCH_doRotate) then { + _vel2 = (velocity player); + _dir2 = [vectorDir player, EPOCH_buildDirection] call BIS_fnc_returnVector; + _up2 = (vectorUp player); + EPOCH_doRotate = false; + EP_velocityTransformation = [AGLToASL _pos2,_vel2,_dir2,_up2]; + } else { + EP_velocityTransformation = []; + }; + EPOCH_arr_snapObjects = []; + }; + }; + [_playerEnergyKeyFinal, -_energyCost, 2500 , 0] call EPOCH_fnc_setVariableLimited; + uiSleep 0.1; + }; + _currentTarget removeEventHandler["EpeContactStart", _onContactEH]; + EPOCH_velTransform = false; + EPOCH_arr_snapObjects = []; + _disallowed = ["Tarp_SIM_EPOCH", "Freezer_SIM_EPOCH", "Fridge_SIM_EPOCH", "Shelf_SIM_EPOCH", "Pelican_SIM_EPOCH", "Wardrobe_SIM_EPOCH", "Bed_SIM_EPOCH", "Couch_SIM_EPOCH", "Cooker_SIM_EPOCH", "Chair_SIM_EPOCH", "Filing_SIM_EPOCH", "Table_SIM_EPOCH", "Locker_SIM_EPOCH", "ToolRack_SIM_EPOCH", "Shoebox_SIM_EPOCH", "Bunk_SIM_EPOCH", "Jack_SIM_EPOCH", "toilet_SIM_EPOCH", "KitchenSink_SIM_EPOCH"]; + if !(_class in _disallowed) then { + _currentTarget spawn EPOCH_countdown; + }; + _currentTarget setVelocity [0,0,-0.01]; +}; +[] spawn{ + uiSleep 2; + EPOCH_simulSwap_Lock = nil; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_staticMove.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_staticMove.sqf new file mode 100644 index 0000000..3806c0f --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_staticMove.sqf @@ -0,0 +1,445 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Base building base building with ghost preview. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf + + Example: + [_object,_item] spawn EPOCH_staticMove; + + Parameter(s): + _this select 0: OBJECT - Base building object + _this select 1: STRING - Item to consume on build finalization + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_AnchorPos","_EPOCH_1","_EPOCH_2","_MoveObject","_Snapdirection","_allowedSnapObjects","_allowedSnapPoints","_arr_snapPoints","_baselineSnapPos","_cfgBaseBuilding","_class","_currentOffSet","_currentPos","_currentTarget","_currentTargetAttachedTo","_dir2","_direction","_distance","_energyCost","_helper","_ins","_isSnap","_lastCheckTime","_maxHeight","_maxSnapDistance","_nearestObject","_nearestObjects","_newDir","_newDirAndUp","_numberOfContacts","_objSlot","_objType","_offSet","_offsetZPos","_pOffset","_playerEnergy","_playerEnergyKeyFinal","_pos1_snap","_pos2","_pos2ATL","_pos2_snap","_pos_snapObj","_rejectMove","_simulClass","_snapChecks","_snapConfig","_snapDistance","_snapMemoryPoint","_snapPointsPara","_snapPointsPerp","_snapPos","_snapPos1","_snapPosition","_snapType","_snapped","_stabilityCheck","_staticClass","_tempClass","_tiltFB","_tiltLR","_vectorDir","_vectorUp","_worldspace"]; +//[[[end]]] +if !(isNil "EPOCH_simulSwap_Lock") exitWith{}; + +params [ + ["_object",objNull], + ["_item",""] +]; + +// exit if object is nulll +if (isNull _object) exitWith{ EPOCH_target = objNull; }; +// exit if item is not given +if (_item == "") exitWith{ EPOCH_target = objNull; }; + +_playerEnergyKeyFinal = "EPOCH_playerEnergy"; +if !(isNil "_playerEnergyKey") then {_playerEnergyKeyFinal = _playerEnergyKey}; +_playerEnergy = missionNamespace getVariable [_playerEnergyKeyFinal,0]; + +if (_playerEnergy <= 0) exitWith{ + ["Need Energy", 5] call Epoch_message; +}; + +// Remove object if not allowed +if !(_object call EPOCH_isBuildAllowed) exitWith{ deleteVehicle _object }; + +EPOCH_simulSwap_Lock = true; +_objType = typeOf _object; +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +_class = getText(_cfgBaseBuilding >> _objType >> "GhostPreview"); +_EnablePhysicsOnBuild = ["CfgEpochClient", "EnablePhysicsOnBuild", true] call EPOCH_fnc_returnConfigEntryV2; + +if (_class != "") then { + _energyCost = getNumber(_cfgBaseBuilding >> _objType >> "energyCost"); + _maxHeight = getNumber(_cfgBaseBuilding >> _objType >> "maxHeight"); + _simulClass = getText(_cfgBaseBuilding >> _objType >> "simulClass"); + _staticClass = getText(_cfgBaseBuilding >> _objType >> "staticClass"); + _maxSnapDistance = getNumber (_cfgBaseBuilding >> _objType >> "maxSnapDistance"); + _snapChecks = getArray(("CfgSnapChecks" call EPOCH_returnConfig) >> _staticClass >> "nails"); + _allowedSnapPoints = getArray(_cfgBaseBuilding >> _class >> "allowedSnapPoints"); + _allowedSnapObjects = getArray(_cfgBaseBuilding >> _class >> "allowedSnapObjects"); + + if (_energyCost == 0) then {_energyCost = 0.1;}; + if (_maxSnapDistance == 0) then {_maxSnapDistance = 1;}; + + _lastCheckTime = diag_tickTime; + _stabilityCheck = false; + + // force sim check if object has sim class and default max height to 9m if not already specified + if (_simulClass != "") then { + _stabilityCheck = true; + if (_maxHeight == 0) then { + _maxHeight = 500; + }; + }; + + if !(EPOCH_maxBuildingHeight == 0) then { + _maxHeight = _maxHeight min EPOCH_maxBuildingHeight; + }; + + _objSlot = _object getVariable["BUILD_SLOT", -1]; + + _pos2 = player modelToWorldVisual[EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET]; + + // object already ghost + if (_objType isEqualTo _class) then { + EPOCH_target = _object; + } else { + deleteVehicle _object; + EPOCH_target = createVehicle[_class, _pos2, [], 0, "CAN_COLLIDE"]; + }; + + // send to server + [EPOCH_target] remoteExec ["EPOCH_localCleanup",2]; + + if (_pos2 select 2 > _maxHeight) then { + _pos2 set[2, _maxHeight]; + }; + + _pos2ATL = _pos2; + if (surfaceIsWater _pos2ATL) then { + _pos2ATL = ASLtoATL _pos2ATL; + }; + EPOCH_target setposATL _pos2ATL; + + EPOCH_target attachTo[player]; + _currentTarget = EPOCH_target; + + if (_objSlot != -1) then { + _currentTarget setVariable["BUILD_SLOT", _objSlot, true]; + }; + + EPOCH_X_OFFSET = 0; + EPOCH_Y_OFFSET = 5; + EPOCH_Z_OFFSET = 0; + EPOCH_buildDirection = 0; + EPOCH_buildDirectionPitch = 0; + EPOCH_buildDirectionRoll = 0; + EPOCH_target_attachedTo = player; + EP_snap = objNull; + EPOCH_tempTarget = objNull; + EP_snapPos = [0, 0, 0]; + _isSnap = false; + _currentOffSet = []; + _EPOCH_1 = diag_tickTime; + _EPOCH_2 = diag_tickTime; + _nearestObjects = []; + _Snapdirection = EPOCH_snapDirection; + _snapped = false; + _currentTargetAttachedTo = player; + _AnchorPos = []; + _helper = objnull; + + if (typeof EPOCH_target in ["CinderWallHalf_Ghost_EPOCH","WoodLargeWall_Ghost_EPOCH","JailWall_Ghost_EPOCH"]) then { + _helper = "Sign_Arrow_Direction_Yellow_F" createVehicleLocal (getpos EPOCH_target); + _helper attachto [EPOCH_target, [0, -0.5, 1]]; + _helper setdir 180; + }; + + _MoveObject = { + if (!(_currentOffSet isEqualTo _offSet) || EPOCH_doRotate || !isnull EP_snap && _currentTargetAttachedTo isequalto EPOCH_target_attachedTo) then { + _currentOffSet = _offSet; + EPOCH_doRotate = false; + EPOCH_arr_snapPoints = []; + EPOCH_arr_snapObjects = []; + EP_snap = objnull; + _pos2ATL = _pos2; + if (surfaceIsWater _pos2ATL) then { + _pos2ATL = ASLtoATL _pos2ATL; + }; + EPOCH_target setposATL _pos2ATL; + if (_currentTargetAttachedTo isequalto player) then { + EPOCH_target attachTo [player]; + } + else { + { + detach _x; + } forEach attachedObjects player; + }; + _newDirAndUp = [[sin EPOCH_buildDirection * cos EPOCH_buildDirectionPitch, cos EPOCH_buildDirection * cos EPOCH_buildDirectionPitch, sin EPOCH_buildDirectionPitch],[[ sin EPOCH_buildDirectionRoll,-sin EPOCH_buildDirectionPitch,cos EPOCH_buildDirectionRoll * cos EPOCH_buildDirectionPitch],-EPOCH_buildDirection] call BIS_fnc_rotateVector2D]; + EPOCH_target setVectorDirAndUp _newDirAndUp; + }; + }; + + while {EPOCH_target == _currentTarget} do { + _rejectMove = false; + if ((diag_tickTime - _lastCheckTime) > 10) then { + _lastCheckTime = diag_tickTime; + _rejectMove = !(EPOCH_target call EPOCH_isBuildAllowed); + }; + if (_rejectMove) exitWith{ + deleteVehicle EPOCH_target; + _currentTarget = objnull; + }; + if (player distance _currentTarget > 15) exitWith{ + deleteVehicle EPOCH_target; + _currentTarget = objnull; + ["Building Abort: Distance to high", 5] call Epoch_message; + }; + if ((diag_tickTime - _EPOCH_1) > 1) then { + _EPOCH_1 = diag_tickTime; + if !(isNull EPOCH_target) then { + _nearestObjects = nearestObjects[EPOCH_target, _allowedSnapObjects, 12]; + [_playerEnergyKeyFinal, -_energyCost, 2500 , 0] call EPOCH_fnc_setVariableLimited; + }; + }; + if !(_currentTargetAttachedTo isequalto EPOCH_target_attachedTo) then { + _currentTargetAttachedTo = EPOCH_target_attachedTo; + EPOCH_X_OFFSET = 0; + EPOCH_Z_OFFSET = 0; + EPOCH_doRotate = true; + if !(_currentTargetAttachedTo isequalto player) then { + EPOCH_buildDirection = getdir EPOCH_target; + EPOCH_Y_OFFSET = 0; + _AnchorPos = getposasl EPOCH_target; + } + else { + EPOCH_buildDirection = 0; + EPOCH_Y_OFFSET = 5; + }; + }; + _offSet = [EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET]; + if (_currentTargetAttachedTo isequalto player) then { + _pos2 = _currentTargetAttachedTo modelToWorldVisual _offSet; + if (surfaceIsWater _pos2) then { + _pos2 set[2, ((getPosASL _currentTargetAttachedTo) select 2) + EPOCH_Z_OFFSET]; + }; + } + else { + _pos2 = [(_AnchorPos select 0) + EPOCH_X_OFFSET,(_AnchorPos select 1) + EPOCH_Y_OFFSET,(_AnchorPos select 2) + EPOCH_Z_OFFSET]; + if !(surfaceIsWater _pos2) then { + _pos2 = asltoatl _pos2; + }; + }; + if (_pos2 select 2 > _maxHeight) then { + _pos2 set[2, _maxHeight]; + EPOCH_doRotate = true; + }; + if (_currentTargetAttachedTo isequalto player) then { + if (!(_nearestobjects isequalto []) && EPOCH_buildMode == 1) then { + if ((_pos2 distance EP_snapPos) > _maxSnapDistance || EPOCH_snapDirection != _Snapdirection) then { + _Snapdirection = EPOCH_snapDirection; + EP_snapPos = [0,0,0]; + _snapped = false; + _dirlock = false; + { + _nearestObject = _x; + _isSnap = false; + + // Vector + Snapping + _snapMemoryPoint = ""; + if( ((typeOf _nearestObject) isEqualTo _staticClass) || ((_nearestObject isKindOf "Const_floors_static_F") && (_staticClass isKindOf "Const_floors_static_F")) || ((_nearestObject isKindOf "Const_Cinder_static_F") && (_staticClass isKindOf "Const_Cinder_static_F")) || ((_nearestObject isKindOf "Const_WoodWalls_static_F") && (_staticClass isKindOf "Const_WoodWalls_static_F")) )then{ + _dirLock = true; + }; + + _snapPosition = [0, 0, 0]; + if (!isNull _nearestObject) then { + _snapConfig = _cfgBaseBuilding >> (typeOf _nearestObject); + _snapPointsPara = getArray(_snapConfig >> "snapPointsPara"); + _snapPointsPerp = getArray(_snapConfig >> "snapPointsPerp"); + + // base line for z height offset + _baselineSnapPos = _nearestObject modelToWorldVisual [0,0,0]; + { + _x params ["_snapPoints","_type"]; + { + if (_x in _allowedSnapPoints) then { + _pOffset = getArray (_snapConfig >> _x); + _snapPos = _nearestObject modelToWorldVisual _pOffset; + if (surfaceIsWater _snapPos) then { + _snapPos set[2, ((getPosASL _nearestObject) select 2) + (_pOffset select 2)]; + }; + _snapDistance = _pos2 distance _snapPos; + if (_snapDistance < _maxSnapDistance) exitWith{ + _isSnap = true; + _snapPosition = _snapPos; + _snapType = _type; + + // Vector + Snapping + _snapMemoryPoint = _x; + }; + }; + } forEach _snapPoints; + } forEach [[_snapPointsPara,"para"],[_snapPointsPerp,"perp"]]; + _distance = _pos2 distance _currentTarget; + if (_isSnap && _distance < 5) exitwith { + EP_snap = _nearestObject; + EP_snapPos = _snapPosition; + _direction = getDir _nearestObject; + if (_snapType == "perp") then { + _snapPos1 = [_snapPosition select 0, _snapPosition select 1, 0]; + _pos_snapObj = getposATL _nearestObject; + _pos_snapObj set[2, 0]; + _direction = _direction - (_snapPos1 getDir _pos_snapObj); + } + else { + _direction = 0; + }; +/* + if(_dirLock)then{ + ["Snap Direction LOCKED to 0 and 180", 5] call Epoch_message; + if(EPOCH_snapDirection isEqualTo 3)then{EPOCH_snapDirection = 0;}; + if(EPOCH_snapDirection isEqualTo 1)then{EPOCH_snapDirection = 2;}; + }; +*/ + if (EPOCH_snapDirection > 0) then { + _direction = _direction + (EPOCH_snapDirection * 90); + }; + if (_direction > 360) then { + _direction = _direction - ((floor (_direction/360))*360); + }; + if (_direction < 0) then { + _direction = _direction + ((floor (-_direction/360))*360); + }; + { + detach _x; + } forEach attachedObjects player; + + // Vector + Snapping + _vectorDir = vectorDir _nearestObject; + _vectorUp = vectorup _nearestObject; + + _dir2 = [_vectorDir, _direction] call BIS_fnc_returnVector; + if (_pos2 select 2 > _maxHeight) then { + _pos2 set[2, _maxHeight]; + }; + if (surfaceIsWater _snapPosition) then { + _snapPosition = ASLtoATL _snapPosition; + }; + _currentTarget setVectorDirAndUp[_dir2, (vectorUp _nearestObject)]; + _currentTarget setposATL _snapPosition; + + // Vector + Snapping + if(!(_vectorUp select 0 == 0) || !(_vectorUp select 1 == 0) || !(_vectorUp select 2 == 1)) then{ + _tempClass = getText(_cfgBaseBuilding >> (typeOf _nearestObject) >> "GhostPreview"); + if!(_tempClass isEqualTo "")then{ + EPOCH_tempTarget = _tempClass createVehicleLocal [0,0,0]; + EPOCH_tempTarget setPosATL (getPosATL _nearestObject); + EPOCH_tempTarget setVectorDirAndUp [_vectorDir, _vectorUp]; + EPOCH_tempTarget setDir ((getDir _nearestObject) + (EPOCH_snapDirection * 90)); + + // hideObject EPOCH_tempTarget; + + if(_snapType in ["para","perp"])then{ + EPOCH_tempTarget setVectorUp _vectorUp; + }; + _newDir = vectorDir EPOCH_tempTarget; + _vectorDir = _newDir; + + deleteVehicle EPOCH_tempTarget; + EPOCH_tempTarget = objNull; + + _currentTarget setposATL _snapPosition; + _currentTarget setDir ((getDir _currentTarget) + (EPOCH_snapDirection * 90)); + _currentTarget setVectorDirAndUp [_vectorDir,_vectorUP]; + }; + }; + + if(_dirLock)then{ + _currentTarget setVectorDirAndUp [_dir2,_vectorUP]; + _currentTarget setposATL _snapPosition; + }; + + _snapped = true; + _arr_snapPoints = []; + EPOCH_arr_snapPoints = []; + { + _pos1_snap = _currentTarget modelToWorldVisual (_x select 0); + _pos2_snap = _currentTarget modelToWorldVisual (_x select 1); + _ins = lineIntersectsSurfaces [AGLToASL _pos1_snap, AGLToASL _pos2_snap,player,_currentTarget,true,1,"VIEW","FIRE"]; + if (count _ins > 0) then { + if (surfaceIsWater _snapPosition) then { + _arr_snapPoints pushBackUnique (_ins select 0 select 0); + } else { + _arr_snapPoints pushBackUnique ASLToATL(_ins select 0 select 0); + }; + }; + if (count _arr_snapPoints >= 2) exitWith { EPOCH_arr_snapPoints = _arr_snapPoints; } + } forEach _snapChecks; + EPOCH_arr_snapObjects = [_nearestObject, _currentTarget]; + }; + }; + if (_snapped) exitwith {}; + } forEach _nearestObjects; + }; + if (!_snapped) then { + [] call _MoveObject; + }; + } + else { + [] call _MoveObject; + }; + } + else { + [] call _MoveObject; + }; + }; + + EPOCH_arr_snapPoints = []; + EPOCH_arr_snapObjects = []; + + { + detach _x; + } forEach attachedObjects _currentTargetAttachedTo; + + if (!isnull _helper) then { + deletevehicle _helper; + }; + + if !(isNull _currentTarget) then { + + // check if touching ground + _currentPos = getPosATL _currentTarget; + if (_currentPos select 2 > _maxHeight) then { + _currentPos set[2, _maxHeight]; + _currentTarget setPosATL _currentPos; + }; + + _currentPos set[2, (_currentPos select 2) + 0.1]; + + // remove item here + if (([player, _item] call BIS_fnc_invRemove) == 1) then { + + if (_stabilityCheck && !isTouchingGround _currentTarget && _EnablePhysicsOnBuild) then { + + _offsetZPos = [_currentPos select 0, _currentPos select 1, (_currentPos select 2) - 0.5]; + if !(terrainIntersect[_currentPos, _offsetZPos]) then { + + _numberOfContacts = 0; + { + _pos1_snap = _currentTarget modelToWorldVisual (_x select 0); + _pos2_snap = _currentTarget modelToWorldVisual (_x select 1); + _ins = lineIntersectsSurfaces [AGLToASL _pos1_snap, AGLToASL _pos2_snap,player,_currentTarget,true,1,"VIEW","FIRE"]; + if (count _ins > 0) then { + _numberOfContacts = _numberOfContacts + 1; + }; + if (_numberOfContacts >= 2) exitWith {} + } forEach _snapChecks; + + if (_numberOfContacts < 2) then { + // TODO: foundations need to be handled + // change to sim + _worldspace = [getposATL _currentTarget, vectordir _currentTarget, vectorup _currentTarget]; + deleteVehicle _currentTarget; + _currentTarget = createVehicle[_simulClass, (_worldspace select 0), [], 0, "CAN_COLLIDE"]; + + _currentTarget setposATL(_worldspace select 0); + _currentTarget setVectorDirAndUp[_worldspace select 1, _worldspace select 2]; + + }; + }; + }; + _currentTarget spawn EPOCH_countdown; + }; + }; +}; + +[] spawn{ + uiSleep 2; + EPOCH_simulSwap_Lock = nil; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf new file mode 100644 index 0000000..a5e61f1 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf @@ -0,0 +1,162 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Base building upgrade code + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf + + Example: + [cursorTarget,_index] call EPOCH_upgradeBUILD; + + Parameter(s): + _this select 0: OBJECT - Base building object + _this select 1: NUMBER - index of array from (CfgBaseBuilding >> "upgradeBuilding") + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_buildingAllowed","_canUpgrade","_canUpgradePartCount","_config","_config2","_countdoors","_countgates","_doors","_gates","_jammer","_maxdoors","_maxgates","_missingCount","_missingParts","_nearestJammer","_ownedJammerExists","_part","_partCheck","_removedPartCount","_req","_return","_stability","_targeter","_upgrade","_upgradeParts","_upgrades","_upgradeto","_buildingJammerRange","_JammerConfig","_CryptoCosts"]; +//[[[end]]] +params [ + ["_object",objNull,[objNull]], + ["_index",-1,[0]] +]; +_return = false; + +if !(_index isEqualTo -1) then {Epoch_upgradeIndex = _index}; +if (isNull _object) exitWith {false}; + +_buildingAllowed = true; +_ownedJammerExists = false; +_nearestJammer = objNull; + +EPOCH_buildOption = 1; + +_targeter = _object getVariable["last_targeter", objNull]; +if (!isNull _targeter && _targeter != player && (player distance _object > _targeter distance _object)) exitWith{ EPOCH_stabilityTarget = objNull; false }; + +_stability = _object getVariable["stability", 100]; +if (_stability > 0) exitWith{ + if (isNull EPOCH_stabilityTarget) then { + _object setVariable["last_targeter", player, true]; + EPOCH_stabilityTarget = _object; + }; +}; + +_jammer = (nearestObjects[_object, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {alive _x && {_object distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))}}; + +if !(_jammer isEqualTo[]) then { + _nearestJammer = _jammer select 0; + if ((_nearestJammer getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) then { + _ownedJammerExists = true; + } + else { + _buildingAllowed = false; + ["Upgrade Disallowed: Frequency Blocked", 5] call Epoch_message; + }; +}; +if !(_buildingAllowed)exitWith{ false }; + +if (_object isKindOf "Constructions_static_F" || {(typeof _object) in (call EPOCH_JammerClasses)}) then { + + // take upgrade item from player here + _config = 'CfgBaseBuilding' call EPOCH_returnConfig; + _config2 = getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _object); + + _upgrades = getArray(_config >> (typeOf _object) >> "upgradeBuilding"); + if !(_upgrades isEqualTo []) then { + + // get selected upgrade + _upgrade = _upgrades param [Epoch_upgradeIndex,[]]; + + _upgradeParts = _upgrade select 1; + + _canUpgrade = true; + _canUpgradePartCount = 0; + _missingParts = "Missing: "; + _CryptoCosts = 0; + { + _part = _x select 0; + _req = _x select 1; + _partCheck = if (_part IsEqualTo "Krypto") then { + _CryptoCosts = _CryptoCosts + _req; + EPOCH_PlayerCrypto + } + else { + {_x == _part} count (magazines player) + }; + + if (_partCheck < _req) then { + _missingCount = _req - _partCheck; + + _canUpgrade = false; + _missingParts = _missingParts + format["%1 %2, ", _missingCount, (_part call EPOCH_itemDisplayName)]; + }; + _canUpgradePartCount = _canUpgradePartCount + _req; + } forEach _upgradeParts; + + if (_canUpgrade) then { + _doors = ["CfgEpochClient", "DoorClasses", ["WoodLargeWallDoorL_EPOCH","WoodWall4_EPOCH","CinderWallDoorwHatch_EPOCH","WoodStairs3_EPOCH","JailWallDoor_EPOCH"]] call EPOCH_fnc_returnConfigEntryV2; + _gates = ["CfgEpochClient", "GateClasses", ["CinderWallGarage_EPOCH","WoodWallGarage_EPOCH","MetalWallGarage_EPOCH"]] call EPOCH_fnc_returnConfigEntryV2; + _JammerConfig = getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _nearestJammer); + _buildingJammerRange = getnumber (_JammerConfig >> "buildingJammerRange"); + _maxdoors = getnumber (_JammerConfig >> "maxdoors"); + _maxgates = getnumber (_JammerConfig >> "maxgates"); + if (_maxdoors == 0) then {_maxdoors = 12}; + if (_maxgates == 0) then {_maxgates = 10}; + + _upgradeto = _upgrade select 0; + if (_upgradeto in _doors) then { + _countdoors = count ((nearestobjects [_nearestJammer,_doors,_buildingJammerRange]) - [_object]); + if (_countdoors >= _maxdoors) then { + _canUpgrade = false; + _missingParts = format["Can not upgrade to locked Door / Stairs! Max %1 allowed per Base!", _maxdoors]; + }; + }; + if (_upgradeto in _gates) then { + _countgates = count ((nearestobjects [_nearestJammer,_gates,_buildingJammerRange]) - [_object]); + if (_countgates >= _maxgates) then { + _canUpgrade = false; + _missingParts = format["Can not upgrade to Gate! Max %1 allowed per Base!", _maxgates]; + }; + }; + }; + + _removedPartCount = 0; + if (_canUpgrade) then { + { + _x params ["_part","_req"]; + if !(_part IsEqualTo "Krypto") then { + for "_i" from 1 to _req do { + if (_part in (magazines player)) then { + player removeMagazine _part; + _removedPartCount = _removedPartCount + 1; + }; + }; + } + else { + _removedPartCount = _removedPartCount + _req; + }; + } forEach _upgradeParts; + + if (_canUpgradePartCount == _removedPartCount) then { + // send to server for upgrade + [_object,player,Epoch_upgradeIndex,Epoch_personalToken,_CryptoCosts] remoteExec ["EPOCH_server_upgradeBUILD",2]; + Epoch_upgradeIndex = nil; + _return = true; + ["Upgraded", 5] call Epoch_message; + }; + } else { + [_missingParts, 5] call Epoch_message; + }; + }; +}; +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf new file mode 100644 index 0000000..d1561b9 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf @@ -0,0 +1,143 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Performs damage related effects + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf + + Example: + _dog call EPOCH_client_bitePlayer; + + Parameter(s): + _unit: OBJECT - attacker + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_animConfigArray","_animationEffect","_animationEffectGlobal","_bleedAmount","_bleedChance","_bloodpAmount","_bloodpChance","_canSee","_cfgObjectInteraction","_distance","_doAttack","_fatigueChance","_playerBloodPKeyFinal","_playerImmunityKeyFinal","_playerToxicityKeyFinal","_ppEffect","_say3dsoundsConfig","_selectedMove","_selectedSound","_soundConfigArray","_soundEffect","_soundEffectGlobal","_switchMovehandlerConfig","_target","_toxicAmount","_toxicChance"]; +//[[[end]]] +params [["_unit",objNull],["_target",player]]; +if (isNull _unit && isNull _target) exitWith {}; +_doAttack = false; + +// check if target is on foot +if (isNull objectParent _target) then { + if (_target isEqualTo player) then { + // handle attack for local player + _doAttack = true; + } else { + // send attack to other player + if (isPlayer _target) then { + [_unit] remoteExec ["EPOCH_client_bitePlayer", _target]; + }; + }; +} else { + // target is inside a vehicle, target entire vehicle crew + private _targets = []; + { + if (_x isEqualTo player) then { + // handle attack for local player if inside vehicle + _target = _x; + _doAttack = true; + } else { + // send attack to other players + if (isPlayer _x) then { + _targets pushBack _x; + }; + }; + } forEach (crew _target); + if !(_targets isEqualTo []) then { + [_unit] remoteExec ["EPOCH_client_bitePlayer", _targets]; + }; +}; + +if (_doAttack) then { + + if !(isNull _unit && alive _unit) then { + + _cfgObjectInteraction = (('CfgObjectInteractions' call EPOCH_returnConfig) >> (typeOf _unit)); + if (isClass _cfgObjectInteraction) then { + + _distance = getNumber (_cfgObjectInteraction >> "distance"); + _toxicChance = getNumber (_cfgObjectInteraction >> "toxicChance"); + _bleedChance = getNumber (_cfgObjectInteraction >> "bleedChance"); + _bloodpChance = getNumber (_cfgObjectInteraction >> "bloodpChance"); + _fatigueChance = getNumber (_cfgObjectInteraction >> "fatigueChance"); + _bleedAmount = getNumber (_cfgObjectInteraction >> "bleedAmount"); + _bloodpAmount = getNumber (_cfgObjectInteraction >> "bloodpAmount"); + _toxicAmount = getNumber (_cfgObjectInteraction >> "toxicAmount"); + + _soundConfigArray = getArray (_cfgObjectInteraction >> "soundEffect"); + _soundEffect = ""; + if !(_soundConfigArray isEqualTo []) then { + _soundEffect = selectRandom _soundConfigArray; + }; + _soundEffectGlobal = getNumber (_cfgObjectInteraction >> "soundEffectGlobal"); + _animConfigArray = getArray (_cfgObjectInteraction >> "animationEffect"); + _animationEffect = ""; + if !(_animConfigArray isEqualTo []) then { + _animationEffect = selectRandom _animConfigArray; + }; + _animationEffectGlobal = getNumber (_cfgObjectInteraction >> "animationEffectGlobal"); + _canSee = call compile (getText (_cfgObjectInteraction >> "canSee")); + _ppEffect = getArray (_cfgObjectInteraction >> "ppEffect"); + + if ((_unit distance player) < _distance && _canSee) then { + + _say3dsoundsConfig = 'CfgSay3Dhandler' call EPOCH_returnConfig; + _switchMovehandlerConfig = 'CfgSwitchMovehandler' call EPOCH_returnConfig; + + if (_soundEffect isEqualType []) then { + _soundEffect params ["_soundEffectFinal",["_soundEffectRange",0]]; + playSound3D [_soundEffectFinal, _unit, false, getPosASL _unit, 1, 1, _soundEffectRange]; + } else { + _selectedSound = (_say3dsoundsConfig >> _soundEffect); + if (isClass _selectedSound) then { + _unit say3D _soundEffect; + if (_soundEffectGlobal isEqualTo 1) then { + [player, _unit, _soundEffect, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2]; + }; + }; + }; + + _selectedMove = (_switchMovehandlerConfig >> _animationEffect); + if (isClass _selectedMove) then { + _unit switchMove _animationEffect; + if (_animationEffectGlobal isEqualTo 1) then { + [player, _animationEffect, Epoch_personalToken, _unit] remoteExec ["EPOCH_server_handle_switchMove",2]; + }; + }; + + if (random 1 < _toxicChance) then { + _playerToxicityKeyFinal = "EPOCH_playerToxicity"; + _playerImmunityKeyFinal = "EPOCH_playerImmunity"; + if !(isNil "_playerToxicityKey") then {_playerToxicityKeyFinal = _playerToxicityKey}; + if !(isNil "_playerImmunityKey") then {_playerImmunityKeyFinal = _playerImmunityKey}; + [_playerToxicityKeyFinal,random(_toxicAmount - (missionNamespace getVariable [_playerImmunityKeyFinal, 0])),100,0] call EPOCH_fnc_setVariableLimited; + }; + if (random 1 < _bleedChance) then { + player setBleedingRemaining((getBleedingRemaining player) + _bleedAmount); + }; + if (random 1 < _bloodpChance) then { + _playerBloodPKeyFinal = "EPOCH_playerBloodP"; + if !(isNil "_playerBloodPKey") then {_playerBloodPKeyFinal = _playerBloodPKey}; + [_playerBloodPKeyFinal,_bloodpAmount,190,0] call EPOCH_fnc_setVariableLimited; + if !(_ppEffect isEqualTo []) then { + [_ppEffect] spawn EPOCH_fnc_spawnEffects; + }; + }; + if (random 1 < _fatigueChance) then { + player setFatigue 1; + }; + }; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf new file mode 100644 index 0000000..bb1f8c9 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf @@ -0,0 +1,41 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Triggers earthquake with increasing intensity the closer the player + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf + + Example: + [_location] call EPOCH_client_earthQuake + + Parameter(s): + _this: ARRAY - Locaton of epicenter + + Returns: + Script handle +*/ +//[[[cog import generate_private_arrays ]]] +private ["_distance","_intensity"]; +//[[[end]]] +params [["_epicenter",[0,0,0],[[]] ] ]; +_distance = player distance _epicenter; +_intensity = 1; +if (_distance < 250) then { + _intensity = 4; +} else { + if (_distance < 500) then { + _intensity = 3; + } else { + if (_distance < 750) then { + _intensity = 2; + }; + }; +}; +_intensity spawn BIS_fnc_earthQuake; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf new file mode 100644 index 0000000..80e4bf5 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf @@ -0,0 +1,63 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Creates animals with custom Epoch fsm AI "brain" + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf + + Example: + call EPOCH_client_loadAnimalBrain; + + Parameter(s): + None + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_animal","_animalAiTables","_animalPos","_id","_playerPos","_randomAIClass","_tryAnimalPos"]; +//[[[end]]] + +if (count(player nearEntities["Animal_Base_F", 200]) >= 1) exitWith{}; + +_animalAiTables = ["CfgEpochClient", "animalAiTables", ["Sheep_random_EPOCH", "Sheep_random_EPOCH", "Goat_random_EPOCH", "Goat_random_EPOCH", "Goat_random_EPOCH", ["Cock_random_EPOCH", "Hen_random_EPOCH"], ["Cock_random_EPOCH", "Hen_random_EPOCH"], "Rabbit_EPOCH", "Rabbit_EPOCH", "Rabbit_EPOCH", "Snake_random_EPOCH", "Snake2_random_EPOCH", ["Fin_random_EPOCH", "Alsatian_Random_EPOCH"] ] ] call EPOCH_fnc_returnConfigEntryV2; + +_randomAIClass = selectRandom _animalAiTables; +_animalPos = nil; +_playerPos = position player; + +if (_randomAIClass isEqualType []) then { + _randomAIClass = selectRandom _randomAIClass; +}; + +for "_i" from 1 to 3 step 1 do { + _tryAnimalPos = player getPos [floor(random 350) + 50, floor(random 360)]; + if!(surfaceIsWater _tryAnimalPos) exitWith { + _animalPos = _tryAnimalPos; + }; +}; + +if!(isNil "_animalPos") then { + _animal = createAgent[_randomAIClass, _animalPos, [], 5, "NONE"]; + _animal setVariable["BIS_fnc_animalBehaviour_disable", true]; + + // send to server + [_animal] remoteExec ["EPOCH_localCleanup",2]; + + { + _animal disableAI _x; + }forEach ["TARGET","AUTOTARGET","FSM"]; + + if (_randomAIClass in ["Fin_random_EPOCH", "Alsatian_Random_EPOCH"]) then { + _id = [_animal] execFSM "\x\addons\a3_epoch_code\System\Dog_Brain.fsm"; + }else{ + _id = [_animal, _randomAIClass in ["Snake_random_EPOCH","Snake2_random_EPOCH"]] execFSM "\x\addons\a3_epoch_code\System\Animal_brain.fsm"; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_HandleDamage.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_HandleDamage.sqf new file mode 100644 index 0000000..586f4ed --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_HandleDamage.sqf @@ -0,0 +1,84 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + HandleDamage Eventhandler for A3 Epoch + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_HandleDamage.sqf +*/ +params ["_unit", "_selection", "_damage", "_source", "_projectile", "_hitIndex", "_instigator", "_hitPoint"]; +if !(_source isEqualTo _unit) then { + if ((missionnamespace getvariable ["EPOCH_HandleDamageTimeOut",diag_ticktime]) > diag_ticktime) exitwith {}; // prevent multiple actions here + EPOCH_HandleDamageTimeOut = diag_ticktime + 0.1; + switch _projectile do { + case "B_EnergyPack": { + if (_source distance _unit > 10) exitwith {}; + if !(missionnamespace getvariable ["EPOCH_OldRevive",false]) then { + _attachments = handgunItems _source; + if ("Heal_EPOCH" in _attachments) exitwith { + if (lifeState _unit == "INCAPACITATED") exitwith { + EPOCH_HandleDamageTimeOut = diag_ticktime + 1; + _unit setUnconscious false; + _unit playMoveNow 'AmovPercMstpSnonWnonDnon'; + }; + _highestDMG = 0; + _currentHIT = -1; + _currentDMG = 0; + { + _currentDMG = _x; + if (_currentDMG > _highestDMG) then{ + _highestDMG = _currentDMG; + _currentHIT = _forEachIndex; + }; + }forEach((getAllHitPointsDamage _unit) param[2,[]]); + if (_highestDMG > 0) then { + _newDMG = 0; + [_unit,[[_currentHIT,_newDMG]]] call EPOCH_client_repairVehicle; + } else { + if ((damage _unit) > 0) then { + [_unit,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + }; + }; + }; + if ("Defib_EPOCH" in _attachments) exitwith { + if !(alive _unit) then { + EPOCH_HandleDamageTimeOut = diag_ticktime + 1; + [_unit,_source,Epoch_personalToken] remoteExec ["EPOCH_server_revivePlayer",2]; + }; + }; + }; + }; + case "shell_12g_bb"; + case "bbag_pvc"; + case "xbow_tranq"; + case "tranq_dart": { + if !(lifeState _unit == "INCAPACITATED") then { + EPOCH_HandleDamageTimeOut = diag_ticktime + 1; + _unit setUnconscious true; + (["CfgEpochClient", "UnconsciousTime", [60,180]] call EPOCH_fnc_returnConfigEntryV2) params [["_mintime",60],["_maxtime",180]]; + EPOCH_UnconsciousTime = diag_ticktime + _mintime + (random (_maxtime - _mintime)); + ["You are Knocked out for a while...",5] call Epoch_Message; + }; + }; + case "B_Swing"; + case "B_Stick"; + case "B_Hatchet": { + if !(lifeState _unit == "INCAPACITATED") then { + if ((random 100) < (["CfgEpochClient", "UnconsciousChance", 30] call EPOCH_fnc_returnConfigEntryV2)) then { + EPOCH_HandleDamageTimeOut = diag_ticktime + 1; + _unit setUnconscious true; + (["CfgEpochClient", "UnconsciousTime", [60,180]] call EPOCH_fnc_returnConfigEntryV2) params [["_mintime",60],["_maxtime",180]]; + EPOCH_UnconsciousTime = diag_ticktime + _mintime + (random (_maxtime - _mintime)); + ["You are Knocked out for a while...",5] call Epoch_Message; + }; + }; + }; + }; +}; +_damage diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_InventoryClosed.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_InventoryClosed.sqf new file mode 100644 index 0000000..6d4818b --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_InventoryClosed.sqf @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + A3 Epoch InventoryClosed Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/event_handlers/EPOCH_InventoryClosed.sqf +*/ +params ["_unit","_container"]; +if !(EPOCH_arr_interactedObjs isEqualTo[]) then { + [EPOCH_arr_interactedObjs] remoteExec['EPOCH_server_save_vehicles', 2]; + EPOCH_arr_interactedObjs = []; +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_InventoryOpened.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_InventoryOpened.sqf new file mode 100644 index 0000000..d3dc554 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_InventoryOpened.sqf @@ -0,0 +1,83 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + A3 Epoch InventoryOpened Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/event_handlers/EPOCH_InventoryOpened.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_InvTarget","_stored","_savecontainer","_blocked","_containerlocked","_seclocked"]; +//[[[end]]] +params ["_unit","_container","_sec"]; + +_InvTarget = ObjNull; +{ + if (_x isKindOf "MAN" && {player distance _x < 2} && {lifeState _x == "INCAPACITATED"} && {!(_x in [_container,_sec])}) exitwith { + _InvTarget = _x; + }; +} foreach [cursortarget,cursorobject]; +if (!isnull _InvTarget) exitwith { + player action ["Gear",_InvTarget]; + true +}; + +setMousePosition[0.5, 0.5]; +call EPOCH_showStats; +_this spawn EPOCH_initUI; +_containerlocked = (locked _container in [2, 3] || _container getVariable['EPOCH_Locked', false]); +_seclocked = false; +if !(isNull _sec) then { + _seclocked = (locked _sec in [2, 3] || _sec getVariable['EPOCH_Locked', false]); +}; +_blocked = (_containerlocked && _seclocked); +if (!_blocked && _containerlocked || _seclocked) then { + [] spawn { + + disableSerialization; + waitUntil {!isNull findDisplay 602}; + private _d = findDisplay 602; + private _cargo = _d displayCtrl 6401; + private _ground = _d displayCtrl 6321; + _cargo ctrlEnable false; + ctrlSetFocus _ground; + ctrlActivate _ground; + }; +}; + +_savecontainer = objnull; +_vehSlot1 = _container getVariable["VEHICLE_SLOT", "ABORT"]; +_storageSlot1 = _container getVariable["STORAGE_SLOT", "ABORT"]; +_vehSlot2 = _sec getVariable["VEHICLE_SLOT", "ABORT"]; +_storageSlot2 = _sec getVariable["STORAGE_SLOT", "ABORT"]; +if (_vehSlot1 != "ABORT" || _storageSlot1 != "ABORT") then{ + _savecontainer = _container; +} +else { + if (_vehSlot2 != "ABORT" || _storageSlot2 != "ABORT") then{ + _savecontainer = _sec; + }; +}; +if (!_blocked) then { + _savecontainer spawn { + waituntil {!isnull (findDisplay 602)}; + call EPOCH_CryptoButtons; + if (!isnull _this) then { + while {!isnull (findDisplay 602)} do { + _stored = [itemcargo _this, magazinecargo _this, backpackcargo _this]; + waituntil {uisleep 0.5; !(_stored isequalto [itemcargo _this, magazinecargo _this, backpackcargo _this]) || isnull (findDisplay 602)}; + if !(_stored isequalto [itemcargo _this, magazinecargo _this, backpackcargo _this]) then { + _this call EPOCH_interact; + }; + }; + }; + }; +}; + +_blocked diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_getInMan.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_getInMan.sqf new file mode 100644 index 0000000..13db15b --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_getInMan.sqf @@ -0,0 +1,37 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Get In handler for A3 Epoch + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_getInMan_EH.sqf +*/ +params ["_unit","_position","_vehicle"]; +call EPOCH_niteLight; +if (_unit == player) then { + // Disable build mode + if (EPOCH_buildMode > 0) then { + EPOCH_buildMode = 0; + EPOCH_snapDirection = 0; + ["BUILD MODE: DISABLED", 5] call Epoch_message; + EPOCH_Target = objNull; + }; + if (missionnamespace getvariable ["EPOCH_AutoEarplug",false]) then { + if !(EPOCH_Earplugsin) then { + systemchat 'Earplugs have been auto-inserted...'; + EPOCH_Earplugsin = true; + 1 fadeSound 0.15; + }; + }; + if (_vehicle getvariable ["Vehicle_Slot","-1"] isequalto "-1") then { + if (!(_vehicle iskindof "Paraglide") && !(_vehicle iskindof "Ejection_Seat_Base_F")) then { + ['WARNING! This is a temp Vehicle and will despawn after Restart!',5] call Epoch_Message; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_getOutMan.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_getOutMan.sqf new file mode 100644 index 0000000..b8ca571 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/event_handlers/EPOCH_getOutMan.sqf @@ -0,0 +1,46 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Get out handler for A3 Epoch + Includes Anti-Vehicle Wall glitch checks + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_getOutMan_EH.sqf +*/ + +params ["_unit","_position","_vehicle"]; +call EPOCH_niteLight; +if (_unit == player) then { + _this spawn { + private ["_animationstate","_StartTime","_eyepos","_dirTo","_end","_start"]; + params ["_unit","_position","_vehicle"]; + _animationstate = animationstate player; + _StartTime = diag_ticktime; + waituntil {diag_ticktime - _StartTime > 5 || _animationstate != (animationstate player)}; + if (diag_ticktime - _StartTime > 5) exitwith {}; + _start = getPosWorld _vehicle; + _eyepos = eyepos player; + _dirTo = _start getDir _eyepos; + _end = _start getPos [(_start distance _eyepos) + 0.5, _dirTo]; + _end set [2,_eyepos select 2]; + { + if (_x isKindOf "Building") exitWith{ + player moveInAny _vehicle; + EPOCH_antiWallCount = EPOCH_antiWallCount + 1; + }; + } forEach lineintersectsobjs [_start, _end, player, _vehicle, true, 2]; + }; + if (missionnamespace getvariable ["EPOCH_AutoEarplug",false]) then { + if (EPOCH_Earplugsin) then { + systemchat 'Earplugs have been auto-removed...'; + EPOCH_Earplugsin = false; + 1 fadeSound 1; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_client_updatePlayerStat.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_client_updatePlayerStat.sqf new file mode 100644 index 0000000..0c88863 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_client_updatePlayerStat.sqf @@ -0,0 +1,48 @@ +/* + + Author: DirtySanchez - EpochMod.com + + Contributors: + + Description: + Update player community stat + Can function as inbound stat adjustment from server side change + Can also function as client side adjustment and send to server for saving + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_client_updatePlayerStat.sqf + + usage: + // This will add +15 to the "ZedKills" index and will also update the server variable + ["ZedKills",15,true] call EPOCH_client_updatePlayerStat; + + _statType - STRING: the name of the variable as set in the EpochClientConfig defineCommunityStats[] = {}; + + _adjust - NUMBER: set the positive or negative adjustment, a value of 0 will exit the script + + _toServer - BOOLEAN: (OPTIONAL): false by default + +*/ +params [ ["_statType",""], ["_adjust",0], ["_toServer",false], ["_isTotal",false]]; + +if(_statType isEqualTo "")exitWith{ + diag_log "EPOCHDebug: updatePlayerStats -2- stat type not defined"; +}; +if(_adjust isEqualTo 0)exitWith{ + diag_log "EPOCHDebug: updatePlayerStats -3- stat adjustment is 0"; +}; + +private _statVarName = format["EPOCH_total%1",_statType]; +private _currentStat = missionNameSpace getVariable[_statVarName,0]; +private _newStat = _currentStat + _adjust; +if (_isTotal) then { + _newStat = _adjust; +}; +missionNameSpace setVariable[_statVarName,_newStat]; + +if(_toServer)then{ + [player, ObjNull, _statType, _adjust, false, Epoch_personalToken, _isTotal] remoteExec ["EPOCH_fnc_updatePlayerStats",2]; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_colorRange.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_colorRange.sqf new file mode 100644 index 0000000..9cd2386 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_colorRange.sqf @@ -0,0 +1,36 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Returns color based on range + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_colorRange.sqf + + Example: + _color = [_min,_max,_value] call EPOCH_colorRange; + + Parameter(s): + _this select 0: NUMBER - Config Class + _this select 1: NUMBER - Variable Name + _this select 2: NUMBER - Default Variable + _this select 3: NUMBER - passthou alpha var + Returns: + MIXED +*/ +//[[[cog import generate_private_arrays ]]] +private ["_b","_color","_g","_r","_ratio","_return"]; +//[[[end]]] +params ["_minimum", "_maximum", "_value", "_alpha"]; +_ratio = 2 * (_value-_minimum) / (_maximum - _minimum); +_b = 0 max (255*(1 - _ratio)); +_r = 0 max (255*(_ratio - 1)); +_g = (255 - _b - _r); +_return = [_r, _g, _b] apply {linearConversion [0, 255, _x, 0, 1, true]}; +_return pushBack _alpha; +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_convertTemp.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_convertTemp.sqf new file mode 100644 index 0000000..587ac4c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_convertTemp.sqf @@ -0,0 +1,32 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Converts numbers between fahrenheit and celsius + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_convertTemp.sqf + + Example: + _celsius = [75,true] call EPOCH_convertTemp; // 24 + _fahrenheit = [0,false] call EPOCH_convertTemp; // 32 + + Parameter(s): + _this select 0: NUMBER - Temp + _this select 1: BOOL - False to convert from C to F + Returns: + MIXED +*/ +params [["_data",0,[0]],["_convertToC",true]]; +if (_convertToC) then { + // F to C + round (((_data - 32) * 5) / 9) +} else { + // C to F + round (((_data * 9)/ 5 ) + 32) +} diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf new file mode 100644 index 0000000..4f42b74 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf @@ -0,0 +1,50 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Return configFile or missionConfigFile data if exists else return default variable + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf + + Example: + _config = ["CfgEpochClient", "sapperRngChance", 100] call EPOCH_fnc_returnConfigEntryV2; + + Parameter(s): + _this select 0: STRING - Config Class + _this select 1: STRING - Variable Name + _this select 2: STRING - Default Variable + + Returns: + MIXED +*/ +//[[[cog import generate_private_arrays ]]] +private ["_config","_finalconfig","_missionconfig","_varData"]; +//[[[end]]] +params ["_configClass","_variableName","_defaultData"]; +_varData = _defaultData; +_config = (configfile >> _configClass); +_missionconfig = (getMissionConfig _configClass); +if (isClass _missionconfig) then{ + if (configName(_missionconfig >> _variableName) == _variableName) then{ + _config = _missionconfig; + }; +}; +if (isClass(_config)) then{ + _finalconfig = _config >> _variableName; + if (configName(_finalconfig) == _variableName) then{ + _varData = switch (typeName _defaultData) do { + case "SCALAR": {if (isNumber (_finalconfig)) then { getNumber _finalconfig } else {_defaultData} }; + case "BOOL": {if (isText (_finalconfig)) then {(getText _finalconfig) isEqualTo "true"} else {if (isNumber (_finalconfig)) then {(getNumber _config) isEqualTo 1} else {_defaultData}}}; + case "ARRAY": {if (isArray (_finalconfig)) then { getArray _finalconfig } else {_defaultData} }; + case "STRING": {if (isText (_finalconfig)) then { getText _finalconfig } else {_defaultData} }; + default {_defaultData}; + }; + }; +}; +_varData diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_AnimateScheduled.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_AnimateScheduled.sqf new file mode 100644 index 0000000..d6f31a3 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_AnimateScheduled.sqf @@ -0,0 +1,47 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Run scheduled animations on objects + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_AnimateScheduled.sqf + + Example: + [ + _object, // object + [ // animationarray + ['door1',1], + ['door2',1], + ['handle1',1], + ['handle2',1] + ], + [0,1,0] // delays + ] remoteexec ['EPOCH_fnc_AnimateScheduled',_player]; + + Parameter(s): + _this select 0: OBJ - Object for the animations + _this select 1: ARRAY - Array of animations and their final state + _this select 2: ARRAY - Array of delays between each animation + + Returns: + NOTHING +*/ + +private ["_ins","_target"]; +params [["_object",objnull], ["_animarray",[]], ["_delays",[]]]; +if (isnull _object) exitwith {}; +if !(_animarray isEqualType []) exitwith {}; +if !(_delays isEqualType []) exitwith {}; +{ + if (_x isEqualType []) then { + _x params [["_animation",""],["_state",0]]; + _object animate [_animation,_state]; + uisleep (_delays param [_foreachindex,0]); + }; +} foreach _animarray; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_SetFinalDir.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_SetFinalDir.sqf new file mode 100644 index 0000000..01ec5ed --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_SetFinalDir.sqf @@ -0,0 +1,33 @@ +/* + + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Workaround for delayed positioning for Server side placed items + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_SetFinalDir.sqf + + usage: + _array = []; + { + _array pushback [_x,[vectordir _x, VectorUp _x]]; + } foreach _objs; + _array remoteExec ["EPOCH_fnc_SetFinalDir",_player]; +*/ + +uisleep 1; // Give some time for init Server Side +{ + _x params ["_obj","_dir"]; + if (_dir isEqualType []) then { + _obj setVectorDirAndUp _dir; + } + else { + _obj setdir _dir; + }; +} foreach _this; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf new file mode 100644 index 0000000..6b63d12 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf @@ -0,0 +1,55 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Raimonds Virtoss + + Description: + Epoch add item with overflow + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf + + Example: + _fish call EPOCH_fnc_addItemOverflow; + + Parameter(s): + _this select 0: STRING - Item Class + _this select 1: NUMBER - (Optional) Ammo count + + Returns: + BOOL True: item was dropped nearby + False: item was added to inventory +*/ +//[[[cog import generate_private_arrays ]]] +private ["_dropped","_nearByHolder","_wH","_wHPos"]; +//[[[end]]] +params [["_item","",[""]],["_count",1]]; +_dropped = false; +for "_i" from 1 to _count do +{ + if (player canAdd _item) then { + player addItem _item; + } else { + _wH = objNull; + if (isNil "_nearByHolder") then { + _nearByHolder = nearestObjects [player,["groundWeaponHolder"],3]; + }; + if (_nearByHolder isEqualTo []) then { + _wHPos = player modelToWorld [0,1,0]; + if (surfaceIsWater _wHPos) then { + _wHPos = ASLToATL _wHPos; + }; + _wH = createVehicle ["groundWeaponHolder",_wHPos, [], 0, "CAN_COLLIDE"]; + } else { + _wH = _nearByHolder select 0; + }; + if !(isNull _wh) then { + _wh addItemCargoGlobal [_item,1]; + }; + _dropped = true; + }; +}; +_dropped diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_addMagazineOverflow.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_addMagazineOverflow.sqf new file mode 100644 index 0000000..09bbd27 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_addMagazineOverflow.sqf @@ -0,0 +1,66 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: DirtySanchez + + Description: + Epoch add magazine with overflow toggle + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_addMagazineOverflow.sqf + + Example: + [_mag,_magAmmo,true] call EPOCH_fnc_addMagazineOverflow; + + Parameter(s): + _this select 0: STRING - Magazine Class + _this select 1: NUMBER - (Optional) Ammo count + _this select 2: BOOLEAN - (Optional) drop to groundWeaponHolder + + Returns: + NUMBER 1: magazine was added to inventory + 2: not enough room in inventory + 3: magazine was dropped nearby + 0: failed +*/ +//[[[cog import generate_private_arrays ]]] +private ["_return","_nearByHolder","_wH","_wHPos"]; +//[[[end]]] +params [["_item","",[""]],["_count",1],["_canDrop",true]]; +_return = 0; +if (player canAdd _item) then { + player addMagazine [_item,_count]; + _return = 1; +} else { + _return = 3; + if(_canDrop)then{ + _wH = objNull; + if (player != vehicle player && vehicle player canAdd _item) then { + _return = 4; + _wh = vehicle player; + } + else { + _return = 2; + if (isNil "_nearByHolder") then { + _nearByHolder = nearestObjects [player,["groundWeaponHolder"],3]; + }; + if (_nearByHolder isEqualTo []) then { + _wHPos = player modelToWorld [0,1,0]; + if (surfaceIsWater _wHPos) then { + _wHPos = ASLToATL _wHPos; + }; + _wH = createVehicle ["groundWeaponHolder",_wHPos, [], 0, "CAN_COLLIDE"]; + } else { + _wH = _nearByHolder select 0; + }; + }; + if !(isNull _wh) then { + //_wh addItemCargoGlobal [_item,1]; + _wh addMagazineAmmoCargo [_item, 1, _count]; + }; + }; +}; +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_arrayStringToBool.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_arrayStringToBool.sqf new file mode 100644 index 0000000..0d4a750 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_arrayStringToBool.sqf @@ -0,0 +1,2 @@ +// fix strings to bool +_this apply {if (_x isEqualType "true") then {_x isEqualTo "true"} else {_x}} diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_arrayToLogic.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_arrayToLogic.sqf new file mode 100644 index 0000000..1cff040 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_arrayToLogic.sqf @@ -0,0 +1,34 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Converts array to boolean logic checks + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_arrayToLogic.sqf + + Example: + [1,">=",0] call EPOCH_fnc_arrayToLogic; // returns: true + + Parameter(s): + _this select 0: NUMBER - First value + _this select 1: STRING - compare operator + _this select 2: NUMBER - Second value + + Returns: + BOOL +*/ +params [["_v",""],["_t",""],["_d",""]]; +switch (_t) do { + case ">=": {_v >= _d}; + case "<=": {_v <= _d}; + case "<": {_v < _d}; + case ">": {_v > _d}; + case "!=": {!(_v isEqualTo _d)}; + default {_v isEqualTo _d}; +} diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_createLocalMarkerSet.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_createLocalMarkerSet.sqf new file mode 100644 index 0000000..0aefb5b --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_createLocalMarkerSet.sqf @@ -0,0 +1,104 @@ +/* + + Author: DirtySanchez + + Contributors: + + Description: + Utilize new Epoch Active Markers, Backgrounds and Icons courtesy of DrokZ. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_createLocalMarkerSet.sqf + + usage: + [_markerClass, _position] call EPOCH_fnc_createLocalMarkerSet; + + _markerClass(_mClass) - use one of the class markers in the epoch_configs/Configs/CfgMarkerSets.hpp or create new + + _position(_mPos) - position you would like to place the marker set on the map + + Example: + 1. ['DeathMarker',_pos] call EPOCH_fnc_createLocalMarkerSet; + + 2. ['PlayerMarker',_pos] call EPOCH_fnc_createLocalMarkerSet; + +*/ +private["_config", "_markerArray", "_markerName", "_ccText"]; + +params [ ["_mClass",""], ["_mPos",[0,0,0]], ["_OverrideTxt",""] ]; +if(_mClass isEqualTo "") exitWith { + diag_log "EPOCHDebug: createLocalMarkerSet -1- empty markerClass, nothing to create"; +}; + +// get config for custom marker sets +_config = 'CfgMarkerSets' call EPOCH_returnConfig; +if !(isclass (_config >> _mClass)) exitwith { + diag_log "EPOCHDebug: createLocalMarkerSet -2- not a class markerClass, nothing to create"; +}; + +// get array for custom marker set +_markerArray = getArray(_config >> _mClass >> "markerArray"); +if(_markerArray isEqualTo []) exitWith { + diag_log "EPOCHDebug: createLocalMarkerSet -3- empty markerArray, nothing to create"; +}; + +// get a markerName and check for it on map +_markerName = (_markerArray select 0) select 0; +if(_markerName in allMapMarkers) exitWith { + diag_log "EPOCHDebug: createLocalMarkerSet -4- marker already exists on map"; +}; + +// check for defined Marker counter +if(isNil {Epoch_markerCounter})then{Epoch_markerCounter = 0}; + +// run forEach loop on array +{ + // double check all, use these defaults if not defined + _x params [ + ["_mName",format["EPOCH_marker_%1", Epoch_markerCounter]], + ["_mShape","ICON"], + ["_mType","hd_dot"], + ["_mColor","ColorRed"], + ["_mAlpha",1], + ["_mSize",[0.8,0.8]], + ["_mDir",0], + ["_mText",""] + ]; + + _marker = createMarkerLocal [_mName, _mPos]; + + _mName setMarkerShapeLocal _mShape; + + if!(_mShape isEqualTo "ICON")then{ + if!(_mType in (getArray(_config >> "brushes")))exitWith{ + diag_log "EPOCHDebug: createLocalMarkerSet -5- Shape is Ellipse or Rectangle and needs a Brush Type"; + }; + }; + _mName setMarkerTypeLocal _mType; + + _mName setMarkerAlphaLocal _mAlpha; + _mName setMarkerSizeLocal _mSize; + _mName setMarkerDirLocal _mDir; + + if (!(_OverrideTxt isequalto "") && _OverrideTxt isequaltype "") then { + _mName setMarkerTextlocal _OverrideTxt; + } + else { + if!(_mText isEqualTo "")then{ + _ccText = call compile _mText; + _mName setMarkerTextlocal _ccText; + }; + }; + + if!(_mColor isEqualTo "")then{ + _mName setMarkerColorLocal _mColor + }; + + missionNameSpace setVariable[_mName, _mSize]; + if(_mName isEqualTo (format["EPOCH_marker_%1", Epoch_markerCounter]))then{ + Epoch_markerCounter = Epoch_markerCounter + 1; + }; +}forEach _markerArray; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_cursorTarget.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_cursorTarget.sqf new file mode 100644 index 0000000..70571f6 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_cursorTarget.sqf @@ -0,0 +1,45 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch cursorTarget anywhere + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf + + Example: + _target = [10] call EPOCH_fnc_cursorTarget; + + Parameter(s): + _this select 0: SCALAR - Distance in meters + _this select 1: STRING - lod1 + _this select 3: STRING - lod2 + _this select 4: BOOL - sort + + Returns: + (OBJECT or objNull) +*/ +//[[[cog import generate_private_arrays ]]] +private ["_ins","_target"]; +//[[[end]]] +params [["_distance",10], ["_lod1", "VIEW"], ["_lod2","FIRE"], ["_sort",true]]; +if (underwater player) then { + _ins = lineIntersectsSurfaces [AGLToASL positionCameraToWorld [0,0,0],AGLToASL positionCameraToWorld [0,0,_distance],player,objNull,_sort,1,_lod1,_lod2]; + if (_ins isEqualTo []) exitWith { objNull }; + (_ins select 0 param [3,objNull]) +} else { + if (player distance cursorobject < 3.5 && {!((gettext (configfile >> "cfgammo" >> (typeof cursorobject) >> "defaultMagazine")) isEqualTo "")}) exitwith { + cursorobject + }; + if (!isnull cursorTarget) then { + cursorTarget + } + else { + cursorobject + }; +} diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_deleteLocalMarkerSet.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_deleteLocalMarkerSet.sqf new file mode 100644 index 0000000..2ed1ea5 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_deleteLocalMarkerSet.sqf @@ -0,0 +1,47 @@ +/* + Author: DirtySanchez - EpochMod.com + + Contributors: + + Description: + Delete Marker Set + + License: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_deleteLocalMarkerSet.sqf + + usage: + [_mClass] call EPOCH_fnc_deleteLocalMarkerSet; + + _mClass - name of marker you used from: epoch_configs/Configs/CfgMarkerSets.hpp +*/ +private["_config","_markerArray"]; + +params [ ["_mClass",""], ["_data",[]] ]; + +if(_mClass isEqualTo "") exitWith { + diag_log "EPOCHDebug: deleteLocalMarkerSet -1- empty markerClass, nothing to delete"; +}; + +// get config for custom marker sets +_config = 'CfgMarkerSets' call EPOCH_returnConfig; +if !(isclass (_config >> _mClass)) exitwith { + diag_log "EPOCHDebug: deleteLocalMarkerSet -2- not a class markerClass, nothing to delete"; +}; +// get array for custom marker set +_markerArray = getArray(_config >> _mClass >> "markerArray"); +if(_markerArray isEqualTo []) exitWith { + diag_log "EPOCHDebug: deleteLocalMarkerSet -3- empty markerArray, nothing to delete"; +}; +// get a markerName and check for it on map +_markerName = (_markerArray select 0) select 0; +if!(_markerName in allMapMarkers) exitWith { + diag_log "EPOCHDebug: deleteLocalMarkerSet -4- marker does not exist on map"; +}; + +{ + _mName = _x select 0; + deleteMarkerLocal _mName; +}forEach _markerArray; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf new file mode 100644 index 0000000..1bfa733 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf @@ -0,0 +1,40 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Direction from one object to another plus a degree value to chose a random direction within. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf + + Example: + _dirToF = [_pos,_destination,44] call EPOCH_fnc_dirToFuzzy; + + Parameter(s): + _this select 0: (ARRAY or OBJECT) - position1 + _this select 1: (ARRAY or OBJECT) - position2 + _this select 2: NUMBER - random spread [optional: default 32] max 360 + + Returns: + SCALAR - (direction 0-360) +*/ +//[[[cog import generate_private_arrays ]]] +private ["_dirToF","_pos1","_pos2","_ret"]; +//[[[end]]] +params ["_pos1","_pos2",["_spread",32]]; + +//if objects, not positions, were passed in, then get their positions +if(_pos1 isEqualType objNull) then {_pos1 = getpos _pos1}; +if(_pos2 isEqualType objNull) then {_pos2 = getpos _pos2}; + +//get compass heading from _pos1 to _pos2 +_ret = ((_pos2 select 0) - (_pos1 select 0)) atan2 ((_pos2 select 1) - (_pos1 select 1)); +_ret = _ret + ((random _spread) - (_spread / 2)); +if (_ret < 0) then {_ret = _ret + 360}; //remove negative value +_ret = _ret % 360; //ensure return is 0-360 +_ret diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_dynamicFSM.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_dynamicFSM.sqf new file mode 100644 index 0000000..0911801 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_dynamicFSM.sqf @@ -0,0 +1,30 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Dynamically call an FSM and return handle. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_dynamicFSM.sqf + + Example: + _handle = [] call EPOCH_fnc_dynamicFSM.; + + Parameter(s): + _this select 0: STRING - FSM Name (without the .fsm) + _this select 1: STRING - FSM Path e.g. epoch_code\system + _this select 2: ARRAY - Vars to pass to FSM + + Returns: + HANDLE +*/ +params ["_file","_path",["_vars",[]],["_ret",-1]]; +call compile format[" +_ret = _vars execFSM ""%1\%2.fsm""; +",_path,_file]; +_ret diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf new file mode 100644 index 0000000..1853a64 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf @@ -0,0 +1,39 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Picks a random spot behind the player + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf + + Example: + _moveTo = [24,4,142,_trgt] call EPOCH_fnc_findRandomPosBehind; + + Parameter(s): + _this select 0: SCALAR - Maximum distance to choose point + _this select 1: SCALAR - Minimum distance to choose point + _this select 2: SCALAR - Spread of arc in degrees behind player + _this select 3: OBJECT - Unit, player, vehicle etc. + _this select 4: SCALAR - offset initial angle, allows to pick position to the side with -90 or 90 (right or left) [optional: default 0] + + Returns: + ARRAY +*/ +//[[[cog import generate_private_arrays ]]] +private ["_dir","_dist","_moveTo","_pos","_rnd"]; +//[[[end]]] +params ["_maxIn","_minIn","_arcIn","_unitIn",["_offset",0]]; + +_rnd = ((180 +_offset) - (_arcIn / 2)) + (random _arcIn); +_pos = getPosATL _unitIn; +_dist = ((random (_maxIn - _minIn)) + _minIn) max _minIn; +_dir = (getDir _unitIn) - _rnd; +if (_dir < 0) then {_dir = _dir + 360}; +//return +[(_pos select 0) + (_dist*(sin _dir)), (_pos select 1) + (_dist*(cos _dir)), _pos select 2] diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf new file mode 100644 index 0000000..50a26be --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf @@ -0,0 +1,45 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Currently only used to find random position (Unused) + //TODO: Expand upon to find spot on road || in field for unit spawn. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf + + Example: + _moveTo = [_centre, _min_distance, _max_distance, _height, _onRoad] call EPOCH_fnc_findSafePos; + + Parameter(s): + _this select 0: SCALAR - center position + _this select 1: SCALAR - minimum distance away from centre to choose a location + _this select 2: SCALAR - minimum distance away from centre to choose a location + _this select 3: SCALAR - height - is passed through. [optional: default 0] + _this select 4: BOOL - will select a point on the nearest road (within 250m) from the randomly found position. [optional: default false] + + Returns: + ARRAY +*/ +//[[[cog import generate_private_arrays ]]] +private ["_moveTo","_nrRoad","_nrRoads","_outPos","_rDir","_rDist"]; +//[[[end]]] +params ["_inPos","_MinDist","_MaxDist",["_outHeight",0],["_onRoad",false]]; + +_rDist = (random (_MaxDist - _MinDist))+_MinDist; +_rDir = random 360; +_outPos = [(_inPos select 0) + (sin _rDir) * _rDist, (_inPos select 1) + (cos _rDir) * _rDist, _outHeight]; + +if (_onRoad) then { + _nrRoads = _outPos nearRoads 250; + if (count _nrRoads > 0) then { + _nrRoad = selectRandom _nrRoads; + _outPos = getPosATL _nrRoad; + }; +}; +_outPos diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf new file mode 100644 index 0000000..974f5fc --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf @@ -0,0 +1,41 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Picks a random spot relative to the target with some randomness. Used in Sapper Brain + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf + + Example: + _moveTo = [_centre, _min_distance, _max_distance, _height, _onRoad] call EPOCH_fnc_findSafePos; + + Parameter(s): + _this select 0: SCALAR - Maximum distance to choose point + _this select 1: SCALAR - Minimum distance to choose point + _this select 2: SCALAR - Spread of arc in degrees relative to _unitIn. Is randomised to add fuzziness to final location. + _this select 3: OBJECT - Unit, player, vehicle etc. + _this select 4: SCALAR - Offset initial angle, allows to pick position to the side of _unitIn with -90 or 90. + _this select 5: OBJECT - Target to use for relative position from _unitIn. Allows to pick a position left of _trgtin for example. [optional: default false] + + Returns: + ARRAY +*/ +//[[[cog import generate_private_arrays ]]] +private ["_dir","_dirTo","_dist","_moveTo","_pos","_rnd"]; +//[[[end]]] +params ["_maxIn","_minIn","_arcIn","_unitIn","_offset","_trgtIn"]; + +_dirTo = (position _unitIn) getDir (position _trgtIn); +_rnd = _offset - (random _arcIn); +_pos = getPosATL _trgtIn; +_dist = ((random (_maxIn - _minIn)) + _minIn) max _minIn; +_dir = _dirTo - _rnd; +if (_dir < 0) then {_dir = _dir + 360}; +// Return +[(_pos select 0) + (_dist*(sin _dir)), (_pos select 1) + (_dist*(cos _dir)), _pos select 2] diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_getHitPointsDamageAverage.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_getHitPointsDamageAverage.sqf new file mode 100644 index 0000000..d0828d4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_getHitPointsDamageAverage.sqf @@ -0,0 +1,37 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Function to check HitPointDamageAverage. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_getHitPointsDamageAverage.sqf + + Example: + _average = [cursorObject, "steering", 1] call EPOCH_fnc_getHitPointsDamageAverage;; + + Parameter(s): + _this select 0: OBJECT - Object to check Hitpoints + _this select 1: STRING - String to find in Hitpointname (e.g. "wheel"); + _this select 2: SCALAR - Sub-Array in getAllHitPointsDamage to search for String (default = 0) + _this select 3: SCALAR - Sub-Array for Hitpoint-Values in getAllHitPointsDamage (default = 2) + + Returns: + SCALAR +*/ +params [ "_object", "_match", ["_indexIn", 0], ["_indexOut", 2] ]; +_dmg = 0; +_parts = 0; +_allHitPoints = getAllHitPointsDamage _object; +{ + if ((toLower(_x) find _match) != -1) then { + _dmg = _dmg + ((_allHitPoints select _indexOut) select _forEachIndex); + _parts = _parts + 1; + }; +} forEach (_allHitPoints select _indexIn); +(_dmg / _parts) diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf new file mode 100644 index 0000000..91b7609 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf @@ -0,0 +1,30 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Function to check if player is in a building. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf + + Example: + _inBuilding = call EPOCH_fnc_isInsideBuilding; + + Parameter(s): + NONE + + Returns: + BOOL +*/ +//[[[cog import generate_private_arrays ]]] +private ["_abovePlayerPosASL","_inBuilding","_playerPosASL"]; +//[[[end]]] +_playerPosASL = visiblePositionASL player; +_abovePlayerPosASL = [_playerPosASL select 0,_playerPosASL select 1,(_playerPosASL select 2) + 10]; +//Return: +lineIntersects[_playerPosASL, _abovePlayerPosASL, player] diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerAttachToAntagonist.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerAttachToAntagonist.sqf new file mode 100644 index 0000000..594f711 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerAttachToAntagonist.sqf @@ -0,0 +1,68 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Switch player camera to antagonist. Currently only for use after player death. Return to player body when finished or revived. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerAttachToAntagonist.sqf + + Example: + [_antagonistObj,_plyrObj] call EPOCH_fnc_playerAttachToAntagonist; + + Parameter(s): + _this select 0: OBJECT - Antagonist Object + _this select 1: OBJECT - Player Object + + Returns: + +*/ +//[[[cog import generate_private_arrays ]]] +private ["_antagonist2","_bomb","_doingBoom","_doingGroan","_groanTime","_killer2","_player2","_tapDiag","_tapDiag2"]; +//[[[end]]] +params ["_player", "_antagonist", "_bomb","_killer"]; +_tapDiag = "TapOut"; +if (visibleMap) then {openMap [false, true];}; +_antagonist switchCamera "Internal"; +if(isNil "_bomb")then{_bomb = objNull;}; +if(typeOf _antagonist == "Epoch_Sapper_F" || typeOf _antagonist == "Epoch_SapperB_F")then{_tapDiag = "TapOut3";}; +createDialog _tapDiag; + +diag_log format["Epoch: DEBUG: Attaching player %1 to %2, bomb found: %3",_player,_antagonist,_bomb]; +[_antagonist,_tapDiag,_player,_killer] spawn{ +_antagonist2 = _this select 0; +_tapDiag2 = _this select 1; +_player2 = _this select 2; +_killer2 = _this select 3; +_doingGroan = false; +_doingBoom = false; +_groanTime = diag_tickTime; + while {!alive _player2} do { + if (playerRespawnTime <= 1) exitWith{ (findDisplay 46) closeDisplay 0; }; + if (playerRespawnTime > 15 && !dialog) then {createDialog _tapDiag2;}; + if (isObjectHidden _player2) exitWith {[_player2,Epoch_personalToken,_killer2, "EPOCH_antagObj", objNull, true] remoteExec ["EPOCH_server_playerSetVariable",2];closeDialog 2;};//revivial + if((!alive _antagonist2)) exitWith { + [_player2,Epoch_personalToken,_killer2, "EPOCH_antagObj", objNull, true] remoteExec ["EPOCH_server_playerSetVariable",2]; + uiSleep 3;(findDisplay 46) closeDisplay 0;}; + if(_player2 getVariable["EPOCH_callGroan",false])then{ + _player2 setVariable["EPOCH_callGroan",false]; + _doingGroan = true; + _groanTime = diag_tickTime; + [_player2,Epoch_personalToken,_killer2, "EPOCH_callGroan", true, false] remoteExec ["EPOCH_server_playerSetVariable",2]; + }; + if(_player2 getVariable["EPOCH_callBoom",false])then{ + _player2 setVariable["EPOCH_callBoom",false]; + _doingBoom = true; + [_player2,Epoch_personalToken,_killer2, "EPOCH_callBoom", true, false] remoteExec ["EPOCH_server_playerSetVariable",2]; + }; + if(_doingGroan && ctrlEnabled 1602)then{ctrlEnable[1602,false];}; + if(_doingGroan && !(ctrlEnabled 1602) && diag_tickTime - _groanTime > 16)then{ctrlEnable[1602,true];_doingGroan=false;}; + if(_doingBoom && ctrlEnabled 1601)then{ctrlEnable[1601,false];}; + uiSleep 0.1; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf new file mode 100644 index 0000000..3220fb8 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf @@ -0,0 +1,90 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Andrew Gregory + + Description: + Player death handler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf + + Example: + player addEventHandler ["Killed", {_this call EPOCH_fnc_playerDeath}]; + + Parameter(s): + _this select 0: OBJECT - player + _this select 1: OBJECT - killer + + Returns: + BOOL +*/ +//[[[cog import generate_private_arrays ]]] +private ["_config","_doRevenge","_playerAliveTime","_playerAliveTimeKeyFinal","_playerDeathScreen","_playerKilledScreen","_playerRevengeMinAliveTime","_tapDiag"]; +//[[[end]]] +params [["_unit",objNull,[objNull]],["_killer",objNull,[objNull]] ]; +_config = 'CfgEpochClient' call EPOCH_returnConfig; +_playerDeathScreen = getText(_config >> "playerDeathScreen"); +_playerRevengeMinAliveTime = getNumber(_config >> "playerRevengeMinAliveTime"); +if (_playerDeathScreen isEqualTo "") then {_playerDeathScreen = "TapOut"}; +_tapDiag = _playerDeathScreen; + +_playerAliveTimeKeyFinal = "EPOCH_playerAliveTime"; +if !(isNil "_playerAliveTimeKey") then {_playerAliveTimeKeyFinal = _playerAliveTimeKey}; +_playerAliveTime = missionNamespace getVariable [_playerAliveTimeKeyFinal,0]; + +_doRevenge = ((getNumber(_config >> "playerDisableRevenge") isEqualTo 0) && _playerAliveTime >= _playerRevengeMinAliveTime); + +// test ejecting unit from vehicle if dead client side +if (vehicle _unit != _unit) then { + _unit action["Eject", vehicle _unit]; +}; + +// Close display 999 (BIS_fnc_guiMessage), as it prevent display 46 from closing -> kick to lobby +if (!isnull (finddisplay 999)) then { + (finddisplay 999) closedisplay 0; +}; + +// save death position +profileNameSpace setVariable["EPOCHLastKnownDeath",[]]; +_deathMarkerON = (getNumber(_config >> "playerDeathMarkerGPSOnly") isEqualTo 1); +if(_deathMarkerON && ('ItemGPS' in (assignedItems _unit)))then{ + profileNameSpace setVariable["EPOCHLastKnownDeath",getPos _unit]; +}; + +[player,_killer,toArray profileName,Epoch_personalToken] remoteExec ["EPOCH_server_deadPlayer",2]; + +// disable build mode +EPOCH_buildMode = 0; +EPOCH_snapDirection = 0; +EPOCH_Target = objNull; + +EPOCH_IsAutoRunning = false; + +// playerKilledScreen +_playerKilledScreen = getText(_config >> "playerKilledScreen"); +if (_playerKilledScreen isEqualTo "") then {_playerKilledScreen = "TapOut2"}; +if(_doRevenge && player != _killer && (isPlayer _killer || isPlayer (effectiveCommander _killer)))then{_tapDiag = _playerKilledScreen};//TODO: vehicle check may not always be reliable + +if (Epoch_canBeRevived) then { + setPlayerRespawnTime 600; + createDialog _tapDiag; +} else { + setPlayerRespawnTime 15; + ["You can be just revived once per life!", 5,[[0,0,0,0.5],[1,0,0,1]]] call Epoch_message; +}; + +[_killer, _tapDiag] spawn{ + params ["_killer2","_tapDiag2"]; + while {!alive player} do { + if (playerRespawnTime <= 1) exitWith{ (findDisplay 46) closeDisplay 0; }; + if (playerRespawnTime > 15 && !dialog) then {createDialog _tapDiag2;}; + if (isObjectHidden player) then {closeDialog 2;}; + if(player getVariable["EPOCH_doBoom",false])exitWith{player setVariable ["EPOCH_doBoom",nil]; call EPOCH_fnc_playerDeathDetonate;}; + if(player getVariable["EPOCH_doMorph",false])exitWith{player setVariable ["EPOCH_doMorph",nil];[selectRandom (getArray (getMissionConfig "CfgEpochClient" >> "deathMorphClass")),player,_killer2] call EPOCH_fnc_playerDeathMorph;}; + uiSleep 0.1; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerDeathDetonate.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerDeathDetonate.sqf new file mode 100644 index 0000000..9bebad6 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerDeathDetonate.sqf @@ -0,0 +1,40 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Detonate player body. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeathDetonate.sqf + + Example: + [] call EPOCH_fnc_playerDeathDetonate; + + Parameter(s): + + Returns: + BOOM +*/ +openmap [false,false]; +closeDialog 2; +[] spawn{ + // todo: add paricle effect here. + + // random delay of up to 30 seconds, + uisleep (random 25) + 5; + + [player, Epoch_personalToken] remoteExec ["EPOCH_server_deadPlayerDetonate",2]; + deleteVehicle player; + player setVariable ["doneBoom", true]; + + while {!alive player} do { + //Handle clean up + if(player getVariable["doneBoom",false])exitWith{player setVariable ["doneBoom",nil]; uiSleep 5; (findDisplay 46) closeDisplay 0;}; + uiSleep 0.1; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerDeathMorph.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerDeathMorph.sqf new file mode 100644 index 0000000..1a93e24 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerDeathMorph.sqf @@ -0,0 +1,38 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Morph dead player body into an antagonist, called from player death GUI. Dead player camera will attach to antagonist. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeathMorph.sqf + + Example: + [] call EPOCH_fnc_playerDeathMorph; + + Parameter(s): + _this select 0: STRING - Antagonist class + _this select 1: OBJECT - Player (Victim) + _this select 2: OBJECT - Target Player (Killer) + + Returns: +*/ +params ["_antagonistClass", "_player", "_killer"]; + +openmap [false,false]; +[_killer,_antagonistClass,true,_player, Epoch_personalToken] remoteExec ["EPOCH_server_triggerAntagonist",2]; + +[_killer,_player] spawn{ +_killer2 = _this select 0; +_player2 = _this select 1; + while {!alive player} do { + if (isObjectHidden _player2) then {closeDialog 2;}; + if!(isNull (_killer2 getVariable["EPOCH_antagObj",objNull])) exitWith {closeDialog 2;[_player2,(_killer2 getVariable["EPOCH_antagObj",objNull]),(_killer2 getVariable["EPOCH_antagBomb",objNull]),_killer2] call EPOCH_fnc_playerAttachToAntagonist;}; + uiSleep 0.1; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf new file mode 100644 index 0000000..800e796 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf @@ -0,0 +1,134 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Weapon fired handler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf + + Example: + player addEventHandler ["Fired", {_this call EPOCH_fnc_playerFired}]; + + Parameter(s): + _this select 0: unit: Object - Object the event handler is assigned to + _this select 1: weapon: String - Fired weapon + _this select 2: muzzle: String - Muzzle that was used + _this select 3: mode: String - Current mode of the fired weapon + _this select 4: ammo: String - Ammo used + _this select 5: magazine: String - magazine name which was used + _this select 6: projectile: Object - Object of the projectile that was shot (Arma 2: OA and onwards) + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_ammoConfig","_attachments","_currentDMG","_currentHIT","_cursorTarget","_gesture","_heal","_highestDMG","_newDMG","_nuisanceLevel","_playerNuisanceKeyFinal","_repaired"]; +//[[[end]]] +params ["_unit","_weapon","_muzzle","_mode","_ammo","_magazine","_projectile"]; +EPOCH_lastFiredLocation = getPosATL player; +switch true do { + case (_ammo isKindOf "B_EnergyPack"): { + if (!isNull cursorTarget) then { + _cursorTarget = cursorTarget; + _repaired = false; + if ((player distance _cursorTarget) <= (((SizeOf (TypeOf _cursorTarget))/2) max 6) min 12) then { + _attachments = handgunItems player; + _heal = false; + if (_cursorTarget isKindOf "Man") then { + if !(missionnamespace getvariable ["EPOCH_OldRevive",false]) exitwith {}; + if ("Heal_EPOCH" in _attachments) then { + _heal = true; + }; + if ("Defib_EPOCH" in _attachments) then { + if (!alive _cursorTarget) then { + [_cursorTarget,player,Epoch_personalToken] remoteExec ["EPOCH_server_revivePlayer",2]; + }; + }; + } else { + if ("Repair_EPOCH" in _attachments) then { + _heal = true; + }; + }; + if (_heal) then { + _highestDMG = 0; + _currentHIT = -1; + _currentDMG = 0; + { + _currentDMG = _x; + if (EPOCH_AdvancedVehicleRepair_Enabled) then { + if (_cursorTarget iskindof "Landvehicle" || _cursorTarget iskindof "SHIP" || _cursorTarget iskindof "AIR" || _cursorTarget iskindof "TANK") then { + if (_currentDMG > 0.9) then { + _currentDMG = 0; + }; + }; + }; + if (_currentDMG > _highestDMG) then{ + _highestDMG = _currentDMG; + _currentHIT = _forEachIndex; + }; + }forEach((getAllHitPointsDamage _cursorTarget) param[2,[]]); + if (_highestDMG > 0) then { + _newDMG = ((_highestDMG - 0.5) max 0); + if (_cursorTarget iskindof "MAN") then { + _newDMG = ((_highestDMG - 1) max 0); + }; + ["Partially healed / repaired",5] call epoch_message; + if (local _cursorTarget) then { + [_cursorTarget,[[_currentHIT,_newDMG]]] call EPOCH_client_repairVehicle; + } else { + [_cursorTarget,[[_currentHIT,_newDMG]],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + }; + } else { + ["Full healed / repaired or too much damaged",5] call epoch_message; + if ((damage _cursorTarget) > 0) then { + [_cursorTarget,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + }; + }; + }; + }; + }; + }; + case (_ammo isKindOf "B_Hatchet"): { + _gesture = selectRandom ["GestureSwing0", "GestureSwing1", "GestureSwing2"]; + player playActionNow _gesture; + call EPOCH_chopWood; + }; + case (_ammo isKindOf "B_Swing" || _ammo isKindOf "B_Stick") : { + player playActionNow "SledgeSwing"; + if (_weapon isEqualTo "MeleeRod") then { + call EPOCH_fish; + } + else { + call EPOCH_mineRocks; + if (_weapon in ["MeleeSword","Power_Sword"]) then { + call EPOCH_chopWood; + }; + }; + }; + case (_ammo isKindOf "ChainSaw_Bullet"): { + call EPOCH_chopWood; + }; + default { + _ammoConfig = (configFile >> "CfgAmmo" >> _ammo); + _nuisanceLevel = ceil ((getNumber (_ammoConfig >> "audibleFire") * getNumber (_ammoConfig >> "caliber"))*Epoch_NuisanceMulti); + // reduce when not in a city or town + if (EPOCH_nearestLocations isEqualTo[]) then{ + _nuisanceLevel = _nuisanceLevel / 2; + }; + // reduce if using a silencer + if (((player weaponAccessories _muzzle) select 0) != "") then{ + _nuisanceLevel = _nuisanceLevel / 2; + }; + // Nuisance System 0.1 + (EPOCH_customVarLimits select (EPOCH_customVars find "Nuisance")) params [["_playerLimitMax",100],["_playerLimitMin",0]]; + _playerNuisanceKeyFinal = "EPOCH_playerNuisance"; + if !(isNil "_playerNuisanceKey") then {_playerNuisanceKeyFinal = _playerNuisanceKey}; + [_playerNuisanceKeyFinal,_nuisanceLevel,_playerLimitMax,_playerLimitMin] call EPOCH_fnc_setVariableLimited; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerSetVariable.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerSetVariable.sqf new file mode 100644 index 0000000..940bd82 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_playerSetVariable.sqf @@ -0,0 +1,30 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + call setVariable from client. Allows the server to call and set a local variable on an object via a player without broadcasting. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerSetVariable.sqf + + Example: + [_obj,_var,_value,_local] call EPOCH_fnc_playerSetVariable; + + Parameter(s): + _this select 0: OBJECT - Object to attach variable to + _this select 1: STRING - Variable Name + _this select 2: ANYTHING - Variable Value + _this select 3: BOOLEAN - Broadcast ? + Returns: + +*/ + +params ["_obj", "_var", "_value", "_local"]; +if(isNil "_local")then{_local = false;}; +diag_log format["Epoch: ADMIN: Attempting Set variable [%2,%3,%4] on %1.", _obj, _var, _value,_local]; +_obj setVariable [_var,_value,_local]; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_returnHudVar.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_returnHudVar.sqf new file mode 100644 index 0000000..90c1bba --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_returnHudVar.sqf @@ -0,0 +1,50 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Returns specific values based on an index or falls back to defaults. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_returnHudVar.sqf + + Example: + // HUD and Logic functions - todo move to client function. + [_selVarName,_varIndex,_selVarType,_selVarSubData] call EPOCH_fnc_returnHudVar + + Parameter(s): + _this select 0: STRING - variable name + _this select 1: NUMBER - default variable index + _this select 2: STRING - variable type + _this select 3: STRING - extra data + + Returns: + MIXED +*/ +//[[[cog import generate_private_arrays ]]] +private ["_customVarLimits","_customVarNames","_customVarsInit","_defaultVarValues","_varName","_varNameTmp"]; +//[[[end]]] + +params [["_selVarName",""],["_varIndex",0],["_selVarType",""],["_selVarSubData",""]]; +switch (_selVarType) do { + case "getMissionNamespaceVariable": {missionNamespace getVariable[_selVarName,_selVarSubData]}; + case "getPlayerHitPointDamage": {player getHitPointDamage _selVarSubData}; + case "getPlayerOxygenRemaining": {getOxygenRemaining player}; + case "getPlayerDamage": {damage player}; + default { + _customVarsInit = getArray(getMissionConfig "CfgEpochClient" >> "customVarsDefaults"); + _customVarNames = _customVarsInit apply {_x param [0,""]}; + _defaultVarValues = _customVarsInit apply {_x param [1,0]}; + _customVarLimits = _customVarsInit apply {_x param [2,[]]}; + _varName = format["EPOCH_player%1",_selVarName]; + if (_selVarName in _customVarNames) then { + _varNameTmp = call compile format["_player%1Key",_selVarName]; + if !(isNil "_varNameTmp") then {_varName = _varNameTmp}; + }; + missionNamespace getVariable[_varName,_defaultVarValues select _varIndex] + }; +} diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_setVariableLimited.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_setVariableLimited.sqf new file mode 100644 index 0000000..6afac4c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_setVariableLimited.sqf @@ -0,0 +1,29 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Sets GVAR value within min/max limits. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_setVariableLimited.sqf + + Example: + ["TEST",-30,100,0] call EPOCH_fnc_setVariableLimited; // removes 30 and keeps number within 0-100 range. + + Parameter(s): + _this select 0: STRING - GVar variable key + _this select 1: NUMBER - Change variable + _this select 2: NUMBER - max Value + _this select 3: NUMBER - min Value + Returns: + NUMBER +*/ +params [["_key","",[""]],["_change",0],["_max",100],["_min",0]]; +private _result = (((missionNamespace getVariable [_key, 0]) + _change) min _max) max _min; +missionNamespace setVariable [_key, _result]; +_result diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_spawnEffects.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_spawnEffects.sqf new file mode 100644 index 0000000..7cf120d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_spawnEffects.sqf @@ -0,0 +1,52 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + spawn Effects over time based on array + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_spawnEffects.sqf + + Example: + [] spawn EPOCH_fnc_spawnEffects; + + Parameter(s): + _this select 0: ARRAY - effects array +*/ +//[[[cog import generate_private_arrays ]]] +private ["_firstArray","_fx","_handle","_handles"]; +//[[[end]]] +params [["_ppEffects",[],[[]] ] ]; +_handles = []; +{ + _fx = _x; + if (_fx isEqualType []) then { + if (_fx isEqualTo []) then { + ppEffectDestroy _handles; + } else { + { + if !(_x isEqualTo []) then { + if (count _x == 4) then { + _x params ["_type","_proi","_effect","_speed"]; + _handle = [_type,_proi] call epoch_postProcessCreate; + _handles pushBack _handle; + [_handle, _speed, _effect, true] call epoch_postprocessAdjust; + } else { + _x params ["_effect","_speed"]; + [_handles select _forEachIndex, _speed, _effect, true] call epoch_postprocessAdjust; + }; + }; + } forEach _fx; + }; + } else { + // sleep + if (_fx isEqualType 0) then { + uiSleep _fx; + }; + }; +} forEach _ppEffects; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf new file mode 100644 index 0000000..a244b2a --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf @@ -0,0 +1,41 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Picks a random spot relative to the target with some randomness. (Unused) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf + + Example: + _trimmedStr = ["String In",3] call EPOCH_fnc_stringLeft; + + Parameter(s): + _this select 0: STRING or anything - String to be trimmed + _this select 1: SCALAR - number of chars to remove + + Returns: + STRING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_arrFull","_arrOut","_strIn","_trimmedStr"]; +//[[[end]]] +private["_arrFull","_arrOut"]; +params [ + "_strIn", + ["_count",0,[0]] +]; +_arrOut = []; +if !(_strIn isEqualType "STRING") then {_strIn = str(_strIn)}; +_arrFull = toArray _strIn; +{ + if (_forEachIndex < _count) then { + _arrOut pushBack _x; + }; +}forEach _arrFull; +(toString _arrOut) diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_triggerAntagonist.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_triggerAntagonist.sqf new file mode 100644 index 0000000..50c0c9e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_triggerAntagonist.sqf @@ -0,0 +1,27 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark + + Description: + Send server message to trigger antagonist on another client. Server returns antagonist object where required. Designed to support additional tap out options (Morphing). + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_triggerAntagonist.sqf + + Example: + [_killer, "Epoch_Sapper_F", player, true] call EPOCH_fnc_triggerAntagonist; + + Parameter(s): + _this select 0: Target client to trigger antagonist on. (Killer) + _this select 1: Antagonist class to spawn, e.g. "Epoch_Sapper_F", see EPOCH_unitSpawn.sqf for full list + _this select 2: On target, set variable containing antagonist object. Allows other players / requesting player to attach to antagonist object. + + Returns: + +*/ +params ["_target","_antagonist","_doVariable"]; +[_target,_antagonist,_doVariable,player,Epoch_personalToken] remoteExec ["EPOCH_server_triggerAntagonist",2]; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_vectorDivide.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_vectorDivide.sqf new file mode 100644 index 0000000..36d45a9 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_fnc_vectorDivide.sqf @@ -0,0 +1,30 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Divide a Vector (Average Position / Vector). + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_vectorDivide.sqf + + Example: + _averageVector = [[15,15,3],3] call EPOCH_fnc_vectorDivide; + + Parameter(s): + _this select 0: ARRAY - Vector / Position + _this select 1: INT - Divide by + + Returns: + ARRAY - Averag Vector +*/ +params ["_vec","_div",["_doZ",true],["_out",[0,0,0]]]; +_out set [0,_vec select 0 / _div]; +_out set [1,_vec select 1 / _div]; +_out set [2,0]; +if(_doZ)then{_out set [2,_vec select 2 / _div];}; +_out diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_giveAttributes.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_giveAttributes.sqf new file mode 100644 index 0000000..46c7bd0 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_giveAttributes.sqf @@ -0,0 +1,72 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Controls attributes given custom vars system and returns text based on these changes. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/epoch_code/compile/functions/EPOCH_giveAttributes.sqf + + Example: + _text = _x call EPOCH_giveAttributes + + Parameter(s): + _this select 0: STRING - Player Stat Name + _this select 1: NUMBER - Input + _this select 2: NUMBER - 1 = randomize input, 0 = normal + Returns: + STRING +*/ + +//[[[cog import generate_private_arrays ]]] +private ["_addPlus","_celcuis","_celcuisNew","_color","_currentVal","_customVarIndex","_customVarLimits","_customVarNames","_customVarsInit","_data","_defaultVarValues","_limits","_max","_min","_newValue","_return","_varName","_varNameTmp"]; +//[[[end]]] +params ["_selectedVarName",["_data",0],["_randomizeData",0]]; +_addPlus = if (_data > 0) then {"+"} else {""}; +_return = ""; + +_customVarsInit = getArray(getMissionConfig "CfgEpochClient" >> "customVarsDefaults"); +_customVarNames = _customVarsInit apply {_x param [0,""]}; +_defaultVarValues = _customVarsInit apply {_x param [1,0]}; +_customVarLimits = _customVarsInit apply {_x param [2,[]]}; + +_customVarIndex = _customVarNames find _selectedVarName; +if (_customVarIndex != -1) then { + + _varName = format["EPOCH_player%1",_selectedVarName]; + if (_selectedVarName in _customVarNames) then { + _varNameTmp = call compile format["_player%1Key",_selectedVarName]; + if !(isNil "_varNameTmp") then {_varName = _varNameTmp}; + }; + + _limits = _customVarLimits select _customVarIndex; + _limits params [["_max",100],["_min",0]]; + if (_max isEqualType "") then { + _max = missionNamespace getVariable [_max, 0]; + }; + if (_min isEqualType "") then { + _min = missionNamespace getVariable [_min, 0]; + }; + _currentVal = missionNamespace getVariable [_varName, _defaultVarValues select _customVarIndex]; + if (_randomizeData isEqualTo 1) then { + _data = parseNumber ((random _data) toFixed 2); + }; + if (_data != 0) then { + _newValue = ((_currentVal + _data) min _max) max _min; + missionNamespace setVariable [_varName, _newValue]; + if (_selectedVarName == "Temp") then { + _celcuis = _data call EPOCH_convertTemp; + _celcuisNew = _newValue call EPOCH_convertTemp; + _return = format["%1: %2%3 (%4 °F) %2%5 (%6 °C)",(localize format["str_epoch_pvar_%1",_selectedVarName]),_addPlus,_data,_newValue,_celcuis,_celcuisNew]; + } else { + _return = format["%1: %2%3 (%4/%5)", (localize format["str_epoch_pvar_%1",_selectedVarName]), _addPlus, _data, _newValue, _max]; + }; + }; +}; + +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_itemData.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_itemData.sqf new file mode 100644 index 0000000..4b19bb0 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_itemData.sqf @@ -0,0 +1,48 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Sorts an array based on distance to input array. (unused) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf + + Example(s): + _displayName = _item call epoch_itemData; // string + _pic = [_item,["Picture"]] call epoch_itemData; //string + _data = [_item,["picture","model","displayName"]] call epoch_itemData; //array + + Parameter(s): + _this select 0: STRING - Vehicle, Weapon, or Magazine config class name + _this select 1: STRING or ARRAY of config variables + + Returns: + Returns STRING if only one element in second param, otherwise returns ARRAY +*/ +//[[[cog import generate_private_arrays ]]] +private ["_arr","_data","_displayName","_pic","_single"]; +//[[[end]]] +params [["_item",""],["_entries",["DisplayName"],[[]] ] ]; +_single = (count _entries) == 1; +_arr = []; +{ + if ([_item, "CfgMagazines"] call EPOCH_fnc_isAny) then { + _arr pushBack (getText(configfile >> "CfgMagazines" >> _item >> _x)); + } else { + if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then { + _arr pushBack (getText(configfile >> "CfgWeapons" >> _item >> _x)); + } else { + if ([_item, "CfgVehicles"] call EPOCH_fnc_isAny) then { + _arr pushBack (getText(configfile >> "CfgVehicles" >> _item >> _x)); + }; + }; + }; +} forEach _entries; +if (_arr isEqualTo []) then {_arr = [""]}; +// return +if (_single) then {_arr select 0} else {_arr} diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf new file mode 100644 index 0000000..e6b133e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf @@ -0,0 +1,26 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Returns the DisplayName of a Vehicle, Weapon, or Magazine. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf + + Example: + _displayName = _part call EPOCH_itemDisplayName; + + Parameter(s): + _this: STRING - Vehicle, Weapon, or Magazine config class name + + Returns: + STRING +*/ +// Changed function name for usage Server and Client side + +_this call EPOCH_fnc_itemDisplayName; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_itemPicture.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_itemPicture.sqf new file mode 100644 index 0000000..4edf10d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_itemPicture.sqf @@ -0,0 +1,40 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Returns the picture variable of a Vehicle, Weapon, or Magazine. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_itemPicture.sqf + + Example: + _part call EPOCH_itemPicture; + + Parameter(s): + _this: STRING - Vehicle, Weapon, or Magazine config class name + + Returns: + STRING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_return"]; +//[[[end]]] +params ["_item"]; +_return = ""; +if ([_item, "CfgVehicles"] call EPOCH_fnc_isAny) then { + _return = getText(configfile >> "CfgVehicles" >> _item >> "picture"); +} else { + if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then { + _return = getText(configfile >> "CfgWeapons" >> _item >> "picture"); + } else { + if ([_item, "CfgMagazines"] call EPOCH_fnc_isAny) then { + _return = getText(configfile >> "CfgMagazines" >> _item >> "picture"); + }; + }; +}; +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_returnConfig.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_returnConfig.sqf new file mode 100644 index 0000000..fc5a4a2 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_returnConfig.sqf @@ -0,0 +1,32 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Returns missionConfigFile if exists otherwise uses configFile + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_returnConfig.sqf + + Example: + _config = 'CfgCrafting' call EPOCH_returnConfig; + + Parameter(s): + _this: STRING - Config class name + + Returns: + CONFIG +*/ +//[[[cog import generate_private_arrays ]]] +private ["_config","_return"]; +//[[[end]]] +_return = (configfile >> _this); +_config = (getMissionConfig _this); +if (isClass _config) then{ + _return = _config; +}; +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_returnConfigV2.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_returnConfigV2.sqf new file mode 100644 index 0000000..fe18d41 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_returnConfigV2.sqf @@ -0,0 +1,36 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Returns missionConfigFile if exists otherwise uses configFile + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_returnConfig.sqf + + Example: + [['CfgCrafting', 'item1']] call EPOCH_returnConfigV2; + + Parameter(s): + _this: ARRAY of STRING/s - Config class name Array + + Returns: + CONFIG +*/ +//[[[cog import generate_private_arrays ]]] +private ["_missionconfig","_return"]; +//[[[end]]] +_return = configfile; +_missionconfig = missionConfigFile; +{ + _return = (_return >> _x); + _missionconfig = (_missionconfig >> _x); +} forEach _this; +if (isClass _missionconfig) then{ + _return = _missionconfig; +}; +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_worldObjectType.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_worldObjectType.sqf new file mode 100644 index 0000000..57b5f6c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/EPOCH_worldObjectType.sqf @@ -0,0 +1,66 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Returns type of world object based on CfgWorldInteractions config + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_worldObjectType.sqf + + Example: + _isTree = [_object, "tree"] call EPOCH_worldObjectType; + + Parameter(s): + _this select 0: STRING or OBJECT - string name or world object + _this select 1: STRING or ARRAY - type names ("tree","bush") + + Returns: + BOOL or ARRAY of BOOLs +*/ +//[[[cog import generate_private_arrays ]]] +private ["_config","_end","_finalConfig","_findStart","_isTree","_modelInfo","_p3dName","_return","_selectedConfig","_start"]; +//[[[end]]] +params ["_object","_checkType"]; +_return = false; +_config = ('CfgEpochClient' call EPOCH_returnConfig) >> "CfgWorldInteractions"; + +_selectedConfig = ""; +if (_object isEqualType objNull && !(isNull _object)) then { + if !(_object isKindOf "All") then { + (getModelInfo _object) params [["_modelName",""]]; + if (!isnil "_modelName") then { + // replace spaces and periods with underscores + _selectedConfig = (_modelName splitString " .") joinString "_"; + }; + } else { + _selectedConfig = typeOf _object; + }; +} else { + // find start of p3d name - OLD UNUSED TBR + if (_object isEqualType "") then { + _findStart = _object find ": "; + if (_findStart != -1) then{ + _start = _findStart + 2; + // replace spaces and periods with underscores + _selectedConfig = ((_object select [_start]) splitString " .") joinString "_"; + }; + }; +}; + +// Do checks +_finalConfig = (_config >> _selectedConfig); +if (_checkType isEqualType []) then { + _return = []; + { + _return pushBack (getNumber(_finalConfig >> _x) == 1); + } forEach _checkType; +} else { + _return = (getNumber(_finalConfig >> _checkType) == 1); +}; + +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf new file mode 100644 index 0000000..ba9fee0 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf @@ -0,0 +1,44 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Sorts an array based on distance to input array. (unused) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf + + Example: + _sorted = [_unsorted, _inPosition] call Epoch_SortArrayByDistance; + + Parameter(s): + _this select 0: ARRAY - of unsorted positions + _this select 1: ARRAY - position + + Returns: + ARRAY of ARRAYS +*/ +//[[[cog import generate_private_arrays ]]] +private ["_closest","_closestPos","_pos","_sorted","_testPos","_unsorted"]; +//[[[end]]] +params ["_unsorted","_pos"]; +if (_pos isEqualType objNull) then {_pos = getpos _pos;}; +_sorted = []; +_closest = []; +_testPos = [0,0,0]; +_closestPos = [0,0,0]; +{ + _closest = _unsorted select count _unsorted -1; + { + if (_x isEqualType objNull) then {_testPos = position _x}else{_testPos = _x}; + if (_closest isEqualType objNull) then {_closestPos = position _closest}else{_closestPos = _closest}; + if ((_testPos distance _pos) < (_closestPos distance _pos)) then {_closest = _x}; + } forEach _unsorted; + _sorted pushBack _closest; + _unsorted = _unsorted - [_closest]; +} forEach _unsorted; +_sorted diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf new file mode 100644 index 0000000..9cea2b6 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf @@ -0,0 +1,361 @@ +/* + Author: Aaron Clark - EpochMod.com - @vbawol + + Contributors: @Skaronator @raymix @Fank + + Description: + Key Down EH functions + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf + + Example: + _this call EPOCH_KeyDown; + + Parameter(s): + _this select 0: CONTROL - _display + _this select 1: NUMBER - _dikcode + _this select 2: BOOL - Shift State + _this select 3: BOOL - Ctrl State + _this select 4: BOOL - Alt State + + Returns: + BOOL +*/ +//[[[cog import generate_private_arrays ]]] +private ["_adj","_currentPos","_handled","_playerEnergy","_playerEnergyKeyFinal","_playerStaminaKeyFinal","_step"]; +//[[[end]]] +params ["_display","_dikCode","_shift","_ctrl","_alt"]; + +_playerStaminaKeyFinal = "EPOCH_playerStamina"; +_playerEnergyKeyFinal = "EPOCH_playerEnergy"; +if !(isNil "_playerStaminaKey") then {_playerStaminaKeyFinal = _playerStaminaKey}; +if !(isNil "_playerEnergyKey") then {_playerEnergyKeyFinal = _playerEnergyKey}; + +_handled = false; + +_this call Epoch_custom_EH_KeyDown; +if (_handled) exitWith{ true }; + +if !(alive player) exitWith{ false }; + +EPOCH_doRotate = false; + +if !(EPOCH_modKeys isequalto [_shift,_ctrl,_alt]) then { + EPOCH_modKeys = [_shift,_ctrl,_alt]; + call epoch_favBar_modifier; +}; + +//Favorites bar +if (_dikCode in [EPOCH_keysfav1,EPOCH_keysfav2,EPOCH_keysfav3,EPOCH_keysfav4,EPOCH_keysfav5]) then { + if (isnull EPOCH_Target) then { + _handled = _this call epoch_favBar_action; + } else { + "Can't use while in building mode!" call epoch_message; + }; +}; + +// increase vol +if (_ctrl && _dikCode == EPOCH_keysVolumeUp) then { + EPOCH_soundLevel = (EPOCH_soundLevel + 0.1) min 1; + 5 fadeSound EPOCH_soundLevel; + [format["Internal sound level: %1%2", EPOCH_soundLevel * 100, "%"], 5,[[0,0,0,0.5],[0,1,1,1]]] call Epoch_message; +}; +// lower vol +if (_ctrl && _dikCode == EPOCH_keysVolumeDown) then { + EPOCH_soundLevel = (EPOCH_soundLevel - 0.1) max 0.1; + 5 fadeSound EPOCH_soundLevel; + [format["Internal sound level: %1%2", EPOCH_soundLevel * 100,"%"], 5,[[0,0,0,0.5],[0,1,1,1]]] call Epoch_message; +}; + +// ESC default to cancel +if (_dikCode in (actionKeys "ingamePause")) then { + if !(isNull EPOCH_Target) then { + if !(EPOCH_Target isKindOf "ThingX") then { + deleteVehicle EPOCH_Target; + } else { + EPOCH_Target = objNull; + }; + ["Build Canceled", 5] call Epoch_message; + }; + if !(EPOCH_arr_interactedObjs isEqualTo[]) then { + [EPOCH_arr_interactedObjs] remoteExec["EPOCH_server_save_vehicles", 2]; + EPOCH_arr_interactedObjs = []; + }; +}; + +// Debug Monitor +if (_dikCode == EPOCH_keysDebugMon) then { + EPOCH_debugMode = !EPOCH_debugMode; + if (EPOCH_debugMode) then { + ["Debug Mode Enabled", 5,[[0,0,0,0.5],[1,1,0,1]]] call Epoch_message; + } else { + ["Debug Mode Disabled", 5,[[0,0,0,0.5],[1,1,0,1]]] call Epoch_message; + hintSilent ""; + }; + _handled = true; +}; + +// E-Pad +if (_dikCode == EPOCH_keysEPad) then { + if (isnull (finddisplay 9898)) then { + createdialog 'epoch_tablet_gui'; + }; +}; + +if (_dikCode == EPOCH_Earplugs) then { + if (EPOCH_Earplugsin) then { + EPOCH_Earplugsin = false; + 1 fadeSound 1; + } + else { + EPOCH_Earplugsin = true; + 1 fadeSound 0.15; + }; +}; + +//Action Menu +if (_dikCode == EPOCH_keysAction) then { + //_handled = true; + {player reveal _x;} foreach (player nearObjects 50); + if !(EPOCH_keysActionPressed) then { + EPOCH_keysActionPressed = true; + if (cursorTarget isKindOf "AllVehicles") then { + call epoch_dynamicMenu; + } else { + [] spawn { + uiSleep 0.2; + if (EPOCH_keysActionPressed) then {call epoch_dynamicMenu}; + }; + }; + }; +}; + +// Player only code +if (vehicle player == player) then { + + if ((_dikCode == EPOCH_keysBuildMode1 && !EPOCH_favBar_itemConsumed) && EPOCH_buildMode > 0) then { + EPOCH_buildMode = 0; + ["Build Mode: Disabled", 5] call Epoch_message; + EPOCH_Target = objNull; + _handled = true; + }; + + // H - holster unholster + if (_dikCode == EPOCH_keysHolster) then { + if (player nearObjects["Const_All_Walls_F", 3] isEqualTo[] && speed player == 0) then { + if (currentweapon player != "") then { + EPOCH_Holstered = currentweapon player; + player action["switchWeapon", player, player, 100]; + } + else { + if (EPOCH_Holstered != "") then { + player selectWeapon EPOCH_Holstered; + }; + }; + }; + }; + + if (EPOCH_buildMode > 0) then { + if (!isnull EPOCH_Target) then { + if (!_ctrl) then { + _step = 0.5; + if(_shift)then{_step = 1.5;}; + if(_alt)then{_step = 0.01;}; + switch (_dikCode) do { + case EPOCH_keysBuildMovUp: { _adj = 0.1;if(_shift)then{_adj = 0.5};if(_alt)then{_adj = 0.01};EPOCH_Z_OFFSET = (EPOCH_Z_OFFSET + _adj) min 6; _handled = true }; + case EPOCH_keysBuildMovDn: { _adj = 0.1;if(_shift)then{_adj = 0.5};if(_alt)then{_adj = 0.01};EPOCH_Z_OFFSET = (EPOCH_Z_OFFSET - _adj) max - 3; _handled = true }; + case EPOCH_keysBuildMovFwd: { _adj = 0.1;if(_shift)then{_adj = 0.5};if(_alt)then{_adj = 0.01};EPOCH_Y_OFFSET = (EPOCH_Y_OFFSET + _adj) min 5; _handled = true }; + case EPOCH_keysBuildMovBak: { _adj = 0.1;if(_shift)then{_adj = 0.5};if(_alt)then{_adj = 0.01};EPOCH_Y_OFFSET = (EPOCH_Y_OFFSET - _adj) max -5; _handled = true }; + case EPOCH_keysBuildMovL: { _adj = 0.1;if(_shift)then{_adj = 0.5};if(_alt)then{_adj = 0.01};EPOCH_X_OFFSET = (EPOCH_X_OFFSET + _adj) min 5; _handled = true }; + case EPOCH_keysBuildMovR: { _adj = 0.1;if(_shift)then{_adj = 0.5};if(_alt)then{_adj = 0.01};EPOCH_X_OFFSET = (EPOCH_X_OFFSET - _adj) max -5; _handled = true }; + case EPOCH_keysBuildRotL: { _adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirection = (EPOCH_buildDirection + _adj) min 180; EPOCH_doRotate = true; _handled = true }; + case EPOCH_keysBuildRotR: { _adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirection = (EPOCH_buildDirection - _adj) max -180; EPOCH_doRotate = true; _handled = true }; + /*case EPOCH_keysBuildIt: { cursorTarget call EPOCH_fnc_SelectTarget; _handled = true };*/ + case eXpoch_keysVectorResetObject: { EPOCH_X_OFFSET = 0;EPOCH_Y_OFFSET = 5;EPOCH_Z_OFFSET = 0;EPOCH_buildDirection = 0;EPOCH_buildDirectionPitch = 0;EPOCH_buildDirectionRoll = 0;EPOCH_doRotate = true;_handled = true }; + }; + if (Epoch_target iskindof 'Const_Ghost_EPOCH') then { + switch (_dikCode) do { + case eXpoch_keysVectorTiltL: {_adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirectionRoll = (EPOCH_buildDirectionRoll - _adj) max -EPOCH_MaxBuildingTilt; EPOCH_doRotate = true; _handled = true }; + case eXpoch_keysVectorTiltR: {_adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirectionRoll = (EPOCH_buildDirectionRoll + _adj) min EPOCH_MaxBuildingTilt; EPOCH_doRotate = true; _handled = true }; + case eXpoch_keysVectorTiltAwy: {_adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirectionPitch = (EPOCH_buildDirectionPitch - _adj) max -EPOCH_MaxBuildingTilt; EPOCH_doRotate = true; _handled = true }; + case eXpoch_keysVectorTiltTwd: {_adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirectionPitch = (EPOCH_buildDirectionPitch + _adj) min EPOCH_MaxBuildingTilt; EPOCH_doRotate = true; _handled = true }; + }; + }; + }; + }; + }; + + if (_dikCode in(actionKeys "moveFastForward") || _dikCode in(actionKeys "moveForward")) then { + if ((diag_tickTime - EPOCH_lastAGTime) > 0.5) then { + EPOCH_lastAGTime = diag_tickTime; + if !(player nearObjects["Const_All_Walls_F", 6] isEqualTo[]) then { + _currentPos = player modelToWorld[0, 1.75, 1]; + if !(surfaceIsWater _currentPos) then { + _currentPos = ATLtoASL _currentPos; + }; + player forceWalk(lineIntersects[eyePos player, _currentPos, player, objNull]); + } + else { + player forceWalk false; + }; + }; + }; + + if ((_dikCode in(actionKeys "moveDown") || _dikCode in(actionKeys "Prone")) && speed player > 0) then { + _currentPos = player modelToWorld[0, 5, 0.5]; + if !(surfaceIsWater _currentPos) then { + _currentPos = ATLtoASL _currentPos; + }; + _handled = (lineIntersects[eyePos player, _currentPos, player, objNull]); + }; + + if (!_ctrl && _dikCode in(actionKeys "GetOver")) then { + if ((diag_tickTime - EPOCH_lastJumptime) > 2) then { + + _currentPos = player modelToWorld[0, 2, 1]; + if !(surfaceIsWater _currentPos) then { + _currentPos = ATLtoASL _currentPos; + }; + + if !(lineIntersects[eyePos player, _currentPos, player, objNull]) then { + EPOCH_lastJumptime = diag_tickTime; + if (isTouchingGround player && speed player > 10) then { + if ((primaryWeapon player != "") && (currentWeapon player == primaryWeapon player)) then { + player switchMove "AovrPercMrunSrasWrflDf"; + [player, "AovrPercMrunSrasWrflDf", Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2]; + [_playerStaminaKeyFinal, -30, 1000 , 0] call EPOCH_fnc_setVariableLimited; + _handled = true; + } else { + if (currentWeapon player == "") then { + player switchMove "epoch_unarmed_jump"; + [player, "epoch_unarmed_jump", Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2]; + [_playerStaminaKeyFinal, -30, 1000 , 0] call EPOCH_fnc_setVariableLimited; + _handled = true; + }; + }; + }; + } else { + _handled = true; + }; + } else { + _handled = true; + }; + }; + + if (_dikCode in(actionKeys "Gear") && !EPOCH_gearKeyPressed) then { + EPOCH_gearKeyPressed = true; + if !(isNull EPOCH_Target) then { + if !(EPOCH_Target isKindOf "ThingX") then { + deleteVehicle EPOCH_Target; + } else { + EPOCH_Target = objNull; + }; + ["Build Canceled", 5] call Epoch_message; + }; + if (isTouchingGround player) then { + // _handled = call EPOCH_lootTrash; + }; + }; + if (EPOCH_IsAutoRunning) then { + if (_dikCode in ((actionKeys "moveForward") + (actionKeys "TurnLeft") + (actionKeys "TurnRight") + (actionKeys "moveBack"))) then { + EPOCH_IsAutoRunning = false; + player switchMove ""; + }; + }; +}; // end player only code + +EPOCH_favBar_itemConsumed = false; + +if (_dikCode in (actionKeys "Salute")) then { + if (_ctrl) then { + player playactionNow "GestureFinger"; + _handled = true; + }; +}; +if (_dikCode in (actionKeys "TacticalView")) then { + _handled = true; +}; +if (_dikCode in (actionKeys "NightVision")) then { + _playerEnergy = missionNamespace getVariable [_playerEnergyKeyFinal,0]; + if (_playerEnergy == 0) then { + ["Night Vision Goggles: Need Energy", 5] call Epoch_message; + _handled = true; + }; +}; + +if(!_ctrl && (_dikCode in (actionKeys "HeliRopeAction")))then{ + if (player == vehicle player) exitwith {}; + _msg = ""; + if(EPOCH_ArmaSlingLoad)then{ + if (["CfgEpochClient", "ActionHookRope", true] call EPOCH_fnc_returnConfigEntryV2) then { + if(driver vehicle player isEqualTo player)then{ + _slung = ropeAttachedObjects vehicle player; + if(_slung isEqualTo [])then{ + if!('ItemRope' in magazines player) then { + _msg = "You need rope to hook"; + _handled = true; + }else{ + player removeItem 'ItemRope'; + }; + }else{ + player addItem 'ItemRope'; + }; + }; + }; + }else{ + _msg = "Hook/Unhook Malfunction, overrode by R3F or AdvSlingLoad"; + _handled = true; + }; + if!(_msg isEqualTo "")then{ + [_msg,5,[[0,0,0,0.2],[1,1,1,1]]] call Epoch_message_stack; + }; +}; + +if (!isnull (finddisplay -1200) && !isnull Epoch_ActiveCam) then { + _multi = 1; + if (isnil 'Epoch_CamTrigger') then { + Epoch_CamTrigger = diag_ticktime - 0.2; + }; + if (diag_ticktime - Epoch_CamTrigger < 0.1) then { + _multi = 3; + }; + Epoch_CamTrigger = diag_ticktime; + switch _dikCode do { + case Epoch_KB_BaseCamNextCam: { /* Num Enter */ + call Epoch_CamUse; + }; + case Epoch_KB_BaseCamLeft: { /* Num 4 */ + Epoch_AutoCam = false; + Epoch_CamAdjust = [-3*_multi,0,0]; + }; + case Epoch_KB_BaseCamRight: { /* Num 6 */ + Epoch_AutoCam = false; + Epoch_CamAdjust = [3*_multi,0,0]; + }; + case Epoch_KB_BaseCamUp: { /* Num 8 */ + Epoch_AutoCam = false; + Epoch_CamAdjust = [0,8*_multi,0]; + }; + case Epoch_KB_BaseCamDown: { /* Num 2 */ + Epoch_AutoCam = false; + Epoch_CamAdjust = [0,-8*_multi,0]; + }; + case Epoch_KB_BaseCamZoomOut: { /* Num - */ + Epoch_AutoCam = false; + Epoch_CamAdjust = [0,0,0.1*_multi]; + }; + case Epoch_KB_BaseCamZoomIn: { /* Num + */ + Epoch_AutoCam = false; + Epoch_CamAdjust = [0,0,-0.1*_multi]; + }; + case Epoch_KB_BaseCamAutoCam: { /* Num 0 */ + Epoch_AutoCam = true; + Epoch_CamAdjust = [0,0,0]; + }; + }; +}; +_handled diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf new file mode 100644 index 0000000..a065a92 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf @@ -0,0 +1,74 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Raymix + + Description: + Key Up EH functions + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf + + Example: + _this call EPOCH_KeyUp; + + Parameter(s): + _this select 0: CONTROL - _display + _this select 1: NUMBER - _dikcode + _this select 2: BOOL - Shift State + _this select 3: BOOL - Ctrl State + _this select 4: BOOL - Alt State + + Returns: + BOOL +*/ +//[[[cog import generate_private_arrays ]]] +private ["_handled"]; +//[[[end]]] +params ["_display","_dikCode","_shift","_ctrl","_alt"]; +_handled = false; + +_this call Epoch_custom_EH_KeyUp; +if (_handled) exitWith{ true }; + +if !(EPOCH_modKeys isequalto [_shift,_ctrl,_alt]) then { + EPOCH_modKeys = [_shift,_ctrl,_alt]; + call epoch_favBar_modifier; +}; + +//Main actions +if (_dikCode == EPOCH_keysAction) then { + EPOCH_keysActionPressed = false; + true call Epoch_dynamicMenuCleanup; +}; +if (_dikCode in(actionKeys "Gear")) then { + EPOCH_gearKeyPressed = false; +}; +if (player == vehicle player) then { + if (_dikCode == EPOCH_keysAutoRun) then { + if (EPOCH_IsAutoRunning) then { + EPOCH_IsAutoRunning = false; + player switchMove ""; + } + else { + if (EPOCH_keysAutoRun in (actionKeys "moveForward")) then { + if (EPOCH_LastAutoRunKeyPressed + 0.2 > diag_ticktime) then { + if (call EPOCH_AutoRun_Check) then { + EPOCH_IsAutoRunning = true; + }; + }; + } + else { + if (call EPOCH_AutoRun_Check) then { + EPOCH_IsAutoRunning = true; + }; + }; + }; + EPOCH_LastAutoRunKeyPressed = diag_ticktime; + }; +}; + +_handled diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/interface_event_handlers/EPOCH_handleUIActions.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/interface_event_handlers/EPOCH_handleUIActions.sqf new file mode 100644 index 0000000..65afef4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/interface_event_handlers/EPOCH_handleUIActions.sqf @@ -0,0 +1,90 @@ +/* + Author: DirtySanchez - ported from DonkeyPunch eXpoch http://DonkeyPunch.INFO + + Contributors: + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/interface_event_handlers/EPOCH_handleUIActions.sqf +*/ +private['_msg', '_type', '_disableSlingLoad', '_slung']; +params [ + ['_actionObj',objNull], + ['_player',objNull], + ['_index',0], + ['_actionName',''], + ['_actionDisplayName',''], + ['_priority',1], + ['_showWindow',false], + ['_hideOnUse',true], + ['_shortCut',''], + ['_visibility',false], + ['_eventName',''] +]; +_blocked = false; +_msg = ''; +_type = typeOf _actionObj; +_config = 'CfgEpochClient' call EPOCH_returnConfig; +switch(_actionName)do{ + case 'FireInflame': { + if (["CfgEpochClient", "ActionFireOnLighter", true] call EPOCH_fnc_returnConfigEntryV2) then { + if!('lighter_epoch' in magazines player) then { + _msg = 'You need a lighter'; + _blocked = true; + }else{ + [player,'lighter_epoch',-5] call EPOCH_usedItemRepack; + //[_actionObj] remoteExec ['EPOCH_server_addToFireSystem',2]; + }; + }; + }; + case 'FirePutDown': { + if (["CfgEpochClient", "ActionBurnBarrelOffExtinguisher", true] call EPOCH_fnc_returnConfigEntryV2) then { + if(_type isEqualTo 'BurnBarrel_EPOCH')then{ + if!('ItemFireExtinguisher' in magazines player) then { + _msg = 'You need an extinguisher'; + _blocked = true; + }else{ + [player,'ItemFireExtinguisher',-1] call EPOCH_usedItemRepack; + }; + }; + }; + }; + case 'HookCargo': { + if(EPOCH_ArmaSlingLoad)then{ + if (["CfgEpochClient", "ActionHookRope", true] call EPOCH_fnc_returnConfigEntryV2) then { + if(driver vehicle player isEqualTo player)then{ + _slung = ropeAttachedObjects vehicle player; + if(_slung isEqualTo [])then{ + if!('ItemRope' in magazines player) then { + _msg = 'You need rope to hook'; + _blocked = true; + }else{ + player removeItem 'ItemRope'; + }; + }else{ + player addItem 'ItemRope'; + }; + }; + }; + }else{ + _msg = 'Hook Malfunction, overrode by R3F or AdvSlingLoad'; + _blocked = true; + }; + }; + case 'UnhookCargo': { + if(EPOCH_ArmaSlingLoad)then{ + if (["CfgEpochClient", "ActionHookRope", true] call EPOCH_fnc_returnConfigEntryV2) then { + player addItem 'ItemRope'; + }; + }else{ + _msg = 'Unhook Malfunction, overrode by R3F or AdvSlingLoad'; + _blocked = true; + }; + }; +}; +if!(_msg isEqualTo '')then{ + [_msg,5,[[0,0,0,0.2],[1,1,1,1]]] call Epoch_message_stack; +}; +_blocked \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf new file mode 100644 index 0000000..e8a5aa8 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf @@ -0,0 +1,39 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + removes any non numeric chars and inforce number to max limit to a control. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf + + Example: + [_control,_maxLimit] call EPOCH_onChar; + + Parameter(s): + _this select 0: CONTROL - _display + _this select 0: NUMBER - max limit + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_num","_textArr"]; +//[[[end]]] +params ["_control",["_maxLimit",0]]; +_textArr = toArray(ctrlText(_control select 0)); +{ + if !(_x in [48,49,50,51,52,53,54,55,56,57]) then { + _textArr = _textArr - [_x]; + }; +} forEach _textArr; +if (count _textArr > 10) then { + _textArr resize 10; +}; +_num = parseNumber(toString _textArr) min _maxLimit; +(_control select 0) ctrlSetText str(_num); diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_CryptoButtons.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_CryptoButtons.sqf new file mode 100644 index 0000000..ec1bf40 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_CryptoButtons.sqf @@ -0,0 +1,82 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: Adds a Slider into the inventory to put Crypto on the Ground + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_CryptoButtons.sqf + + Usage: + on opened Inventory: call EPOCH_CryptoButtons + + RETURNS: NOTHING +*/ + + +private ["_display","_ctrl_ground","_ContainerBG","_PlayerBg","_ContainerBgPos","_ctrl_groundPos","_PlayerBgPos","_KryptoButton","_border","_slider1","_KryptoText"]; +_display = finddisplay 602; +_ctrl_ground = _display displayCtrl 6321; +_ContainerBG = _display displayCtrl 1001; +_PlayerBg = _display displayCtrl 1002; +_ContainerBgPos = ctrlPosition _ContainerBG; +_ctrl_groundPos = ctrlPosition _ctrl_ground; +_PlayerBgPos = ctrlPosition _PlayerBG; + +_KryptoButton = _display ctrlCreate['RSCButton', -1]; +_KryptoButton ctrlSetPosition [ + (_PlayerBgPos select 0)+(_PlayerBgPos select 2) + (_ctrl_groundPos select 3)/2, + (_ContainerBgPos select 1) + (_ctrl_groundPos select 3)*1.5 + (_ctrl_groundPos select 3)/2*0, + (_ContainerBgPos select 2)/2, + (_ctrl_groundPos select 3)*1.5 +]; +_KryptoButton ctrlCommit 0; +_KryptoButton ctrlSetText 'Crypto to Ground'; +_KryptoButton ctrlsettextcolor [1,1,0,1]; +_KryptoButton ctrlEnable true; +_KryptoButton ctrlSetEventHandler ["ButtonClick","_slider = ((finddisplay 602) displayCtrl 654001);_sliderPos = sliderPosition _slider;_value = round (epoch_playercrypto * (_sliderPos/10)); if (_value > 0 && _value <= Epoch_PlayerCrypto) then {finddisplay 602 closedisplay 0; [player,_value,Epoch_personalToken] remoteexec ['EPOCH_server_PutCrypto',2]};"]; +_border = _display ctrlCreate['RscFrame', -1]; +_border ctrlSetPosition [ + (_PlayerBgPos select 0)+(_PlayerBgPos select 2) + (_ctrl_groundPos select 3)/2, + (_ContainerBgPos select 1) + (_ctrl_groundPos select 3)*1.5 + (_ctrl_groundPos select 3)/2*0, + (_ContainerBgPos select 2)/2, + (_ctrl_groundPos select 3)*1.5 +]; +_border ctrlCommit 0; + +_slider1 = _display ctrlCreate['RscXSliderH', 654001]; +_slider1 ctrlSetPosition [ + (_PlayerBgPos select 0)+(_PlayerBgPos select 2) + (_ctrl_groundPos select 3)/2, + (_ContainerBgPos select 1) + (_ctrl_groundPos select 3)*1.5*2, + (_ContainerBgPos select 2)/2, + (_ctrl_groundPos select 3)*0.75 +]; +_slider1 ctrlCommit 0; + +_KryptoText = _display ctrlCreate['RSCText', 654002]; +_KryptoText ctrlSetPosition [ + (_PlayerBgPos select 0)+(_PlayerBgPos select 2) + (_ctrl_groundPos select 3)/2, + (_ContainerBgPos select 1) + (_ctrl_groundPos select 3)*1.5*2 + (_ctrl_groundPos select 3)*0.75, + (_ContainerBgPos select 2)/2, + (_ctrl_groundPos select 3)*0.75 +]; +_KryptoText ctrlSetBackgroundColor [0,0,0,1]; + +[] spawn { + disableSerialization; + _display = finddisplay 602; + _slider1 = (_display displayCtrl 654001); + _KryptoText = (_display displayCtrl 654002); + _slider1 sliderSetPosition 0; + while {!isNull _display} do { + _sliderPos = sliderPosition _slider1; + _value = round (epoch_playercrypto * (_sliderPos/10)); + _KryptoText ctrlSetText format['Put %1 Crypto',_value]; + _KryptoText ctrlCommit 0; + uiSleep 0.1; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_ReloadLoadout.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_ReloadLoadout.sqf new file mode 100644 index 0000000..c39fdeb --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_ReloadLoadout.sqf @@ -0,0 +1 @@ +[player,GetUnitLoadout Player,missionNamespace getVariable [_playerRandomVarKey, -1]] call (missionnamespace getvariable ["Epoch_SetUnitLoadout",{}]); \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_SetUnitLoadout.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_SetUnitLoadout.sqf new file mode 100644 index 0000000..6bbc946 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_SetUnitLoadout.sqf @@ -0,0 +1,87 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Change PlayerLoadout + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_SetUnitLoadout.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_type","_loadabs"]; +//[[[end]]] + +params ["_newPlyr","_loadout",["_key",-1000]]; +_tmpkey = (missionNamespace getVariable _playerRandomVarKey); +if (isnil "_tmpkey") exitwith {}; +if !(_key isEqualTo (missionNamespace getVariable _playerRandomVarKey)) exitwith {}; + +// _loadout params ["_primaryarr","_secondaryarr","_handgunarr","_uniformarr","_vestarr","_bpackarr","_HeadGear","_Glasses","_Rangefinderarr","_LinedItemsarr"]; +_loadout = +_loadout; +_loadout params ["","","","_uniformarr","_vestarr","_bpackarr","","","",""]; +_loadout set [3,[]]; +_loadout set [4,[]]; +_loadout set [5,[]]; +_newPlyr setunitloadout _loadout; +_uniformarr params [["_uniform",""],["_uniformitems",[]]]; +_vestarr params [["_vest",""],["_vestitems",[]]]; +_bpackarr params [["_bpack",""],["_bpackitems",[]]]; +if !(_uniform isequalto "") then { + _newPlyr forceadduniform _uniform; +}; +if !(_vest isequalto "") then { + _newPlyr addVest _vest; +}; +if !(_bpack isequalto "") then { + _newPlyr addBackpack _bpack; +}; +{ + _x params ["_container","_items"]; + if !(isnull _container) then { + clearitemcargoglobal _container; + clearbackpackcargoglobal _container; + clearmagazinecargoglobal _container; + clearweaponcargoglobal _container; + { + if (count _x > 2) then { + _container addMagazineAmmoCargo _x; + } + else { + if ((_x select 0) isequaltype []) then { + _container addWeaponWithAttachmentsCargoGlobal _x; + } + else { + _x params [["_type",""],["_cnt",1]]; + if !(_cnt isequaltype 1) then { + _cnt = 1; + }; + if (_type iskindof "Bag_Base") then { + _container addBackpackCargoGlobal [_type,_cnt]; + } + else { + _container addItemCargoGlobal [_type,_cnt]; + }; + }; + }; + } foreach _items; + }; +} foreach [ + [Uniformcontainer _newPlyr, _uniformitems], + [Vestcontainer _newPlyr, _vestitems], + [BackpackContainer _newPlyr, _bpackitems] +]; + +/* +_loadabs = loadabs _newPlyr; +if !(uniform _newPlyr isequalto _uniform && vest _newPlyr isequalto _vest && backpack _newPlyr isequalto _bpack) then { + diag_log format ["EPOCH Debug: Setunitloadout failed - Unifmorm should: %1 is: %2 - Vest should: %3 is: %4 - Backpack should: %5 is: %6",_uniform,uniform _newPlyr,_vest,vest _newPlyr,_bpack,backpack _newPlyr]; + _loadabs = -1; +}; + +_loadabs +*/ \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_equip.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_equip.sqf new file mode 100644 index 0000000..e03d128 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_equip.sqf @@ -0,0 +1,496 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: Equips or un-equips item (if equipped) instantly. Item has to exist in the inventory. + to switch weapons slowly use below in your code: + player playAction "reloadMagazine"; + + _item - className + _drop - drop on ground if inventory full, weapons will be stripped off attachments + weapons stripped because attachments can only be added while weapon is equipped. + _forceEquip - disables un-equip and forces new item to be equipped at all times + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_equip.sqf + + Usage: + [_item, false] call epoch_equip; //don't drop item if inventory full. Does not equip requested item if another item already equipped, instead un-equips existing one. + [_item, true,true] call epoch_equip; //drops item if not enough space. Removes existing weapon and equips new one. + + RETURNS: + 0 - fail, item not provided + 1 - success + 2 - success, but item dropped on ground. + 3 - item not found + 4 - not enough space + 5 - accessory not compatible +*/ +private ["_item","_drop","_forceEquip","_return","_loadout","_slot","_uniform","_vest","_bpack","_uniformItems","_vestItems","_bPackItems","_itemInInventory", +"_fnc_dropItem","_fnc_findItemInContainers","_fnc_moveWeaponFromContainer","_fnc_MoveWeaponToContainer","_fnc_canMoveToContainer","_fnc_dropEquipWeapon","_fnc_dropAssign", +"_fnc_MoveShellToContainer","_fnc_moveShellFromContainer","_fnc_dropEquipShells","_fnc_findAccessorySlot","_fnc_dropEquipAccessories"]; +params [["_item","",[""]],["_drop",false,[false]],["_forceEquip",false,[false]]]; + +_return = 0; +if (_item == "") exitWith {_return}; +_slot = _item call epoch_itemTypeSlot; +_loadout = getUnitLoadout player; +_uniform = _loadout param [3,[]]; +_vest = _loadout param [4,[]]; +_bpack = _loadout param [5,[]]; +_uniformItems = _uniform param [1,[]]; +_vestItems = _vest param [1,[]]; +_bPackItems = _bPack param [1,[]]; + +_itemInInventory = _item in ((magazines player) + (items player)); + +_fnc_dropItem = { + private ["_item","_nearByHolder","_wH","_wHPos"]; + params [["_item","",[""]],["_count",1]]; + for "_i" from 1 to _count do + { + _wH = objNull; + if (isNil "_nearByHolder") then { + _nearByHolder = nearestObjects [player,["groundWeaponHolder"],3]; + }; + if (_nearByHolder isEqualTo []) then { + _wHPos = player modelToWorld [0,1,0]; + if (surfaceIsWater _wHPos) then { + _wHPos = ASLToATL _wHPos; + }; + _wH = createVehicle ["groundWeaponHolder",_wHPos, [], 0, "CAN_COLLIDE"]; + } else { + _wH = _nearByHolder select 0; + }; + if !(isNull _wh) then { + _wh addItemCargoGlobal [_item,1]; + }; + }; +}; + +_fnc_findItemInContainers = { + private ["_item","_container","_index","_found","_currItem"]; + params ["_item"]; + + _container = 0; + _index = 0; + _found = false; + { + _container = _forEachIndex; + if (!isnil "_x") then { + { + _index = _forEachIndex; + _currItem = _x select 0; + if (_currItem isEqualType "") then { //if item + if (_currItem isEqualTo _item) exitWith {_found = true}; + } else { //if weapon + if ((_currItem select 0) isEqualTo _item) exitWith {_found = true}; + }; + if _found exitWith {}; + } forEach _x; + }; + if _found exitWith {}; + } forEach [_uniformItems,_vestItems,_bPackItems]; + + [_container,_index,_found] +}; + +_fnc_moveWeaponFromContainer = { + private ["_idx","_container","_sIdx","_dIdx"]; //_dIdx can only be 0, 1 and 2 + params ["_idx","_dIdx"]; + _idx params ["_container","_sIdx"]; + + //copy old entry + _temp = ((_loadout select (_container + 3)) select 1) select _sIdx select 0; + //delete old entry + ((_loadout select (_container + 3)) select 1) deleteAt _sIdx; + //add new entry + _loadout set [_dIdx,_temp]; + //save changes +// player setUnitLoadout _loadout; + [player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout; +}; + +_fnc_MoveWeaponToContainer = { + private ["_container","_sIdx"]; //_sIdx can only be 0, 1 and 2 + params ["_container","_sIdx"]; + + /* + //Delete this block if no issues. + //Commented out because increasing index alone is not enough due to unique attachement placements or ammo size + _exists = _item call _fnc_findItemInContainers; + _exists params ["_container","_idx","_found"]; + + if _found then { + _cnt = ((_loadout select (_container + 3)) select 1) select _idx select 1; + ((_loadout select (_container + 3)) select 1) select _idx set [1,_cnt + 1]; + } else { + ((_loadout select (_container + 3)) select 1) append [[_loadout select _sIdx,1]]; + }; + */ + + ((_loadout select (_container + 3)) select 1) append [[_loadout select _sIdx,1]]; //cut out from above comment, looks like appending alone works great + _loadout set [_sIdx,[]]; + +// player setUnitLoadout _loadout; + [player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout; +}; + +_fnc_canMoveToContainer = { + private "_item"; + params ["_item"]; + if (player canAddItemToUniform _item) exitWith {0}; + if (player canAddItemToVest _item) exitWith {1}; + if (player canAddItemToBackpack _item) exitWith {2}; + 4 +}; + +_fnc_dropEquipWeapon = { + private ["_equipped","_slot"]; + params ["_equipped","_slot"]; + + if (!_itemInInventory && (_item != _equipped)) exitWith {_return = 3}; //Item not found + + if (_equipped != "") then { //something equipped already + if (player canAdd _equipped) then { //can we move it? + _container = _equipped call _fnc_canMoveToContainer; + + if (_container != 4) then { + [_container,_slot] call _fnc_MoveWeaponToContainer; + _return = 1; + } else { + _return = 4; + }; + } else { //drop it and strip from attachments? + if !(_drop) exitWith {_return = 4;}; //drop not allowed + /* //Delete this block if no issues with dropping on ground + {//Drop equipped items first + _x call _fnc_dropItem; + player removePrimaryWeaponItem _x; + }forEach primaryWeaponItems player; + { + _x call _fnc_dropItem; + }forEach primaryWeaponMagazine player; + */ + _equipped call _fnc_dropItem; + player removeWeaponGlobal _equipped; + _return = 2; //success, but dropped + }; + if (_forceEquip && _return != 4) then {//Equip new weapon after old one removed + _idx = _item call _fnc_findItemInContainers; + [_idx,_slot] call _fnc_moveWeaponFromContainer; + }; + } else { + //Equip weapon + _idx = _item call _fnc_findItemInContainers; + [_idx,_slot] call _fnc_moveWeaponFromContainer; + _return = 1; //success + }; +}; + +_fnc_dropAssign= { + private ["_equipped"]; + params ["_equipped"]; + + if (!_itemInInventory && (_item != _equipped)) exitWith {_return = 3}; + + if (_equipped != "") then { + if (player canAdd _equipped) then { + _container = _equipped call _fnc_canMoveToContainer; + + if (_container != 4) then { + player unassignItem _equipped; + _return = 1; + } else { + _return = 4; + }; + } else { + if !(_drop) exitWith {_return = 4;}; + _equipped call _fnc_dropItem; + player removeItem _equipped; + _return = 2; + }; + if (_forceEquip && _return != 4) then { + player assignItem _item; + }; + } else { + player assignItem _item; + _return = 1; + }; +}; +_fnc_MoveShellToContainer = { + private ["_container"]; + params ["_container"]; + + _temp = _loadout select 0 select 5; + _temp2 = [(_temp select 0), 1, (_temp select 1)]; + if ((_temp select 1) > 0) then { //only move if ammo not empty, delete otherwise + ((_loadout select (_container + 3)) select 1) append [_temp2]; //cut out from above comment, looks like appending alone works great + }; + (_loadout select 0) set [5,[]]; +// player setUnitLoadout _loadout; + [player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout; +}; + +_fnc_moveShellFromContainer = { + private ["_idx","_container","_sIdx"]; //_dIdx can only be 0, 1 and 2 + params ["_idx"]; + _idx params ["_container","_sIdx","_found"]; + + if (_found) then { + _temp = ((_loadout select (_container + 3)) select 1) select _sIdx; + + if ((_temp select 1) > 1) then { + _cnt = (((_loadout select (_container + 3)) select 1) select _sIdx) select 1; + (((_loadout select (_container + 3)) select 1) select _sIdx) set [1,_cnt - 1]; + } else { + ((_loadout select (_container + 3)) select 1) deleteAt _sIdx; + }; + (_loadout select 0) set [5,[_temp select 0,_temp select 2]]; +// player setUnitLoadout _loadout; + [player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout; + }; +}; + +_fnc_dropEquipShells = { + private ["_equipped"]; + params ["_equipped"]; + + if (!_itemInInventory && (_item != _equipped)) exitWith {_return = 3}; + + if (_equipped != "") then { + if (player canAdd _equipped) then { + _container = _equipped call _fnc_canMoveToContainer; + + if (_container != 4) then { + [_container] call _fnc_MoveShellToContainer; + _return = 1; + } else { + _return = 4; + }; + } else { + if !(_drop) exitWith {_return = 4;}; + _equipped call _fnc_dropItem; + (_loadout select 0) set [5,[]]; +// player setUnitLoadout _loadout; + [player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout; + _return = 2; + }; + if (_forceEquip && _return != 4) then { + _idx = _item call _fnc_findItemInContainers; + [_idx,_slot] call _fnc_moveShellFromContainer; + player playAction "reloadMagazine"; + }; + } else { + _idx = _item call _fnc_findItemInContainers; + [_idx,_slot] call _fnc_moveShellFromContainer; + player playAction "reloadMagazine"; + _return = 1; + }; + _muzzle = (getArray (configFile >> "CfgWeapons" >> (primaryWeapon player) >> "muzzles")); + player selectWeapon (_muzzle select 1); +}; +_fnc_findAccessorySlot = { + _item = toLower _item; + + private ["_found","_slot","_accessory","_compatibleMuzzles","_compatibleCows","_compatiblePointers","_compatibleBipods"]; + _slot = 0; + _accessory = 0; + _found = false; + { + _slot = _foreachIndex; + _compatibleMuzzles = getArray(configFile >> "CfgWeapons" >> _x >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems"); + _compatibleCows= getArray(configFile >> "CfgWeapons" >> _x >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems"); + _compatiblePointers = getArray(configFile >> "CfgWeapons" >> _x >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems"); + _compatibleBipods = getArray(configFile >> "CfgWeapons" >> _x >> "WeaponSlotsInfo" >> "UnderBarrelSlot" >> "compatibleItems"); + + for "_i" from 0 to (count _compatibleMuzzles) do { + _compatibleMuzzles set [_i,toLower (_compatibleMuzzles select _i)]; + }; + for "_i" from 0 to (count _compatibleCows) do { + _compatibleCows set [_i,toLower (_compatibleCows select _i)]; + }; + for "_i" from 0 to (count _compatiblePointers) do { + _compatiblePointers set [_i,toLower (_compatiblePointers select _i)]; + }; + for "_i" from 0 to (count _compatibleBipods) do { + _compatibleBipods set [_i,toLower (_compatibleBipods select _i)]; + }; + + if (_item in _compatibleMuzzles) exitWith {_found = true; _accessory = 1}; + if (_item in _compatibleCows) exitWith {_found = true; _accessory = 3}; + if (_item in _compatiblePointers) exitWith {_found = true; _accessory = 2}; + if (_item in _compatibleBipods) exitWith {_found = true; _accessory = 6}; + } forEach [(primaryWeapon player),(secondaryWeapon player),(handgunWeapon player)]; + + [_found,_slot,_accessory] +}; + +_fnc_dropEquipAccessories = { + + _properties = call _fnc_findAccessorySlot; + _properties params ["_found","_slot","_accessory"]; + + if !_found exitWith {_return = 5}; + + _itemsPlayer = (primaryWeaponItems player + secondaryWeaponItems player + handgunItems player); + for "_i" from 0 to (count _itemsPlayer) do { + _itemsPlayer set [_i,toLower (_itemsPlayer select _i)]; + }; + _item = toLower _item; + _itemEquipped = _item in _itemsPlayer; + _equipped = (_loadout select _slot) select _accessory; + + if (!_itemInInventory && !_itemEquipped) exitWith {_return = 3}; + if (_equipped != "") then { + _equipped = (_loadout select _slot) select _accessory; + if (player canAdd _equipped) then { + (_loadout select _slot) set [_accessory,""]; +// player setUnitLoadout _loadout; + [player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout; + player addItem _equipped; + _return = 1; + } else { + if !(_drop) exitWith {_return = 4;}; + _equipped call _fnc_dropItem; + (_loadout select _slot) set [_accessory,""]; +// player setUnitLoadout _loadout; + [player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout; + _return = 2; + }; + if ((((toLower _equipped) != (toLower _item)) || _forceEquip) && _return != 4) then { + (_loadout select _slot) set [_accessory,_item]; +// player setUnitLoadout _loadout; + [player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout; + player addItem _equipped; + player removeItem _item; + }; + } else { + (_loadout select _slot) set [_accessory,_item]; +// player setUnitLoadout _loadout; + [player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout; + player removeItem _item; + _return = 1; + }; + + player selectWeapon ((_loadout select _slot) select 0); + if !(["CfgEpochClient", "Fav_FastWeaponSwitching", false] call EPOCH_fnc_returnConfigEntryV2) then { + player playAction "reloadMagazine"; + }; + _return + /* + _slot = primary 0, second 1, hand 2 + _accessory = silencer 1, laser 2, optics 3 + */ +}; +/* + + +*/ +//Main +switch _slot do { + case 3: + { + [(primaryWeapon player),0] call _fnc_dropEquipWeapon; + }; + case 4: + { + [(secondaryWeapon player),1] call _fnc_dropEquipWeapon; + }; + case 5: + { + [(handgunWeapon player),2] call _fnc_dropEquipWeapon; + }; + case 6: //accesories + { + _item call _fnc_dropEquipAccessories; + }; + case 7: //toolbelt + { + if (_item in (assignedItems player)) then { + switch _item do { + case "ItemGPS": + { + //can't find a way to display it in A3 + "Use [Right Ctrl] + M to toggle GPS" call epoch_message; + }; + case "ItemMap": + { + openMap true; + }; + case "ItemCompass": + { + //can't find a way to display it in A3 + "Use [K] to toggle Compass" call epoch_message; + }; + case "ItemWatch": + { + //can't find a way to display it in A3 + "Use [O] to toggle watch" call epoch_message; + }; + case "ItemGeigerCounter_EPOCH": + { + call epoch_geiger_show_hide; + }; + case default + { + //do stuff with radios here + if (_item in ["EpochRadio0","EpochRadio1","EpochRadio2","EpochRadio3","EpochRadio4","EpochRadio5","EpochRadio6","EpochRadio7","EpochRadio8","EpochRadio9"]) then {_item call EPOCH_custom_radioActions}; + }; + + }; + } else { + _item call _fnc_dropAssign; + }; + }; + case 8: //headgear + { + (headgear player) call _fnc_dropAssign; + }; + case 9: //hmd + { + (hmd player) call _fnc_dropAssign; + }; + case 10: //bino + { + [(binocular player),8] call _fnc_dropEquipWeapon; + }; + case 11: //goggles + { + (hmd player) call _fnc_dropAssign; + }; + case 12: //mines + { + private ["_allMuzzles","_muzzle","_found","_mags"]; + if (_itemInInventory) then { + _allMuzzles = getArray (configFile >> "CfgWeapons" >> "Put" >> "Muzzles"); + + _muzzle = ""; + _found = false; + { + _mags = getArray (configFile >> "CfgWeapons" >> "Put" >> _x >> "magazines"); + _muzzle = _x; + { + if (_x isEqualTo _item) exitWith {_found = true}; + } forEach _mags; + if (_found) exitWith {}; + } forEach _allMuzzles; + + player playActionNow "PutDown"; + player selectWeapon _muzzle; + player fire [_muzzle, _muzzle, _item]; + player setWeaponReloadingTime [player, _muzzle, 0]; + }; + }; + case 16: //Grenade launcher shells. + { + _equipped = (primaryWeaponMagazine player) param [1,""]; + _equipped call _fnc_dropEquipShells; + }; +}; + +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_factorArmor.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_factorArmor.sqf new file mode 100644 index 0000000..8fdc776 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_factorArmor.sqf @@ -0,0 +1,26 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Gear Armor factor for passThrough calculation with support for A3 1.54+. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_factorArmor.sqf + + Example: + _gearArmor = ([_passThrough,_armor] call EPOCH_factorArmor); + + Parameter(s): + _this select 0: NUMBER - passThrough + _this select 1: NUMBER - armor + + Returns: + NUMBER +*/ +params ["_passThrough","_armor"]; +((_armor - (_armor*_passThrough))/2 + _armor) diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf new file mode 100644 index 0000000..16ea645 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf @@ -0,0 +1,34 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Gear armor calculation with support for A3 1.54+. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf + + Example: + _vestArmor = (vest player) call EPOCH_gearArmorCalc; + + Parameter(s): + _this: STRING - Vest or Headhear classname + + Returns: + NUMBER +*/ +//[[[cog import generate_private_arrays ]]] +private ["_armor","_gearArmor","_gearConfig","_passThrough","_vestArmor"]; +//[[[end]]] +_gearConfig = (configfile >> "CfgWeapons" >> _this); +_passThrough = getNumber(_gearConfig >> "ItemInfo" >> "passThrough"); +_armor = getNumber(_gearConfig >> "ItemInfo" >> "armor"); +_gearArmor = ([_passThrough,_armor] call EPOCH_factorArmor); +{ + _gearArmor = _gearArmor + ([getNumber(_x >> 'passThrough'),getNumber(_x >> 'armor')] call EPOCH_factorArmor) +} forEach ("isClass _x" configclasses (_gearConfig >> "ItemInfo" >> "HitpointsProtectionInfo")); +_gearArmor diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_initUI.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_initUI.sqf new file mode 100644 index 0000000..96793d1 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_initUI.sqf @@ -0,0 +1,118 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Init epoch gear armor stats. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf + + Example: + player addEventHandler ["InventoryOpened", { + _this spawn EPOCH_initUI; + }]; + + Parameter(s): + None + + Returns: + NOHTING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_bar","_bar_compare","_color","_colorCompare","_container","_display","_existing_bar","_height","_pos","_remoteContainer","_small_height"]; +//[[[end]]] +disableSerialization; + +[] spawn epoch_favBar_inventory; + +EPOCH_InteractedItem = []; +params ["_unit","_targetContainer","_secondaryContainer"]; +EPOCH_targetContainer = _targetContainer; +EPOCH_secondaryContainer = _secondaryContainer; + +waitUntil {!isNull findDisplay 602}; +_display = (findDisplay 602); + +// init custom sub menu handler +{ + _container = _display displayCtrl _x; + _container ctrlAddEventHandler ["LBDblClick","_this call EPOCH_itemInteractClick"]; +} forEach [619,633,638]; +// armor stats init +{ + _remoteContainer = _display displayCtrl _x; + _remoteContainer ctrlAddEventHandler ["LBDrag","_this call EPOCH_selectInventoryItem; _this call EPOCH_refeshUI"]; + _remoteContainer ctrlAddEventHandler ["LBSelChanged","_this call EPOCH_selectInventoryItem; _this call EPOCH_refeshUI"]; +} forEach [632,640]; + +_color = [0.6,0.6,0.6,1]; +_colorCompare = [0.4,0.6,1,0.4]; + +// UniformLoad +_bar = _display ctrlCreate ["RscCustomProgress", 7304]; +uiNameSpace setVariable ["RscCustomProgressUniform", _bar]; +_bar ctrlSetTextColor _color; + +_existing_bar = _display displayCtrl 6304; +_pos = ctrlPosition _existing_bar; +_height = (_pos select 3) / 2; +_existing_bar ctrlSetPosition [_pos select 0,(_pos select 1)+_height,_pos select 2,_height]; +_existing_bar ctrlCommit 0; +_bar ctrlSetPosition [_pos select 0,_pos select 1,_pos select 2,_height]; +_bar ctrlCommit 0; + +// VestLoad +_bar = _display ctrlCreate ["RscCustomProgress", 7305]; +uiNameSpace setVariable ["RscCustomProgressVest", _bar]; +_bar ctrlSetTextColor _color; + +_existing_bar = _display displayCtrl 6305; +_pos = ctrlPosition _existing_bar; +_height = (_pos select 3) / 2; +_small_height = _height; +_existing_bar ctrlSetPosition [_pos select 0,(_pos select 1)+_height,_pos select 2,_height]; +_existing_bar ctrlCommit 0; +_bar ctrlSetPosition [_pos select 0,_pos select 1,_pos select 2,_height]; +_bar ctrlCommit 0; + +// SlotHeadgear +_bar = _display ctrlCreate ["RscCustomProgress", 7240]; +uiNameSpace setVariable ["RscCustomProgressHeadgear", _bar]; +_bar ctrlSetTextColor _color; + +_existing_bar = _display displayCtrl 6240; +_pos = ctrlPosition _existing_bar; +_height = _pos select 3; + +_bar ctrlSetPosition [_pos select 0,(_pos select 1)+_height,_pos select 2,_small_height]; +_bar ctrlCommit 0; + +// TotalLoad; +_existing_bar = _display displayCtrl 6308; +_pos = ctrlPosition _existing_bar; +_height = (_pos select 3) / 2; + +_existing_bar ctrlSetPosition [_pos select 0,(_pos select 1)+_height,_pos select 2,_height]; +_existing_bar ctrlCommit 0; + +// TotalLoad compare; +_bar = _display ctrlCreate ["RscTotalArmorProgress", 7308]; +_bar ctrlSetTextColor _color; + +_bar ctrlSetPosition [_pos select 0,_pos select 1,_pos select 2,_height]; +_bar ctrlCommit 0; + +_bar_compare = _display ctrlCreate ["RscCustomProgress", 7309]; +_bar_compare ctrlSetTextColor _colorCompare; + +_bar_compare ctrlSetPosition [_pos select 0,_pos select 1,_pos select 2,_height]; +_bar_compare ctrlCommit 0; + +uiNameSpace setVariable ["RscCustomProgressTotal", [_bar,_bar_compare]]; + +0 call EPOCH_refeshUI; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_itemInteractClick.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_itemInteractClick.sqf new file mode 100644 index 0000000..74af222 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_itemInteractClick.sqf @@ -0,0 +1,136 @@ +/* + Dynamic inventory sub menu + By Aaron Clark - Epoch Mod +*/ +//[[[cog import generate_private_arrays ]]] +private ["_CfgEpochClient","_Suppressed","_activeControl","_bg","_btn_arr","_buffer","_buttonTXT","_button_gen","_button_texts","_cfgItemInteractions","_config","_control","_data","_display","_interactActions","_interactOption","_magCount","_pos","_start_idc","_type","_y2d"]; +//[[[end]]] +_button_texts = []; + +_activeControl = uiNamespace getVariable ["EPOCH_active_button_control", controlNull]; +if (!isNull _activeControl) then { + _activeControl ctrlShow false; + ctrlDelete _activeControl; +}; + +_this call EPOCH_selectInventoryItem; +_data = EPOCH_InteractedItem select 1; + +_interactOption = 0; +_buttonTXT = ""; +_magCount = 1; +_interactActions = []; +_config = (configfile >> "CfgWeapons" >> _data); +_CfgEpochClient = 'CfgEpochClient' call EPOCH_returnConfig; +_Suppressed = getarray (_CfgEpochClient >> "SuppressedCraftingItems"); +// _cfgItemInteractions = (('CfgItemInteractions' call EPOCH_returnConfig) >> _data); +_cfgItemInteractions = ["CfgItemInteractions", _data] call EPOCH_returnConfigV2; +if (isClass (_config)) then { + _type = getNumber (_config >> "type"); + _interactOption = getNumber (_cfgItemInteractions >> "interactAction"); + _buttonTXT = getText(_cfgItemInteractions >> "interactText"); + _interactActions = getArray(_cfgItemInteractions >> "interactActions"); +} else { + if (EPOCH_AdvancedVehicleRepair_Enabled && _data in ["VehicleRepair","VehicleRepairLg"]) exitwith {}; + _config = (configfile >> "CfgMagazines" >> _data); + _type = getNumber (_config >> "type"); + _interactOption = getNumber (_cfgItemInteractions >> "interactAction"); + _buttonTXT = getText(_cfgItemInteractions >> "interactText"); + _magCount = getNumber (_config >> "count"); + _interactActions = getArray(_cfgItemInteractions >> "interactActions"); +}; + +// legacy +if (_buttonTXT != "") then { + _button_texts pushBack [_buttonTXT]; +}; +// additional interactActions +if !(_interactActions isEqualTo []) then { + { + _button_texts pushBack _x; + } forEach _interactActions; +}; +// ammo repack +if (_magCount > 1) then { + _button_texts pushBack ["REPACK","[0] call EPOCH_consumeItem;"]; +}; + +_config = 'CfgCrafting' call EPOCH_returnConfig; +if (isClass (_config >> _data) && !(_data in _Suppressed)) then { + EPOCH_CraftingItem = EPOCH_InteractedItem select 0; + _button_texts pushBack ["CRAFT","EPOCH_CraftingItem call EPOCH_crafting_load;"]; +} +else { + EPOCH_CraftingItem = ""; +}; + +/* Moved to DynaMenu +_config = 'CfgVehicleUpgrades' call EPOCH_returnConfig; +if (isClass (_config >> _data)) then { + { + if (isclass (_config >> _data >> (typeof _x))) exitwith { + EPOCH_UpgradeVehicle = [_data,_x]; + _reqMaterials = getArray (_config >> _data >> (typeof _x) >> "ReqMaterials"); + _itemtxt = "required: "; + { + _itemtxt = _itemtxt + str (_x select 0) + ((_x select 1) call EPOCH_itemDisplayName) + ", "; + } foreach _reqMaterials; + _txt1 = format ["Upgrade %1", (typeof _x) call EPOCH_itemDisplayName]; + _txt2 = "EPOCH_UpgradeVehicle call EPOCH_Client_UpgradeVehicle;"; + _button_texts pushBack [_txt1,_txt2]; + }; + } foreach (nearestobjects [player,["Landvehicle","SHIP","AIR","TANK"],10]); +}; +*/ + +if !(_button_texts isEqualTo []) then { + _display = ctrlParent (_this select 0); + _pos = getMousePosition; + + _control = _display ctrlCreate ["RscControlsGroupNoScrollbars", 5678910]; + uiNamespace setVariable ["EPOCH_active_button_control", _control]; + + _control ctrlSetPosition [(_pos select 0)-0.03,(_pos select 1)-0.03,1,1]; + _control ctrlCommit 0; + + _bg = _display ctrlCreate ["RscButtonTextOnly", 12349,_control]; + _bg ctrlSetPosition [0,0,1,1]; + _bg ctrlCommit 0; + _bg ctrlAddEventHandler ["MouseEnter",{ + _activeControl = uiNamespace getVariable ["EPOCH_active_button_control", controlNull]; + if !(isNull _activeControl) then { + _activeControl ctrlShow false; + }; + }]; + + _buffer = _display ctrlCreate ["RscButtonTextOnly", 12345,_control]; + _buffer ctrlSetPosition [0.02,0.02,0.25,0.0625 + (0.0625 * (count _button_texts))]; + _buffer ctrlAddEventHandler ["ButtonClick",{ + _activeControl = uiNamespace getVariable ["EPOCH_active_button_control", controlNull]; + if !(isNull _activeControl) then { + _activeControl ctrlShow false; + }; + }]; + + _buffer ctrlCommit 0; + + _y2d = 0.06; + _btn_arr = []; + _start_idc = 12346; + { + _x params [["_btn_text","EXAMINE"],["_btn_code","[] call EPOCH_consumeItem;"]]; + _button_gen = _display ctrlCreate ["RscButtonMenu", _start_idc,_control]; + _start_idc = _start_idc + 1; + _button_gen ctrlSetPosition [0.06,_y2d,0.20,0.06]; + _button_gen ctrlSetText _btn_text; + _button_gen ctrlCommit 0; + _button_gen ctrlSetEventHandler ["ButtonClick",_btn_code + "(uiNamespace getVariable [""EPOCH_active_button_control"", controlNull]) ctrlShow false;"]; + _y2d = _y2d + 0.0625; + _btn_arr pushBack _button_gen; + } forEach _button_texts; + + reverse _btn_arr; + uiNamespace setVariable ["EPOCH_active_controls", ([_control,_bg,_buffer] + _btn_arr) ]; + // uiNamespace setVariable ["EPOCH_active_buttons", _btn_arr ]; + {ctrlSetFocus _x} forEach (uiNamespace getVariable ["EPOCH_active_controls", []]); +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_itemInteractDblClick.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_itemInteractDblClick.sqf new file mode 100644 index 0000000..f38bf1d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_itemInteractDblClick.sqf @@ -0,0 +1,25 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Raimonds Virtoss + + Description: + Epoch Item Interact when double clicked + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_itemInteractDblClick.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_config","_data"]; +//[[[end]]] +_this call EPOCH_selectInventoryItem; +_data = EPOCH_InteractedItem select 1; +_config = 'CfgCrafting' call EPOCH_returnConfig; +if (isClass (_config >> _data)) then { + (EPOCH_InteractedItem select 0) call EPOCH_crafting_load; +} else { + //TODO: eat, drink, build ... etc +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_itemTypeSlot.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_itemTypeSlot.sqf new file mode 100644 index 0000000..22d2317 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_itemTypeSlot.sqf @@ -0,0 +1,64 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: Determines which gear slot item goes into + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_itemTypeSlot.sqf + + Usage: _item call epoch_itemTypeSlot; + + Returns: [INT] + 0 - unknown + 1 - Epoch items + 2 - Magazines/Ammo + 3 - Primary slot + 4 - Secondary slot + 5 - Handgun slot + 6 - Weapon attachments + 7 - assigned Items (use assignItem) + 8 - Headgear (assignItem works) + 9 - NVGoggles (assignItem works) + 10 - Binocular (assignItem doesn't work) + 11 - goggles (assignItem works) + 12 - Mines + 13 - Vests + 14 - Uniforms + 15 - Backpack + 16 - smoke shells + 17 - Grenades + 17 - Unsure about these, modify script as required, but don't change existing structure +*/ +private ["_item","_cat","_type"]; +params [["_item","",[""]]]; +if (_item == "") exitWith {false}; + +(_item call BIS_fnc_itemType) params ["_cat","_type"]; //For missing types go to https://community.bistudio.com/wiki/BIS_fnc_itemType + +if (_type == "UnknownMagazine") exitWith {1}; +if (_type in ["Bullet","ShotgunShell","Flare"]) exitWith {2}; //Ammo +if (_type in ["MachineGun","AssaultRifle","SniperRifle","Rifle","SubmachineGun"]) exitWith {3}; //Primary Epoch +if (_type == "Throw") exitWith {4}; //secondary epoch +if (_type == "Handgun") exitWith {5}; //handgun epoch +if (_type in ["AccessoryMuzzle","AccessoryPointer","AccessorySights","AccessoryBipod"]) exitWith {6}; //accessories +if (_type in ["Compass","GPS","Map","Radio","Watch"]) exitWith {7}; //assignItem works +if (_type == "Headgear") exitWith {8}; //assignItem works +if (_type == "NVGoggles") exitWith {9}; //assignItem works +if (_type == "Binocular") exitWith {10}; //assignItem doesn't work +if (_type == "Glasses") exitWith {11}; //assignItem doesn't work +if (_cat == "Mine") exitWith {12}; +if (_type == "Vest") exitWith {13}; +if (_type == "Uniform") exitWith {14}; +if (_type == "Backpack") exitWith {15}; +if (_type in ["Shell","SmokeShell"]) exitWith {16}; //Smoke shells for GL +if (_type == "Grenade") exitWith {17}; + +//unsure +if (_type in ["Magazine","Shotgun","FirstAidKit","LaserDesignator","Medikit","MineDetector","Toolkit","VehicleWeapon","Unknown","UnknownEquipment","UnknownWeapon"]) exitWith {18}; + +0 \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf new file mode 100644 index 0000000..4de81f1 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf @@ -0,0 +1,53 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Gear armor max armor calculation with support for A3 1.54+. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf + + Example: + call EPOCH_maxArmorInit; + + Parameter(s): + None + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_curArmor","_maxArmorHeadgear","_maxArmorUniform","_maxArmorVest"]; +//[[[end]]] +_maxArmorUniform = 0; +{ + _curArmor = ([getNumber(_x >> 'passThrough'),getNumber(_x >> 'armor')] call EPOCH_factorArmor) + getNumber(_x >> 'armorStructural'); + {_curArmor = _curArmor + ([getNumber(_x >> 'passThrough'),getNumber(_x >> 'armor')] call EPOCH_factorArmor)} forEach ("isClass _x" configclasses (_x >> "HitPoints")); + if (_curArmor > _maxArmorUniform) then { + _maxArmorUniform = _curArmor; + }; +} forEach (("isclass _x && getnumber (_x >> 'scope') == 2 && getText (_x >> 'uniformClass') != ''") configclasses (configfile >> "CfgVehicles")); + +_maxArmorVest = 0; +{ + _curArmor = ([getNumber(_x >> 'itemInfo' >> 'passThrough'),getNumber(_x >> 'itemInfo' >> 'armor')] call EPOCH_factorArmor); + {_curArmor = _curArmor + ([getNumber(_x >> 'passThrough'),getNumber(_x >> 'armor')] call EPOCH_factorArmor)} forEach ("isClass _x" configclasses (_x >> "ItemInfo" >> "HitpointsProtectionInfo")); + if (_curArmor > _maxArmorVest) then { + _maxArmorVest = _curArmor; + }; +} forEach (("isclass _x && getnumber (_x >> 'scope') == 2 && getnumber (_x >> 'itemInfo' >> 'type') in [701]") configclasses (configfile >> "cfgweapons")); + +_maxArmorHeadgear = 0; +{ + _curArmor = ([getNumber(_x >> 'itemInfo' >> 'passThrough'),getNumber(_x >> 'itemInfo' >> 'armor')] call EPOCH_factorArmor); + {_curArmor = _curArmor + ([getNumber(_x >> 'passThrough'),getNumber(_x >> 'armor')] call EPOCH_factorArmor)} forEach ("isClass _x" configclasses (_x >> "ItemInfo" >> "HitpointsProtectionInfo")); + if (_curArmor > _maxArmorHeadgear) then { + _maxArmorHeadgear = _curArmor; + }; +} forEach (("isclass _x && getnumber (_x >> 'scope') == 2 && getnumber (_x >> 'itemInfo' >> 'type') in [605]") configclasses (configfile >> "cfgweapons")); +missionNamespace setVariable ["EPOCH_MAX_ARMOR",[_maxArmorUniform,_maxArmorVest,_maxArmorHeadgear,(_maxArmorUniform + _maxArmorVest + _maxArmorHeadgear)]]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_refeshUI.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_refeshUI.sqf new file mode 100644 index 0000000..9d20d14 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_refeshUI.sqf @@ -0,0 +1,90 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Gear armor stats UI refresh code + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf + + Example: + 0 call EPOCH_refeshUI; + + Parameter(s): + None + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_bar","_bar_compare","_finalArmor","_headgearArmor","_newArmor","_selectedClass","_selectedItem","_totalArmor","_totalArmorMax","_totalArmorUI","_uniformArmor","_vestArmor"]; +//[[[end]]] +disableSerialization; +if (!isNull findDisplay 602) then { + + _selectedClass = ""; + if !(EPOCH_InteractedItem isEqualTo []) then { + _selectedClass = EPOCH_InteractedItem select 1; + }; + + if (isNil "EPOCH_MAX_ARMOR") then { + call EPOCH_maxArmorInit; + }; + + _totalArmor = 0; + _totalArmorMax = EPOCH_MAX_ARMOR select 3; + + _newArmor = 0; + + _selectedItem = getnumber (configFile >> "CfgWeapons" >> _selectedClass >> "ItemInfo" >> "type"); + + _bar = uiNameSpace getVariable "RscCustomProgressUniform"; + _uniformArmor = (uniform player) call EPOCH_uniformArmorCalc; + _totalArmor = _totalArmor + _uniformArmor; + _finalArmor = linearConversion [0,EPOCH_MAX_ARMOR select 0,_uniformArmor,0.01,1,true]; + _bar progressSetPosition _finalArmor; + + if (_selectedItem == 801) then { + _newArmor = _newArmor + (_selectedClass call EPOCH_uniformArmorCalc); + } else { + _newArmor = _newArmor + _uniformArmor; + }; + + _bar = uiNameSpace getVariable "RscCustomProgressVest"; + _vestArmor = (vest player) call EPOCH_gearArmorCalc; + _totalArmor = _totalArmor + _vestArmor; + _finalArmor = linearConversion [0,EPOCH_MAX_ARMOR select 1,_vestArmor,0.01,1,true]; + _bar progressSetPosition _finalArmor; + + if (_selectedItem == 701) then { + _newArmor = _newArmor + (_selectedClass call EPOCH_gearArmorCalc); + } else { + _newArmor = _newArmor + _vestArmor; + }; + + _bar = uiNameSpace getVariable "RscCustomProgressHeadgear"; + _headgearArmor = (headgear player) call EPOCH_gearArmorCalc; + _totalArmor = _totalArmor + _headgearArmor; + _finalArmor = linearConversion [0,EPOCH_MAX_ARMOR select 2,_headgearArmor,0.01,1,true]; + _bar progressSetPosition _finalArmor; + + if (_selectedItem == 605) then { + _newArmor = _newArmor + (_selectedClass call EPOCH_gearArmorCalc); + } else { + _newArmor = _newArmor + _headgearArmor; + }; + + _totalArmorUI = uiNameSpace getVariable "RscCustomProgressTotal"; + _bar = _totalArmorUI select 0; + _finalArmor = linearConversion [0,_totalArmorMax,_totalArmor,0.01,1,true]; + _bar progressSetPosition _finalArmor; + + _bar_compare = _totalArmorUI select 1; + _finalArmor = linearConversion [0,_totalArmorMax,_newArmor,0.01,1,true]; + _bar_compare progressSetPosition _finalArmor; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf new file mode 100644 index 0000000..e7c63db --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf @@ -0,0 +1,57 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + workaround for weapons not returning class in the inventory listboxes + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf + + Example: + [_control,_index] call EPOCH_selectInventoryItem; + + Parameter(s): + _this select 0: CONTROL - control + _this select 1: NUMBER - listbox index + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_container","_craftingArray","_craftingArrayNames","_data","_idc","_index","_pic","_text","_val","_weaponsAndItems"]; +//[[[end]]] +params ["_control","_index"]; +EPOCH_InteractedItem = []; + +if (_index isEqualType []) then { + _index = (_index select 0) select 1; +}; + +_idc = ctrlIDC _control; +_text = _control lbText _index; +_data = _control lbData _index; +_pic = _control lbPicture _index; +_val = _control lbValue _index; + +_craftingArray = []; +_craftingArrayNames = []; + +// weapons and items do not return a class so a workaround is used to find the class +if (_data == "") then { + _container = switch (_idc) do { + case 633: { uniformContainer player }; + case 638: { vestContainer player }; + case 632: { if (isnull EPOCH_secondaryContainer) then {EPOCH_targetContainer} else {EPOCH_secondaryContainer} }; + case 640: { EPOCH_targetContainer }; + default { backpackContainer player }; + }; + _weaponsAndItems = ((getWeaponCargo _container) select 0); + _weaponsAndItems append ((getItemCargo _container) select 0); + _data = _weaponsAndItems param [_val,""]; +}; +EPOCH_InteractedItem = [_text,_data,_pic]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf new file mode 100644 index 0000000..6a23d26 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf @@ -0,0 +1,38 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Uniform Gear armor calculation + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf + + Example: + _newArmor = _selectedClass call EPOCH_uniformArmorCalc; + + Parameter(s): + _this: STRING - CfgWeapons class name of uniform + + Returns: + NUMBER +*/ +//[[[cog import generate_private_arrays ]]] +private ["_newArmor","_uniformArmor","_uniformArmorStructural","_uniformClass","_uniformConfig"]; +//[[[end]]] + +_uniformClass = _this; +if (isClass (configFile >> "CfgWeapons" >> _this)) then { + _uniformClass = gettext (configFile >> "CfgWeapons" >> _this >> "ItemInfo" >> "uniformclass"); +}; +_uniformConfig = (configfile >> "cfgvehicles" >> _uniformClass); +_uniformArmor = getNumber(_uniformConfig >> "armor"); +_uniformArmorStructural = getNumber(_uniformConfig >> "armorStructural"); +{ + _uniformArmor = _uniformArmorStructural + ([getNumber(_x >> 'passThrough'),getNumber(_x >> 'armor')] call EPOCH_factorArmor) +} forEach ("isClass _x" configclasses (_uniformConfig >> "HitPoints")); +_uniformArmor diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_usedItemRepack.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_usedItemRepack.sqf new file mode 100644 index 0000000..7a4b2b0 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/inventory/EPOCH_usedItemRepack.sqf @@ -0,0 +1,66 @@ +/* + Author: DirtySanchez - ported from DonkeyPunch eXpoch http://DonkeyPunch.INFO + + Contributors: + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_usedItemRepack.sqf + + Description: + Allows adjustments to mag with least ammo. + Can be used server and client side as addMagazine is a global command + + Local Usage: + [player,'lighter_epoch',-1] call EPOCH_usedItemRepack; + + Global Usage: + [_playerObj,'lighter_epoch',-1] call EPOCH_usedItemRepack; +*/ +private["_msg","_itemMags","_displayName","_itemAmmoType","_mags","_ammoType","_total","_maxAmmo","_wholeMags","_remainder","_index","_usedItemArray"]; +params[ + ["_player",objNull], + ["_item",""], + ["_chg",0] +]; + +if(isNull _player) exitWith {diag_log "[EPOCHDebug] EPOCH_usedItemRepack - player isNull"}; + +if(_item isEqualTo "") exitWith {diag_log "[EPOCHDebug] EPOCH_usedItemRepack - classname is empty string"}; + +if!(isClass(configFile >> "CfgMagazines" >> _item)) exitWith {diag_log format["[EPOCHDebug] EPOCH_usedItemRepack - Classname does not exist",_item]}; + +_msg = ""; +_itemMags = []; +_displayName = getText(configFile >> "CfgMagazines" >> _item >> "displayName"); + +//get all mags of same classname and ammo type +_mags = magazinesAmmo _player; +{ + _x params ["_className","_count"]; + if(_className isEqualTo _item)then{ + _itemMags pushBack _x; + }; +}forEach _mags; + +// if more than 1 sort them by ammo count +if(count _itemMags > 1)then{ + _itemMags = [_itemMags,[],{_x select 1},"ASCEND"] call BIS_fnc_sortBy; +}; + +// adjust the item +if!(_chg isEqualTo 0)then{ + _index = ((count _itemMags) - 1); + _usedItemArray = _itemMags deleteat _index; + _usedItemArray params ["_mag","_count"]; + _itemMags pushBack [_mag, (_count + _chg)]; + _player removeMagazines _mag; + { + if ((_x select 1) > 0) then { // Do not add back an empty mag, as it can not be handled by any scripts and is useless + _x call EPOCH_fnc_addMagazineOverflow; + }; + }forEach _itemMags; + [format["You have used your %1", _displayName],5,[[0,0,0,0.2],[1,1,1,1]]] call Epoch_message_stack; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_mission_accept.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_mission_accept.sqf new file mode 100644 index 0000000..851ecd3 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_mission_accept.sqf @@ -0,0 +1,83 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark - EpochMod.com + + Description: + Handle mission select from trader menu + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_epochmissionsconfig","_inGameTasksconfig","_menuCondition","_missionAllowed","_missionClasses","_missionIndex","_missionTasks","_missionname","_msg","_newtask","_nexttask","_nrEnts","_selectedMission","_simpleTask","_taskCall","_taskSQF","_taskname","_trader"]; +//[[[end]]] +_missionIndex = lbCurSel 1500; +_missionAllowed = true; +_missionClasses = getArray(getMissionConfig "EpochMissionList" >> "traderMissionClasses"); + +_nrEnts = EPOCH_Traders select {alive _x && player distance _x < 20}; +_trader = objNull; +{ + if ((_x getVariable ["AI_SLOT", -1]) > -1) exitWith { + _trader = _x; + }; +}forEach _nrEnts; + +if !(isNull _trader) then { + _selectedMission = _missionClasses select _missionIndex; + _epochmissionsconfig = getMissionConfig "epochMissions"; + _menuCondition = getText (_epochmissionsconfig >> _selectedMission >> "missionDeny"); + if!(_menuCondition == "")then{ + if(call compile _menuCondition) then { + _missionAllowed = false; + }; + }; + if(_missionAllowed)then{ + _missionTasks = getArray (_epochmissionsconfig >> _selectedMission >> "tasksList"); + _missionname = getText (_epochmissionsconfig >> _selectedMission >> "missionName"); + _inGameTasksconfig = getMissionConfig "inGameTasks"; + _taskname = _missionTasks select 0; + _simpleTask = getNumber (_inGameTasksconfig >> _taskname >> "simpleTask"); + + if (_selectedMission isequalto "debugResetMission") exitwith { + EPOCH_ResetTraderMission = true; + }; + if !(EPOCH_ActiveTraderMission isequalto []) exitwith { + EPOCH_ActiveTraderMission params ['','',['_missionname','ERROR']]; + _msg = format ['You are already running %1. Finish or cancel it first',_missionname]; + [_msg, 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; + }; + + if (_simpleTask > 0) then { //Simple Task + _taskSQF = getText ( _inGameTasksconfig >> _taskName >> "initsqf"); + if !(_taskSQF isequalto '') then { + call compile format ["[_taskName,player,_unit,_taskItem] execVM ""%1""",_taskSQF]; + }; + _taskCall = getText ( _inGameTasksconfig >> _taskName >> "initcall"); + if !(_taskCall isequalto '') then { + call compile _taskCall + }; + _nexttask = getArray ( _inGameTasksconfig >> _taskName >> "nextTask"); + if !(_nexttask isequalto []) then { + _newtask = selectrandom _nexttask; + EPOCH_mission_startTime = diag_ticktime; + EPOCH_ActiveTraderMission = [_inGameTasksconfig,_newtask,_missionname]; + }; + } + else { + EPOCH_mission_startTime = diag_ticktime; + EPOCH_ActiveTraderMission = [_inGameTasksconfig,_taskname,_missionname]; + }; + ["TraderMissions",1,true] call EPOCH_client_updatePlayerStat; + } + else { + [format["Mission Not Allowed !",_menuCondition], 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; //Not formatting, is this intended? + }; +} +else { + ["Trader Lost. Goodbye.", 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf new file mode 100644 index 0000000..c8f44a5 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf @@ -0,0 +1,59 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark - EpochMod.com + + Description: + Mission: cage a sapper + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cage","_cage2","_cagePos","_sapper","_sound","_sounds","_startCage"]; +//[[[end]]] +params ["_sapper","_trader"]; + +_cagePos = (getPosATL _trader) findEmptyPosition [1,50,"Land_Cages_F"]; +_cage = createVehicle ["Land_Cages_F", _cagePos, [], 2, "CAN_COLLIDE"] ; +_cage setVectorDirAndUp [[0,0,1],[0,1,0]]; +_cage2 = createVehicle ["Land_Cages_F", _cagePos, [], 2, "CAN_COLLIDE"] ; +_cage2 setVectorDirAndUp [[0,0,1],[0,1,0]]; +_cage attachTo [_cage2,[0,1.3,0]]; + +// send to server +[_cage,_cage2] remoteExec ["EPOCH_localCleanup",2]; + +_startCage = diag_tickTime; +while {_sapper distance _cage > 3 || diag_tickTime - _startCage < 12} do { + _sapper moveTo _cagePos; + uiSleep 3; +}; + +deleteVehicle _sapper; +_sapper = createAgent ["Epoch_Sapper_F", getPos _cage2, [], 0, "FORM"]; +_sapper setUnitPos "UP"; +_sapper attachTo [_cage2,[0.4,-0.6,-0.4]]; +_sapper setVectorDirAndUp [[0,0,1],[0,1,0]]; +_sapper forcespeed 0; + +if !(isNull _sapper) then { + // send to server + [_sapper] remoteExec ["EPOCH_localCleanup",2]; +}; + +[player,Epoch_personalToken,objNull,false,25] remoteExec ["EPOCH_server_fillContainer",2]; + + +while {player distance _sapper < 100 && alive player} do { + if ((random 100) < 0.5) then { + _sounds = ["sapper_groan0","sapper_groan1","sapper_groan2"]; + _sound = selectRandom _sounds; + _sapper say3D _sound; + [player, _sapper,_sound, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2]; + }; + uiSleep 0.5; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf new file mode 100644 index 0000000..22c8aeb --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf @@ -0,0 +1,15 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Mission accept + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf +*/ +axeMissionObj = _this; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_spawn_construct.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_spawn_construct.sqf new file mode 100644 index 0000000..5ba72d0 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_spawn_construct.sqf @@ -0,0 +1,17 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + TBA construct (unused) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/missions/EPOCH_spawn_construct.sqf +*/ +private _unit = createAgent ["Construct_F", getPos player, [], 520, "FORM"]; +{_unit disableAI _x}forEach["TARGET","AUTOTARGET","FSM"]; +[_unit] execFSM "\x\addons\a3_epoch_code\System\Construct_Brain.fsm"; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_spawn_looters.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_spawn_looters.sqf new file mode 100644 index 0000000..ede68e2 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/EPOCH_spawn_looters.sqf @@ -0,0 +1,27 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Spawn looters (unused) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/missions/EPOCH_spawn_looters.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_unit"]; +//[[[end]]] +for "_i" from 0 to 4 step 1 do { + _unit = createGroup [RESISTANCE, true] createUnit ["Epoch_Female_F", getPos player, [], 400, "CAN_COLLIDE"]; + _unit addBackPack "B_FieldPack_blk"; + _unit addWeapon "Hatchet"; + _unit addMagazine "hatchet_swing"; + {_unit disableAI _x}count["TARGET","AUTOTARGET","FSM"]; + _unit addEventHandler ["FiredNear", "_this select 0 setVariable [""firedNear"",_this select 2]"]; + _unit addEventHandler ["Hit", "_this select 0 setVariable [""looterHit"",true];"]; //setDamage on the client && on Epoch_Female_F !? Not required ! Part of keeping health up on antagonists without custom armour ! + [_unit] execFSM "\x\addons\a3_epoch_code\System\Looter_Brain.fsm"; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/mission_spawnUAV.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/mission_spawnUAV.sqf new file mode 100644 index 0000000..fe50013 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/mission_spawnUAV.sqf @@ -0,0 +1,12 @@ +params [["_trgt",player],"_targetPos","_unit","_grp","_driver"]; +_targetPos = getPosATL _trgt; +_targetPos = [_targetPos, 600, 1200, 5, 0, 400, 0] call BIS_fnc_findSafePos; +_targetPos set[2, 600]; +_unit = createVehicle["I_UAV_01_F", _targetPos, [], 0, "FLY"]; +_unit disableTIEquipment true; +addToRemainsCollector[_unit]; +_unit flyInHeight 600; +_grp = createGroup [RESISTANCE, true]; +_driver = _grp createUnit["I_UAV_AI", position _unit, [], 0, "CAN_COLLIDE"]; +_driver moveInAny _unit; +[_unit, _trgt] execFSM "\x\addons\a3_epoch_code\System\Copter_brain.fsm"; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDebug_resetMissions.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDebug_resetMissions.sqf new file mode 100644 index 0000000..7111a52 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDebug_resetMissions.sqf @@ -0,0 +1,2 @@ +missionNamespace setVariable ["EPOCH_playerMissionArray",[]]; +["Missions Reset - Re-open Trader Menu.", 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_name.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_name.sqf new file mode 100644 index 0000000..430a8aa --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_name.sqf @@ -0,0 +1,18 @@ +//[[[cog import generate_private_arrays ]]] +private ["_nameArr","_newName","_nrMn","_responseArr","_trader","_trdrCurrName"]; +//[[[end]]] +_trader = objNull; +_nrMn = nearestObjects [player, ["C_Man_1"], 16]; +_trader = _nrMn select 0; +if(_trader getVariable ["traderName",""]== "")then{ +_nameArr = ["Aaron Clark","Kenneth Bente","Damian Clark","Raimonds Virtoss","Richie","Paden Sturtevant","Darren Harrison","Dan","Darren Harrison","Niklas Wagner","Andrew Gregory","Isaac Gregory","Florian Kinder","Denis Erygin","Alan Denham"]; +_trdrCurrName = name _trader; +if((random 100) < 6 && !(_trdrCurrName in _nameArr))then{ +_newName = selectRandom _nameArr; +_trader setName _newName; +_trader setVariable ["traderName",_newName, true]; +}; + +}; +_responseArr = ["I don't know. You can only be regenerated so many times before the memory starts to go..","You again..! Go bother someone else.",format["There was a time when names mattered, call me %1.",name _trader],"My name..? What does it matter.","Hey buddy you rock up here unannounced and suddenly we're friends ? On your bike if you aren't buying or selling.",format["My name.. I am known as %1",name _trader], format["When names mattered I was called %1",name _trader],"I forget.. At least, I try to forget."]; +[selectRandom _responseArr, 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_nearPlayers.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_nearPlayers.sqf new file mode 100644 index 0000000..7752888 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_nearPlayers.sqf @@ -0,0 +1,14 @@ +//[[[cog import generate_private_arrays ]]] +private ["_plyr","_plyrs","_trdrMsg"]; +//[[[end]]] +_trdrMsg = "Do I look like the local Neighbourhood Watch..? No, I do not !"; +_plyrs = []; +_plyrs = player nearEntities [["Epoch_Man_base_F","Epoch_Female_base_F"], 250]; +if (count _plyrs < 2) then { + _trdrMsg = format["Apart from you %1. %2",name player, selectRandom ["I haven't seen any round these parts for a long while.","It has been very quiet around here,","There is not much to report !"]]; +} else { + _plyrs deleteAt 0; + _plyr = selectRandom _plyrs; + _trdrMsg = format["%2 %1.",name _plyr, selectRandom ["The last person picked up by the UAV was","I did spot someone earlier, their name was","I heard there was somebody new in the area, "]]; +}; +[_trdrMsg, 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_nearVehicles.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_nearVehicles.sqf new file mode 100644 index 0000000..fdb3d13 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_nearVehicles.sqf @@ -0,0 +1,15 @@ +//[[[cog import generate_private_arrays ]]] +private ["_dist","_plyr","_trdrMsg","_veh","_vehs"]; +//[[[end]]] +_trdrMsg = "Hey, there is a garage down the road.. Well, there used to be."; +_vehs = []; +_plyr = player; +_vehs = nearestObjects [_plyr, ["CAR","AIR"], 1000]; +if (count _vehs < 1) then { + _trdrMsg = format["%2 %1.",name _plyr,selectRandom["I haven't seen anything lately, why not buy one","There is nothing around here","The last time the UAV went out it found nothing"]]; +} else { + _veh = _vehs select (floor (random count _vehs)); + _dist = _veh distance _plyr; + _trdrMsg = format["I know of at least one vehicle within %1m of my current location. It looks like a %2.",_dist, typeof _veh]; +}; +[_trdrMsg, 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_news.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_news.sqf new file mode 100644 index 0000000..fb766bb --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_news.sqf @@ -0,0 +1,3 @@ +private _newsArr = ["My dog was shot. That made me sad.","Business has been quiet since word got out that sappers are in the area.","Looters are expecting too much crypto for all the junk they bring in.","What do I look like ? A newspaper vendor. Go Away.","The sun came up again this morning.. That's good news I suppose.","Keep your dog fed with raw or cooked carcasses.","Sappers are known to be good for their pelts. Just don't get too close to one","Some very strange rumours that a Construct was seen in the mountains. Those things are just bedtime stories to scare kids with.","UAVs are a good source of components.","Some say the nearby town is haunted by malevolent spirits.","I hear the military are helping survivors with air drops. Your loot is always welcome here if you find one.","Dogs can help you find pelts and animal carcasses","I heard that a new vehicle has been seen, some kind of board that you stand on. I personally don't believe the rumours."]; + +[selectRandom _newsArr, 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_timePlease.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_timePlease.sqf new file mode 100644 index 0000000..85a5a01 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_timePlease.sqf @@ -0,0 +1,15 @@ +//[[[cog import generate_private_arrays ]]] +private ["_hour","_min"]; +//[[[end]]] +_hour = str(date select 3); +_min = str(date select 4); + +if(count _hour < 2)then{ +_hour = "0" + _hour; +}; + +if(count _min < 2)then{ +_min = "0" + _min; +}; + +[format ["The time is %1:%2.",_hour, _min], 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_triggerAirDrop.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_triggerAirDrop.sqf new file mode 100644 index 0000000..9b622e8 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/missions/tasks/traderDiag_triggerAirDrop.sqf @@ -0,0 +1,6 @@ +if((random 100) < 6)then{ +[] execFSM "\x\addons\a3_epoch_code\System\Event_Air_Drop.fsm"; +["Air Drop Incoming !", 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; +}else{ +["Sorry, None Available!", 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf new file mode 100644 index 0000000..bc14056 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf @@ -0,0 +1,88 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + P2P trade loop + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_array","_cryptoOffer","_index","_isAccepted","_isAcceptedOther","_item","_offerArray","_removeCount","_sizeOut","_tradeCryptoOffer","_tradeOffer"]; +//[[[end]]] + +if (EPOCH_p2ptradeTarget distance player > 8) exitWith{ EPOCH_p2ptradeTarget = ObjNull; }; +if (vehicle player != player || vehicle EPOCH_p2ptradeTarget != EPOCH_p2ptradeTarget) exitWith { EPOCH_p2ptradeTarget = ObjNull; }; +if (!isNull EPOCH_p2ptradeTarget) then { + + _sizeOut = lbSize 1501; + _array = []; + if (_sizeOut > 0) then { + for "_i" from 0 to (_sizeOut - 1) do { + _item = lbData [1501, _i]; + _array pushBack _item; + }; + }; + + _cryptoOffer = parseNumber(ctrlText 1400) min EPOCH_playerCrypto; + _offerArray = [_array, _cryptoOffer]; + + if !(EPOCH_prevOffer isEqualTo _offerArray) then { + player setVariable ["Offer", _offerArray, true]; + EPOCH_prevOffer = _offerArray; + }; + + lbClear 1502; + _tradeOffer = EPOCH_p2ptradeTarget getVariable["Offer", [[],0]]; + { + _index = lbAdd [1502, _x call EPOCH_itemDisplayName]; + lbSetData [1502, _index, _x]; + lbSetPicture [1502, _index, _x call EPOCH_itemPicture]; + } forEach (_tradeOffer select 0); + + _tradeCryptoOffer = (_tradeOffer select 1); + if (_tradeCryptoOffer > 0) then { + _index = lbAdd[1502, format["%1 Crypto", _tradeCryptoOffer]]; + lbSetData[1502, _index, "Crypto"]; + lbSetPicture[1502, _index, "\x\addons\a3_epoch_code\Data\UI\cc_ca.paa"]; + }; + + _isAcceptedOther = EPOCH_p2ptradeTarget getVariable["Accept", false]; + _isAccepted = player getVariable ["Accept",false]; + + if (_isAccepted && _isAcceptedOther && !EPOCH_tradeDone) then { + EPOCH_tradeDone = true; + EPOCH_prevOffer = []; + + _removeCount = 0; + { + if ([_x, "CfgWeapons"] call EPOCH_fnc_isAny) then { + if (_x in items player) then { + player removeItem _x; + _removeCount = _removeCount + 1; + }; + } else { + if (_x in magazines player) then { + player removeMagazine _x; + _removeCount = _removeCount + 1; + }; + }; + }forEach _array; + if (_removeCount == count _array) then { + [player, EPOCH_p2ptradeTarget, _array, _tradeOffer, Epoch_personalToken] remoteExec ["EPOCH_server_makeTrade",2]; + }; + (findDisplay -1900) closeDisplay 1; + }; + + // cancel close menu if men not open on other player + /* + if !(EPOCH_p2ptradeTarget getVariable["TRADE_ACTIVE", objNull] == player) then { + (findDisplay -1900) closeDisplay 1; + }; + */ +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_makep2pTrade.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_makep2pTrade.sqf new file mode 100644 index 0000000..1f59992 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_makep2pTrade.sqf @@ -0,0 +1,2 @@ +// get trade items +player setVariable ["Accept", true, true]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf new file mode 100644 index 0000000..8af5d9e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf @@ -0,0 +1,28 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + P2P trade request + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_distance"]; +//[[[end]]] +params ["_otherPlyr"]; +if (!isNull _otherPlyr) then { + _distance = player distance _otherPlyr; + if (_distance < 10) then { + if (vehicle player == player && vehicle _otherPlyr == _otherPlyr) then { + _this remoteExec ["EPOCH_server_tradeRequest",2]; + EPOCH_p2ptradeTarget = _otherPlyr; + call EPOCH_startTrade; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf new file mode 100644 index 0000000..3212db0 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf @@ -0,0 +1,46 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + P2P trade start + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_index"]; +//[[[end]]] +closeDialog 0; +if !(createdialog "Trade") exitWith {}; + +9992 cutRsc["EpochGameUI2", "PLAIN", 2, false]; +((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto]; + +{lbAdd[2100,_x]} forEach ["All","Magazines","Items"]; +// {lbAdd[2100, _x]} forEach["All", "Weapons", "Magazines", "Items"]; +{ + if (getNumber(configfile >> "CfgMagazines" >> _x >> "count") == 1) then { + _index = lbAdd [1500, _x call EPOCH_itemDisplayName]; + lbSetData [1500, _index, _x]; + lbSetPicture [1500, _index, _x call EPOCH_itemPicture]; + }; +}forEach magazines player; +/* +{ + _index = lbAdd [1500, _x call EPOCH_itemDisplayName]; + lbSetData [1500, _index, _x]; + lbSetPicture [1500, _index, _x call EPOCH_itemPicture]; +}forEach weapons player; +*/ +{ + _index = lbAdd [1500, _x call EPOCH_itemDisplayName]; + lbSetData [1500, _index, _x]; + lbSetPicture [1500, _index, _x call EPOCH_itemPicture]; +}forEach items player; +player setVariable ["Accept", false, true]; +EPOCH_tradeDone = false; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf new file mode 100644 index 0000000..bdb087a --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf @@ -0,0 +1,21 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + P2P trade request received + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf +*/ +if !(isNull _this) then { + // ignore request if either player is in a vehicle + if (vehicle player == player && vehicle _this == _this) then { + [format ["Trade request received, Hold (%1)",EPOCH_keysAction call BIS_fnc_keyCode], 5] call Epoch_message; + EPOCH_pendingP2ptradeTarget = _this; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Check.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Check.sqf new file mode 100644 index 0000000..6ea651a --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Check.sqf @@ -0,0 +1,60 @@ +/* + Author: [Ignatz] He-Man + + Contributors: Aaron Clark - EpochMod.com + + Description: + Check if in Service Point for A3 Epoch + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/servicepoint/EPOCH_SP_Check.sqf +*/ + +//[[[cog import generate_private_arrays ]]] +private ["_ServicePointClasses","_config","_inSP","_nearClasses","_servicepointDist","_servicepoints","_vehicle"]; +//[[[end]]] + +_vehicle = vehicle player; +if (_vehicle == player) exitwith {false}; +// if !(local _vehicle) exitwith {false}; +if (speed _vehicle > 2 || speed _vehicle < -2) exitwith {false}; +if (((getpos _vehicle) select 2) > 1) exitwith {false}; +if (!(_vehicle iskindof 'ship') && (((getposasl _vehicle) select 2) < 1)) exitwith {false}; + +_config = 'CfgServicePoint' call EPOCH_returnConfig; +_servicepoints = getArray (_config >> worldname >> 'ServicePoints'); +_servicepointDist = ["CfgServicePoint", "ServicePointDist", 40] call EPOCH_fnc_returnConfigEntryV2; +_ServicePointClasses = ["CfgServicePoint", "ServicePointClasses", []] call EPOCH_fnc_returnConfigEntryV2; + +if (_servicepoints isequalto [] && _ServicePointClasses isequalto []) exitwith {false}; + +_inSP = false; +{ + if (count _x > 3) then { + _x params ["_pos","_dist","_vehtypes"]; + { + if (_vehicle iskindof _x && _vehicle distance _pos < _dist) exitwith { + _inSP = true; + }; + } foreach _vehtypes; + } + else { + if (_vehicle distance _x < _servicepointDist) then { + _inSP = true; + }; + }; + if (_inSP) exitwith {}; +} foreach _servicepoints; + +if (!_inSP) then { + if !(_ServicePointClasses isequalto []) then { + _nearClasses = nearestobjects [_vehicle,_ServicePointClasses,_servicepointDist]; + if !(_nearClasses isequalto []) then { + _inSP = true; + }; + }; +}; +_inSP diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Rearm.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Rearm.sqf new file mode 100644 index 0000000..be6c65f --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Rearm.sqf @@ -0,0 +1,44 @@ +/* + Author: [Ignatz] He-Man + + Contributors: Aaron Clark - EpochMod.com + + Description: + Rearm Vehicles for A3 Epoch + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/servicepoint/EPOCH_SP_Rearm.sqf +*/ + +//[[[cog import generate_private_arrays ]]] +private ["_line","_magname","_vehName","_vehtype"]; +//[[[end]]] +params ['_vehicle','_ammotype','_turret','_reloagmags','_ammocount','_costs']; + +//if (!local _vehicle) exitWith { +if !(_vehicle turretLocal _turret) exitwith { + _line = 'Rearm denied - Go in as driver first!'; + [_line,5] call Epoch_message; +}; +_vehtype = typeof _vehicle; +_vehName = getText(configFile >> 'cfgVehicles' >> _vehtype >> 'displayName'); +if (EPOCH_playerCrypto < _costs) exitWith { + _line = format ['You need %1 Crypto to Rearm %2', _costs,_vehName]; + [_line,5] call Epoch_message; +}; +if(_costs > 0)then{ + [player,(_costs*-1),Epoch_personalToken] remoteexec ['epoch_server_paycrypto',2]; +}; +_vehicle removeMagazinesTurret [_ammotype,_turret]; +for '_i' from 1 to _reloagmags do { + _vehicle addMagazineTurret [_ammotype, _turret, _ammocount]; +}; +_magname = getText (configFile >> 'CfgMagazines' >> _ammotype >> 'displayName'); +if (_magname isequalto '') then { + _magname = _ammotype; +}; +_line = format ['%1 rearmed with %2', _vehName, _magname]; +[_line,5] call Epoch_message; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Refuel.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Refuel.sqf new file mode 100644 index 0000000..e6b5e4c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Refuel.sqf @@ -0,0 +1,45 @@ +/* + Author: [Ignatz] He-Man + + Contributors: Aaron Clark - EpochMod.com + + Description: + Refuel Vehicles for A3 Epoch + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/servicepoint/EPOCH_SP_Refuel.sqf +*/ + +private ['_vehtype','_vehName']; +params [['_vehicle',objnull],['_args',[]]]; +_args params [['_costs',0],['_updateInterval',1],['_amount',0.1]]; + +if (!local _vehicle) exitWith { + _line = 'Refuel denied - Go in as driver first!'; + [_line,5] call Epoch_message; +}; +_vehtype = typeof _vehicle; +_vehName = getText(configFile >> 'cfgVehicles' >> _vehtype >> 'displayName'); +if (EPOCH_playerCrypto < _costs) exitWith { + _line = format ['You need %1 Crypto to Refuel %2', _costs,_vehName]; + [_line,5] call Epoch_message; +}; +if(_costs > 0)then{ + [player,(_costs*-1),Epoch_personalToken] remoteexec ['epoch_server_paycrypto',2]; +}; +_vehicle engineOn false; +while {(vehicle player == _vehicle) && (local _vehicle) && (alive player)} do { + if (speed _vehicle > 2 || speed _vehicle < -2 ) exitWith { + _line = format ['Refueling of %1 stopped', _vehName]; + [_line,5] call Epoch_message; + }; + _vehicle setFuel ((Fuel _vehicle)+_amount); + if (Fuel _vehicle > 0.99) exitWith { + _line = format ['%1 Refueled', _vehName]; + [_line,5] call Epoch_message; + }; + uisleep _updateInterval; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Repair.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Repair.sqf new file mode 100644 index 0000000..3cad657 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Repair.sqf @@ -0,0 +1,80 @@ +/* + Author: [Ignatz] He-Man + + Contributors: Aaron Clark - EpochMod.com + + Description: + Repair Vehicles for A3 Epoch + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/servicepoint/EPOCH_SP_Repair.sqf +*/ + +//[[[cog import generate_private_arrays ]]] +private ["_PreventRepairs","_allHitPointsDamage","_allRepaired","_line","_partName","_pos","_repaired","_vehName","_vehtype"]; +//[[[end]]] +params [['_vehicle',objnull],['_args',[]] ]; +_args params [['_costs',0],['_updateInterval',1.2]]; + +if (!local _vehicle) exitWith { + _line = 'Repair denied - Go in as driver first!'; + [_line,5] call Epoch_message; +}; +_vehtype = typeOf _vehicle; +_vehName = getText(configFile >> 'cfgVehicles' >> _vehtype >> 'displayName'); +if (EPOCH_playerCrypto < _costs) exitWith { + _line = format ['You need %1 Crypto to Repair %2', _costs,_vehName]; + [_line,5] call Epoch_message; +}; +if(_costs > 0)then{ + [player,(_costs*-1),Epoch_personalToken] remoteexec ['epoch_server_paycrypto',2]; +}; +_vehicle engineOn false; +_repaired = []; +_allRepaired = true; +_allHitPointsDamage = getAllHitPointsDamage _vehicle; +_PreventRepairs = ["CfgServicePoint", "PreventRepairs", []] call EPOCH_fnc_returnConfigEntryV2; +{ + if ((vehicle player != _vehicle) || (!local _vehicle) || speed _vehicle < -2 || speed _vehicle > 2) exitWith { + _allRepaired = false; + _line = format ['Repairing of %1 stopped', _vehName]; + [_line,5] call Epoch_message; + }; + _HitPointName = _x; + if (!(_HitPointName in _repaired) && !(_HitPointName isequalto "") && (_allHitPointsDamage select 2 select _foreachindex) > 0) then { + _partName = toarray _x; + _partName set [0,20]; + _partName set [1,45]; + _partName set [2,20]; + _partName = toString _partName; + if (({_HitPointName == (_x select 0) && (_vehicle getHitPointDamage _HitPointName) >= (_x select 1)} count _PreventRepairs) > 0) then { + _line = format ['Can not Repair full damaged %1', _partName]; + [_line,5] call Epoch_message; + _allRepaired = false; + } + else { + _vehicle setHitPointDamage [_HitPointName,0]; + _line = format ['Repairing%1 ...', _partName]; + [_line,5] call Epoch_message; + }; + _repaired pushback _HitPointName; + uisleep _updateInterval; + }; +} foreach (_allHitPointsDamage select 0); +if (_allRepaired) then { + if ((damage _vehicle) > 0 || {_x > 0} count ((getallhitpointsdamage _vehicle) select 2) > 0) then { + [_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + }; + _pos = getposatl _vehicle; + _pos set [2,(_pos select 2)+0.25]; + _vehicle setposatl _pos; + _line = format ['%1 full Repaired', _vehName]; + [_line,5] call Epoch_message; +} +else { + _line = format ['%1 not full Repaired', _vehName]; + [_line,5] call Epoch_message; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Start.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Start.sqf new file mode 100644 index 0000000..62648d2 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/servicepoint/EPOCH_SP_Start.sqf @@ -0,0 +1,113 @@ +/* + Author: [Ignatz] He-Man + + Contributors: Aaron Clark - EpochMod.com + + Description: + Service Point StartScript for A3 Epoch + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/servicepoint/EPOCH_SP_Start.sqf +*/ + +//[[[cog import generate_private_arrays ]]] +private ["_Ignatz_SP_Array","_AmmoConfig","_VehiclesWithAmmo","_VehicleAmmo","_actionName","_actionTitle","_ammocount","_ammotype","_cost","_costs","_costsFree","_costsText","_fnc_actionTitle","_fnc_getCosts","_magname","_maxammototal","_maxmags","_missingammo","_ownedcompletemags","_refuel_amount","_refuel_costs","_refuel_updateInterval","_reloagmags","_repairTime","_repair_costs","_totalammocount","_turret","_typeName","_vehicle"]; +//[[[end]]] +Ignatz_Refuel = nil; +Ignatz_Repair = nil; +Ignatz_Rearm0 = nil; +Ignatz_Rearm1 = nil; +Ignatz_Rearm2 = nil; +Ignatz_Rearm3 = nil; + +params ["_myturret"]; + +_vehicle = vehicle player; +_repair_costs = ["CfgServicePoint", "repair_costs", []] call EPOCH_fnc_returnConfigEntryV2; +_refuel_costs = ["CfgServicePoint", "refuel_costs", []] call EPOCH_fnc_returnConfigEntryV2; +_refuel_updateInterval = ["CfgServicePoint", "refuel_updateInterval", 1] call EPOCH_fnc_returnConfigEntryV2; +_refuel_amount = ["CfgServicePoint", "refuel_amount", 0.1] call EPOCH_fnc_returnConfigEntryV2; +_repairTime = ["CfgServicePoint", "repairTime", 1.2] call EPOCH_fnc_returnConfigEntryV2; +_AmmoConfig = (missionconfigfile >> "CfgServicePoint" >> "VehiclesAndAmmo"); +_VehiclesWithAmmo = ("true" configClasses _AmmoConfig) apply {configname _x}; + +_Ignatz_SP_Array = []; +_costsFree = 'free'; + +_fnc_getCosts = { + private ['_typeName','_vehicle','_costs','_cost']; + _vehicle = _this select 0; + _costs = _this select 1; + _cost = 0; + { + _typeName = _x select 0; + if (_vehicle isKindOf _typeName) exitWith { + _cost = _x select 1; + }; + } forEach _costs; + _cost +}; + +_fnc_actionTitle = { + private ['_itemName','_displayName','_actionName','_costs','_costsText','_actionTitle']; + _actionName = _this select 0; + _costs = _this select 1; + _costsText = _costsFree; + if (_costs > 0) then { + _costsText = format ['%1 Crypto',_costs]; + }; + _actionTitle = format ['%1 (%2)', _actionName, _costsText]; + _actionTitle +}; + +{ + if ((tolower (typeof _vehicle)) == (tolower _x)) exitwith { + _VehicleAmmo = getArray (_AmmoConfig >> _x >> "MagsTurrets"); + { + _x params ["_ammotype","_turret","_maxmags","_costs",["_ammocount",getNumber (configfile >> "CfgMagazines" >> (_x select 0) >> "count")]]; + if (_myturret isequalto _turret) then { + _maxammototal = _maxmags*_ammocount; + _totalammocount = 0; + { + if (_ammotype isequalto (_x select 0) && _turret isequalto (_x select 1)) then { + _totalammocount = _totalammocount + (_x select 2); + }; + } foreach (magazinesAllTurrets _vehicle); + if (_totalammocount < _maxammototal) then { + for '_i' from 1 to 10 do { + if (_totalammocount < _i*_ammocount) exitwith { + _ownedcompletemags = _i-1; + _missingammo = _ammocount*_i - _totalammocount; + _costs = round (_costs/_ammocount*_missingammo); + }; + }; + _magname = getText (configFile >> 'CfgMagazines' >> _ammotype >> 'displayName'); + if (_magname isequalto '') then { + _magname = _ammotype; + }; + _reloagmags = _ownedcompletemags+1; + _actionTitle = format['Rearm %1 with %2 round %3 (%4 Crypto)',getText (configFile >> 'Cfgvehicles' >> typeOf _vehicle >> 'displayName'),_missingammo,_magname, _costs]; + _Ignatz_SP_Array pushback [_actionTitle,[_vehicle,_ammotype,_turret,_reloagmags,_ammocount,_costs]]; + }; + }; + } foreach _VehicleAmmo; + }; +} foreach _VehiclesWithAmmo; + +if (player == driver _vehicle) then { + _costs = [_vehicle, _refuel_costs] call _fnc_getCosts; + _actionTitle = [format['Refuel %1',getText (configFile >> 'Cfgvehicles' >> typeOf _vehicle >> 'displayName')], _costs] call _fnc_actionTitle; + Ignatz_Refuel = [_actionTitle,[_vehicle,[_costs, _refuel_updateInterval,_refuel_amount]]]; + + _costs = [_vehicle, _repair_costs] call _fnc_getCosts; + _actionTitle = [format['Repair %1',getText (configFile >> 'Cfgvehicles' >> typeOf _vehicle >> 'displayName')], _costs] call _fnc_actionTitle; + Ignatz_Repair = [_actionTitle,[_vehicle,[_costs, _repairTime]]]; +}; +if (count _Ignatz_SP_Array > 0) then {Ignatz_Rearm0 = _Ignatz_SP_Array select 0;}; +if (count _Ignatz_SP_Array > 1) then {Ignatz_Rearm1 = _Ignatz_SP_Array select 1;}; +if (count _Ignatz_SP_Array > 2) then {Ignatz_Rearm2 = _Ignatz_SP_Array select 2;}; +if (count _Ignatz_SP_Array > 3) then {Ignatz_Rearm3 = _Ignatz_SP_Array select 3;}; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_clientInit.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_clientInit.sqf new file mode 100644 index 0000000..ab93429 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_clientInit.sqf @@ -0,0 +1,110 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Initalize player variables + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf + + Example: + call EPOCH_clientInit; + + Parameter(s): + NONE + + Returns: + NOTHING +*/ +EPOCH_buildMode = 0; +EPOCH_buildDirection = 0; +EPOCH_buildDirectionPitch = 0; +EPOCH_buildDirectionRoll = 0; +EPOCH_target_attachedTo = player; +EPOCH_debugMode = false; +EPOCH_snapDirection = 0; +EPOCH_stabilityTarget = objNull; +EPOCH_equippedItem_PVS = []; +EPOCH_pendingP2ptradeTarget = objNull; +EPOCH_lastNPCtradeTarget = objNull; +EPOCH_lastJumptime = diag_tickTime; +EPOCH_lastAGTime = diag_tickTime; +EPOCH_lastMineRocks = diag_tickTime; +EPOCH_target = objNull; +EPOCH_Z_OFFSET = 0; +EPOCH_X_OFFSET = 0; +EPOCH_Y_OFFSET = 5; +EPOCH_arr_snapPoints = []; +EPOCH_arr_snapObjects = []; +EPOCH_prevTarget = objNull; +EPOCH_interactOption = 0; +EPOCH_playerStaminaMax = 100; +Epoch_ActiveCam = objnull; +Epoch_AutoCam = true; +Epoch_CamAdjust = [0,0,0]; + +{ + missionNamespace setVariable [format ["EPOCH_player%1",_x],EPOCH_defaultVars select _forEachIndex]; +}forEach EPOCH_customVars; + +// suppress group chatter +0 fadeRadio 0; +enableSentences false; +enableRadio false; +// player setVariable["BIS_noCoreConversations", true]; // Moved to Masterloop (Player is not loaded in here) + +EPOCH_ArmaSlingLoad = true; +_r3fON = if(!isNil "R3F_LOG_CFG_can_lift")then{if!(R3F_LOG_CFG_can_lift isEqualTo [])then{true}else{false}}else{false}; +_advSling = if(!isNil "ASL_ROPE_INIT")then{if(ASL_ROPE_INIT)then{true}else{false}}else{false}; +if (_r3fON || _advSling)then{ + EPOCH_ArmaSlingLoad = false; +}; + +// handle actions, prevactions, nextactions +inGameUISetEventHandler ["Action", "if(!(_this isEqualTo []) && !(_this select 10 in ['PrevAction','NextAction']))then{_this call EPOCH_handleUIActions}"]; +//inGameUISetEventHandler ["NextAction", "_this call EPOCH_handleUIActions"]; +//inGameUISetEventHandler ["PrevAction", "_this call EPOCH_handleUIActions"]; + +// Load / Overwrite Vars from ProfileNamespace +_cfg = "e_pad_config" call EPOCH_returnConfig; +_startvars = getarray (_cfg >> "LoadVarsFromProfile"); +_arr = profilenamespace getvariable ["Epoch_ToggleVars",[[],[]]]; +_todelete = []; +{ + _x params ["_varname",["_default","false",[""]]]; + if (_varname isequaltype "" && !(_varname isequalto "")) then { + _value = if ((tolower _default) isequalto "true") then {true} else {false}; + _find = (_arr select 0) find _varname; + if (_find > -1) then { + _tmpvalue = (_arr select 1 select _find); + if (_tmpvalue isequaltype true) then { + _value = _tmpvalue; + } + else { + _todelete pushback _x; + }; + } + else { + (_arr select 0) pushback _varname; + (_arr select 1) pushback _default; + }; + missionnamespace setvariable [_varname,_value]; + }; +} foreach _startvars; +{ + _find = (_arr select 0) find _x ; + if (_find > -1) then { + (_arr select 0) deleteat _find; + (_arr select 1) deleteat _find; + }; +} foreach _todelete; +if !(_arr isequalto (profilenamespace getvariable ["Epoch_ToggleVars",[[],[]]])) then { + profilenamespace setvariable ["Epoch_ToggleVars",_arr]; + saveprofilenamespace; +}; + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf new file mode 100644 index 0000000..2e2bcb2 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf @@ -0,0 +1,111 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Custom Epoch keymap + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf + + Example: + _arr = 2 call EPOCH_clientKeyMap; + + Parameter(s): + TBA + + Returns: + Mixed +*/ +//[[[cog import generate_private_arrays ]]] +private ["_arr","_keyMap","_return","_s"]; +//[[[end]]] +params [["_args",0],["_input",0]]; + +_keyMap = +[ + //["Name", "Variable name", Default value], + ["Action","EPOCH_keysAction",0x39], + ["Holster Weapon", "EPOCH_keysHolster", 35], + ["Debug Monitor", "EPOCH_keysDebugMon", 41], + ["E-Pad", "EPOCH_keysEPad", 0x44], + ["AutoRun", "EPOCH_keysAutoRun", 0x11], + ["Earplugs", "EPOCH_Earplugs", 0x3E], + + ["Volume + (ctrl)","EPOCH_keysVolumeUp",0x0D], + ["Volume - (ctrl)","EPOCH_keysVolumeDown",0x0C], + ["Favorite Bar 1", "EPOCH_keysfav1", 0x02], + ["Favorite Bar 2", "EPOCH_keysfav2", 0x03], + ["Favorite Bar 3", "EPOCH_keysfav3", 0x04], + ["Favorite Bar 4", "EPOCH_keysfav4", 0x05], + ["Favorite Bar 5", "EPOCH_keysfav5", 0x06], + ["Build: Mode 1", "EPOCH_keysBuildMode1", 2], + // ["Build: Mode 2", "EPOCH_keysBuildMode2", 3], + // ["Build: Direction", "EPOCH_keysBuildDir", 4], + // ["Build: Static", "EPOCH_keysBuildStatic", 5], + ["Build: Move UP", "EPOCH_keysBuildMovUp", 0xC9], + ["Build: Move DOWN", "EPOCH_keysBuildMovDn", 0xD1], + ["Build: Move FORWARD", "EPOCH_keysBuildMovFwd", 0xC7], + ["Build: Move BACK", "EPOCH_keysBuildMovBak", 0xCF], + ["Build: Move LEFT", "EPOCH_keysBuildMovL", 0xD2], + ["Build: Move RIGHT", "EPOCH_keysBuildMovR", 0xD3], + ["Build: Rotate LEFT", "EPOCH_keysBuildRotL", 0x12], + ["Build: Rotate RIGHT", "EPOCH_keysBuildRotR", 0x10], + ["Build: Vector LEFT", "eXpoch_keysVectorTiltL", 0xCB], + ["Build: Vector RIGHT", "eXpoch_keysVectorTiltR", 0xCD], + ["Build: Vector AWAY", "eXpoch_keysVectorTiltAwy", 0xC8], + ["Build: Vector TOWARD", "eXpoch_keysVectorTiltTwd", 0xD0], + ["Build: Reset Object", "eXpoch_keysVectorResetObject", 0x4C], + + ["BaseCam: NextCam","Epoch_KB_BaseCamNextCam",0x9C], + ["BaseCam: Left","Epoch_KB_BaseCamLeft",0x4B], + ["BaseCam: Right","Epoch_KB_BaseCamRight",0x4D], + ["BaseCam: Up","Epoch_KB_BaseCamUp",0x48], + ["BaseCam: Down","Epoch_KB_BaseCamDown",0x50], + ["BaseCam: Zoom -","Epoch_KB_BaseCamZoomOut",74], + ["BaseCam: Zoom +","Epoch_KB_BaseCamZoomIn",78], + ["BaseCam: AutoCam","Epoch_KB_BaseCamAutoCam",0x52] +]; + +_keyMap call EPOCH_custom_KeyMap; + +switch (_args) do { + case 0: //load variables + { + { + call compile format ["%1 = profileNamespace getVariable ['%1', %2]",_x select 1, _x select 2]; + } forEach _keyMap; + + _return = true; + }; + + case 1: //delete all profile namespace variables + { + { + profileNamespace setVariable [_x select 1, nil]; + } forEach _keyMap; + + _return = true; + }; + + case 2: //returns keymap to a caller for processing + { + _return = _keyMap; + }; + + case 3: //search by variable name and return element if exists (not tested) + { + _return = + { + _s = toLower(_x select 1) find toLower _input; + if (_s > -1) exitWith {_x}; + [] + } forEach _keyMap; + }; +}; + +_return diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_clientRespawn.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_clientRespawn.sqf new file mode 100644 index 0000000..730f7c9 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_clientRespawn.sqf @@ -0,0 +1,4 @@ +// force player back to lobby as this should only happen if player did not tap out +(findDisplay 46) closeDisplay 0; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_clientRevive.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_clientRevive.sqf new file mode 100644 index 0000000..d3a3c76 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_clientRevive.sqf @@ -0,0 +1,95 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Unisex check for vests, gives swing ammo and performs radio changed check + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf + + Example: + _data call EPOCH_clientRevive; + + Parameter(s): + _this select 0: OBJECT - player object + _this select 1: STRING - personal token + _this select 2: NUMBER - loadABS + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_playerBloodPKeyFinal","_prevPlayerObject"]; +//[[[end]]] +params [ + ["_playerObject",objNull,[objNull]], + ["_personalToken","",[""]], + ["_loadAbs",0,[0]] +]; +if (isNull _playerObject) exitWith { diag_log "EPOCH-DEBUG: New Player Object was Null cannot revive." }; +if !(alive player && alive _playerObject && !isPlayer _playerObject) then { + + // reveal new player object (to hopefully propagate info faster). + player reveal _playerObject; + + // spawn a thread to wait for loadAbs to sync before using selectPlayer + [_playerObject,_personalToken,_loadAbs] spawn { + params ["_playerObject","_personalToken","_loadAbs"]; + + // get current player object + _prevPlayerObject = player; + + // wait for loadAbs to sync + waitUntil {_loadAbs isEqualTo (loadAbs _playerObject)}; + + _goggles = goggles _playerObject; + + // switch to new playerObject + selectPlayer _playerObject; + + // delete previous player object + deleteVehicle _prevPlayerObject; + + // set token and can revive to false + Epoch_canBeRevived = false; + Epoch_personalToken = _personalToken; + + // reset blood Pressure to warning level + _playerBloodPKeyFinal = "EPOCH_playerBloodP"; + if !(isNil "_playerBloodPKey") then {_playerBloodPKeyFinal = _playerBloodPKey}; + missionNamespace setVariable [_playerBloodPKeyFinal, 120]; + + _playerToxicityKeyFinal = "EPOCH_playerToxicity"; + if !(isNil "_playerToxicityKey") then {_playerToxicityKeyFinal = _playerToxicityKey}; + missionNamespace setVariable [_playerToxicityKeyFinal, 0]; + + // Wait until _playerObject is local before adding Rating and EH's + waituntil {local _playerObject}; + + // restart masterloop + EPOCH_forceUpdateNow = nil; // Set to nil and wait later until Masterloop has redefined it + [] spawn EPOCH_masterLoop; + [5, 100] call EPOCH_niteLight; + + closeDialog 0; + ("BIS_fnc_respawnCounter" call BIS_fnc_rscLayer) cutText ["","PLAIN"]; + + removeGoggles player; + player addGoggles _goggles; + + { + player removeEventHandler [_x, 0]; + player addEventHandler [_x,(["CfgEpochClient", _x, ""] call EPOCH_fnc_returnConfigEntryV2)]; + } forEach (["CfgEpochClient", "addEventHandler", []] call EPOCH_fnc_returnConfigEntryV2); + waituntil {uisleep 0.5; !isnil "EPOCH_forceUpdateNow"}; // Wait until Materloop is has set this Variable to false + EPOCH_forceUpdateNow = true; + }; +} else { + deleteVehicle _playerObject; +}; + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf new file mode 100644 index 0000000..56bd048 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf @@ -0,0 +1,27 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Reject players own connection + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf + + Example: + true remoteExec ['EPOCH_client_rejectPlayer',_player]; + + Parameter(s): + _this: BOOL - true = set bad publicVariable to server forces kick + + Returns: + NOTHING +*/ +if (_this) then { + PLAYER_BADHIVE = true; + publicVariableServer "PLAYER_BADHIVE"; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_masterLoop.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_masterLoop.sqf new file mode 100644 index 0000000..88fb13c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/EPOCH_masterLoop.sqf @@ -0,0 +1,56 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Unisex check for vests, gives swing ammo and performs radio changed check + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf + + Example: + [] spawn EPOCH_masterLoop; + + Parameter(s): + NONE + + Returns: + NOTHING +*/ +disableSerialization; +_config = 'CfgMasterLoop' call EPOCH_returnConfig; +_build_sqf = preprocessFile getText (_config >> "Init" >> "file"); +_configs = "true" configClasses (_config >> "Events"); +_condition = getText (_config >> "Events" >> "condition"); +_file = getText (_config >> "Events" >> "file"); +{ + _configName = configName _x; + _varName = format["_EPOCH_%1",_configName]; + _build_sqf = _build_sqf + ' + '+_varName+' = diag_tickTime; + '; +}forEach _configs; +_build_sqf = _build_sqf + ' +while {'+_condition+'} do { + _tickTime = diag_tickTime; +'; +{ + _delay = getNumber(_x >> "delay"); + _configName = configName _x; + _varName = format["_EPOCH_%1",_configName]; + _code = preprocessFile format ["%1\%2.sqf",_file,_configName]; + _build_sqf = _build_sqf + ' + if ((_tickTime - '+_varName+') > '+str(_delay)+') then { + '+_varName+' = _tickTime; + '+_code+' + }; + '; +}forEach _configs; +_build_sqf = _build_sqf + ' + uiSleep 0.1; +};'; +call compile _build_sqf; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event0.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event0.sqf new file mode 100644 index 0000000..4f03804 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event0.sqf @@ -0,0 +1,40 @@ +// runs every 0.4 seconds + +if (EPOCH_IsAutoRunning) then { + if (call EPOCH_AutoRun_Check) then { + call EPOCH_AutoRun; + } + else { + EPOCH_IsAutoRunning = false; + player switchMove ""; + }; +}; + +if (player == vehicle player && {getPosATL player select 2 > 0.4} && {cameraview == 'GUNNER'}) then { + _weapondir = player weapondirection (currentweapon player); + if (animationstate player in ['aadjpknlmstpsraswpstddown','aadjpknlmstpsraswrflddown'] && {_weapondir select 2 < -0.88}) then { + player switchCamera "EXTERNAL"; + player playAction "AdjustF"; + _fadedblack = true; + TitleText ['Stop BugUsing!','BLACK FADED']; + } + else { + _eyePos = eyepos player; + _eyedist = 0.25; + _end = [((_eyePos select 0)+_eyedist*(_weapondir select 0)),((_eyePos select 1)+_eyedist*(_weapondir select 1)),((_eyePos select 2)+_eyedist*(_weapondir select 2))]; + _objects = lineintersectswith [_eyePos,_end,player]; + _objects = _objects select {((_x iskindof "Constructions_static_F") and not(_x isKindOf "WoodLargeWall_EPOCH"))}; + if !(_objects isequalto []) then { + player switchCamera "EXTERNAL"; + _fadedblack = true; + TitleText ['Stop BugUsing!','BLACK FADED']; + } + else { + call _UnFadeCheck; + }; + }; +} +else { + call _UnFadeCheck; +}; + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event1.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event1.sqf new file mode 100644 index 0000000..0bf9421 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event1.sqf @@ -0,0 +1,444 @@ +// init +_forceBloodRise = false; +_forceBloodDrop = false; +_forceFatigue = false; +_allowBloodDrop = false; +_forceStaminaDrop = false; +_playerBloodP = missionNamespace getVariable [_playerBloodPKey, _playerBloodPDefault]; +_warnbloodPressure = _playerBloodP > 120; +_increaseStamina = true; +_val = 0; + +// AR HUD Target start +_currentTarget = objNull; +_currentTargetMode = 0; +_cursorTarget = ([10] call EPOCH_fnc_cursorTarget); +if (!isNull _cursorTarget && {!(EPOCH_target isEqualTo _cursorTarget)}) then { + _interactType = typeOf _cursorTarget; + _interaction = (_cfgObjectInteractions >> _interactType); + if (isClass(_interaction)) then { + _currentTargetMode = getNumber (_interaction >> "interactMode"); + _allowTarget = switch (getNumber (_interaction >> "aliveState")) do { + case 1: {!(alive _cursorTarget)}; + case 2: {(alive _cursorTarget)}; + default {true}; + }; + if (_allowTarget) then { + _currentTarget = _cursorTarget; + }; + } else { + // AllVehicles = vehicles=0, bases=1 + if (_cursorTarget isKindOf "AllVehicles") then { + _currentTarget = _cursorTarget; + } else { + if (_cursorTarget isKindOf "Constructions_modular_F" || {_cursorTarget isKindOf "Constructions_static_F"} || {(typeof _cursorTarget) in (call Epoch_JammerClasses)}) then { + _currentTargetMode = 1; + _currentTarget = _cursorTarget; + }; + }; + }; +}; +EPOCH_currentTarget = _currentTarget; +EPOCH_currentTargetMode = _currentTargetMode; +// AR HUD target end + +// dynamic HUD start +{ + _x params [["_selectedVar",[]],["_HUDclass","topRight"],["_ctrlText",""],["_criticalAttributes",[]]]; + _selectedVar params [["_selVarName",""],["_selVarType",""],["_selVarSubData",""],["_extraLogicRaw",[]],["_selVarLimits",[]]]; + + _varIndex = _customVarNames find _selVarName; + if (_varIndex != -1 || !(_selVarLimits isEqualTo [])) then { + if (_selVarLimits isEqualTo []) then { + _selVarLimits = _customVarLimits select _varIndex; + }; + _currentVarVal = [_selVarName,_varIndex,_selVarType,_selVarSubData] call EPOCH_fnc_returnHudVar; + _selVarLimits params [["_playerLimitMax",100],["_playerLimitMin",0],["_playerWarnLimit",101],["_playerCriticalLimit",101],["_playerWarnLow",0],["_playerCriticalLow",0]]; + + _extraLogic = false; + if !(_extraLogicRaw isEqualTo []) then { + _extraLogicRaw params [["_extraLogicType",""],["_extraLogicCond",""],["_extraLogicData",""]]; + _extraLogicVarName = ""; + _extraLogicDefaultValue = ""; + if (_extraLogicType isEqualType []) then { + _extraLogicType params [["_extraLogicVarName",""],["_extraLogicType",""],["_extraLogicDefaultValue",""]]; + }; + _extraVarIndex = _customVarNames find _extraLogicVarName; + _extraLogic = [([_extraLogicVarName,_extraVarIndex,_extraLogicType,_extraLogicDefaultValue] call EPOCH_fnc_returnHudVar),_extraLogicCond,_extraLogicData] call EPOCH_fnc_arrayToLogic; + }; + + if (_playerLimitMax isEqualType "") then { + _playerLimitMax = missionNamespace getVariable [_playerLimitMax, 0]; + }; + if (_playerLimitMin isEqualType "") then { + _playerLimitMin = missionNamespace getVariable [_playerLimitMin, 0]; + }; + + _warnLow = _currentVarVal < _playerWarnLow; + _warnHigh = _currentVarVal > _playerWarnLimit; + _criticalLow = _currentVarVal <= _playerCriticalLow; + _criticalHigh = _currentVarVal >= _playerCriticalLimit; + + if (_warnHigh || _warnLow || _extraLogic) then { + _hudIndex = missionNamespace getVariable [format["EPOCH_dynHUD_%1",_HUDclass],1]; + _curCtrl = [_HUDclass,_hudIndex] call epoch_getHUDCtrl; + missionNamespace setVariable [format["EPOCH_dynHUD_%1",_HUDclass], _hudIndex + 1]; + if (_ctrlText isEqualType []) then { + _ctrlText = if (_warnHigh) then {_ctrlText select 0} else {_ctrlText select 1}; + }; + _curCtrl ctrlSetText _ctrlText; + _critical = (_criticalHigh || _criticalLow); + if (_critical) then { + if ((_criticalAttributes param [0,""]) isEqualType []) then { + _criticalAttributes = _criticalAttributes select _criticalLow; + }; + _forceUpdate = "forceUpdate" in _criticalAttributes; + _forceFatigue = "forceFatigue" in _criticalAttributes; + _forceBloodRise = "forceBloodRise" in _criticalAttributes; + _forceBloodDrop = "forceBloodDrop" in _criticalAttributes; + [_curCtrl,0.55] call epoch_2DCtrlHeartbeat; + }; + // todo make this reversable or even limited to a color range. + _color = [_playerLimitMin,_playerLimitMax,_currentVarVal,1] call EPOCH_colorRange; + _curCtrl ctrlSetTextColor _color; + }; + }; +} forEach _hudConfigs; +// dynamic HUD end + +// cause Fatigue if cold or hot, also increase blood pressure if thristy or hungry. +if (_forceBloodRise || _forceFatigue) then { + _increaseStamina = false; +} else { + _playerStamina = missionNamespace getVariable [_playerStaminaKey, _playerStaminaDefault]; + if (_playerStamina > 0 && !_panic) then { + _allowBloodDrop = true; + }; +}; + +// force Fatigue +if (_forceFatigue) then { + player setFatigue 1; +} else { + if (!_warnbloodPressure) then { + player setFatigue 0; + }; +}; + +// force Blood Pressure Rise +if (_forceBloodRise) then { + _playerBloodP = [_playerBloodPKey, 0.05, _playerBloodPMax , _playerBloodPMin] call EPOCH_fnc_setVariableLimited; +} else { + if (_allowBloodDrop || _forceBloodDrop) then { + // allow player to bleed out or die from hypothermia + _lowerBPlimit = [100,0] select (isBleeding player || _forceBloodDrop); + _playerBloodP = [_playerBloodPKey, -0.1, _playerBloodPMax , _lowerBPlimit] call EPOCH_fnc_setVariableLimited; + }; +}; + +// check if player On Foot +_isOnFoot = isNull objectParent player; +if (_isOnFoot) then { + _val = log(abs(speed player)); + _staminaThreshold = [0.7,0.3] select (underwater player); + if (_val > _staminaThreshold) then { + _forceStaminaDrop = true; + }; +}; + +// Decrease Stamina +if (_forceStaminaDrop) then { + _playerStamina = [_playerStaminaKey, -(_val/4), EPOCH_playerStaminaMax , 0] call EPOCH_fnc_setVariableLimited; +} else { + // Increase Stamina if player is not Fatigued + if (_increaseStamina && (getFatigue player) == 0) then { + // EPOCH_playerStamina = (EPOCH_playerStamina + 0.5) min EPOCH_playerStaminaMax; + _playerStamina = [_playerStaminaKey, 0.5, EPOCH_playerStaminaMax , 0] call EPOCH_fnc_setVariableLimited; + }; +}; + + + +// ~ debug +if (EPOCH_debugMode) then { + private _hours = floor(servertime/60/60); + private _customVars = ""; + { + if !(_x in ["AliveTime","SpawnArray","HitPoints","MissionArray","NotUsed"]) then { + private _varName = format["EPOCH_player%1",_x]; + private _varNameTmp = call compile format["_player%1Key",_x]; + if !(isNil "_varNameTmp") then {_varName = _varNameTmp}; + private _val = missionNamespace getVariable [_varName,_defaultVarValues select _forEachIndex]; + if (_x == "Temp") then { + _customVars = _customVars + format["%1: %2°F | %3°C
", _x,_val,_val call EPOCH_convertTemp]; + } else { + _customVars = _customVars + format["%1: %2
", _x,_val]; + }; + } + }forEach _customVarNames; + hintSilent parseText format [" + Welcome to Epoch!
+ Current Version: %1
+ Build: %2
+ " + _customVars + " + Karma: %17
+
+ + Fatigue: %3
+ Damage: %4
+ Bleeding: %5
+ Bleed Time: %6
+ Oxygen: %7
+
+ Air Temp: %8
+ Water Temp: %9
+ Rain: %10
+ Overcast: %11
+
+ Hours Alive: %12
+ FPS: %13
+ Server uptime: %14h %15m
+ Server FPS: %16
", + getText(configFile >> "CfgMods" >> "Epoch" >> "version"), + getNumber(missionConfigFile >> "CfgEpochBuild" >> "build"), + (getFatigue player), + (damage player), + (isBleeding player), + (getBleedingRemaining player), + (getOxygenRemaining player), + format ["%1°F | %2°C",EPOCH_CURRENT_WEATHER,EPOCH_CURRENT_WEATHER call EPOCH_convertTemp], + format ["%1°F | %2°C",(EPOCH_CURRENT_WEATHER/2),(EPOCH_CURRENT_WEATHER/2) call EPOCH_convertTemp], + rain, + overcast, + + round(_playerAliveTime/360)/10, + round diag_fps, + _hours, + round((serverTime/60)-(_hours*60)), + if (EPOCH_diag_fps isEqualType 0) then [{EPOCH_diag_fps},{"MANIPULATED"}], + missionNamespace getVariable ["EPOCH_totalKarma",0] + ]; +}; + +// player to player trade loop +call EPOCH_TradeLoop; + +// blank out unused hud elements and prepare for next loop +_hudIndex = missionNamespace getVariable [format["EPOCH_dynHUD_%1","topRight"],1]; +for "_i" from _hudIndex to 9 do { + _c = ["topRight",_i] call epoch_getHUDCtrl; + _c ctrlSetText ""; +}; +missionNamespace setVariable [format["EPOCH_dynHUD_%1","topRight"], nil]; + +// EPOCH TraderMissions +if (!isnil "EPOCH_ResetTraderMission") then { + if (!isNil "EPOCH_taskMarker") then{ + EPOCH_taskMarker params ["_mkrName","_taskMarkerVis"]; + [player,_taskMarkerVis,_mkrName] remoteExec ["EPOCH_server_removeMarker",2]; + EPOCH_taskMarker = nil; + }; + if !(_EPOCH_TraderMissionArray isequalto []) then { + _EPOCH_TraderMissionArray params ["_mainblock","","","","","_taskFailed"]; + _mainblock params ["","","","","",["_missionCleanUpCall",""]]; + call _missionCleanUpCall; + _taskFailed params ['','','','',["_taskFailedCall",""]]; + call _taskFailedCall; + }; + EPOCH_ActiveTraderMission = []; + _EPOCH_TraderMissionArray = []; + _LastMissionTrigger = 0; + ["Mission sucessfully resettet", 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; + EPOCH_ResetTraderMission = nil; +}; + +if !(EPOCH_ActiveTraderMission isequalto []) then { + if (_EPOCH_TraderMissionArray isequalto []) then { + _EPOCH_TraderMissionArray = EPOCH_ActiveTraderMission call _EPOCH_BuildTraderMisson; + }; + _EPOCH_TraderMissionArray params ["_mainblock","_taskDelay","_triggerintervall","_taskDialogues","_taskEvents","_taskFailed","_taskComplete"]; + if (diag_ticktime < _taskDelay) exitwith {}; + if (diag_ticktime < _LastMissionTrigger + _triggerintervall) exitwith {}; + _LastMissionTrigger = diag_ticktime; + _mainblock params ["_inGameTasksconfig","_taskName","_unit","_taskItem","_taskTitle","_missionCleanUpCall","_taskCleanup"]; + _taskComplete params ["_taskCompleteCond","_taskReward","_taskCompleteDiags","_taskCompleteCall","_taskNextTrigger"]; + _taskFailed params ['_taskFailedCond','_taskFailTime','_taskFailedDiags','_taskFailedSQF','_taskFailedCall']; + if (diag_ticktime > _taskFailTime || call _taskFailedCond) exitwith { + if (count _taskFailedDiags > 0) then { + _diag = selectRandom _taskFailedDiags; + [format ["%1",_diag], 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; + }; + if !(_taskFailedSQF isequalto '') then { + call compile format ["[_taskName,_plyr,_unit,_taskItem] execVM ""%1""",_taskFailedSQF]; + }; + if !(str(_taskFailedCall) == "{}") then { + call _taskFailedCall; + }; + if (!isNil "EPOCH_taskMarker") then{ + EPOCH_taskMarker params ['_mkrName','_taskMarkerVis']; + [player,_taskMarkerVis,_mkrName] remoteExec ["EPOCH_server_removeMarker",2]; + EPOCH_taskMarker = nil; + }; + call _missionCleanUpCall; + EPOCH_ActiveTraderMission = []; + _EPOCH_TraderMissionArray = []; + _LastMissionTrigger = 0; + }; + if (call _taskCompleteCond) exitwith { + if (count _taskCompleteDiags > 0) then { + _diag = selectrandom _taskCompleteDiags; + [format ["%1",_diag], 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; + }; + if(count _taskReward > 0) then { + [player,Epoch_personalToken,_taskReward,[],objNull,false] remoteExec ["EPOCH_Server_createObject",2]; + }; + if !(str(_taskCompleteCall) == "{}") then { + call _taskCompleteCall; + }; + if (_taskCleanup isequalto 1) then { + if (!isNil "EPOCH_taskMarker") then{ + EPOCH_taskMarker params ['_mkrName','_taskMarkerVis']; + [player,_taskMarkerVis,_mkrName] remoteExec ["EPOCH_server_removeMarker",2]; + EPOCH_taskMarker = nil; + }; + call _missionCleanUpCall; + }; + if (count _taskNextTrigger > 0) then { + _nexttask = selectrandom _taskNextTrigger; + _EPOCH_TraderMissionArray = [_inGameTasksconfig,_nexttask] call _EPOCH_BuildTraderMisson; + } + else { + EPOCH_ActiveTraderMission = []; + _EPOCH_TraderMissionArray = []; + }; + _LastMissionTrigger = 0; + }; + { + _x params ["_taskEventCond","_taskEventCALL","_taskEventTasks"]; + if (call _taskEventCond) exitwith { + call _taskEventCALL; + if (count _taskEventTasks > 0) exitwith { + _task = selectrandom _taskEventTasks; + _EPOCH_TraderMissionArray = [_inGameTasksconfig,_task] call _EPOCH_BuildTraderMisson; + }; + _taskEvents deleteat _foreachindex; + }; + } foreach _taskEvents; + { + _x params ['_taskDiagCond','_taskDiag']; + if (call _taskDiagCond) exitwith { + _diag = selectRandom _taskDiag; + if !(_diag isequalto "") then { + [format ["%1",_diag], 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; + }; + _taskDialogues deleteat _foreachindex; + }; + } foreach _taskDialogues; +}; + +// AH use only +if !(isNil "EPOCH_GMODE") then { + { + _varDefault = _gModeVarValues select _foreachindex; + _varName = format["EPOCH_player%1",_x]; + _varNameTmp = call compile format["_player%1Key",_x]; + if !(isNil "_varNameTmp") then {_varName = _varNameTmp}; + missionNamespace setVariable [_varName, _varDefault]; + } forEach _gModeVarNames; +}; + +// Update read only vars +if !(_playerTempKey isEqualTo "EPOCH_playerTemp") then { + EPOCH_playerTemp = missionNamespace getVariable [_playerTempKey, _playerTempDefault]; + EPOCH_playerHunger = missionNamespace getVariable [_playerHungerKey, _playerHungerDefault]; + EPOCH_playerThirst = missionNamespace getVariable [_playerThirstKey, _playerThirstDefault]; + EPOCH_playerAliveTime = missionNamespace getVariable [_playerAliveTimeKey, _playerAliveTimeDefault]; + EPOCH_playerEnergy = missionNamespace getVariable [_playerEnergyKey, _playerEnergyDefault]; + EPOCH_playerWet = missionNamespace getVariable [_playerWetKey, _playerWetDefault]; + EPOCH_playerSoiled = missionNamespace getVariable [_playerSoiledKey, _playerSoiledDefault]; + EPOCH_playerImmunity = missionNamespace getVariable [_playerImmunityKey, _playerImmunityDefault]; + EPOCH_playerToxicity = missionNamespace getVariable [_playerToxicityKey, _playerToxicityDefault]; + EPOCH_playerStamina = missionNamespace getVariable [_playerStaminaKey, _playerStaminaDefault]; + EPOCH_playerBloodP = missionNamespace getVariable [_playerBloodPKey, _playerBloodPDefault]; + EPOCH_playerAlcohol = missionNamespace getVariable [_playerAlcoholKey, _playerAlcoholDefault]; + EPOCH_playerRadiation = missionNamespace getVariable [_playerRadiationKey, _playerRadiationDefault]; + EPOCH_playerNuisance = missionNamespace getVariable [_playerNuisanceKey, _playerNuisanceDefault]; +}; + +// Check for PlayerMarker and Update or Remove it +if (_PlayerMarkerEnabled && EPOCH_PlayerMarkerOn && {'ItemGPS' in (assignedItems player)}) then { + if (_PlayerMarkerName in allMapMarkers) then { + { + (_x select 0) setMarkerPosLocal (position player); + if(count(_x) >= 8)then{(_x select 0) setMarkerTextLocal (call compile (_x select 7))}; + }forEach _PlayerMarkerArray; + } + else { + ['PlayerMarker',position player] call EPOCH_fnc_createLocalMarkerSet; + }; +} +else { + if (_PlayerMarkerName in allMapMarkers) then { + ['PlayerMarker'] call EPOCH_fnc_deleteLocalMarkerSet; + }; +}; +if (_DeathMarkerEnabled && EPOCH_DeathMarkerOn && !(_DeathMarker isEqualTo [])) then { + if !(_DeathMarkerName in allMapMarkers) then { + ['DeathMarker',_DeathMarker] call EPOCH_fnc_createLocalMarkerSet + }; +} +else { + if (_DeathMarkerName in allMapMarkers) then { + ['DeathMarker'] call EPOCH_fnc_deleteLocalMarkerSet; + }; +}; +if(_mapOnZoomSetMarkerSize isEqualTo 1)then{ + if(visibleMap)then{ + _mapScale = ctrlMapScale ((findDisplay 12) displayCtrl 51); + _mapMarkers = allMapMarkers; + + if(isNil {EPOCH_lastMapScale})then{EPOCH_lastMapScale = 0}; + + if(_mapScale != EPOCH_lastMapScale)then{ + EPOCH_lastMapScale = _mapScale; + for "_i" from 0 to ((count _mapMarkers) - 1) do { + if(_mapScale != EPOCH_lastMapScale)exitWith{}; + _zoomMarker = _mapMarkers select _i; + private "_markerString"; + _markerString = toArray _zoomMarker; + _markerString resize 6; + if (toString _markerString == "EPOCH_") then { + _mSize = missionNamespace getVariable[_zoomMarker,[0.666,0.666]]; + _adj = 1.666; + _mapScaler = getArray(_config >> "mapScalerPresets"); + { + if(_mapScale <= (_x select 0))then{_adj = (_x select 1)}; + }forEach _mapScaler; + _min = (0.666/_mapScale) min 2.666; + _zoomMarker setMarkerSizeLocal [(((_mSize select 0) / (_mapScale * _adj)) min _min) max 0.666, (((_mSize select 1) / (_mapScale * _adj)) min _min) max 0.666]; + }; + }; + }; + }; +}; + +// prevents use of group view +if (cameraview isequalto "GROUP") then { + vehicle player switchCamera "Internal"; +}; + +if (lifeState player == "INCAPACITATED") then { + if ((missionnamespace getvariable ["EPOCH_UnconsciousTime",diag_ticktime]) < diag_ticktime) then { + player setUnconscious false; + player playMoveNow 'AmovPercMstpSnonWnonDnon'; + }; +}; + +// force update +if (EPOCH_forceUpdateNow) then { + _UpdateTopStats = true; + _forceUpdate = false; + EPOCH_forceUpdate = false; + EPOCH_forceUpdateNow = false; + call _fnc_forceUpdate; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event2.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event2.sqf new file mode 100644 index 0000000..40e866c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event2.sqf @@ -0,0 +1,219 @@ +if !(EPOCH_arr_interactedObjs isEqualTo[]) then { + [EPOCH_arr_interactedObjs] remoteExec["EPOCH_server_save_vehicles", 2]; + EPOCH_arr_interactedObjs = []; +}; + +if (damage player != _damagePlayer) then { + if (alive player) then { + _forceUpdate = true; + _damagePlayer = damage player; + }; +}; + +// calculate total available power +// 1. number of power production devices within range 75m + +// find share of power based on factors +// 1. number of players +// 2. Other sources of drain (Lights) + +_energyValue = _chargeRate min _energyRegenMax; +_vehicle = vehicle player; +if (_vehicle != player && isEngineOn _vehicle) then { + if !(_vehicle iskindof "Bicycle") then { + _energyValue = _energyValue + _energyRegenInVeh; + }; +}; +if (currentVisionMode player == 1) then { //NV enabled + _energyValue = _energyValue - _energyCostNV; + _playerEnergy = missionNamespace getVariable [_playerEnergyKey, _playerEnergyDefault]; + if (_playerEnergy == 0) then { + player action["nvGogglesOff", player]; + ["Night Vision Goggles: Need Energy", 5] call Epoch_message; + }; +}; + +// Sets visual effect +_playerAlcohol = missionNamespace getVariable [_playerAlcoholKey, _playerAlcoholDefault]; +if (_playerAlcohol > 20) then { + _drunkVal = linearConversion [0,100,_playerAlcohol,0,10,true]; + [(ceil _drunkVal)/10, 2] call epoch_setDrunk; +} else { + [0, 2] call epoch_setDrunk; +}; + +// Sets visual effect +_playerRadiation = missionNamespace getVariable [_playerRadiationKey, _playerRadiationDefault]; +if (_playerRadiation > _radiationEffectsThreshold) then { + _radiationVal = linearConversion [0,100,_playerRadiation,0,10,true]; + [(ceil _radiationVal)/10, 2] call epoch_setRadiation; +} else { + [0, 2] call epoch_setRadiation; +}; + +// Geiger Deplete Energy +if (EPOCH_geiger_shown) then { + _energyValue = _energyValue - _outOfBoundsRadiation; +}; + +// Energy Handler +_playerEnergy = [_playerEnergyKey,_energyValue,_playerEnergyMax,_playerEnergyMin] call EPOCH_fnc_setVariableLimited; + +if !(_playerEnergy isEqualTo _prevEnergy) then { + 9993 cutRsc["EpochGameUI3", "PLAIN", 0, false]; + _display3 = uiNamespace getVariable "EPOCH_EpochGameUI3"; + _energyDiff = round(_playerEnergy - _prevEnergy); + _diffText = if (_energyDiff > 0) then {format["+%1",_energyDiff]} else {format["%1",_energyDiff]}; + (_display3 displayCtrl 21210) ctrlSetText format["%1/%2 %3", round(_playerEnergy), _playerEnergyMax, _diffText]; + _prevEnergy = _playerEnergy; +}; + +if (_playerEnergy == 0) then { + if (EPOCH_buildMode > 0) then { + EPOCH_buildMode = 0; + EPOCH_snapDirection = 0; + ["Build Mode Disabled: Need Energy", 5] call Epoch_message; + EPOCH_Target = objNull; + EPOCH_Z_OFFSET = 0; + EPOCH_X_OFFSET = 0; + EPOCH_Y_OFFSET = 5; + }; +}; + +_attackers = player nearEntities[["Snake_random_EPOCH", "GreatWhite_F", "Epoch_Cloak_F"], 30]; +if !(_attackers isEqualTo[]) then { + (_attackers select 0) call EPOCH_client_bitePlayer; + _panic = true; +} else { + if !(uniform player in ["Epoch_RadiationSuit_F","Epoch_RadiationSuit_M"]) then { + _toxicObjs = player nearobjects["SmokeShellCustom", 12]; + if!(_toxicObjs IsEqualTo[]) then { + (_toxicObjs select 0) call EPOCH_client_bitePlayer; + _panic = true; + } else { + _panic = false; + }; + }; +}; + +// weather stats +_airTemp = EPOCH_CURRENT_WEATHER; +_waterTemp = EPOCH_CURRENT_WEATHER/2; +_warming = true; +_wet = false; +_maxTemp = 98.6; // normal body temp +_increaseWet = 0; +_wetsuit = (getText(configfile >> "cfgweapons" >> uniform player >> "itemInfo" >> "uniformType") == "Neopren"); + +if (_isOnFoot) then { + if (underwater player) then { + // do nothing if player is wearing a wetsuit + if (!_wetsuit) then { + if (_waterTemp <= 50) then { + _warming = false; + }; + _wet = true; + _increaseWet = 10; + }; + } else { + _playerWet = missionNamespace getVariable [_playerWetKey, _playerWetDefault]; + if (_playerWet > 50 && _airTemp <= 32) then { + _isNearFire = {inflamed _x} count (nearestObjects [player, ["ALL"], 3]); + if (!(call EPOCH_fnc_isInsideBuilding) && _isNearFire == 0) then { + _warming = false; + }; + }; + if (rain >= 0.25) then { + if (!_wetsuit) then { + _isNearFire = { inflamed _x } count(nearestObjects[player, ["ALL"], 3]); + if (!(call EPOCH_fnc_isInsideBuilding) && _isNearFire == 0) then { + _wet = true; + _increaseWet = rain * 10; + }; + }; + }; + }; +}; + +// allow player to over heat if air temp is high and player is Fatigued +if ((getFatigue player) >= 0.7 && _airTemp > 100) then { + _maxTemp = _airTemp; +}; + +// toxic fever and immunity increase +_playerToxicity = missionNamespace getVariable [_playerToxicityKey, _playerToxicityDefault]; +if (_playerToxicity > 0) then { + _playerImmunity = [_playerImmunityKey,0.1,_playerImmunityMax,_playerImmunityMin] call EPOCH_fnc_setVariableLimited; + _playerToxicity = [_playerToxicityKey,-0.1,_playerToxicityMax,_playerToxicityMin] call EPOCH_fnc_setVariableLimited; + // allow player to overheat + _maxTemp = _playerTempMax + 10; +}; + +// Body Temp handler +if (_warming) then { + _playerTemp = [_playerTempKey,0.01,_maxTemp,_playerTempMin] call EPOCH_fnc_setVariableLimited; +} else { + _playerTemp = [_playerTempKey,-0.01,_maxTemp,(_playerTempMin - 10)] call EPOCH_fnc_setVariableLimited; +}; + +// wet/dry +if (_wet) then { + _playerWet = [_playerWetKey,_increaseWet,_playerWetMax,_playerWetMin] call EPOCH_fnc_setVariableLimited; + if (_playerWet > 50) then { + _soiledLossRate = 1; + _playerSoiled = [_playerSoiledKey,-_soiledLossRate,_playerSoiledMax,_playerSoiledMin] call EPOCH_fnc_setVariableLimited; + }; +} else { + if (_warming) then { + _wetLossRate = 1; + _playerWet = [_playerWetKey,-_wetLossRate,_playerWetMax,_playerWetMin] call EPOCH_fnc_setVariableLimited; + }; +}; + +// Hunger / Thirst +_hungerlossRate = _baseHungerLoss * _lossMultiplier; +_thirstlossRate = _baseThirstLoss * _lossMultiplier; +_alcoholLossRate = _baseAlcoholLoss * _lossMultiplier; + +// Increase hunger if player is Fatigued +_playerStamina = missionNamespace getVariable [_playerStaminaKey, _playerStaminaDefault]; +if (_playerStamina < 100) then { + if ((getFatigue player) > 0) then { + _hungerlossRate = _hungerlossRate + (_hungerlossRate*(getFatigue player)); + }; +} else { + // reduce hunger loss if player stamina is greater than 100 + _hungerlossRate = (_hungerlossRate / 2); +}; + +// Alcohol Handler +_playerAlcohol = [_playerAlcoholKey,-_alcoholLossRate,_playerAlcoholMax,_playerAlcoholMin] call EPOCH_fnc_setVariableLimited; + +// Hunger Handler +_playerHunger = [_playerHungerKey,-_hungerlossRate,_playerHungerMax,_playerHungerMin] call EPOCH_fnc_setVariableLimited; + +// Thirst Handler +_playerThirst = [_playerThirstKey,-_thirstlossRate,_playerThirstMax,_playerThirstMin] call EPOCH_fnc_setVariableLimited; + +// Nuisance Handler +_playerNuisance = [_playerNuisanceKey,-1,_playerNuisanceMax,_playerNuisanceMin] call EPOCH_fnc_setVariableLimited; + + +// calculate max stamina +EPOCH_playerStaminaMax = (100 * (round(_playerAliveTime/360)/10)) min 2500; + +if (_isOnFoot) then { + _Walkdist = _lastPlayerPos2 distance (getposATL player); + if (_Walkdist < 150) then { + _TotalWalkDist = _TotalWalkDist + _Walkdist; + ["WalkDist",_TotalWalkDist,false,true] call EPOCH_client_updatePlayerStat; + }; +}; +_lastPlayerPos2 = getposATL player; +if (_playerAliveTime > _MaxAliveTime) then { + _MaxAliveTime = _playerAliveTime; + ["MaxAliveTime",_MaxAliveTime,false,true] call EPOCH_client_updatePlayerStat; +}; +_PlayTime = _PlayTime + diag_ticktime - _PlayTimeTimer; +["PlayTime",_PlayTime,false,true] call EPOCH_client_updatePlayerStat; +_PlayTimeTimer = diag_ticktime; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event3.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event3.sqf new file mode 100644 index 0000000..4ccb53a --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event3.sqf @@ -0,0 +1,12 @@ +// runs every 15 seconds +if !(_prevEquippedItem isEqualTo EPOCH_equippedItem_PVS) then { + _prevEquippedItem = EPOCH_equippedItem_PVS; + EPOCH_equippedItem_PVS remoteExec ["EPOCH_server_equippedItem",2]; +}; +// force update +if (_forceUpdate || EPOCH_forceUpdate) then { + _forceUpdate = false; + EPOCH_forceUpdate = false; + EPOCH_forceUpdateNow = false; + call _fnc_forceUpdate; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event4.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event4.sqf new file mode 100644 index 0000000..3a47f88 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event4.sqf @@ -0,0 +1,8 @@ +_nearByBobbersLocal = (player nearEntities[["Bobber_EPOCH"], 12]) select {local _x}; +if !(_nearByBobbersLocal isEqualTo []) then { + if ((random 100) < 50) then { + _bobber = selectRandom _nearByBobbersLocal; + _bobber setVelocity [0,-1,-10]; + _bobber setVariable ["EPOCH_fishOnLine" , diag_tickTime]; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event5.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event5.sqf new file mode 100644 index 0000000..ef66bab --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event5.sqf @@ -0,0 +1,142 @@ +_position = getPosATL player; + +_nearestLocations = nearestLocations[player, _radioactiveLocations, 300]; +EPOCH_nearestLocations = _nearestLocations; +_powerSources = nearestObjects[player, _energyPowerSources, _energyRange]; + +// TODO: add more sources and config based check instead of global var +// _nearestLocations removed as they don't support getVariable +// All sources used as a temp solution, please re-use as much as you can. +_allSources = nearestObjects[player, ["All"], _radiatedObjMaxRange]; +_nearbyRadioactiveObjects = _allSources select {(_x getVariable ["EPOCH_Rads", []]) select 0 > 0}; + +// check if player is out of map bounds. +_radsLevel = 0; +_worldSize = worldSize/2; +_outOfBounds = !(player inArea [[_worldSize,_worldSize,0], _worldSize, _worldSize, 0, true ]); + +{ + _location = []; + _LocName = (_x select 0) joinString " "; + { + if( (str _x) == _LocName ) exitwith { _location = _x; }; + } foreach _nearestLocations; + if !(_location isEqualTo []) then { + _x select 1 params ["_str","_intensity"]; + _dist = player distance getPos _location; + _radIntensity = if (_dist <= _intensity) then { + _str / _dist + } else { + 0 + }; + _radsLevel = _radsLevel + _radIntensity; + }; +}foreach EPOCH_radioactiveLocations; + +if (_outOfBounds) then { + // player is out of map bounds, give ten times background rads + ["You are out of the play area!", 5] call Epoch_message; + _radsLevel = _outOfBoundsRadiation; +} else { + // radiated objects or locations nearby + if !(_nearbyRadioactiveObjects isEqualTo []) then { + { + _x getVariable "EPOCH_Rads" params ["_str","_intensity"]; + _dist = player distance _x; + _radIntensity = if (_dist <= _intensity) then { + _str / _dist + } else { + 0 + }; + _radsLevel = _radsLevel + _radIntensity; + }forEach _nearbyRadioactiveObjects; + }; +}; + +//Reduce radiation by 90% +if ("radiation_mask_epoch" in assignedItems player) then { + _radsLevel = _radsLevel - (90 / 100 * _radsLevel); +}; + +//Reduce radiation by 50% for respirators (easy to find loot in construction sites?) +if ("respirator_placeholder" in assignedItems player) then { + _radsLevel = _radsLevel / 2; +}; + +//Reduce % radiation from max armor value possible +_maxArmor = (missionNamespace getVariable ["EPOCH_MAX_ARMOR",[0,0,0,2300]]) select 3; +_currentArmor = ((uniform player) call EPOCH_uniformArmorCalc) + ((vest player) call EPOCH_gearArmorCalc) + ((headgear player) call EPOCH_gearArmorCalc); +_currentArmorPercent = 100 - (_currentArmor / _maxArmor * 100); +_radsLevel = _currentArmorPercent / 100 * _radsLevel; + +//Reduce radiation by 100% TODO: move this to top, no point in doing all this calc if hazmat is on. +if (uniform player in ["Epoch_RadiationSuit_F","Epoch_RadiationSuit_M"]) then { + _radsLevel = 0; +}; + +// Radiation Handler +_playerRadiation = missionNamespace getVariable [_playerRadiationKey, _playerRadiationDefault]; +_playerImmunity = missionNamespace getVariable [_playerImmunityKey, _playerImmunityDefault]; + +if (_radsLevel > 0) then { // increase rads based on radiation levels + _playerRadiation = [_playerRadiationKey,_radsLevel,_playerRadiationMax,_playerRadiationMin] call EPOCH_fnc_setVariableLimited; +} else { //Decrease rad level, but at a cost of immunity loss + if (_playerRadiation > 0) then { + _playerRadiation = [_playerRadiationKey,(_baseRadiationLoss * _playerImmunity / 100),_playerRadiationMax,_playerRadiationMin] call EPOCH_fnc_setVariableLimited; + _playerImmunity = [_playerImmunityKey,_baseRadiationLossImmunityPenalty,_playerImmunityMax,_playerImmunityMin] call EPOCH_fnc_setVariableLimited; + }; +}; +if !(surfaceIsWater _position) then { + if (_nearestLocations isEqualTo []) then{ + if (count(player nearEntities["Animal_Base_F", 800]) < 2) then { + call EPOCH_client_loadAnimalBrain; + }; + }; +} else { + // spawn shark if player is deep water and not in vehicle + if !(_isOnFoot) then{ + _offsetZ = ((_position vectorDiff getPosASL player) select 2); + if (_offsetZ > 50) then { + ["GreatWhite_F", player, true] call EPOCH_unitSpawn; + }; + }; +}; + +// default power state +_chargeRate = 0; + +// energy Charge from nearby power plants +if !(_powerSources isEqualTo[]) then { + _totalCapacity = 0; + { + _powerClass = typeOf _x; + _powerCap = getNumber(_cfgBaseBuilding >> _powerClass >> "powerCapacity"); + _powerType = getNumber(_cfgBaseBuilding >> _powerClass >> "powerType"); + if (_powerCap == 0) then { + _powerCap = 100; + }; + _powerCap = switch _powerType do { + case 1: {if (sunOrMoon == 1) then {_powerCap * (1-overcast)} else {(_powerCap * (1 - overcast))/2}}; + case 2: {_powerCap * windstr}; + case 3: {_powerCap * (1 - ((player distance _x) / _energyRange))}; + default {_powerCap}; + }; + _totalCapacity = _totalCapacity + _powerCap; + } forEach _powerSources; + if (_totalCapacity > 0) then { + _players = player nearEntities[["Epoch_Male_F", "Epoch_Female_F"], _energyRange]; + if (_players isEqualTo []) then { + _chargeRate = round _totalCapacity; + } else { + _chargeRate = round (_totalCapacity / (count _players)); + }; + }; +}; + +// alive time handler +_playerAliveTime = round(_playerAliveTime + (_tickTime - _clientAliveTimer)); +missionNamespace setVariable [_playerAliveTimeKey, _playerAliveTime]; +_clientAliveTimer = _tickTime; + +// force update after 60 seconds +_forceUpdate = true; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event6.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event6.sqf new file mode 100644 index 0000000..5d5fc8c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event6.sqf @@ -0,0 +1,24 @@ +_playerNuisance = missionNamespace getVariable [_playerNuisanceKey, _playerNuisanceDefault]; +_playerSoiled = missionNamespace getVariable [_playerSoiledKey, _playerSoiledDefault]; +_spawnChance = ((_playerNuisance + _playerSoiled)/2) max 1; +// add more antagonist spawn chances +if (random _antagonistRndChance < _spawnChance) then { + // selectRandomWeighted arma 1.76 or higher + (selectRandomWeighted _antagonistChances) call EPOCH_unitSpawnIncrease; +}; + + +_spawnUnits = []; +{ + if (_x > 0) then{ + _spawnUnits pushBack(EPOCH_spawnIndex select _forEachIndex); + }; +} forEach (missionNamespace getVariable [_playerSpawnArrayKey, _playerSpawnArrayDefault]); + +diag_log format["DEBUG: _spawnUnits %1",_spawnUnits]; + +// test spawning one antagonist every 10 minutes select one unit at random to spawn +if !(_spawnUnits isEqualTo[]) then{ + (selectRandom _spawnUnits) call EPOCH_unitSpawn; +}; +_UpdateTopStats = true; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event7.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event7.sqf new file mode 100644 index 0000000..a84e3a9 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event7.sqf @@ -0,0 +1 @@ +// runs every 10 minutes diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event8.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event8.sqf new file mode 100644 index 0000000..db3e3c4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event8.sqf @@ -0,0 +1,5 @@ +//Updates favorites bar +call epoch_favBar_refresh; + +// process loot +call _lootBubble; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event9.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event9.sqf new file mode 100644 index 0000000..d0e7794 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/Event9.sqf @@ -0,0 +1,9 @@ +if ('ItemGeigerCounter_EPOCH' in assignedItems player) then { + if (!EPOCH_geiger_mute_counter || !EPOCH_geiger_mute_warning || EPOCH_geiger_shown) then { //only run if geiger activated + _radiatedObjMaxRange call epoch_geiger_simulate; + }; +} else { + if (EPOCH_geiger_shown) then { + call epoch_geiger_show_hide; + }; +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/init.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/init.sqf new file mode 100644 index 0000000..a5da85d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/setup/masterLoop/init.sqf @@ -0,0 +1,480 @@ +// make sure we wait for Display #46 +waitUntil {!isNull (findDisplay 46) && (!isNil "EPOCH_loadingScreenDone")}; + +// load favBar +'load' spawn epoch_favBar_draw; + +// Switch to 3rd person (if possible) +vehicle player switchCamera 'EXTERNAL'; + +// force update within 15 seconds +EPOCH_forceUpdate = false; +_forceUpdate = false; +// force update within 1 second +EPOCH_forceUpdateNow = false; + +// start alive timer +_clientAliveTimer = diag_tickTime; + +// Fade Black Screen +_fadedblack = false; +_UnFadeCheck = { + if(_fadedblack) then { + [] spawn { + uisleep 1.5; + TitleText ['','PLAIN DOWN']; + }; + _fadedblack = false; + }; +}; + +// init player stat vars +_gmVarsInit = ["CfgEpochClient", "gmVars", [["Temp",98.6],["Hunger",500],["Thirst",500],["Toxicity",0],["Stamina",10],["BloodP",100],["Alcohol",0],["Radiation",0]]] call EPOCH_fnc_returnConfigEntryV2; +_gModeVarNames = _gmVarsInit apply {_x param [0,""]}; +_gModeVarValues = _gmVarsInit apply {_x param [1,0]}; + +_customVarsInit = ["CfgEpochClient", "customVarsDefaults", EPOCH_customVarsDefaults] call EPOCH_fnc_returnConfigEntryV2; +_customVarNames = _customVarsInit apply {_x param [0,""]}; +_defaultVarValues = _customVarsInit apply {_x param [1,0]}; +_customVarLimits = _customVarsInit apply {_x param [2,[]]}; + +(_customVarLimits select (_customVarNames find "Temp")) params [["_playerTempMax",100],["_playerTempMin",0]]; +(_defaultVarValues select (_customVarNames find "Temp")) params [["_playerTempDefault",0]]; +(_customVarLimits select (_customVarNames find "Hunger")) params [["_playerHungerMax",100],["_playerHungerMin",0]]; +(_defaultVarValues select (_customVarNames find "Hunger")) params [["_playerHungerDefault",0]]; +(_customVarLimits select (_customVarNames find "Thirst")) params [["_playerThirstMax",100],["_playerThirstMin",0]]; +(_defaultVarValues select (_customVarNames find "Thirst")) params [["_playerThirstDefault",0]]; +(_customVarLimits select (_customVarNames find "Energy")) params [["_playerEnergyMax",100],["_playerEnergyMin",0]]; +(_defaultVarValues select (_customVarNames find "Energy")) params [["_playerEnergyDefault",0]]; +(_customVarLimits select (_customVarNames find "Wet")) params [["_playerWetMax",100],["_playerWetMin",0]]; +(_defaultVarValues select (_customVarNames find "Wet")) params [["_playerWetDefault",0]]; +(_customVarLimits select (_customVarNames find "Soiled")) params [["_playerSoiledMax",100],["_playerSoiledMin",0]]; +(_defaultVarValues select (_customVarNames find "Soiled")) params [["_playerSoiledDefault",0]]; +(_customVarLimits select (_customVarNames find "Immunity")) params [["_playerImmunityMax",100],["_playerImmunityMin",0]]; +(_defaultVarValues select (_customVarNames find "Immunity")) params [["_playerImmunityDefault",0]]; +(_customVarLimits select (_customVarNames find "Toxicity")) params [["_playerToxicityMax",100],["_playerToxicityMin",0]]; +(_defaultVarValues select (_customVarNames find "Toxicity")) params [["_playerToxicityDefault",0]]; +(_customVarLimits select (_customVarNames find "Stamina")) params [["_playerStaminaMax",100],["_playerStaminaMin",0]]; +(_defaultVarValues select (_customVarNames find "Stamina")) params [["_playerStaminaDefault",0]]; +(_customVarLimits select (_customVarNames find "BloodP")) params [["_playerBloodPMax",100],["_playerBloodPMin",0]]; +(_defaultVarValues select (_customVarNames find "BloodP")) params [["_playerBloodPDefault",0]]; +(_customVarLimits select (_customVarNames find "Alcohol")) params [["_playerAlcoholMax",100],["_playerAlcoholMin",0]]; +(_defaultVarValues select (_customVarNames find "Alcohol")) params [["_playerAlcoholDefault",0]]; +(_customVarLimits select (_customVarNames find "Radiation")) params [["_playerRadiationMax",100],["_playerRadiationMin",0]]; +(_defaultVarValues select (_customVarNames find "Radiation")) params [["_playerRadiationDefault",0]]; +(_customVarLimits select (_customVarNames find "Nuisance")) params [["_playerNuisanceMax",100],["_playerNuisanceMin",0]]; +(_defaultVarValues select (_customVarNames find "Nuisance")) params [["_playerNuisanceDefault",0]]; + +(_defaultVarValues select (_customVarNames find "AliveTime")) params [["_playerAliveTimeDefault",0]]; +(_defaultVarValues select (_customVarNames find "HitPoints")) params [["_playerHitPointsDefault",0]]; +(_defaultVarValues select (_customVarNames find "SpawnArray")) params [["_playerSpawnArrayDefault",0]]; +(_defaultVarValues select (_customVarNames find "MissionArray")) params [["_playerMissionArrayDefault",0]]; + +// push inital vars to new gvars +{ + _varDefault = _defaultVarValues select _foreachindex; + _varName = format["EPOCH_player%1",_x]; + _varNameTmp = call compile format["_player%1Key",_x]; + if !(isNil "_varNameTmp") then {_varName = _varNameTmp}; + missionNamespace setVariable [_varName, missionNamespace getVariable [format["EPOCH_player%1",_x], _varDefault]]; +} forEach _customVarNames; +missionNamespace setVariable [call compile "_playerRandomVarKey", round (diag_tickTime + random 99999)]; + +// only changed within this loop +_playerAliveTime = missionNamespace getVariable [_playerAliveTimeKey, _playerAliveTimeDefault]; + +// init Energy Max +EPOCH_playerEnergyMax = _playerEnergyMax; + +// inline function to sync player stats to server +_fnc_forceUpdate = { + private _customVars = []; + { + private _varName = format["EPOCH_player%1",_x]; + private _varNameTmp = call compile format["_player%1Key",_x]; + if !(isNil "_varNameTmp") then {_varName = _varNameTmp}; + _customVars pushBack (missionNamespace getVariable [_varName,_defaultVarValues select _foreachindex]); + } forEach _customVarNames; + _stats = [ + ["WalkDist",round _TotalWalkDist,true], + ["MaxAliveTime",_MaxAliveTime,true], + ["PlayTime", round _PlayTime, true], + ["PublicStats",missionnamespace getvariable ["EPOCH_totalPublicStats",1], true] + ]; + [player,_customVars,Epoch_personalToken,_stats,_UpdateTopStats] remoteExec ["EPOCH_fnc_savePlayer",2]; + _UpdateTopStats = false; +}; + +// disable fuel sources client side. +{_x setFuelCargo 0;} foreach (missionNamespace getVariable ["EPOCH_staticFuelSources", []]); + +// setup display EH's +if (isNil "EPOCH_display_setup_complete") then { + EPOCH_display_setup_complete = true; + { + (findDisplay 46) displayAddEventHandler [_x,(["CfgEpochClient", _x, ""] call EPOCH_fnc_returnConfigEntryV2)]; + } forEach (["CfgEpochClient", "displayAddEventHandler", []] call EPOCH_fnc_returnConfigEntryV2); + // reset anim state + player switchMove ""; + // setup Epoch Hud + call epoch_dynamicHUD_start; +}; + +player setVariable["BIS_noCoreConversations", true]; + +// Background radiation +_outOfBoundsRadiation = ["CfgEpochClient", "outOfBoundsRadiation", 10] call EPOCH_fnc_returnConfigEntryV2; +_radsLevel = 0; +// Radiation screen effects threshold +_radiationEffectsThreshold = ["CfgEpochClient", "radiationEffectsThreshold", 10] call EPOCH_fnc_returnConfigEntryV2; + +_prevEquippedItem = []; +_damagePlayer = damage player; +_isOnFoot = isNull objectParent player; +_panic = false; +_prevEnergy = missionNamespace getVariable [_playerEnergyKey, _playerEnergyDefault]; + +_EPOCH_Autorunspeed = 1; +// init config data +_antagonistRndChance = ["CfgEpochClient", "antagonistRngChance", 100] call EPOCH_fnc_returnConfigEntryV2; + +_LootCleanupTime = ["CfgBuildingLootPos", "LootCleanupTime", 300] call EPOCH_fnc_returnConfigEntryV2; +_baseRadiationLoss = ["CfgEpochClient", "baseRadiationLoss", -0.1] call EPOCH_fnc_returnConfigEntryV2; +_baseRadiationLossImmunityPenalty = ["CfgEpochClient", "baseRadiationLossImmunityPenalty", -0.1] call EPOCH_fnc_returnConfigEntryV2; +_baseHungerLoss = ["CfgEpochClient", "baseHungerLoss", 2] call EPOCH_fnc_returnConfigEntryV2; +_baseThirstLoss = ["CfgEpochClient", "baseThirstLoss", 2] call EPOCH_fnc_returnConfigEntryV2; +_baseAlcoholLoss = ["CfgEpochClient", "baseAlcoholLoss", 0.17] call EPOCH_fnc_returnConfigEntryV2; +_lossMultiplier = if (["CfgEpochClient", "accelerateHTALoss", true] call EPOCH_fnc_returnConfigEntryV2) then {timeMultiplier} else {1}; +_energyCostNV = ["CfgEpochClient", "energyCostNV", 3] call EPOCH_fnc_returnConfigEntryV2; +_energyPowerSources = ["CfgEpochClient", "energyPowerSources", ["Land_spp_Tower_F","Land_wpp_Turbine_V2_F","Land_wpp_Turbine_V1_F","SolarGen_EPOCH","Land_Wreck_Satellite_EPOCH"]] call EPOCH_fnc_returnConfigEntryV2; +_energyRegenInVeh = ["CfgEpochClient", "energyChargeInVeh", 5] call EPOCH_fnc_returnConfigEntryV2; +_energyRegenMax = ["CfgEpochClient", "energyRegenMax", 5] call EPOCH_fnc_returnConfigEntryV2; +_energyRange = ["CfgEpochClient", "energyRange", 75] call EPOCH_fnc_returnConfigEntryV2; +_hudConfigs = ["CfgEpochClient", "hudConfigs", []] call EPOCH_fnc_returnConfigEntryV2; +_radioactiveLocations = ["CfgEpochClient", "radioactiveLocations", ["NameCityCapital", "NameCity", "Airport"]] call EPOCH_fnc_returnConfigEntryV2; +_radiatedObjMaxRange = ["CfgEpochClient", "radiatedObjMaxFalloutDist", 75] call EPOCH_fnc_returnConfigEntryV2; +_PlayerMarkerArray = getArray(('CfgMarkerSets' call EPOCH_returnConfig) >> 'PlayerMarker' >> 'markerArray'); +_PlayerMarkerName = (_PlayerMarkerArray param [0,[]]) param [0,"EPOCH_PlayerMarker1"]; +_DeathMarkerName = ((getArray (('CfgMarkerSets' call EPOCH_returnConfig) >> 'DeathMarker' >> 'markerArray')) param [0,[]]) param [0,"EPOCH_DeathMarker1"]; +_mapOnZoomSetMarkerSize = ["CfgEpochClient", "mapOnZoomSetMarkerSize", 0] call EPOCH_fnc_returnConfigEntryV2; +_PlayerMarkerEnabled = (["CfgEpochClient", "playerLocationMarkerGPSOnly", 0] call EPOCH_fnc_returnConfigEntryV2) isequalto 1; +_DeathMarkerEnabled = (["CfgEpochClient", "playerDeathMarkerGPSOnly", 0] call EPOCH_fnc_returnConfigEntryV2) isequalto 1; +_DeathMarker = profileNameSpace getVariable ['EPOCHLastKnownDeath',[]]; +_chargeRate = 0; + +_antagonistChanceDefaults = [ + "Epoch_Cloak_F",0.07, + "Epoch_Sapper_F",0.25, + "Epoch_SapperG_F",0.12, + "Epoch_SapperB_F",0.06, + "I_UAV_01_F",0.2, + "PHANTOM",0.01, + "EPOCH_RyanZombie_1",0.25 +]; +_antagonistChances = ["CfgEpochClient", "antagonistChances", _antagonistChanceDefaults] call EPOCH_fnc_returnConfigEntryV2; + + +// Init antagonist spawn limits +_spawnIndex = []; +_spawnLimits = []; +_antagonistSpawnDefaults = [ + ["Epoch_Cloak_F", 1], + ["GreatWhite_F", 2], + ["Epoch_Sapper_F",2], + ["Epoch_SapperG_F",1], + ["Epoch_SapperB_F",1], + ["I_UAV_01_F",2], + ["PHANTOM",1], + ["B_Heli_Transport_01_F",1], + ["EPOCH_RyanZombie_1",12] +]; +_antagonistSpawnLimits = ["CfgEpochClient", "antagonistSpawnIndex", _antagonistSpawnDefaults] call EPOCH_fnc_returnConfigEntryV2; + +_mod_Ryanzombies_Enabled = missionNamespace getVariable ["EPOCH_mod_Ryanzombies_Enabled",false]; +{ + _x params ["_spawnName","_spawnLimit"]; + if (_spawnName isEqualTo "EPOCH_RyanZombie_1") then { + if (_mod_Ryanzombies_Enabled) then { + _spawnIndex pushBack _spawnName; + _spawnLimits pushBack _spawnLimit; + }; + } else { + _spawnIndex pushBack _spawnName; + _spawnLimits pushBack _spawnLimit; + }; +} forEach _antagonistSpawnLimits; + +EPOCH_spawnIndex = _spawnIndex; +EPOCH_spawnLimits = _spawnLimits; + +// default data if mismatch +_playerSpawnArray = missionNamespace getVariable [_playerSpawnArrayKey, _playerSpawnArrayDefault]; +if !(_playerSpawnArray isEqualTypeParams _spawnIndex) then{ + _playerSpawnArray = []; + { _playerSpawnArray pushBack 0 } forEach _spawnIndex; +}; +missionNamespace setVariable [_playerSpawnArrayKey, _playerSpawnArray]; + +// find radio +{ + if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) == "ItemRadio") exitWith{ + EPOCH_equippedItem_PVS = [_x, true, player]; + }; +} forEach assignedItems player; + +// lootBubble Init +_masterConfig = 'CfgBuildingLootPos' call EPOCH_returnConfig; +_LootedBuildings = []; + +_lootClasses = []; +_lootClassesIgnore = ['Default']; +'_cN = configName _x;if !(_cN in _lootClassesIgnore)then{_lootClasses pushBackUnique (toLower _cN)}; true' configClasses _masterConfig; + +_lastPlayerPos = getPosATL player; +_lastPlayerPos2 = getPosATL player; +_TotalWalkDist = missionnamespace getvariable ["EPOCH_totalWalkDist",0]; +_MaxAliveTime = missionnamespace getvariable ["EPOCH_totalMaxAliveTime",0]; +_PlayTime = missionnamespace getvariable ["EPOCH_totalPlayTime",0]; +_PlayTimeTimer = diag_ticktime; +_UpdateTopStats = false; +EPOCH_MyStatsPublic = !((missionnamespace getvariable ["EPOCH_totalPublicStats",1]) isEqualTo 0); + +_lootBubble = { + private["_jammer", "_others", "_objects", "_nearObjects", "_building", "_lootDist", "_lootLoc", "_playerPos", "_distanceTraveled","_AddBias","_dir","_minlootdist","_maxlootdist"]; + if (!alive player) exitwith {}; + if (speed vehicle player > 30) exitwith {}; + _playerPos = getPosATL vehicle player; + if (_lastPlayerPos distance2D _playerPos < 30) exitwith {}; + _lastPlayerPos = _playerPos; + if (missionnamespace getvariable ["InSafeZone",false]) exitwith {}; + _objects = (player nearObjects ["Building", 60]) select { + (_x distance player > 15) && + {!(_x in _LootedBuildings)} && + {(_x nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 15]) isEqualTo []} && + {(_x nearObjects ["PlotPole_Epoch", 100]) isEqualTo []} && + {(_x nearObjects ["ProtectionZone_Invisible_F", 25]) isEqualTo []} && + {!(_x getvariable ["EPOCH_Skiploot",false])} && + {!(isObjectHidden _x)} + }; +// systemchat format ["Found %1 not looted Buildings", count _objects]; + if !(_objects isEqualTo[]) then { + _LootsArray = []; + { + _building = _x; + _LootedBuildings pushback _x; + if (count _LootedBuildings > 300) then { + _LootedBuildings deleteat 0; + }; +// _building setvariable ["Epoch_LastLootCheck",diag_ticktime]; + _selectedConfig = typeOf _building; + if (_selectedConfig isEqualTo "") then { + (getModelInfo _building) params [["_modelName",""]]; + if (!isnil "_modelName") then { + _selectedConfig = (_modelName splitString " .") joinString "_"; + }; + }; + _BuildingLootVars = missionnamespace getvariable [format ["Epoch_BuildingLootVars_%1",_selectedConfig],[]]; + if (_BuildingLootVars isEqualTo []) then { + if (_foreachindex > 10) exitwith { // Do not store / check more than 10 Building Types in one check + _BuildingLootVars = [false]; + }; + _config = _masterConfig >> _selectedConfig; + if (isClass(_config)) then { + _lootType = getText(_config >> "lootType"); + _EpochLootChance = getNumber (_config >> "EpochLootChance"); + _limit = getNumber (_config >> "limit"); + _GroundSpawnChance = getNumber (_config >> "GroundSpawnChance"); + _MinGroundContainers = getNumber (_config >> "MinGroundContainers"); + _MaxGroundContainers = getNumber (_config >> "MaxGroundContainers"); + _loots = getArray(_config >> "loottypes"); + _lootpositions = []; + _possibleLoots = []; + { + _x params ["_posNameTMP","_class","_randomColor"]; + _posName = _posNameTMP; + _positions = getArray(_config >> _posName); + { + _possibleLoots pushBack [_class,_randomColor,_x]; + if !((tolower _posName) in ["cabinetpos","toolrackpos"]) then { + _LootPositions = _LootPositions + getArray (_config >> _posName); + }; + } forEach _positions; + } forEach _loots; + _BuildingLootVars = [true,_lootType,_EpochLootChance,_limit,_GroundSpawnChance,_MinGroundContainers,_MaxGroundContainers,_possibleLoots,_lootpositions]; + }; + if (_BuildingLootVars isEqualTo []) then { + _BuildingLootVars = [false]; + }; + missionnamespace setvariable [format ["Epoch_BuildingLootVars_%1",_selectedConfig],_BuildingLootVars]; + }; + _BuildingLootVars params ["_DoSpawn","_lootType","_EpochLootChance","_limit","_GroundSpawnChance","_MinGroundContainers","_MaxGroundContainers","_possibleLoots","_lootpositions"]; + if (_DoSpawn) then { + _possibleLoots = +_possibleLoots; + _lootpositions = +_lootpositions; + _buildingLoot = []; + if ((random 100) < _EpochLootChance) then { + _buildingLoot = [_building,"EpochLoot",[]]; + if !(_possibleLoots isEqualTo []) then { + _lootLimit = (round random _limit) max 1; + for "_i" from 1 to _lootLimit do { + _possibleCount = count _possibleLoots; + if (_possibleCount > 0) then { + _randomIndex = (floor random(_possibleCount)); + _selectedLoot = _possibleLoots deleteAt _randomIndex; + _selectedLoot params ["_class","_randomColor","_position"]; + _position params ["_m2WPos","_relDir"]; + _pos = _building modelToWorld _m2WPos; + if (_pos select 2 < 0) then { + _pos set[2, 0]; + }; + if (_class isEqualType []) then { + _class = selectRandom _class; + }; + _dir = _relDir + (getDir _building); + _color = ""; + if (_randomColor isEqualTo "true") then { + _colors = getArray(_cfgBaseBuilding >> _class >> "availableTextures"); + if !(_colors isEqualTo[]) then { + _color = selectRandom _colors; + }; + }; + (_buildingLoot select 2) pushback [_class, _pos, _dir, _color]; + }; + }; + }; + } + else { + if ((random 100) < _GroundSpawnChance) then { + _buildingLoot = [_building,"GroundLoot",[]]; + if !(_lootpositions isEqualTo []) then { + for "_i" from 1 to (_MinGroundContainers + (round (random (_MaxGroundContainers - _MinGroundContainers)))) do { + if ((count _lootpositions) > 0) then { + _position = _lootpositions deleteat (floor (random (count _lootpositions))); + _position params ["_m2WPos","_relDir"]; + _pos = _building modelToWorld _m2WPos; + _pos = _pos vectoradd [0,0,0.02]; + if (_pos select 2 < 0) then { + _pos set[2, 0]; + }; + (_buildingLoot select 2) pushback [_lootType,_pos]; + }; + }; + }; + }; + }; + if !(_buildingLoot isEqualTo []) then { + _LootsArray pushback _buildingLoot; + }; + }; + } foreach _objects; +// systemchat format ["Spawned Loot in %1 Buildings", count _LootsArray]; + if !(_LootsArray isEqualTo []) then { + [player,Epoch_personalToken,_LootsArray] remoteExec ["EPOCH_server_spawnLoot",2]; + }; + }; +}; + +// init weather temperature var if not already set +if (isNil "EPOCH_CURRENT_WEATHER") then { + EPOCH_CURRENT_WEATHER = 75; +}; + +_cursorTarget = objNull; + +// init cfgBaseBuilding config var +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +_cfgObjectInteractions = 'CfgObjectInteractions' call EPOCH_returnConfig; + + +_EPOCH_BuildTraderMisson = { + params ['_inGameTasksconfig','_taskName',['_unit',objnull],['_taskItem',objnull]]; + _taskTitle = getText ( _inGameTasksconfig >> _taskName >> "title"); + _taskSQF = getText ( _inGameTasksconfig >> _taskName >> "initsqf"); + if !(_taskSQF isequalto '') then { + call compile format ["[_taskName,player,_unit,_taskItem] execVM ""%1""",_taskSQF]; + }; + _taskCall = getText ( _inGameTasksconfig >> _taskName >> "initcall"); + if !(_taskCall isequalto '') then { + call compile _taskCall; + }; + + _taskDelay = diag_ticktime + (getNumber ( _inGameTasksconfig >> _taskName >> "triggerDelay")); + _triggerintervall = getNumber ( _inGameTasksconfig >> _taskName >> "triggerintervall"); + _taskItems = getArray ( _inGameTasksconfig >> _taskName >> "items"); + if !(_taskItems isequalto []) then { + [player,Epoch_personalToken,_taskItems,[],objNull,false] remoteExec ["EPOCH_Server_createObject",2]; + }; + + _taskMarkerType = getnumber (_inGameTasksconfig >> _taskName >> 'markerType'); + if (_taskMarkerType > 0) then { + _taskMarkerVis = getNumber ( _inGameTasksconfig >> _taskName >> "markerVisible"); + _markerPos = [0,0,0]; + if (isNil "EPOCH_taskMarkerPos") then { + if !(isNull _trgt) then { + _markerPos = getPos _trgt; + }; + if !(isNull _unit) then{ + _markerPos = getPos _unit; + }; + if !(isNull _taskItem) then { + _markerPos = getPos _taskItem; + }; + } + else { + _markerPos = EPOCH_taskMarkerPos; + }; + _mkrName = format ["EPOCHTaskMark%1%2",_taskName,diag_tickTime]; + EPOCH_taskMarker = [_mkrName,_taskMarkerVis]; + _taskMarkerText = getText ( _inGameTasksconfig >> _taskName >> "markerText"); + _taskMarkerRad = getNumber ( _inGameTasksconfig >> _taskName >> "markerRadius"); + if(_taskMarkerType == 2)then{ + _markerPos set [0, (_markerPos select 0) + (floor (random _taskMarkerRad) - (_taskMarkerRad / 2))]; + _markerPos set [1, (_markerPos select 1) + (floor (random _taskMarkerRad) - (_taskMarkerRad / 2))]; + }; + [[_taskMarkerVis,player],_markerPos,"ELLIPSE","mil_dot",_taskMarkerText,"ColorYellow",[_taskMarkerRad,_taskMarkerRad], "SolidBorder", 42, 0.6,_mkrName] remoteExec ["EPOCH_server_makeMarker",2]; + }; + _taskDialogues = []; + { + _x params [["_condition",""],["_dialogue",""]]; + if !(_condition isequalto "" || _dialogue isequalto "") then { + _taskDialogues pushback [compile _condition,_dialogue]; + }; + } foreach (getarray (_inGameTasksconfig >> _taskName >> 'dialogues')); + _taskEvents = []; + { + _x params [["_condition",""],["_taskEventCALL",""],["_taskEventTasks",[]]]; + if !(_condition isequalto "") then { + _taskEvents pushback [compile _condition,compile _taskEventCALL,_taskEventTasks]; + }; + } foreach (getarray (_inGameTasksconfig >> _taskName >> 'callevents')); + _taskFailedCond = compile getText ( _inGameTasksconfig >> _taskName >> "failedCondition"); + _taskFailTime = (getNumber ( _inGameTasksconfig >> _taskName >> "abandonTime")); + if (_taskFailTime < 1) then {_taskFailTime=999999} else {_taskFailTime = _taskFailTime + diag_ticktime}; + _taskFailedDiags = getArray ( _inGameTasksconfig >> _taskName >> "faileddialogues"); + _taskFailedSQF = getText ( _inGameTasksconfig >> _taskName >> "failedSQF"); + _taskFailedCall = compile getText ( _inGameTasksconfig >> _taskName >> "failedCall"); + _nextTask = getArray ( _inGameTasksconfig >> _taskName >> "failedTask"); + + _taskCompleteCond = compile getText ( _inGameTasksconfig >> _taskName >> "completeCondition"); + _taskReward = getArray ( _inGameTasksconfig >> _taskName >> "reward"); + _taskCompleteDiags = getArray ( _inGameTasksconfig >> _taskName >> "completedialogues"); + _taskCompleteCall = compile getText ( _inGameTasksconfig >> _taskName >> "completedCALL"); + _taskNextTrigger = getArray ( _inGameTasksconfig >> _taskName >> "nextTask"); + + _missionCleanUpCall = compile getText ( _inGameTasksconfig >> _taskName >> "cleanUpCall"); + _taskCleanup = getNumber ( _inGameTasksconfig >> _taskName >> "cleanUp"); + _return = [ + [_inGameTasksconfig,_taskName,_unit,_taskItem,_taskTitle,_missionCleanUpCall,_taskCleanup], + _taskDelay, + _triggerintervall, + _taskDialogues, + _taskEvents, + [_taskFailedCond,_taskFailTime,_taskFailedDiags,_taskFailedSQF,_taskFailedCall,_nextTask], + [_taskCompleteCond,_taskReward,_taskCompleteDiags,_taskCompleteCall,_taskNextTrigger] + ]; + EPOCH_task_startTime = diag_ticktime; + _return +}; +_epoch_tradermissionarray = []; +EPOCH_ActiveTraderMission = []; +_LastMissionTrigger = 0; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_NPCTraderMenuFilter.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_NPCTraderMenuFilter.sqf new file mode 100644 index 0000000..9730b4c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_NPCTraderMenuFilter.sqf @@ -0,0 +1,185 @@ +/* + Author: He-Man - Ignatz-Gaming + + Contributors: Raimonds Virtoss + + Description: + Filter Items in Trader Dialog + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/traders/EPOCH_NPCTraderFilter.sqf +*/ + +disableSerialization; +private [ "_PlayerFilerDropDown","_PlayerItemsBox","_PlayerItemsOutBox","_TraderItemsBox","_TraderItemsOutBox","_config","_MainCategoriearray","_FilterArray","_MainCategorie","_subcategories","_SubCategorieItems", + "_slot","_isPlayerFilter","_item","_rounds","_maxrnd","_tooltip","_qty","_id","_vehicles","_VehOfferArray","_sizeOut","_type","_itemCount","_itemOfferCount","_name","_picture","_items","_qtys","_sortarray" +]; +params ["_control","_index"]; + +_PlayerFilerDropDown = 42100; +_PlayerItemsBox = 41500; +_PlayerItemsOutBox = 41501; +_TraderItemsBox = 41503; +_TraderItemsOutBox = 41502; + +_config = 'CfgItemSort' call EPOCH_returnConfig; +_MainCategoriearray = getarray (_config >> "MainCategories" >> "Classes"); +_FilterArray = []; +if (_index != 0) then { + { + _MainCategorie = _x; + if (_index == (_MainCategorie select 0)) then { + _subcategories = _MainCategorie select 2; + { + _SubCategorieItems = getArray (_config >> "SubCatergories" >> _x); + { + _FilterArray pushback (tolower _x); + } foreach _SubCategorieItems; + } forEach _subcategories; + }; + } forEach _MainCategoriearray; +}; +if !(isNull EPOCH_lastNPCtradeTarget) then { + _slot = EPOCH_lastNPCtradeTarget getVariable["AI_SLOT", -1]; + if (_slot != -1) then { + _isPlayerFilter = (ctrlIDC _control == _PlayerFilerDropDown); + if (_isPlayerFilter) then { + lbClear _PlayerItemsBox; + { + _item = _x; + _rounds = 1; + _onHand = false; + if (_item isequaltype []) then { + _item = _x select 0; + if ((_x select 1) isequalto "Hand") then { + _onHand = true; + } + else { + _rounds = _x select 1; + }; + }; + if !(_item isequalto "") then { + _maxrnd = 1; + _tooltip = ""; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _qty = _rounds/_maxrnd; + if (_qty < 1) then { + _tooltip = format ["%1 rounds left in Magazine",_rounds]; + }; + if (_index == 0 || (tolower _item) in _FilterArray) then { + _id = lbAdd [_PlayerItemsBox, (_item call EPOCH_itemDisplayName) + (if (_onHand) then {" (in Hand)"} else {""})]; + lbSetData [_PlayerItemsBox, _id, _item]; + lbSetValue [_PlayerItemsBox, _id, _rounds]; + lbSetPicture [_PlayerItemsBox, _id, _item call EPOCH_itemPicture]; + if !(_tooltip isequalto "") then { + lbSetTooltip [_PlayerItemsBox, _id, _tooltip]; + lbSetColor [_PlayerItemsBox,_id,[1,(_rounds/_maxrnd),0,1]]; + }; + if (_onHand) then { + lbSetColor [_PlayerItemsBox,_id,[1,1,1,0.5]]; + }; + }; + }; + } forEach EPOCH_NpcTradePlayerItems; + + _vehicles = player nearEntities [["LandVehicle","Ship","Air","Tank"], ["CfgEpochClient", "MaxVehTradeDist", 30] call EPOCH_fnc_returnConfigEntryV2]; + if !(_vehicles isequalto []) then { + _VehOfferArray = []; + _sizeOut = lbSize _PlayerItemsOutBox; + if (_sizeOut > 0) then { + for "_i" from 0 to (_sizeOut - 1) do { + _item = lbData [_PlayerItemsOutBox, _i]; + if (_item iskindof "Landvehicle" || _item iskindof "AIR" || _item iskindof "SHIP" || _item iskindof "TANK") then { + _VehOfferArray pushBack _item; + }; + }; + }; + { + if (local _x) then { + _type = typeOf _x; + if (_index == 0 || (tolower _type) in _FilterArray) then { + _itemCount = { typeOf _x == _type } count _vehicles; + _itemOfferCount = { _x == _type } count _VehOfferArray; + if (_itemCount > _itemOfferCount) then { + _config = configFile >> "CfgVehicles" >> _type; + _name = getText(_config >> "displayName"); + _picture = getText(_config >> "picture"); + _id = lbAdd[_PlayerItemsBox, _name]; + lbSetData[_PlayerItemsBox, _id, _type]; + lbSetValue [_PlayerItemsBox, _id, 1]; + lbSetPicture[_PlayerItemsBox, _id, _picture]; + }; + }; + }; + } forEach _vehicles; + }; + lbsort ((findDisplay -8) displayCtrl _PlayerItemsBox); + } + else { + lbClear _TraderItemsBox; + if ((count EPOCH_NpcTradeTraderItems) == 2) then { + _items = EPOCH_NpcTradeTraderItems select 0; + _qtys = EPOCH_NpcTradeTraderItems select 1; + _sortarray = []; + { + _sortarray pushback [_x call EPOCH_itemDisplayName,_x,_qtys select _foreachindex]; + } foreach _items; + _sortarray sort true; + { + _x params ["_displayname","_item","_rounds"]; + if !(_item isequalto "") then { + if (_index == 0 || (tolower _item) in _FilterArray) then { + _maxrnd = 1; + _tooltip = ""; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _qty = (_rounds/_maxrnd); + if (_qty >= 1) then { + _qty = floor _qty; + } + else { + _qty = ceil _qty; + _tooltip = format ["%1 rounds left in Magazine",_rounds]; + }; + if (_qty > 0) then { + _id = lnbAddRow [_TraderItemsBox, ["", str(_qty),_displayname]]; + lnbSetData [_TraderItemsBox, [_id,0], _item]; + lnbSetValue [_TraderItemsBox, [_id,0], _rounds]; + lnbSetPicture [_TraderItemsBox, [_id,0], _item call EPOCH_itemPicture]; + if !(_tooltip isequalto "") then { + lnbSetColor [_TraderItemsBox,[_id,2],[1,(_rounds/_maxrnd),0,1]]; + }; + _description = ""; + { + _description = gettext (configfile >> _x >> _item >> "descriptionShort"); + if !(_description isEqualTo "") exitwith { + { + while {_description find (_x select 0) > -1} do { + _remove = _description find (_x select 0); + _description = (_description select [0,_remove]) + "\n" + (_description select [(_remove+(_x select 1))]); + }; + if !(_tooltip isEqualTo "") then { + _tooltip = _tooltip + "\n"; + }; + } foreach [["
",6],["
",5]]; + + }; + } foreach ["cfgmagazines","cfgweapons","cfgvehicles"]; + _tooltip = _tooltip + _description; + lbSetTooltip [_TraderItemsBox, _id*3, _tooltip]; + }; + }; + }; + } forEach _sortarray; + }; + }; + }; +} else { + closeDialog 0; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_NpcTrade_return.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_NpcTrade_return.sqf new file mode 100644 index 0000000..7d27fa9 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_NpcTrade_return.sqf @@ -0,0 +1,75 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: He-Man - Ignatz-Gaming + + Description: + NPC trade code + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/traders/EPOCH_startNpcTrade.sqf + + Example: + cursorTarget call EPOCH_startNpcTrade; + + Parameter(s): + _this: OBJECT + + Returns: + NOTHING +*/ +//[[[cog import generate_private_arrays ]]] +private ["_addWeaponToHands","_item","_type"]; +//[[[end]]] +params [["_returnIn",[]],["_returnOut",[]],["_message",""]]; + +if (isNil "EPOCH_TRADE_STARTED") exitWith{}; + +if !(_returnOut isEqualTo[]) then { + // add purchased items + { + _x params ["_item","_count"]; + if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then { + _type = getNumber(configfile >> "CfgWeapons" >> _item >> "type"); + _addWeaponToHands = false; + switch (_type) do { + case 1: { + if (primaryWeapon player == "") then { + _addWeaponToHands = true; + }; + }; + case 4: { + if (secondaryWeapon player == "") then { + _addWeaponToHands = true; + }; + }; + case 2: { + if (handgunWeapon player == "") then { + _addWeaponToHands = true; + }; + }; + }; + if (_addWeaponToHands) then { + player addWeapon _item; + } + else { + _item call EPOCH_fnc_addItemOverflow; + }; + } + else { + if ([_item, "CfgMagazines"] call EPOCH_fnc_isAny) then { + [_item,_count] call EPOCH_fnc_addMagazineOverflow; + }; + }; + } forEach _returnOut; +}; + +if !(_message isequalto "") then { + [_message, 5] call Epoch_message; +}; + +EPOCH_TRADE_STARTED = nil; + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_calcDamageCost.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_calcDamageCost.sqf new file mode 100644 index 0000000..ae866de --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_calcDamageCost.sqf @@ -0,0 +1,35 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: Takes in total cost of vehicle and returns new price with damage % taken into account + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_refresh.sqf + + Usage: [_vehOBJ,_costINT] call EPOCH_calcDamageCost; +*/ + +private ["_dmg","_hitPoints"]; +params [["_obj",objNull, [objNull]],["_cost",0, [0]]]; + +if (_obj isEqualTo objNull) exitWith {-1}; + +_hitPoints = getAllHitPointsDamage _obj; +_totalHPoints = count (_hitPoints select 1); +_totalDamagedPoints = 0; +{ + _dmg = _hitPoints select 2 select _forEachIndex; + if (_dmg > 0) then { + _totalDamagedPoints = _totalDamagedPoints +1; + }; +} forEach (_hitPoints select 1); + +_math = round (_totalDamagedPoints / _totalHPoints * 100); +_newCost = _cost - _math; + +_newCost \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_npcTraderAdd.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_npcTraderAdd.sqf new file mode 100644 index 0000000..e7955c9 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_npcTraderAdd.sqf @@ -0,0 +1,167 @@ +/* + Author: He-Man - Ignatz-Gaming + + Contributors: Raimonds Virtoss + + Description: + Move Items in Tradermenu between Playerinventory <-> PlayerOut window + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd.sqf +*/ + +private [ "_PlayerFilerDropDown","_PlayerItemsBox","_PlayerItemsOutBox","_TraderItemsOutBox","_CryptoInCtrl","_CryptoOutCtrl","_allowAdd","_uiItem","_rounds","_itemIcon","_itemColor","_errormsg","_config", + "_sizeOut","_item","_vehicle","_itemName","_index","_maxrnd","_ItemIndex","_cryptoCount","_worth","_itemTax","_tax" +]; +params ["_control","_selected"]; +_selected params ["_CurControl","_id"]; + +_PlayerFilerDropDown = 42100; +_PlayerItemsBox = 41500; +_PlayerItemsOutBox = 41501; +_TraderItemsOutBox = 41502; +_CryptoInCtrl = 41004; +_CryptoOutCtrl = 41005; + +if !(isNull EPOCH_lastNPCtradeTarget) then { + _allowAdd = true; + _uiItem = _CurControl lbData _id; + _rounds = _CurControl lbValue _id; + _itemIcon = _CurControl lbPicture _id; + _itemColor = _CurControl lbColor _id; + _errormsg = ""; + + _config = 'CfgPricing' call EPOCH_returnConfig; + if (isClass (_config >> _uiItem)) then { + if (_control == _PlayerItemsOutBox) then { + if (_uiItem isKindOf "Air" || _uiItem isKindOf "Ship" || _uiItem isKindOf "LandVehicle" || _uiItem isKindOf "Tank") then { + _sizeOut = lbSize _PlayerItemsOutBox; + if (_sizeOut > 0) then { + for "_i" from 0 to(_sizeOut - 1) do { + _item = lbData [_PlayerItemsOutBox, _i]; + if (_item isKindOf "Air" || _item isKindOf "Ship" || _item isKindOf "LandVehicle" || _item isKindOf "Tank") exitWith{ + _allowAdd = false; + _errormsg = "Limit one per trade"; + }; + }; + }; + if (!_allowAdd) exitwith {}; + _sizeOut = lbSize _TraderItemsOutBox; + if (_sizeOut > 0) then { + for "_i" from 0 to(_sizeOut - 1) do { + _item = lbData[_TraderItemsOutBox, _i]; + if (_item isKindOf "Air" || _item isKindOf "Ship" || _item isKindOf "LandVehicle" || _item isKindOf "Tank") exitWith{ + _allowAdd = false; + _errormsg = "Limit one per trade"; + }; + }; + }; + if (!_allowAdd) exitwith {}; + if (["CfgEpochClient", "DisallowSellOnDamage", false] call EPOCH_fnc_returnConfigEntryV2) then { + { + _vehicle = _x; + if (local _vehicle && (typeof _vehicle) isequalto _uiItem) then { + { + if ((["wheel",tolower _x] call bis_fnc_instring) || (tolower _x) isequalto "hitengine") then { + if (((getAllHitPointsDamage _vehicle) select 2 select _foreachindex) >= 1) then { + _allowAdd = false; + _errormsg = "Cannot be sold - too much damage"; + }; + }; + if (!_allowAdd) exitwith {}; + } foreach ((getAllHitPointsDamage _vehicle) select 0); + }; + if (!_allowAdd) exitwith {}; + } foreach (EPOCH_lastNPCtradeTarget nearEntities [[_uiItem], ["CfgEpochClient", "MaxVehTradeDist", 30] call EPOCH_fnc_returnConfigEntryV2]); + }; + }; + }; + + if (_allowAdd) then { + _itemName = _CurControl lbText _id; + _index = lbAdd [_control, _itemName]; + lbSetData [_control, _index, _uiItem]; + lbSetValue [_control,_index, _rounds]; + lbSetPicture [_control, _index, _itemIcon]; + lbSetColor [_control,_index,_itemColor]; + if (_control == _PlayerItemsBox && !(_uiItem iskindof "Landvehicle" || _uiItem iskindof "SHIP" || _uiItem iskindof "AIR" || _uiItem iskindof "TANK")) then { + if ((_itemName find " (in Hand)") > -1) then { + EPOCH_NpcTradePlayerItems pushback [_uiItem,"Hand"]; + } + else { + EPOCH_NpcTradePlayerItems pushback [_uiItem,_rounds]; + }; + } + else { + if ([_uiItem,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _uiItem >> "count"); + if !((_rounds/_maxrnd) >= 1) then { + _tooltip = format ["%1 rounds left in Magazine",_rounds]; + lbSetTooltip [_control,_index,_tooltip]; + }; + }; + _ItemIndex = -1; + if ((_itemName find " (in Hand)") > -1) then { + _ItemIndex = EPOCH_NpcTradePlayerItems find [_uiItem,"Hand"]; + }; + if (_ItemIndex < 0) then { + _ItemIndex = EPOCH_NpcTradePlayerItems find _uiItem; + if (_ItemIndex < 0) then { + _ItemIndex = EPOCH_NpcTradePlayerItems find [_uiItem,_rounds]; + }; + }; + if (_ItemIndex > -1) then { + EPOCH_NpcTradePlayerItems deleteat _ItemIndex; + }; + }; + _CurControl lbDelete _id; + _cryptoCount = 0; + _sizeOut = lbSize _PlayerItemsOutBox; + if (_sizeOut > 0) then { + for "_i" from 0 to (_sizeOut - 1) do { + _item = lbData [_PlayerItemsOutBox, _i]; + _rounds = lbValue [_PlayerItemsOutBox, _i]; + _worth = getNumber (_config >> _item >> "price"); + _maxrnd = 1; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _worth = round (_worth*(_rounds/_maxrnd)); + _cryptoCount = _cryptoCount + _worth; + }; + }; + ctrlSetText [_CryptoInCtrl, (format["%1 Crypto", _cryptoCount])]; + _cryptoCount = 0; + _sizeOut = lbSize _TraderItemsOutBox; + if (_sizeOut > 0) then { + for "_i" from 0 to (_sizeOut - 1) do { + _item = lbData [_TraderItemsOutBox, _i]; + _rounds = lbValue [_TraderItemsOutBox, _i]; + _worth = getNumber (_config >> _item >> "price"); + _itemTax = getNumber (_config >> _item >> "tax"); + _tax = _worth * (EPOCH_taxRate + _itemTax); + _worth = ceil(_worth + _tax); + _maxrnd = 1; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _worth = round (_worth*(_rounds/_maxrnd)); + _cryptoCount = _cryptoCount + _worth; + }; + }; + ctrlSetText [_CryptoOutCtrl, (format["%1 Crypto", _cryptoCount])]; + if (_control == _PlayerItemsBox) then { + lbSetCurSel [_PlayerFilerDropDown, 0]; + }; + } + else { + [_errormsg, 5] call Epoch_message; + }; + }; +} +else { + closeDialog 0; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_npcTraderAdd2.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_npcTraderAdd2.sqf new file mode 100644 index 0000000..f6832e3 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_npcTraderAdd2.sqf @@ -0,0 +1,156 @@ +/* + Author: He-Man - Ignatz-Gaming + + Contributors: Raimonds Virtoss + + Description: + Move Items in Tradermenu from Traderinventory to TraderOut window + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd2.sqf +*/ + +private [ "_PlayerItemsOutBox","_TraderItemsBox","_TraderItemsOutBox","_CryptoInCtrl","_CryptoOutCtrl","_allowAdd","_uiItem","_rounds","_itemIcon","_itemName","_itemColor","_errormsg","_soldrounds","_tooltip","_config", + "_ItemIndex","_sizeOut","_item","_maxrnd","_uiQty","_index","_cryptoCount","_worth","_itemTax","_tax" +]; +params ["_control","_selected"]; +_selected params ["_CurControl","_id"]; + +_PlayerItemsOutBox = 41501; +_TraderItemsBox = 41503; +_TraderItemsOutBox = 41502; +_CryptoInCtrl = 41004; +_CryptoOutCtrl = 41005; + + + +if !(isNull EPOCH_lastNPCtradeTarget) then { + _allowAdd = true; + _uiItem = _CurControl lnbData [_id, 0]; + _rounds = _CurControl lnbValue [_id, 0]; + _itemIcon = _CurControl lnbPicture [_id, 0]; + _itemName = _CurControl lnbText [_id, 2]; + _itemColor = _CurControl lnbColor [_id, 2]; + _errormsg = ""; + _soldrounds = 0; + _tooltip = ""; + + + _config = 'CfgPricing' call EPOCH_returnConfig; + if (isClass (_config >> _uiItem)) then{ + _ItemIndex = (EPOCH_NpcTradeTraderItems select 0) find _uiItem; + if (_ItemIndex > -1) then { + if (_uiItem isKindOf "Air" || _uiItem isKindOf "Ship" || _uiItem isKindOf "LandVehicle" || _uiItem isKindOf "Tank") then { + _sizeOut = lbSize _PlayerItemsOutBox; + if (_sizeOut > 0) then { + for "_i" from 0 to(_sizeOut - 1) do { + _item = lbData [_PlayerItemsOutBox, _i]; + if (_item isKindOf "Air" || _item isKindOf "Ship" || _item isKindOf "LandVehicle" || _item isKindOf "Tank") exitWith{ + _allowAdd = false; + _errormsg = "Limit one per trade"; + }; + }; + }; + if (!_allowAdd) exitwith {}; + _sizeOut = lbSize _TraderItemsOutBox; + if (_sizeOut > 0) then { + for "_i" from 0 to(_sizeOut - 1) do { + _item = lbData [_TraderItemsOutBox, _i]; + if (_item isKindOf "Air" || _item isKindOf "Ship" || _item isKindOf "LandVehicle" || _item isKindOf "Tank") exitWith{ + _allowAdd = false; + _errormsg = "Limit one per trade"; + }; + }; + }; + }; + if (_allowAdd) then { + _maxrnd = 1; + if ([_uiItem,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _uiItem >> "count"); + }; + if ((_rounds/_maxrnd) >= 1) then { + _soldrounds = _maxrnd; + } + else { + _soldrounds = _rounds; + }; + _rounds = _rounds - _soldrounds; + if (_rounds < 1) then { + _CurControl lnbDeleteRow _id; + } + else { + _uiQty = _rounds /_maxrnd; + if (_uiQty >= 1) then { + _uiQty = floor _uiQty; + } + else { + _uiQty = ceil _uiQty; + _tooltip = format ["%1 rounds left in Magazine",_rounds]; + }; + lnbSetText [_TraderItemsBox, [_id, 1], str (_uiQty)]; + lnbSetValue [_TraderItemsBox, [_id, 0], _rounds]; + if !(_tooltip isequalto "") then { + lbSetTooltip [_TraderItemsBox, _id*3, _tooltip]; + lnbSetColor [_TraderItemsBox,[_id,2],[1,(_rounds/_maxrnd),0,1]]; + }; + }; + if (_soldrounds > 0) then { + _index = lbAdd [_control, _itemName]; + lbSetData [_control, _index, _uiItem]; + lbSetValue [_control,_index, _soldrounds]; + lbSetPicture [_control, _index, _itemIcon]; + lbSetColor [_control,_index,_itemColor]; + if ([_uiItem,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _uiItem >> "count"); + if !((_soldrounds/_maxrnd) >= 1) then { + _tooltip = format ["%1 rounds left in Magazine",_soldrounds]; + lbSetTooltip [_control,_index,_tooltip]; + }; + }; + }; + (EPOCH_NpcTradeTraderItems select 1) set [_ItemIndex,_rounds]; + _cryptoCount = 0; + _sizeOut = lbSize _PlayerItemsOutBox; + if (_sizeOut > 0) then { + for "_i" from 0 to (_sizeOut - 1) do { + _item = lbData [_PlayerItemsOutBox, _i]; + _rounds = lbValue [_PlayerItemsOutBox, _i]; + _worth = getNumber (_config >> _item >> "price"); + _maxrnd = 1; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _worth = round (_worth*(_rounds/_maxrnd)); + _cryptoCount = _cryptoCount + _worth; + }; + }; + ctrlSetText [_CryptoInCtrl, (format["%1 Crypto", _cryptoCount])]; + _cryptoCount = 0; + _sizeOut = lbSize _TraderItemsOutBox; + if (_sizeOut > 0) then { + for "_i" from 0 to (_sizeOut - 1) do { + _item = lbData [_TraderItemsOutBox, _i]; + _rounds = lbValue [_TraderItemsOutBox, _i]; + _worth = getNumber (_config >> _item >> "price"); + _itemTax = getNumber (_config >> _item >> "tax"); + _tax = _worth * (EPOCH_taxRate + _itemTax); + _worth = ceil(_worth + _tax); + _maxrnd = 1; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _worth = round (_worth*(_rounds/_maxrnd)); + _cryptoCount = _cryptoCount + _worth; + }; + }; + ctrlSetText [_CryptoOutCtrl, (format["%1 Crypto", _cryptoCount])]; + } + else { + ["Limit one per trade", 5] call Epoch_message; + }; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_npcTraderAdd3.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_npcTraderAdd3.sqf new file mode 100644 index 0000000..a120e5a --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_npcTraderAdd3.sqf @@ -0,0 +1,72 @@ +/* + Author: He-Man - Ignatz-Gaming + + Contributors: Raimonds Virtoss + + Description: + Move Items in Tradermenu from TraderOut window to Traderinventory + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd3.sqf +*/ + +private ["_TraderFilerDropDown","_PlayerItemsOutBox","_TraderItemsOutBox","_CryptoInCtrl","_CryptoOutCtrl","_uiItem","_rounds","_config","_ItemIndex","_cryptoCount","_sizeOut","_item","_worth","_maxrnd","_itemTax","_tax"]; +params ["_control","_selected"]; +_selected params ["_CurControl","_id"]; + +_TraderFilerDropDown = 42101; +_PlayerItemsOutBox = 41501; +_TraderItemsOutBox = 41502; +_CryptoInCtrl = 41004; +_CryptoOutCtrl = 41005; + +_uiItem = _CurControl lbData _id; +_rounds = _CurControl lbValue _id; + +_config = 'CfgPricing' call EPOCH_returnConfig; +if (isClass (_config >> _uiItem)) then { + _ItemIndex = (EPOCH_NpcTradeTraderItems select 0) find _uiItem; + if (_ItemIndex >= 0) then { + (EPOCH_NpcTradeTraderItems select 1) set [_ItemIndex,(EPOCH_NpcTradeTraderItems select 1 select _ItemIndex) + _rounds]; + }; + _CurControl lbDelete _id; + lbSetCurSel [_TraderFilerDropDown, 0]; + _cryptoCount = 0; + _sizeOut = lbSize _PlayerItemsOutBox; + if (_sizeOut > 0) then { + for "_i" from 0 to (_sizeOut - 1) do { + _item = lbData [_PlayerItemsOutBox, _i]; + _rounds = lbValue [_PlayerItemsOutBox, _i]; + _worth = getNumber (_config >> _item >> "price"); + _maxrnd = 1; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _worth = round (_worth*(_rounds/_maxrnd)); + _cryptoCount = _cryptoCount + _worth; + }; + }; + ctrlSetText [_CryptoInCtrl, (format["%1 Crypto", _cryptoCount])]; + _cryptoCount = 0; + _sizeOut = lbSize _TraderItemsOutBox; + if (_sizeOut > 0) then { + for "_i" from 0 to (_sizeOut - 1) do { + _item = lbData [_TraderItemsOutBox, _i]; + _rounds = lbValue [_TraderItemsOutBox, _i]; + _worth = getNumber (_config >> _item >> "price"); + _itemTax = getNumber (_config >> _item >> "tax"); + _tax = _worth * (EPOCH_taxRate + _itemTax); + _worth = ceil (_worth + _tax); + _maxrnd = 1; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _worth = round (_worth*(_rounds/_maxrnd)); + _cryptoCount = _cryptoCount + _worth; + }; + }; + ctrlSetText [_CryptoOutCtrl, (format["%1 Crypto", _cryptoCount])]; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startBankTransfer.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startBankTransfer.sqf new file mode 100644 index 0000000..f6081a7 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startBankTransfer.sqf @@ -0,0 +1,58 @@ +if (isNull(findDisplay -13)) exitWith{}; +// perform wait while menu is still open + +if (isNil "EPOCH_bankTransferActive") then { + if !(alive player) exitwith {}; + EPOCH_bankTransferActive = true; + + ctrlEnable[1600, false]; + + [] spawn { + private ["_transferTarget","_progress","_sleep","_deposit","_withdraw","_transfer","_totalTransfer"]; + + ctrlSetText[1004,"Transfer started, please wait."]; + + _deposit = parseNumber(ctrlText 1401) min EPOCH_playerCrypto; + _withdraw = parseNumber(ctrlText 1402) min EPOCH_bankBalance; + _transfer = parseNumber(ctrlText 1400) min EPOCH_bankBalance; + + _config = 'CfgEpochClient' call EPOCH_returnConfig; + getArray(_config >> "bankTransferTime") params [["_timePerCrypto",0.0006],["_maxWait",1.2],["_minWait",0.06]]; + + _totalTransfer = (_deposit + _withdraw) + _transfer; + _progress = 0; + + uiSleep 1; + + _transferTarget = ""; + if (_transfer > 0) then { + _transferTarget = lbData[21500, (lbCurSel 21500)]; + }; + + if (_deposit > 0 || _withdraw > 0 || (_transfer > 0 && _transferTarget != "")) then { + + _sleep = ((_totalTransfer * _timePerCrypto) min _maxWait) max _minWait; + for "_i" from 0 to 100 do { + if (isNull(findDisplay -13)) exitWith{}; + if !(alive player) exitwith {}; + _progress = _progress + 1; + if (_progress >= 100) exitWith{}; + ctrlSetText[1200, format["\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa", _progress]]; + uiSleep _sleep; + }; + + if (_progress >= 100) then { + // if player waited the full time then send upload + [player, [_deposit, _withdraw, [_transfer, _transferTarget]], Epoch_personalToken] remoteExec ["EPOCH_server_storeCrypto",2]; + ctrlSetText[1004, "Transfer complete."]; + uiSleep 1; + closeDialog 0; + } + else { + ctrlSetText[1004, "Transfer failed."]; + }; + }; + EPOCH_bankTransferActive = nil; + ctrlEnable[1600, true]; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startInteract.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startInteract.sqf new file mode 100644 index 0000000..1efd049 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startInteract.sqf @@ -0,0 +1,39 @@ +// TODO remove unused file +//[[[cog import generate_private_arrays ]]] +private ["_dialog","_forceGear","_handled","_target","_targets","_vehicle"]; +//[[[end]]] +closeDialog 0; +_dialog = ""; +_handled = false; +_forceGear = false; +_target = objNull; + +// params ["_ctrl"]; + +_vehicle = vehicle player; +if (_vehicle != player) exitWith {false}; +if (!isNull cursorTarget) then { + if ((player distance cursorTarget) < 6) then { + _target = cursorTarget; + }; +}; +if (isNull _target) then { + _targets = nearestObjects [player, ["WeaponHolder", "WeaponHolderSimulated"], 3]; + if !(_targets isEqualTo []) then { + _target = _targets select 0; + _forceGear = true; + }; +}; + +if (!isNull _target) then { + if (_forceGear) then { + player action ["Gear", _target]; + _handled = true; + } else { + if (_dialog != "") then { + _handled = createdialog _dialog; + setMousePosition [0.5, 0.5]; + }; + }; +}; +_handled diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startInteractNPC.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startInteractNPC.sqf new file mode 100644 index 0000000..a323c8a --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startInteractNPC.sqf @@ -0,0 +1,7 @@ +//[[[cog import generate_private_arrays ]]] +private ["_ok"]; +//[[[end]]] +if (isNull _this) exitWith {}; +if !(alive _this) exitWith {}; +_ok = createdialog "MissionSelect"; +if (!_ok) exitWith {}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startNPCTraderMenu.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startNPCTraderMenu.sqf new file mode 100644 index 0000000..6fa3bdf --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startNPCTraderMenu.sqf @@ -0,0 +1,57 @@ +/* + Author: He-Man - Ignatz-Gaming + + Contributors: Raimonds Virtoss + + Description: + Start the Trader Trading Menu + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/traders/EPOCH_startNPCTraderMenu.sqf +*/ + +private ["_config","_MainCategoriearray","_target","_slot","_index","_ok","_categorie"]; +_config = 'CfgItemSort' call EPOCH_returnConfig; +_MainCategoriearray = getarray (_config >> "MainCategories" >> "Classes"); +_target = cursorTarget; +if (alive _target) then { + _slot = _target getVariable ["AI_SLOT",-1]; + if (_slot != -1) then { + EPOCH_lastNPCtradeTarget = _target; + EPOCH_NpcTradePlayerItems = (items player)+(magazinesammo player); + if (primaryWeapon player != "") then { + EPOCH_NpcTradePlayerItems pushback [primaryWeapon player,"Hand"]; + }; + if (secondaryWeapon player != "") then { + EPOCH_NpcTradePlayerItems pushback [secondaryWeapon player,"Hand"]; + }; + if (handgunWeapon player != "") then { + EPOCH_NpcTradePlayerItems pushback [handgunWeapon player,"Hand"]; + }; + if (count backpackItems player == 0 && count backpackmagazines player == 0 && backpack player != "") then { + EPOCH_NpcTradePlayerItems pushback backpack player; + }; + EPOCH_NpcTradeTraderItems = [[],[]]; + { + _index = _foreachindex; + { + (EPOCH_NpcTradeTraderItems select _index) pushback _x; + } foreach _x + } foreach (_target getvariable ["AI_Items",[[],[]]]); + closeDialog 0; + _ok = createdialog "TradeNPCMenu"; + if (!_ok) exitWith {}; + 9992 cutRsc["EpochGameUI2", "PLAIN", 2, false]; + ((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto]; + { + _categorie = _x select 1; + lbAdd [42100,_categorie]; + lbAdd [42101,_categorie] + } forEach _MainCategoriearray; + lbSetCurSel [42100, 0]; + lbSetCurSel [42101, 0]; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf new file mode 100644 index 0000000..eb62b75 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf @@ -0,0 +1,156 @@ +/* + Author: He-Man - Ignatz-Gaming + + Contributors: Raimonds Virtoss + + Description: + Move Items in Tradermenu from TraderOut window to Traderinventory + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf +*/ + +private ["_EnableTempVehTrade","_PlayerItemsOutBox","_TraderItemsOutBox","_config","_current_crypto","_sizeIn","_arrayIn","_item","_rounds","_mags","_itemMags","_index","_sizeOut","_arrayOut","_itemWorth","_itemTax","_tax","_maxrnd"]; + +if (!isNil "EPOCH_TRADE_STARTED") exitWith{}; +if (isNull _this) exitWith{}; + +if (alive _this) then { + _EnableTempVehTrade = ["CfgEpochClient", "EnableTempVehTrade", false] call EPOCH_fnc_returnConfigEntryV2; + _PlayerItemsOutBox = 41501; + _TraderItemsOutBox = 41502; + _config = 'CfgPricing' call EPOCH_returnConfig; + _current_crypto = EPOCH_playerCrypto; + _sizeIn = lbSize _PlayerItemsOutBox; + _arrayIn = []; + if (_sizeIn > 0) then { + for "_i" from 0 to (_sizeIn - 1) do { + _onHand = false; + _itemName = lbText [_PlayerItemsOutBox, _i]; + if ((_itemName find " (in hand)") > -1) then { + _onHand = true; + }; + _item = lbData [_PlayerItemsOutBox, _i]; + _rounds = lbValue [_PlayerItemsOutBox, _i]; + if (isClass (_config >> _item)) then{ + _itemWorth = getNumber (_config >> _item >> "price"); + _maxrnd = 1; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _itemWorth = round (_itemWorth*(_rounds/_maxrnd)); + _added = false; + if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then { + if (_item in items player && !_onHand) then { + player removeItem _item; + _arrayIn pushBack [_item,_rounds]; + _added = true; + } + else { + if (_item in [primaryweapon player,secondaryweapon player, handgunweapon player]) then { + _index = if (_item == primaryweapon player) then {0} else {if (_item == secondaryweapon player) then {1} else {2}}; + { + if (_foreachindex > 0) then { + _weaponaddon = _x; + _count = 1; + if !(_weaponaddon isequalto [] || _weaponaddon isequalto "") then { + if (_weaponaddon isequaltype []) then { + if (count _weaponaddon > 1) then { + _weaponaddon = _x select 0; + _count = _x select 1; + }; + }; + if ([_weaponaddon, "CfgWeapons"] call EPOCH_fnc_isAny) then { + _weaponaddon call EPOCH_fnc_addItemOverflow; + } + else { + if ([_weaponaddon, "CfgMagazines"] call EPOCH_fnc_isAny) then { + [_weaponaddon,_count] call EPOCH_fnc_addMagazineOverflow; + }; + }; + }; + }; + } foreach ((getunitloadout player) select _index); + player removeweapon _item; + _arrayIn pushBack [_item,_rounds]; + _added = true; + }; + }; + } + else { + if ([_item, "CfgVehicles"] call EPOCH_fnc_isAny) then { + if (_item == backpack player) then { + removeBackpack player; + _arrayIn pushBack [_item,_rounds]; + _added = true; + } + else { + _vehicles = (nearestobjects [_this,[_item], ["CfgEpochClient", "MaxVehTradeDist", 30] call EPOCH_fnc_returnConfigEntryV2]) select {local _x && alive _x}; + if (!(_vehicles isEqualTo[])) then { + _vehicle = _vehicles select 0; + _vehSlot = _vehicle getVariable["VEHICLE_SLOT", "ABORT"]; + if (_vehSlot != "ABORT" || _EnableTempVehTrade) then { + _arrayIn pushBack [_item,_rounds]; + _added = true; + }; + }; + }; + } + else { + _mags = magazinesAmmo player; + _itemMags = []; + { + _x params ["_className","_count"]; + if (_className isequalto _item) then { + _itemMags pushBack _x; + }; + } forEach _mags; + _index = _itemMags find [_item,_rounds]; + if (_index >= 0) then { + _arrayIn pushback (_itemMags deleteat _index); + _added = true; + player removemagazines _item; + { + _x call EPOCH_fnc_addMagazineOverflow; + } foreach _itemMags; + }; + }; + }; + if (_added) then { + _current_crypto = _current_crypto + _itemWorth; + }; + }; + }; + }; + _sizeOut = lbSize _TraderItemsOutBox; + _arrayOut = []; + if (_sizeOut > 0) then { + for "_i" from 0 to (_sizeOut - 1) do { + _item = lbData [_TraderItemsOutBox, _i]; + _rounds = lbValue [_TraderItemsOutBox, _i]; + if (isClass (_config >> _item)) then { + _itemWorth = getNumber (_config >> _item >> "price"); + _itemTax = getNumber (_config >> _item >> "tax"); + _tax = _itemWorth * (EPOCH_taxRate + _itemTax); + _itemWorth = ceil (_itemWorth + _tax); + _maxrnd = 1; + if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then { + _maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count"); + }; + _itemWorth = round (_itemWorth*(_rounds/_maxrnd)); + if (_current_crypto >= _itemWorth) then { + _current_crypto = _current_crypto - _itemWorth; + _arrayOut pushBack [_item,_rounds]; + }; + }; + }; + }; + if !(_arrayIn isEqualTo[] && _arrayOut isEqualTo[]) then { + EPOCH_TRADE_STARTED = true; + [_this, _arrayIn, _arrayOut, player, Epoch_personalToken] remoteExec ["EPOCH_server_makeNPCTrade",2]; + closeDialog 0; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_takeCrypto.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_takeCrypto.sqf new file mode 100644 index 0000000..0490fbb --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/traders/EPOCH_takeCrypto.sqf @@ -0,0 +1,28 @@ +//[[[cog import generate_private_arrays ]]] +private ["_nearCrypto","_CryptoItems","_getCrypto","_addmoney"]; +//[[[end]]] +if !(isNil "EPOCH_takeCryptoLock") exitWith {}; +EPOCH_takeCryptoLock = true; +_nearCrypto = (nearestobjects [player,[],5]) select {(_x getvariable ["Crypto",0]) > 0}; +_CryptoItems = []; +_getCrypto = 0; +{ + _addmoney = (_x getvariable ['Crypto',0]); + if (_addmoney > 0) then { + _CryptoItems pushback _x; + }; + _getCrypto = _getCrypto + _addmoney; +} foreach _nearCrypto; + +if (_getCrypto > 0) then { + [player, Epoch_personalToken, _CryptoItems] remoteExec ["EPOCH_server_takeCrypto",2]; + [format['You found %1 Crypto', _getCrypto], 5] call Epoch_message; +} +else { + ['No Crypto found', 5] call Epoch_message; +}; + +[] spawn{ + uiSleep 2; + EPOCH_takeCryptoLock = nil; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_VehicleMaintananceCheck.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_VehicleMaintananceCheck.sqf new file mode 100644 index 0000000..f1630bc --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_VehicleMaintananceCheck.sqf @@ -0,0 +1,81 @@ +/* + Author: He-Man - Ignatz-Gaming + + Contributors: + + Description: + Check for repairable / replaceable and removeable Vehicle-parts + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_VehicleMaintananceCheck.sqf +*/ +private ["_veh","_VehicleRepairs","_EnableRemoveParts","_repairs","_removes","_replaces","_wheels","_wheelcounter","_HitPointName","_Hit","_wheel","_repairarrays"]; +_veh = _this; +_VehicleRepairs = ["CfgEpochClient", "VehicleRepairs", []] call EPOCH_fnc_returnConfigEntryV2; +_EnableRemoveParts = ["CfgEpochClient", "EnableRemoveParts", true] call EPOCH_fnc_returnConfigEntryV2; +_repairs = []; +_removes = []; +_replaces = []; +_wheels = getnumber (configfile >> "cfgvehicles" >> (typeof _veh) >> "numberPhysicalWheels"); +if (_veh iskindof "ebike_epoch") then { + _wheels = 2; +}; +_wheelcounter = 0; +{ + _x params ["_searchedhit","_limit1","_limit2"]; + _searchedhit = tolower _searchedhit; + { + _HitPointName = tolower _x; + _Hit = (getAllHitPointsDamage _veh) select 2 select _foreachindex; + if (_searchedhit isequalto _HitPointName) then { + _wheel = ["wheel",_searchedhit] call bis_fnc_instring; + if (_wheel) then { + _wheelcounter = _wheelcounter + 1; + }; + if (_wheel && _wheelcounter > _wheels) exitwith {}; + if (_Hit >= _limit2) exitwith { + _replaces pushback _searchedhit; + }; + if (_Hit >= _limit1) exitwith { + _repairs pushback _searchedhit; + }; + if (!((_veh getvariable ["vehicle_slot","-1"]) isequalto "-1") && _EnableRemoveParts) then { + if (_searchedhit in ["hitlfwheel","hitlf2wheel","hitlmwheel","hitlbwheel","hitrfwheel","hitrf2wheel","hitrmwheel","hitrbwheel","hitengine"]) then { + _removes pushback _searchedhit; + }; + }; + } + else { + if (_searchedhit isequalto "glass") then { + if ("glass" in _repairs) exitwith {}; + _glass = ["glass",_HitPointName] call bis_fnc_instring; + if (_glass) then { + if (_Hit >= _limit1) exitwith { + _repairs pushback _searchedhit; + }; + }; + }; + }; + } foreach ((getAllHitPointsDamage _veh) select 0); +} foreach _VehicleRepairs; + +_repairarrays = []; +{ + _HitPointName = tolower _x; + if (!(_HitPointName in _repairs || _HitPointName in _replaces || (["glass",_HitPointName] call Bis_fnc_instring)) || _x isequalto "") then { + _repairarrays pushback [_foreachindex, 0]; + }; +} foreach ((getAllHitPointsDamage _veh) select 0); + +if !(_repairarrays isequalto []) then { + if (local _veh) then { + [_veh, _repairarrays] call EPOCH_client_repairVehicle; + } else { + [_veh,_repairarrays,player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + }; +}; + +EPOCH_VehicleRepairs = [_repairs,_removes,_replaces]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_VehicleMaintananceDo.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_VehicleMaintananceDo.sqf new file mode 100644 index 0000000..193b658 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_VehicleMaintananceDo.sqf @@ -0,0 +1,141 @@ +/* + Author: He-Man - Ignatz-Gaming + + Contributors: + + Description: + Repair / replac and remove Vehicle-parts + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_VehicleMaintananceDo.sqf +*/ +private ["_secondlocalcheck","_repairarrays","_config","_VehicleRepairs","_reqiredMat","_searchname","_line","_returnmat"]; +params ["_veh","_do","_hitpointname"]; +_hitpointname = tolower _hitpointname; +_secondlocalcheck = false; +_returnmat = ""; +_repairarrays = []; +_config = 'CfgEpochClient' call EPOCH_returnConfig; +_VehicleRepairs = getArray (_config >> "VehicleRepairs"); +if (isnull _veh) exitwith { + ['Error - No Vehicle found',5] call Epoch_message; +}; +if !(alive _veh) exitwith { + ['Error - Vehicle already dead',5] call Epoch_message; +}; + +if (EPOCH_Vehicle_MaintainLock) exitwith {}; +EPOCH_Vehicle_MaintainLock = true; + +switch _do do { + case 'repair': { + _reqiredMat = "NONE"; + _searchname = _hitpointname; + if (["glass",_hitpointname] call Bis_fnc_instring) then { + _searchname = "glass"; + }; + { + _x params ["_name","","","_repairmat"]; + _name = tolower _name; + if (_searchname isequalto _name) exitwith { + _reqiredMat = _repairmat; + }; + } foreach _VehicleRepairs; + if (_reqiredMat isequalto "NONE") exitwith { + ['Error - Can not find required Material',5] call Epoch_message; + }; + if (!(_reqiredMat in (magazines player)) && !(_reqiredMat isequalto "")) exitwith { + _line = format ['You need %1 to repair',_reqiredMat call EPOCH_itemDisplayName]; + [_line,5] call Epoch_message; + }; + if !(_reqiredMat isequalto "") then { + player removemagazine _reqiredMat; + }; + if (_hitpointname isequalto "glass") then { + { + if (["glass",tolower _x] call Bis_fnc_instring) then { + _repairarrays pushback [_x,0]; + }; + } foreach ((getAllHitPointsDamage _veh) select 0); + } + else { + _repairarrays pushback [_hitpointname,0]; + }; + }; + case 'replace': { + _reqiredMat = "NONE"; + _searchname = _hitpointname; + if (["glass", _hitpointname] call Bis_fnc_instring) then { + _searchname = "glass"; + }; + { + _x params ["_name","","","","_replacemat"]; + _name = tolower _name; + if (_searchname isequalto _name) exitwith { + _reqiredMat = _replacemat; + }; + } foreach _VehicleRepairs; + if (_reqiredMat isequalto "NONE") exitwith { + ['Error - Can not find required Material',5] call Epoch_message; + }; + if (!(_reqiredMat in (magazines player)) && !(_reqiredMat isequalto "")) exitwith { + _line = format ['You need %1 to repair',_reqiredMat call EPOCH_itemDisplayName]; + [_line,5] call Epoch_message; + }; + if !(_reqiredMat isequalto "") then { + player removemagazine _reqiredMat; + }; + if (_hitpointname isequalto "glass") then { + { + if (["glass",tolower _x] call Bis_fnc_instring) then { + _repairarrays pushback [_x,0]; + }; + } foreach ((getAllHitPointsDamage _veh) select 0); + } + else { + _repairarrays pushback [_hitpointname,0]; + }; + }; + case 'remove': { + if !(local _veh) exitwith { + _line = 'Error - You must get into drivers seat first!'; + ['Error - You must get into drivers seat first!',5] call Epoch_message; + }; + _searchname = _hitpointname; + { + _x params ["_name","","","","_replacemat"]; + _name = tolower _name; + if (_searchname isequalto _name) exitwith { + _returnmat = _replacemat; + }; + } foreach _VehicleRepairs; + if (_returnmat isequalto "") exitwith { + ['Error - Could not find Return Material!',5] call Epoch_message; + }; + _repairarrays pushback [_hitpointname,1]; + _secondlocalcheck = true; + }; +}; + +if !(_repairarrays isequalto []) then { + player playMove 'AinvPknlMstpSnonWrflDnon_medic0'; + player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd'; + _veh say3d 'vehicle_repair'; + uisleep 5; + if (_secondlocalcheck && !local _veh) exitwith { + ['Vehicle owner Changed - Go in as driver and try again!',5] call Epoch_message; + }; + if !(_returnmat isequalto "") then { + _returnmat call EPOCH_fnc_addItemOverflow; + }; + if (local _veh) then { + [_veh, _repairarrays] call EPOCH_client_repairVehicle; + } else { + [_veh,_repairarrays,player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + }; +}; + +EPOCH_Vehicle_MaintainLock = false; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf new file mode 100644 index 0000000..81a461b --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf @@ -0,0 +1,18 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + sets Fuel on local vehicle + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf +*/ +params ["_vehicle","_value"]; +if (local _vehicle) then { + _vehicle setFuel _value; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf new file mode 100644 index 0000000..9fdee6e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf @@ -0,0 +1,24 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Open gear on cursorTarget function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_vehicles"]; +//[[[end]]] +closeDialog 0; +if (!isNull cursorTarget) then { + _vehicles = player nearEntities[["LandVehicle", "Ship", "Air", "Tank"], 30]; + if (cursorTarget in _vehicles) then { + player action["Gear", cursorTarget]; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf new file mode 100644 index 0000000..19b65d9 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf @@ -0,0 +1,18 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + lock local object + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf +*/ +params ["_vehicle","_value"]; +if (local _vehicle) then { + _vehicle lock _value; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf new file mode 100644 index 0000000..e429722 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf @@ -0,0 +1,41 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + repair object via hit index + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_currentDMG","_god"]; +//[[[end]]] +params ["_vehicle","_value"]; +if (local _vehicle) then { + _god = !(isDamageAllowed _vehicle); + if (_god) then {_vehicle allowdamage true;}; + { + if ((_x select 0) isequaltype 0) then { + _vehicle setHitIndex [_x select 0, _x select 1]; + } + else { + _vehicle setHitPointDamage [_x select 0, _x select 1]; + }; + } foreach _value; + if (_god) then {_vehicle allowdamage false;}; + + if !({_x > 0} count ((getAllHitPointsDamage _vehicle) select 2) > 0) then { + [_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + }; + + _vehicle call EPOCH_interact; + if !(EPOCH_arr_interactedObjs isEqualTo[]) then { + [EPOCH_arr_interactedObjs] remoteExec['EPOCH_server_save_vehicles', 2]; + EPOCH_arr_interactedObjs = []; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_upgradeVehicle.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_upgradeVehicle.sqf new file mode 100644 index 0000000..66d0e03 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_upgradeVehicle.sqf @@ -0,0 +1,83 @@ +/* + Author: He-Man / DirtySanchez + + Contributors: + + Description: + Upgrade Vehicle + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_upgradeVehicle.sqf +*/ + +private ["_vehType","_config","_reqMaterials","_crypto","_hasall","_missing","_has","_msg"]; +params [["_veh",objnull],["_classUpgrade",""],["_displayname",""],["_mattxt",""]]; + +Ignatz_VehicleUpgradeArray = []; +if (isnull _veh) exitwith { + ["Upgrade failed - Vehicle not found",5] call Epoch_message; +}; + +_vehType = typeOf _veh; +_config = 'CfgVehicleUpgrades' call EPOCH_returnConfig; +if !(isclass (_config >> _vehType)) exitwith { + ["Vehicle not upgradeable",5] call Epoch_message; +}; +_reqMaterials = getArray (_config >> _vehType >> _classUpgrade >> "ReqMaterials"); + +_crypto = 0; +if(_reqMaterials isEqualTo [])exitWith{ + ["Required Materials list not found, report this error to an admin",5] call Epoch_message; +}; +_hasall = true; +_missing = []; +{ + _x params ["_count","_item"]; + _has = 0; + if (_item isequalto "Crypto") then { + _has = Epoch_Playercrypto; + } + else { + _has = {_x == _item} count ((magazines player)+(items player)); + }; + if (_has < _count) then { + _missing pushback [_count-_has,_item]; + _hasall = false + }; +}forEach _reqMaterials; +if (!_hasall) exitwith { + _msg = 'Missing:'; + { + _msg = _msg + format [' %1 %2,', _x select 0, (_x select 1) call EPOCH_itemDisplayName]; + } foreach _missing; + [_msg,5] call Epoch_message; +}; +if !(local _veh) exitwith { + ["Upgrade failed - Go in as Driver first",5] call Epoch_message; +}; +if !(crew _veh isequalto []) exitwith { + ["Upgrade failed - All passengers must leave the Vehicle",5] call Epoch_message; +}; +if (player distance _veh > 15) exitwith { + ["Upgrade failed - Vehicle to far away",5] call Epoch_message; +}; +if (player distance _veh < 4.5) exitwith { + ["Upgrade failed - Take a bit distance and try again",5] call Epoch_message; +}; + +{ + _x params ["_count","_item"]; + if (_item isequalto "Crypto") then { + _crypto = _crypto + _count; + } + else { + for "_i" from 1 to _count do{ + player removeItem _item; + }; + }; +} forEach _reqMaterials; + +[[_veh,_classUpgrade,_crypto],player,Epoch_personalToken] remoteExec ["EPOCH_server_upgrade_vehicle",2]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_upgradeVehicleCheck.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_upgradeVehicleCheck.sqf new file mode 100644 index 0000000..18483b3 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_client_upgradeVehicleCheck.sqf @@ -0,0 +1,54 @@ +/* + Author: He-Man + + Contributors: DirtySanchez + + Description: + Upgrade Vehicle Check + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_upgradeVehicleCheck.sqf +*/ + +private ["_veh","_vehType","_config","_classUpgrade","_reqMaterials","_mattxt","_displayname"]; +_veh = _this; + +Ignatz_VehicleUpgradeArray = []; +if (isnull _veh) exitwith { + ["Upgrade failed - Vehicle not found",5] call Epoch_message; +}; +if (player distance _veh > 12) exitwith { + ["Upgrade failed - Vehicle to far away",5] call Epoch_message; +}; + +_vehType = typeOf _veh; +_config = 'CfgVehicleUpgrades' call EPOCH_returnConfig; +if !(isclass (_config >> _vehType)) exitwith { + ["Vehicle not upgradeable",5] call Epoch_message; +}; +_classUpgrade = getarray (_config >> _vehType >> "upgradeToVehicle"); +if (_classUpgrade isequalto []) exitwith { + ["Vehicle not upgradeable",5] call Epoch_message; +}; +if ((_veh getvariable ["Vehicle_Slot","-1"]) isequalto "-1") exitwith { + ["Vehicle not upgradeable",5] call Epoch_message; +}; + +{ + _classUpgrade = _x; + if (_x isequaltype []) then { + _classUpgrade = selectrandom _x; + }; + if (isclass (_config >> _vehType >> _classUpgrade)) then { + _reqMaterials = getArray (_config >> _vehType >> _classUpgrade >> "ReqMaterials"); + _mattxt = "Needed:"; + { + _mattxt = _mattxt + format [' %1 %2,', _x select 0, (_x select 1) call EPOCH_itemDisplayName]; + } forEach _reqMaterials; + _displayname = _classUpgrade call EPOCH_itemDisplayName; + Ignatz_VehicleUpgradeArray pushback [_veh,_classUpgrade,_displayname,_mattxt]; + }; +} foreach _classUpgrade; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_vehicle_ChangeLicensePlate.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_vehicle_ChangeLicensePlate.sqf new file mode 100644 index 0000000..a6d99c7 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_vehicle_ChangeLicensePlate.sqf @@ -0,0 +1,35 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + change license plates from Vehicles + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_vehicle_ChangeLicensePlate.sqf +*/ + +private ["_display","_maintxt","_txt","_bottomtxt","_savebutton"]; +params ['_vehicle',['_player',player]]; +if (isnull _vehicle) exitwith {}; +if (_player distance _vehicle > 10) exitwith {}; +if (!alive _vehicle) exitwith {}; +if (!local _vehicle) exitwith { + ['Go in as driver first',5] call Epoch_Message; +}; +Epoch_PlateVehicle = _vehicle; +createdialog 'EPOCH_SimpleInput'; +waituntil {!isnull (finddisplay -1200)}; +disableSerialization; +_display = (finddisplay -1200); +_maintxt = _display displayctrl 20; +_txt = _display displayctrl 23; +_bottomtxt = _display displayctrl 22; +_savebutton = _display displayctrl 30; +_maintxt ctrlSetText (format ['Change Licenseplate for %1',(typeof _vehicle) call Epoch_ItemDisplayName]); +_txt ctrlSetText 'New Plate:'; +_savebutton buttonSetAction 'if (player distance Epoch_PlateVehicle > 10) exitwith {}; Epoch_PlateVehicle setPlateNumber (ctrlText (finddisplay -1200 displayctrl 21)); closedialog 0; Epoch_PlateVehicle call EPOCH_interact; Epoch_PlateVehicle = nil'; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_vehicle_Paintgarage.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_vehicle_Paintgarage.sqf new file mode 100644 index 0000000..83d3c1f --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_vehicle_Paintgarage.sqf @@ -0,0 +1,77 @@ +_this spawn { + params ["_Building","_Vehicle",["_Textures",[]]]; + _PaintingCosts = getnumber (missionconfigfile >> "CfgPainting" >> "DefaultVehicle" >> "PaintingCosts"); + if (isclass (missionconfigfile >> "CfgPainting" >> (typeof _Vehicle))) then { + _PaintingCosts = getnumber (missionconfigfile >> "CfgPainting" >> (typeof _Vehicle) >> "PaintingCosts"); + }; + if (EPOCH_playerCrypto < _PaintingCosts) exitWith { + _line = format ['You need %1 Crypto for Painting', _PaintingCosts]; + [_line,5] call Epoch_message; + }; + _ok = true; + _Check1 = { + _out1 = true; + if (_Vehicle distance2D _Building > 2.5) exitwith { + ["Park in center of the Garage",5] call Epoch_Message; + false + }; + if !((crew _Vehicle) isEqualTo []) exitwith { + ["All passengers have to leave the Vehicle",5] call Epoch_Message; + false + }; + { + _playerPosASL = visiblePositionASL _x; + _abovePlayerPosASL = [_playerPosASL select 0,_playerPosASL select 1,(_playerPosASL select 2) + 15]; + if (lineIntersects [_playerPosASL, _abovePlayerPosASL, _x]) exitwith { + ["All Players have to leave the Garage",5] call Epoch_Message; + _out1 = false; + }; + } foreach (_Building nearentities ["MAN",(sizeof (typeof _Building))/2]); + _out1 + }; + _DoorCheck = { + (_building animationPhase "Lroll_door") < 0.1 + }; + _Animate = { + _Building animate ["Lroll_door",_this]; + _Building animate ["Uroll_door",_this]; + _Building animate ["door_2",if (_this == 1) then {0} else {1}]; + }; + if !(call _Check1) exitwith {}; + 0 call _Animate; + waituntil {uisleep 0.2; !(call _Check1) || call _DoorCheck}; + if !(call _DoorCheck) exitwith {}; + _smokes = []; + _smokeclasses = ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"]; + for "_i" from 0 to 5 do { + _pos = switch _i do { + case 0: {[-1.5,2,-0.35]}; + case 1: {[1.5,2,-0.35]}; + case 2: {[-1.5,-2,-0.35]}; + case 3: {[1.5,-2,-0.35]}; + case 4: {[0,0,-0.35]}; + default {[0,0,0]}; + }; + if !(call _DoorCheck) exitwith {}; + _smoke = (_smokeclasses deleteat 0) createVehicle getPosATL _Vehicle; + _smoke attachTo [_Vehicle,_pos]; + _smokes pushback _smoke; + uisleep 3.5; + }; + if !(call _DoorCheck) exitwith { + ["Painting Abort - Someone has opened the Door",5] call Epoch_Message; + { + deletevehicle _x; + } foreach _smokes; + 1 call _Animate; + }; + if !(_Textures isEqualTo []) then { + [_vehicle,_PaintingCosts,_Textures,player,Epoch_personalToken] remoteexec ['epoch_server_paintvehicle',2]; + }; + { + deletevehicle _x; + } foreach _smokes; + uisleep 5; + ["Painting finished! Thank you very much...",5] call Epoch_Message; + 1 call _Animate; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_vehicle_checkTurretAmmo.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_vehicle_checkTurretAmmo.sqf new file mode 100644 index 0000000..ca16ce0 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_vehicle_checkTurretAmmo.sqf @@ -0,0 +1,61 @@ +/* + Author: DirtySanchez - ported from DonkeyPunch eXpoch http://DonkeyPunch.INFO + + Contributors: He-Man + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_vehicle_checkTurretAmmo.sqf +*/ +private ["_ammoTurret","_availAmmo","_ammo","_magazinesAmmoFull","_readd","_selectedmag","_magAmmoCount","_return","_AllFlares","_removeveh","_readdveh"]; +params["_vehicle","_weaponTurret", "_turretPath"]; + +// Fix for not reloadable Flares +if ((["flare", tolower _weaponTurret] call BIS_fnc_inString) || (["smoke", tolower _weaponTurret] call BIS_fnc_inString)) then { + _AllFlares = ((magazinesAllTurrets _vehicle) select {_x param [1] isequalto _turretPath}) select {(["flare", tolower (_x param [0])] call BIS_fnc_inString) || (["smoke", tolower (_x param [0])] call BIS_fnc_inString)}; + _removeveh = []; + _readdveh = []; + { + _removeveh pushbackunique (_x select 0); + if !((_x select 2) isequalto 0) then { + _readdveh pushback _x; + }; + } foreach _AllFlares; + { + _vehicle removeMagazinesTurret [_x,_turretPath]; + } foreach _removeveh; + { + _vehicle addMagazineTurret [_x select 0, _turretPath, _x select 2]; + } foreach _readdveh; +}; + +_ammoTurret = getArray(configFile >> "CfgWeapons" >> _weaponTurret >> "magazines"); +_availAmmo = (magazines player) arrayIntersect _ammoTurret; +if (count _availAmmo == 0) then { + [format["You need a can of %1 or any of its variants",getText (configFile >> 'CfgMagazines' >> (_ammoTurret select 0) >> 'displayName')],5] call Epoch_message; +} +else { + _ammo = _availAmmo select 0; + _magazinesAmmoFull = magazinesAmmoFull player; + _readd = []; + { + if((_x select 0) isEqualTo _ammo) then { + _readd pushback _x; + }; + } forEach _magazinesAmmoFull; + _selectedmag = _readd deleteat 0; + _magAmmoCount = _selectedmag select 1; + _vehicle addMagazineTurret [_ammo,_turretPath,_magAmmoCount]; + player removeMagazines _ammo; + { + _return = _x call EPOCH_fnc_addMagazineOverflow; + } foreach _readd; + _vehicle call EPOCH_interact; + if !(EPOCH_arr_interactedObjs isEqualTo[]) then { + [EPOCH_arr_interactedObjs] remoteExec['EPOCH_server_save_vehicles', 2]; + EPOCH_arr_interactedObjs = []; + }; + [format["Added 1 can %1 with %2 rounds to %3",getText (configFile >> 'CfgMagazines' >> _ammo >> 'displayName'),_magAmmoCount,getText (configFile >> 'CfgWeapons' >> _weaponTurret >> 'displayName')],5] call Epoch_message; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_vehicle_removeTurretAmmo.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_vehicle_removeTurretAmmo.sqf new file mode 100644 index 0000000..37b1c93 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/compile/vehicles/EPOCH_vehicle_removeTurretAmmo.sqf @@ -0,0 +1,44 @@ +/* + + Author: DirtySanchez - ported from DonkeyPunch eXpoch http://DonkeyPunch.INFO + + Contributors: He-Man + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_vehicle_removeTurretAmmo.sqf +*/ +private ["_AllMagsDetailTurret","_selectedmag","_magAmmoCount","_return","_magtxt","_weapontxt","_msg"]; +params["_vehicle","_weaponTurret","_ammo", "_turretPath"]; + +_AllMagsDetailTurret = ((magazinesAllTurrets _vehicle) select {_x param [1] isequalto _turretPath}) select {_x param [0] isequalto _ammo}; +if (_AllMagsDetailTurret isequalto []) exitwith { + ["Error - No ammo found",5] call Epoch_message; +}; +_selectedmag = _AllMagsDetailTurret deleteat 0; +_magAmmoCount = _selectedmag select 2; +_vehicle removeMagazinesTurret [_ammo,_turretPath]; +{ + _vehicle addMagazineTurret [_x select 0, _turretPath, _x select 2]; +} foreach _AllMagsDetailTurret; +reload _vehicle; +_return = [_ammo,_magAmmoCount] call EPOCH_fnc_addMagazineOverflow; + +_vehicle call EPOCH_interact; +if !(EPOCH_arr_interactedObjs isEqualTo[]) then { + [EPOCH_arr_interactedObjs] remoteExec['EPOCH_server_save_vehicles', 2]; + EPOCH_arr_interactedObjs = []; +}; + +_magtxt = getText (configFile >> 'CfgMagazines' >> _ammo >> 'displayName'); +_weapontxt = getText (configFile >> 'CfgWeapons' >> _weaponTurret >> 'displayName'); +_msg = switch _return do { + case 0: {"Error - return epoch_equip failed"}; + case 1: {format ["Removed 1 can %1 with %2 rounds from %3",_magtxt,_magAmmoCount, _weapontxt]}; + case 2: {format ["Dropped 1 can of %1 with %2 rounds on the ground!",_magtxt,_magAmmoCount, _weapontxt]}; + case 3: {format ["You dont have enough space for %1!",_magtxt]}; + case 4: {format ["Put 1 can of %1 with %2 rounds into Vehicle!",_magtxt,_magAmmoCount, _weapontxt]}; +}; +[_msg,5] call Epoch_message; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_FiredMan.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_FiredMan.sqf new file mode 100644 index 0000000..6d57ea8 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_FiredMan.sqf @@ -0,0 +1,15 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + Custom A3 Epoch FiredMan Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_FiredMan.sqf +*/ +params ["_unit","_weapon","_muzzle","_mode","_ammo","_magazine","_projectile"]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_FiredNear.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_FiredNear.sqf new file mode 100644 index 0000000..750dcfb --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_FiredNear.sqf @@ -0,0 +1,15 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Custom A3 Epoch FiredNear Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_FiredNear.sqf +*/ +params ["_unit", "_firer", "_distance", "_weapon", "_muzzle", "_mode", "_ammo", "_gunner"]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_GetInMan.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_GetInMan.sqf new file mode 100644 index 0000000..cf92fa5 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_GetInMan.sqf @@ -0,0 +1,16 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + Custom A3 Epoch GetInMan Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_GetInMan.sqf +*/ +params ["_unit","_position","_vehicle"]; + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_GetOutMan.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_GetOutMan.sqf new file mode 100644 index 0000000..c3e0f8b --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_GetOutMan.sqf @@ -0,0 +1,16 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + Custom A3 Epoch GetOutMan Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_GetOutMan.sqf +*/ +params ["_unit","_position","_vehicle"]; + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_HandleDamage.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_HandleDamage.sqf new file mode 100644 index 0000000..26d0c9e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_HandleDamage.sqf @@ -0,0 +1,21 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Custom A3 Epoch HandleDamage Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_HandleDamage.sqf +*/ +params ["_unit", "_selection", "_damage", "_source", "_projectile", "_hitIndex", "_instigator", "_hitPoint"]; + + + + + +_damage diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_Hit.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_Hit.sqf new file mode 100644 index 0000000..886b2ba --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_Hit.sqf @@ -0,0 +1,15 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Custom A3 Epoch Hit Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_Hit.sqf +*/ +params ["_unit", "_source", "_damage", "_instigator"]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_InventoryClosed.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_InventoryClosed.sqf new file mode 100644 index 0000000..93fb395 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_InventoryClosed.sqf @@ -0,0 +1,15 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + Custom A3 Epoch InventoryClosed Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_Take.sqf +*/ +params ["_unit","_container"]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_InventoryOpened.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_InventoryOpened.sqf new file mode 100644 index 0000000..93817bc --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_InventoryOpened.sqf @@ -0,0 +1,21 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + Custom A3 Epoch InventoryOpened Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_InventoryOpened.sqf +*/ +params ["_unit","_container","_sec"]; +// Start Custom Code + + + +// End Custom Code +false diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_KeyDown.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_KeyDown.sqf new file mode 100644 index 0000000..03629c4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_KeyDown.sqf @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + Custom A3 Epoch KeyUp Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_KeyDown.sqf +*/ +params ["_display","_dikCode","_shift","_ctrl","_alt"]; +_handled = false; + + +_handled diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_KeyUp.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_KeyUp.sqf new file mode 100644 index 0000000..6d643dc --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_KeyUp.sqf @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + Custom A3 Epoch KeyUp Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_KeyUp.sqf +*/ +params ["_display","_dikCode","_shift","_ctrl","_alt"]; +_handled = false; + + +_handled diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_Killed.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_Killed.sqf new file mode 100644 index 0000000..6be7e92 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_Killed.sqf @@ -0,0 +1,15 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + Custom A3 Epoch Killed Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_Killed.sqf +*/ +params [["_unit",objNull,[objNull]],["_killer",objNull,[objNull]] ]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_Put.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_Put.sqf new file mode 100644 index 0000000..602a0f7 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_Put.sqf @@ -0,0 +1,15 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + Custom A3 Epoch Put Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_Put.sqf +*/ +params ["_unit","_container","_itemclass"]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_SeatSwitchedMan.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_SeatSwitchedMan.sqf new file mode 100644 index 0000000..c8007c9 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_SeatSwitchedMan.sqf @@ -0,0 +1,15 @@ +/* + Author: He-Man - EpochMod.com + + Contributors: + + Description: + Custom A3 Epoch SeatSwitchedMan Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_SeatSwitchedMan.sqf +*/ +params ["_unit1", "_unit2", "_vehicle"]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_Take.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_Take.sqf new file mode 100644 index 0000000..08beceb --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_EH_Take.sqf @@ -0,0 +1,15 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + Custom A3 Epoch Take Eventhandler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_Take.sqf +*/ +params ["_unit","_container","_itemclass"]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_KeyMap.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_KeyMap.sqf new file mode 100644 index 0000000..bf03b6f --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_KeyMap.sqf @@ -0,0 +1,31 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + Custom A3 Epoch KeyMap + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_KeyMap.sqf + + Description: + Add your own customable KeyMaps to the Epoch Configuration Menu (ESC-Menu) + + usage: + ["Text in ESC-Menu","VariableNameForKey",keycode] for full keycode list see: https://community.bistudio.com/wiki/DIK_KeyCodes +*/ + +_keyMap = _keyMap + [ +/* Example from eXpoch Vector building: + ["Build: Vector LEFT", "eXpoch_keysVectorTiltL", 0xCB], + ["Build: Vector RIGHT", "eXpoch_keysVectorTiltR", 0xCD], + ["Build: Vector AWAY", "eXpoch_keysVectorTiltAwy", 0xC8], + ["Build: Vector TOWARD", "eXpoch_keysVectorTiltTwd", 0xD0], + ["Build: Object SnapTo", "eXpoch_keysVectorSnapToObject", 0x52], + ["Build: Reset Object", "eXpoch_keysVectorResetObject", 0x4C] +*/ +]; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_OnEachFrame.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_OnEachFrame.sqf new file mode 100644 index 0000000..9a00d76 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_OnEachFrame.sqf @@ -0,0 +1,14 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: [Ignatz] He-Man + + Description: + Custom A3 Epoch OnEachFrame + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_OnEachFrame.sqf +*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_radioActions.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_radioActions.sqf new file mode 100644 index 0000000..5ecb978 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/EPOCH_custom_radioActions.sqf @@ -0,0 +1,31 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: Activates code block within switch when certain radio is used from Favorites bar + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_3DctrlSpin.sqf + + Usage: None by default, create your own actions here if you want +*/ + +switch _this do { + case "EpochRadio0":{}; + case "EpochRadio1":{}; + case "EpochRadio2":{}; + case "EpochRadio3":{}; + case "EpochRadio4":{}; + case "EpochRadio5":{}; + case "EpochRadio6":{}; + case "EpochRadio7":{}; + case "EpochRadio8":{}; + case "EpochRadio9":{}; + default {}; +}; + +true \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/BlockedAreas.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/BlockedAreas.sqf new file mode 100644 index 0000000..91dd53c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/BlockedAreas.sqf @@ -0,0 +1,31 @@ +_config = 'CfgEpochClient' call EPOCH_returnConfig; +_blacklist = (getArray(_config >> worldname >> 'blockedArea')); +if (isnil "Epoch_BlockedMarkeron") then { + Epoch_BlockedMarkeron = false; +}; +if (Epoch_BlockedMarkeron) then { + { + _x params ["_mPos","_size"]; + _mName = format ["blockedmarker_%1",_mPos]; + deleteMarkerlocal _mName; + } foreach _blacklist; + ["Blocked Areas are now removed from your Map",5] call Epoch_Message; +} +else { + _mShape = 'ELLIPSE'; + _mColor = 'ColorRed'; + _mBrush = 'Grid'; + _mAlpha = 0.8; + { + _x params ["_mPos","_size"]; + _msize = [_size,_size]; + _mName = format ["blockedmarker_%1",_mPos]; + _mrkr = createMarkerLocal [_mName, _mPos]; + _mName setMarkerShapeLocal _mShape; + _mName setMarkerSizeLocal _mSize; + _mName setMarkerColorLocal _mColor; + _mName setMarkerBrushLocal _mBrush; + _mName setMarkerAlphaLocal _mAlpha; + } forEach _blacklist; + ["Blocked Areas are now shown on your Map",5] call Epoch_Message; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/ServerContacts.html b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/ServerContacts.html new file mode 100644 index 0000000..840250f --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/ServerContacts.html @@ -0,0 +1,36 @@ + + + + +E_Pad + + + + +

+Server Contacts:
+Homepage: EpochMod.com
+Discord: EpochMod Discord
+FaceBook: https://www.facebook.com/EpochMod/
+

+ + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/ServerInfos.html b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/ServerInfos.html new file mode 100644 index 0000000..0b82b00 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/ServerInfos.html @@ -0,0 +1,36 @@ + + + + +E_Pad + + + + +

+Server Infos:
+Homepage: EpochMod.com
+Discord: EpochMod Discord
+FaceBook: https://www.facebook.com/EpochMod/
+

+ + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/ServerRules.html b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/ServerRules.html new file mode 100644 index 0000000..c10881b --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/ServerRules.html @@ -0,0 +1,37 @@ + + + + +E_Pad + + + + +

+Server Rules
+- Play fair!
+   - Do not glitch
+   - Do not use bugs
+   - Do not flame other players
+

+ + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/ServerSettings.html b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/ServerSettings.html new file mode 100644 index 0000000..5efdb21 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/ServerSettings.html @@ -0,0 +1,35 @@ + + + + +E_Pad + + + + +

+Server Settings:
+Ask an Admin to change this file:
+epoch_code\customs\E_Pad\ServerSettings.html
+

+ + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/traderDiag_nearPlayers.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/traderDiag_nearPlayers.sqf new file mode 100644 index 0000000..3447dc7 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/traderDiag_nearPlayers.sqf @@ -0,0 +1,23 @@ +params [["_EnergyRequired",250],["_radius",250]]; +if (missionnamespace getvariable ["Epoch_PlayerScanActive",false]) exitwith {}; +if (EPOCH_playerEnergy - _EnergyRequired < 0) exitwith { + [format ['You need %1 Energy to scan for near Players',_EnergyRequired], 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; +}; +Epoch_PlayerScanActive = true; +["Energy",-_EnergyRequired] call Epoch_GiveAttributes; +_radius spawn { + private ["_plyr","_plyrs","_trdrMsg"]; + ["Scanning for near Players... Please wait...", 10,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; + uisleep (5 + random 3); + _trdrMsg = ""; + _plyrs = (player nearEntities _this) select {isplayer _x}; + if (count _plyrs < 2) then { + _trdrMsg = format["Apart from you %1. %2",name player, selectRandom ["I haven't seen any round these parts for a long while.","It has been very quiet around here,","There is not much to report !"]]; + } else { + _plyrs deleteAt 0; + _plyr = selectRandom _plyrs; + _trdrMsg = format["%2 %1.",name _plyr, selectRandom ["The last person picked up by the UAV was","I did spot someone earlier, their name was","I heard there was somebody new in the area, "]]; + }; + [_trdrMsg, 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; + Epoch_PlayerScanActive = nil; +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/traderDiag_nearVehicles.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/traderDiag_nearVehicles.sqf new file mode 100644 index 0000000..173c60a --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/traderDiag_nearVehicles.sqf @@ -0,0 +1,23 @@ +params [["_EnergyRequired",250],["_radius",250]]; +if (missionnamespace getvariable ["Epoch_VehicleScanActive",false]) exitwith {}; +if (EPOCH_playerEnergy - _EnergyRequired < 0) exitwith { + [format ['You need %1 Energy to scan for near Players',_EnergyRequired], 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; +}; +Epoch_VehicleScanActive = true; +["Energy",-_EnergyRequired] call Epoch_GiveAttributes; +_radius spawn { + private ["_dist","_trdrMsg","_veh","_vehs"]; + ["Scanning for near Vehicles... Please wait...", 10,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; + uisleep (5 + random 3); + _trdrMsg = ""; + _vehs = player nearEntities [["Landvehicle","SHIP","AIR","TANK"],_this]; + if (count _vehs < 1) then { + _trdrMsg = format["%2 %1.",name player,selectRandom["I haven't seen anything lately","There is nothing around here","The last time the UAV went out it found nothing"]]; + } else { + _veh = selectrandom _vehs; + _dist = ceil ((_veh distance player) / 100) * 100; + _trdrMsg = format["I know of at least one vehicle within about %1m. It looks like a %2.",_dist, (typeof _veh) call EPOCH_itemDisplayName]; + }; + [_trdrMsg, 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; + Epoch_VehicleScanActive = nil; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/traderDiag_news.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/traderDiag_news.sqf new file mode 100644 index 0000000..586f3ca --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/traderDiag_news.sqf @@ -0,0 +1,17 @@ +private _newsArr = [ + "My dog was shot. That made me sad.", + "Business has been quiet since word got out that sappers are in the area.", + "Looters are expecting too much crypto for all the junk they bring in.", + "What do I look like ? A newspaper vendor. Go Away.", + "The sun came up again this morning.. That's good news I suppose.", + "Keep your dog fed with raw or cooked carcasses.", + "Sappers are known to be good for their pelts. Just don't get too close to one", + "Some strange rumours that a Construct was seen in the mountains. Those are just bedtime stories to scare kids with.", + "UAVs are a good source of components.", + "Some say the nearby town is haunted by malevolent spirits.", + "I hear the military are helping survivors with air drops. Your loot is always welcome here if you find one.", + "Dogs can help you find pelts and animal carcasses", + "I heard that a new vehicle has been seen, some kind of board that you stand on. I personally don't believe it." +]; + +[selectRandom _newsArr, 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/web.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/web.sqf new file mode 100644 index 0000000..9addcc8 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/customs/E_Pad/web.sqf @@ -0,0 +1,7 @@ +disableserialization; +_display = finddisplay 9898; +call EPOCH_EPad_clearscreen; +_htmlctrl = (_display displayctrl 1901); +_htmlctrl ctrlshow true; +_html = "epoch_code\gui\scripts\e_pad\Apps\E_Pad.html"; +_htmlctrl htmlLoad _html; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/EPOCH_InterruptConfig.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/EPOCH_InterruptConfig.sqf new file mode 100644 index 0000000..a8cb435 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/EPOCH_InterruptConfig.sqf @@ -0,0 +1,76 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfig.sqf +*/ +#include "\A3\ui_f\hpp\defineCommonGrids.inc" +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_cfg","_color","_configs","_ctrl","_ctrlPos","_getIDC","_group","_groupIDC","_icon","_idc","_idx","_lb","_name","_offset"]; +//[[[end]]] +params [["_display",displayNull,[displayNull] ] ]; + +_offset = if (isServer) then {40 * GUI_GRID_W + GUI_GRID_X;} else { + + private _dbgC = getMissionConfigValue ["enableDebugConsole",0]; + private _dbgCOpen = if (_dbgC isEqualType []) then { + getPlayerUID player in _dbgC + } else { + (serverCommandAvailable "#lock" && _dbgC == 1) || _dbgC == 2 }; + if (_dbgCOpen) then { + 40 * GUI_GRID_W + GUI_GRID_X; + } else { + 17 * GUI_GRID_W + GUI_GRID_X; + }; +}; + +_cfg = 'CfgEpochConfiguration' call EPOCH_returnConfig; +_configs = "true" configClasses _cfg; + +_idc = -70000; +_getIDC = {_idc = _idc - 1; _idc}; + +Epoch_interrupt_controls = []; +if (isNil "Epoch_interrupt_index") then {Epoch_interrupt_index = 0}; + +{ + _ctrl = _display ctrlCreate [_x,call _getIDC]; + _ctrlPos = ctrlPosition _ctrl; + _ctrlPos set [0,_offset]; + _ctrl ctrlSetPosition _ctrlPos; + _ctrl ctrlCommit 0; + + Epoch_interrupt_controls set [_forEachIndex, _ctrl]; +} forEach ["Epoch_main_config_combo","Epoch_main_config_group","Epoch_main_config_title"]; + +_lb = Epoch_interrupt_controls select 0; +_groupIDC = call _getIDC; +{ + _name = getText (_x >> "name"); + _color = getArray (_x >> "color"); + _icon = getText (_x >> "icon"); + _group = getText (_x >> "controlGroup"); //convert to actual hidden control + + _idx = _lb lbAdd _name; + _lb lbSetColor [_idx, _color]; + _lb lbSetPicture [_idx, _icon]; + _lb lbSetData [_idx, _group]; + _lb lbSetValue [_idx, _groupIDC]; + +} forEach _configs; + +//display does not exist yet for whatever reason +[_lb] spawn { + waitUntil {!isNull findDisplay 49}; + (_this select 0) lbSetCurSel Epoch_interrupt_index; +}; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/EPOCH_InterruptConfigActions.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/EPOCH_InterruptConfigActions.sqf new file mode 100644 index 0000000..e3c0362 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/EPOCH_InterruptConfigActions.sqf @@ -0,0 +1,50 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfigActions.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_data","_display","_group","_mainGrp","_mainGrpPos","_pos","_value","_width"]; +//[[[end]]] +params ["_ctrl","_idx"]; + +_mainGrp = Epoch_interrupt_controls select 1; +_display = ctrlParent _mainGrp; +_data = _ctrl lbData _idx; +_value = _ctrl lbValue _idx; + +Epoch_interrupt_index = _idx; +_mainGrpPos = ctrlPosition _mainGrp; +//_mainGrpPos set [0,Epoch_interrupt_offset]; //convert to global if having problems with x pos + +ctrlDelete _mainGrp; + +_mainGrp = _display ctrlCreate ["Epoch_main_config_group",_value]; +_mainGrp ctrlSetPosition _mainGrpPos; +_mainGrp ctrlCommit 0; + +_group = _display ctrlCreate [_data, _value + 1, _mainGrp]; + +_width = (ctrlPosition _group) select 2; +Epoch_interrupt_controls set [1, _mainGrp]; + +{ + _pos = ctrlPosition _x; + _pos set [2,_width]; + _x ctrlSetPosition _pos; + _x ctrlCommit 0; +} forEach Epoch_interrupt_controls; + +ctrlSetFocus _mainGrp; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_3DctrlPitchYaw.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_3DctrlPitchYaw.sqf new file mode 100644 index 0000000..e7ac381 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_3DctrlPitchYaw.sqf @@ -0,0 +1,41 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + Spins 3D dialog along X and Z axis following mouse input + Requires source control to read coords from and destination 3D control + Can be applied to 3D control itself, but not recommended, pref use transparent rscPicture (enable it). + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_3DctrlPitchYaw.sqf + + Usage: + _ctrl ctrlSetEventHandler ["MouseMoving", "[_this,control3D] call Epoch_3DctrlPitchYaw"]; +*/ +//[[[cog import generate_private_arrays ]]] +private ["_dirX","_dirY","_inX","_inY","_upX","_upY"]; +//[[[end]]] +params ["_arr","_ctrl3D"]; + +disableSerialization; + +_inX = (_arr select 2) * 720; +_inY = (_arr select 1) * 720; + +_dirY = cos _inX; +_upY = -sin _inX; + +_dirX = -(_dirY * sin _inY); +_dirY = _dirY * cos _inY; + +_upX = -(_upY * sin _inY); +_upY = _upY * cos _inY; + +_ctrl3D ctrlSetModelDirAndUp [[_dirX,_dirY,sin _inX],[_upX,_upY,cos _inX]]; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_3DctrlSpin.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_3DctrlSpin.sqf new file mode 100644 index 0000000..7cf9a87 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_3DctrlSpin.sqf @@ -0,0 +1,38 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Spins a 3D dialog + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_3DctrlSpin.sqf + + Usage: + [control] call epoch_3DctrlSpin; +*/ + +_this spawn { + disableSerialization; + params ["_ctrl3D"]; + rmx_var_3dCtrlSpin = true; + + _ctrlPos = ctrlPosition _ctrl3D; + + if (isNil "rmx_var_3dCtrlSpin_Vector") then {rmx_var_3dCtrlSpin_Vector = 0;}; + + while {rmx_var_3dCtrlSpin} do { + for "_i" from 0 to 360 do { + + _vector = (360 - _i) - 360; + _ctrl3D ctrlSetModelDirAndUp [[-(sin _vector),cos _vector,0],[cos _vector * rmx_var_3dCtrlSpin_Vector,sin _vector * rmx_var_3dCtrlSpin_Vector,1]]; + if !(rmx_var_3dCtrlSpin) exitWith{}; + uiSleep 0.01; + }; + }; +}; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_3DctrlYaw.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_3DctrlYaw.sqf new file mode 100644 index 0000000..0a69046 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_3DctrlYaw.sqf @@ -0,0 +1,32 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + Spins 3D dialog along Z axis following mouse input + Requires source control to read coords from and destination 3D control + Can be applied to 3D control itself, but not recommended, pref use transparent rscPicture (enable it). + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_3DctrlYaw.sqf + + Usage: + _ctrl ctrlSetEventHandler ["MouseMoving", "[_this,control3D] call Epoch_3DctrlPitchYaw"]; +*/ +//[[[cog import generate_private_arrays ]]] +private ["_inX","_inY"]; +//[[[end]]] +params ["_arr","_ctrl3D"]; + +disableSerialization; + +_inX = (_arr select 2) * 180; +_inY = (_arr select 1) * 180; + +_ctrl3D ctrlSetModelDirAndUp [[-(cos _inX * sin _inY),cos _inX * cos _inY,0],[0,0,1]]; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_genderSelection.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_genderSelection.sqf new file mode 100644 index 0000000..f84f062 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_genderSelection.sqf @@ -0,0 +1,27 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Displays custom text message to player + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_genderSelection.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_max","_min","_r","_r2","_r3"]; +//[[[end]]] +_min = safezoneX + 0.4 * safezoneW; +_max = safezoneX + 0.6 * safezoneW; +_r = linearConversion [_min, _max, _this, 0.2, -1, true]; +_r2 = linearConversion [_min, _max, _this, 2, 0.8, true]; +_r3 = linearConversion [_min, _max, _this, safezoneX, safezoneX - safezoneW * 0.3, true]; + +(findDisplay -7 displayCtrl 88801) ctrlSetPosition [_r,1,1.8]; +(findDisplay -7 displayCtrl 88802) ctrlSetPosition [_r2,1,1.8]; +(findDisplay -7 displayCtrl 88800) ctrlSetPosition [_r3,safezoneY - safezoneH * 0.1]; +(findDisplay -7 displayCtrl 88800) ctrlCommit 0; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_getColorScheme.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_getColorScheme.sqf new file mode 100644 index 0000000..c66f68e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_getColorScheme.sqf @@ -0,0 +1,6 @@ +[ + profileNamespace getVariable "gui_bcg_rgb_r", + profileNamespace getVariable "gui_bcg_rgb_g", + profileNamespace getVariable "gui_bcg_rgb_b", + profileNamespace getVariable "gui_bcg_rgb_a" +] \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_getIDC.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_getIDC.sqf new file mode 100644 index 0000000..e472bae --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_getIDC.sqf @@ -0,0 +1,33 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + Used to register and unregister IDC used in dynamic menus. + Pass the control to unregister or just call fnc to get a unique IDC + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_getIDC.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_find","_in","_list","_out"]; +//[[[end]]] +_in = [_this, 0, controlNull, [controlNull]] call BIS_fnc_param; + +_list = missionNamespace getVariable ["rmx_var_uniqueIDC",[]]; + +if (ctrlIDC _in isEqualTo -1) then { + _out = -90000 - (count _list); + _list pushBack _out; +} else { + _find = _list find (ctrlIDC _in); + _list deleteAt _find; + _out = true; +}; +missionNamespace setVariable ["rmx_var_uniqueIDC",_list]; + +_out diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_guiObjHP.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_guiObjHP.sqf new file mode 100644 index 0000000..08457b6 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_guiObjHP.sqf @@ -0,0 +1,36 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_guiObjHP.sqf +*/ +private ["_dmg","_hitPoints"]; +params [["_obj",objNull, [objNull]],["_mode",0, [0]]]; + +if (_obj isEqualTo objNull) exitWith {}; + +_hitPoints = getAllHitPointsDamage _obj; + +{ + _dmg = _hitPoints select 2 select _forEachIndex; + if ((_mode isEqualTo 1) || ((_mode isEqualTo 0) && !(_dmg isEqualTo 0))) then { + [ + _obj, + 10, + format ["x\addons\a3_epoch_code\Data\UI\health_parts\%1.paa", floor (_dmg * 10)], + format ["%1%2",100 - (round (_dmg * 100)),"%"], + (_obj selectionPosition _x), + 10 + ] call epoch_gui3dModelPos; + }; +} forEach (_hitPoints select 1); + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_onPause.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_onPause.sqf new file mode 100644 index 0000000..9e9e16d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_onPause.sqf @@ -0,0 +1,88 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark, Raimonds Virtoss + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_onPause.sqf +*/ +disableSerialization; +private ["_fieldManual","_btnSave","_btnAbort","_respawnButton"]; +params [["_display",displayNull,[displayNull]]]; + +_fieldManual = _display displayCtrl 122; +_fieldManual ctrlEnable false; +_btnSave = _display displayCtrl 103; +_btnSave ctrlEnable false; +_btnAbort = _display displayCtrl 104; +_btnAbort ctrlEnable false; +_respawnButton = _display displayCtrl 1010; +_respawnButton ctrlEnable false; + +//Change to a scheduled environment +[_btnAbort,_display] spawn { + disableSerialization; + params ["_btnAbort","_display"]; + _startTime = diag_tickTime+10; + waitUntil { + _time = _startTime - diag_tickTime; + if (isNull _display || _time <= 0) exitWith {true}; + _btnAbort ctrlSetText format[localize "str_epoch_abort",[_time,"SS.MS"] call BIS_fnc_secondsToString]; + false + }; + if (!isNull _display) then { + _btnAbort ctrlSetText localize "str_disp_int_abort"; + _btnAbort ctrlEnable true; + }; +}; +[_display,_btnAbort,_fieldManual,_btnSave] spawn { + disableSerialization; + params ["_display","_btnAbort","_fieldManual","_btnSave"]; + _profilName = _display displayctrl 109; + _pauseText = _display displayctrl 523; + _pauseSetText = toUpper(localize "str_a3_cfguigrids_gui_0"); + _fieldManualText = toUpper(localize "str_a3_rscdisplaywelcome_pare_list3_title"); + _btnSaveText = toUpper(localize "str_disp_int_save"); + + waitUntil { + _fieldManual ctrlShow true; + _fieldManual ctrlEnable false; + _fieldManual ctrlSetText _fieldManualText; + + _btnSave ctrlShow true; + _btnSave ctrlSetText _btnSaveText; + + _pauseText ctrlSetText _pauseSetText; + _profilName ctrlSetText profileName; + + uiSleep 0.2; + isNull _display + }; +}; +[_display] spawn { + disableSerialization; + params ["_display"]; + _startTime = diag_tickTime+4; + waitUntil { + uiSleep 0.2; + (isNull _display) || ((_startTime - diag_tickTime) <= 0) + }; + if (!isNull _display) then { + call (missionnamespace getvariable ["EPOCH_ReloadLoadout",{}]); + uisleep 1; // give one second to broadcast clothing change + missionnamespace setvariable ["EPOCH_forceUpdateNow",true]; + }; +}; + +// init epoch configurator +with missionNamespace do { + _display call EPOCH_InterruptConfig; +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf new file mode 100644 index 0000000..ee09ad8 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf @@ -0,0 +1,33 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_out"]; +//[[[end]]] +params [["_in",false]]; +_out = switch (typeName _in) do { + case "STRING": + { + if !(isNull dyna_cursorTarget) then { + dyna_cursorTarget getVariable ["EPOCH_Locked",false] + }; + }; + case "OBJECT": + { + [_in,(_in getVariable ["EPOCH_Locked",false]),player,Epoch_personalToken] remoteExec ["EPOCH_server_lockStorage",2]; + true + }; + default {false}; +}; +_out diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_showStats.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_showStats.sqf new file mode 100644 index 0000000..7c0b3ef --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/Epoch_showStats.sqf @@ -0,0 +1,25 @@ +/* + Author: Aaron Clark + + Contributors: + + Description: + Displays Crypto and Energy stats on screen + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_showStats.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_display","_display3"]; +//[[[end]]] +9992 cutRsc["EpochGameUI2", "PLAIN", 2, false]; +_display = uiNamespace getVariable "EPOCH_EpochGameUI2"; +(_display displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto]; + +9993 cutRsc["EpochGameUI3", "PLAIN", 2, false]; +_display3 = uiNamespace getVariable "EPOCH_EpochGameUI3"; +(_display3 displayCtrl 21210) ctrlSetText format["%1/%2", round(EPOCH_playerEnergy), EPOCH_playerEnergyMax]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/animations/Epoch_2DCtrlHeartbeat.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/animations/Epoch_2DCtrlHeartbeat.sqf new file mode 100644 index 0000000..01806bd --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/animations/Epoch_2DCtrlHeartbeat.sqf @@ -0,0 +1,62 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Gives (imploding) heartbeat animation to your 2D GUI element along it's center. + + _control (mandatory): control to animate; + _scale (optional): scale of the beat 0.1 - 0.9 + Safe values: 0.1 - 0.7 + Best values: 0.55, 0.7 + _times (optional): Repeat animation N times + _delay (optional): Delay between animation repeats + _beats (optional): amount of heart beats per animation cycle + Best value: 2 (default) + _speed (optional): speed of animation, higher speed = longer animation + Best value: 0.04 (default) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/animations/Epoch_2DCtrlHeartbeat.sqf + + Usage: + [_control] call epoch_2DCtrlHeartbeat; //default (best values) 2x fast heartbeats + [_control, 0.55] call epoch_2DCtrlHeartbeat; // 2x deep heartbeats (also really nice, has a growing/breathing effect after 2 beats) + [_control, 0.7, 5, 2] call epoch_2DCtrlHeartbeat; // 2x fast normal beats repeated 5 times every 2 seconds + [_control, 0.7, 1, 1, 3, 0.01] call epoch_2DCtrlHeartbeat; // 3x super fast beats played once + +*/ +_this spawn { + disableSerialization; + private ["_ctrl","_scale","_times","_delay","_beats","_speed","_t","_b"]; + + _ctrl = param [0, controlNull,[controlNull]]; + _scale = param [1,0.7,[0]]; + _times = param [2,1,[0]]; + _delay = param [3,1.2,[0]]; + _beats = param [4,2,[0]]; + _speed = param [5,0.04,[0]]; + + if (_ctrl isEqualTo controlNull) exitWith {false}; + _speed = 0.1; + for "_t" from 0 to (_times - 1) do { + [_ctrl,_scale + _scale/2,_speed] call BIS_fnc_ctrlSetScale; + uiSleep _speed; + for "_b" from 0 to (_beats - 1) do { + [_ctrl,_scale,_speed] call BIS_fnc_ctrlSetScale; + uiSleep _speed; + [_ctrl,_scale + _scale/2,_speed] call BIS_fnc_ctrlSetScale; + uiSleep _speed; + }; + [_ctrl,1,_delay] call BIS_fnc_ctrlSetScale; + uiSleep _delay; + }; + + true +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/animations/Epoch_2DCtrlShake.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/animations/Epoch_2DCtrlShake.sqf new file mode 100644 index 0000000..898c531 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/animations/Epoch_2DCtrlShake.sqf @@ -0,0 +1,61 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Gives shake animation to your 2D GUI element along it's center. + + _control (mandatory): control to animate; + _speed (optional): speed of animation, higher values equals to faster animation. Should be less than degrees to avoid glitches! + _shakes (optional): amount of shakes, more shakes = longer animation. + _degrees (optional): rotation degrees 0 to 360. + + Shake animation sequence: + 0 > -degrees + -degrees > +degrees + +degrees > 0 + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/animations/Epoch_2DCtrlShake.sqf + + Usage: + [_control] call epoch_2DCtrlShake; //default 3 fast shakes + [_control, 10, 12] call epoch_2DCtrlShake; //12 very fast shakes + [_control, 2, 5, 90] call epoch_2DCtrlShake; // 5 very slow 90 degree shakes + +*/ +_this spawn { + disableSerialization; + private ["_ctrl","_speed","_shakes","_degrees","_s","_d"]; + _ctrl = param [0, controlNull,[controlNull]]; + _speed = param [1,5,[0]]; + _shakes = param [2,3,[0]]; + _degrees = param [3,10,[0]]; + + if (_ctrl isEqualTo controlNull) exitWith {false}; + + for "_s" from 0 to (_shakes - 1) do { + + for "_d" from 0 to _degrees step _speed do { + _ctrl ctrlSetAngle [_d * -1,0.5,0.5]; + uiSleep 0.01; + }; + for "_d" from (_degrees * -1) to _degrees step _speed do { + _ctrl ctrlSetAngle [_d,0.5,0.5]; + uiSleep 0.01; + }; + for "_d" from 0 to _degrees step _speed do { + _ctrl ctrlSetAngle [_degrees - _d,0.5,0.5]; + uiSleep 0.01; + }; + _ctrl ctrlSetAngle [0,0.5,0.5]; // just in case given params are not balanced + }; + + true +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/config/Epoch_config_keymap.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/config/Epoch_config_keymap.sqf new file mode 100644 index 0000000..972fef7 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/config/Epoch_config_keymap.sqf @@ -0,0 +1,127 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/config/Epoch_config_keymap.sqf + + Example: + _this call Epoch_config_keymap; +*/ +//[[[cog import generate_private_arrays ]]] +private ["_arr","_ctrl","_ctrlCurrent","_ctrlDefault","_ctrlEdit","_data","_default","_display","_idx","_input","_lb","_new","_old","_txt","_txtCurrent","_txtDefault","_var"]; +//[[[end]]] +params ["_ctrl"]; + +_display = if (_ctrl isEqualType controlNull) then {ctrlParent _ctrl} else {displayNull}; +_input = if (_ctrl isEqualType "STRING") then {_ctrl} else {str _ctrl}; + +switch (_input) do { + default {diag_log format ["[Epoch_config_keymap] Wrong params: %1",_this]}; + + case "load": + { + private ["_ctrl","_arr","_idx"]; + _ctrl = (findDisplay 49) displayCtrl 78008; + + _arr = 2 call EPOCH_clientKeyMap; + + { + _idx = _ctrl lbAdd (_x select 0); + _ctrl lbSetTooltip [_idx, _x select 0]; + _ctrl lbSetData [_idx, _x select 1]; + } forEach _arr; + + _ctrl lbSetCurSel 0; + + }; + case "Control #78008": //lb + { + private ["_ctrlDefault","_ctrlCurrent","_ctrlEdit","_arr","_var","_default","_txtDefault","_txtCurrent"]; + params ["_lb","_idx"]; + + _ctrlDefault = _display displayCtrl 78006; + _ctrlCurrent = _display displayCtrl 78007; + _ctrlEdit = _display displayCtrl 78009; + + _ctrlEdit ctrlSetText ""; + + _arr = 2 call EPOCH_clientKeyMap; + _var = _arr select _idx select 1; + _default = _arr select _idx select 2; + + _txtDefault = _default call BIS_fnc_keyCode; + _ctrlDefault ctrlSetText format ["Default: [%1]",_txtDefault]; + + _txtCurrent = (missionNamespace getVariable _var) call BIS_fnc_keyCode; + _ctrlCurrent ctrlSetText format ["Current: [%1]",_txtCurrent]; + }; + case "Control #78009": //edit + { + private ["_edit","_key","_shift","_ctrl","_alt","_txt"]; + params ["_edit","_key","_shift","_ctrl","_alt"]; + + if !(_shift || _ctrl || _alt) then { //blacklisted modifiers + if !(_key in [29,42,54,56,157,184,219]) then { //blacklisted keys + _txt = _key call BIS_fnc_keyCode; + _edit ctrlSetText _txt; + }; + } else { + _edit ctrlSetText ""; + }; + }; + case "Control #78010": //save + { + private ["_ctrlEdit","_lb","_new","_idx","_data"]; + _ctrlEdit = _display displayCtrl 78009; + _lb = _display displayCtrl 78008; + + _new = ctrlText _ctrlEdit; + + _idx = lbCurSel _lb; + _data = _lb lbData _idx; + + if !(_new isEqualTo "") then { + missionNamespace setVariable [_data, _new call BIS_fnc_keyCode]; + profileNamespace setVariable [_data, _new call BIS_fnc_keyCode]; + _lb lbSetCurSel _idx; + } else { + _ctrlEdit ctrlSetText "Empty field"; + }; + }; + case "Control #78011": //reset + { + private ["_ctrlEdit","_lb","_idx","_data","_arr","_old"]; + _ctrlEdit = _display displayCtrl 78009; + _lb = _display displayCtrl 78008; + + _idx = lbCurSel _lb; + _data = _lb lbData _idx; + + _arr = 2 call EPOCH_clientKeyMap; + _old = _arr select _idx select 2; + + missionNamespace setVariable [_data, _old]; + profileNamespace setVariable [_data, _old]; + + _lb lbSetCurSel _idx; + }; + case "Control #78012": //reset all + { + private ["_lb","_idx"]; + 1 call EPOCH_clientKeyMap; + 0 call EPOCH_clientKeyMap; + _lb = _display displayCtrl 78008; + _idx = lbCurSel _lb; + _lb lbSetCurSel _idx; + }; +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_click.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_click.sqf new file mode 100644 index 0000000..2388243 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_click.sqf @@ -0,0 +1,110 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_click.sqf +*/ +if (rmx_var_crafting_SearchConfigData isEqualTo []) exitWith {false}; + +//[[[cog import generate_private_arrays ]]] +private ["_3DCTRL","_STdesc","_c","_cfg","_countData","_data","_idx","_ingredientCTRL","_ingredientData","_itemsNearby","_itemsPlayer","_itemsRequired","_lbColor","_nearbyCount","_p","_r","_recipes","_selection","_usedIn","_x"]; +//[[[end]]] + +_cfg = 'CfgCrafting' call EPOCH_returnConfig; +_ingredientCTRL = rmx_var_crafting_ctrl_main select 1; +_STdesc = rmx_var_crafting_ctrl_main select 2; +_3DCTRL = rmx_var_crafting_ctrl_DEVMisc select 0; +_selection = lbCurSel (rmx_var_crafting_ctrl_main select 0); +_ingredientData = rmx_var_crafting_SearchConfigData select _selection; +_recipes = _ingredientData select 7; +_usedIn = _ingredientData select 9; + +_nearbyCount = []; //required + +lbClear _ingredientCTRL; + +if !(_recipes isEqualTo []) then { + _nearbyCount = [_recipes] call EPOCH_crafting_checkGear; + _idx = _ingredientCTRL lbAdd (rmx_var_crafting_colorScheme select 8 select 0); + _ingredientCTRL lbSetColor [_idx,(rmx_var_crafting_colorScheme select 8 select 1)]; + { + if !(_x isEqualType []) then {_x = [_x,1]}; + _data = ([(_cfg >> (_x select 0))] call EPOCH_crafting_getConfig) select 0; + _idx = _ingredientCTRL lbAdd format ["%2 x %1",(_data select 1),_x select 1]; + _ingredientCTRL lbSetPictureRight [_idx,(_data select 2)]; + _ingredientCTRL lbSetData [_idx, (_data select 1)]; + + _countData = _nearbyCount select _forEachIndex; + _itemsPlayer = _countData select 0; + _itemsNearby = _countData select 1; + _itemsRequired = _countData select 2; + _ingredientCTRL lbSetTooltip [_idx,format ["On player: [%1/%2], Nearby: [%3/%2], Crafting time: %4 second(s)",_itemsPlayer,_itemsRequired,_itemsNearby,_ingredientData select 6]]; + + _lbColor = if (_itemsPlayer >= _itemsRequired) then { + rmx_var_crafting_colorScheme select 11 + } else { + if (_itemsNearby >= _itemsRequired) then { + rmx_var_crafting_colorScheme select 12 + } else { + rmx_var_crafting_colorScheme select 13 + }; + }; + _ingredientCTRL lbSetColor [_idx,_lbColor]; + + } forEach _recipes; +}; +if !(_usedIn isEqualTo []) then { + _ingredientCTRL lbAdd ""; + _idx = _ingredientCTRL lbAdd (rmx_var_crafting_colorScheme select 9 select 0); + _ingredientCTRL lbSetColor [_idx,(rmx_var_crafting_colorScheme select 9 select 1)]; + + { + //if !(_x isEqualType []) then {_x = [_x,1]}; + _data = ([(_cfg >> _x)] call EPOCH_crafting_getConfig) select 0; + _idx = _ingredientCTRL lbAdd format ["%1",(_data select 1)]; + _ingredientCTRL lbSetPictureRight [_idx,(_data select 2)]; + _ingredientCTRL lbSetData [_idx, (_data select 1)]; + _ingredientCTRL lbSetColor [_idx,(rmx_var_crafting_colorScheme select 14)]; + _ingredientCTRL lbSetTooltip [_idx,"Double click to search for this item"]; + } forEach _usedIn; +}; +_STdesc ctrlSetStructuredText (composeText [(_ingredientData select 3),parseText "

",parseText(_ingredientData select 14)]); + +_3DCTRL ctrlSetModel (_ingredientData select 4); +_3DCTRL ctrlSetPosition (_ingredientData select 10); +_3DCTRL ctrlSetModelScale (_ingredientData select 11); +rmx_var_3dCtrlSpin_Vector = (_ingredientData select 12); + +ctrlSetFocus _ingredientCTRL; +(rmx_var_crafting_ctrl_Interact select 2) progressSetPosition 0; + +//Crafting quantity math +rmx_var_craftQTY = if !(_nearbyCount isEqualTo []) then { + private ["_c","_p","_r","_arr"]; + _c = 1e39; //infinite + { + _p = _x select 0; + _r = _x select 2; + if (_p < _r) exitWith {_c = 0}; + _c = _c min (_p / _r); + } forEach _nearbyCount; + floor _c +} else { 0 }; + +true call EPOCH_crafting_checkResources; + +if (ctrlShown (rmx_var_crafting_ctrl_DEV select 0)) then { + call rmx_fnc_crafting3DPosText; + (rmx_var_crafting_ctrl_DEV select 6) ctrlSetText str (_ingredientData select 11); //scale + (rmx_var_crafting_ctrl_DEV select 10) ctrlSetText str (_ingredientData select 12); //vector +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_defaults.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_defaults.sqf new file mode 100644 index 0000000..044d297 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_defaults.sqf @@ -0,0 +1,48 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_defaults.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_STdesc","_idx","_lbColor","_playerGear","_recipeCTRL","_y"]; +//[[[end]]] + +_recipeCTRL = rmx_var_crafting_ctrl_main select 0; +_STdesc = rmx_var_crafting_ctrl_main select 2; +_lbColor = rmx_var_crafting_colorScheme select 10; + +lbClear _recipeCTRL; +_playerGear = (magazines player) + (items player) + (weapons player); +{ + _idx = if (_x select 0 in _playerGear) then { + _y = _x select 0; + _idx = _recipeCTRL lbAdd format (["%1x %2",({_x == _y}count _playerGear),(_x select 1)]); + _recipeCTRL lbSetColor [_idx,_lbColor]; + _idx + } else { + _recipeCTRL lbAdd (_x select 1) + }; + _recipeCTRL lbSetPictureRight [_idx,(_x select 2)]; + _recipeCTRL lbSetData [_idx,(_x select 0)]; +} forEach rmx_var_crafting_SearchConfigData; + +_STdesc ctrlSetStructuredText composeText +[ + parseText "Search: Find recipe, X to clear.
", + parseText "Recipes: Select an item to craft.
", + parseText "Ingredients: Items required to craft.
", + parseText "Quantity: Move slider to set amount.
", + parseText "
TIP: Double click an item inside ingredients list to find recipe for it.
", + parseText "
www: EpochMod.com" +]; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_doubleClick.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_doubleClick.sqf new file mode 100644 index 0000000..6b85591 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_doubleClick.sqf @@ -0,0 +1,23 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_doubleClick.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_idx","_txt"]; +//[[[end]]] + +_idx = lbCurSel (rmx_var_crafting_ctrl_main select 1); +_txt = (rmx_var_crafting_ctrl_main select 1) lbData _idx; +(rmx_var_crafting_ctrl_Interact select 4) ctrlSetText _txt; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_animate.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_animate.sqf new file mode 100644 index 0000000..e3cb232 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_animate.sqf @@ -0,0 +1,22 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_animate.sqf +*/ +params ["_ctrl","_first","_second",["_speed",0.5]]; + +_ctrl ctrlSetPosition _first; +_ctrl ctrlCommit 0; +_ctrl ctrlSetPosition _second; +_ctrl ctrlCommit _speed; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkGear.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkGear.sqf new file mode 100644 index 0000000..564d93f --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkGear.sqf @@ -0,0 +1,38 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkGear.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cN","_cP","_near","_nearObjects","_out","_player","_recipe"]; +//[[[end]]] +params ["_recipes"]; + +_nearObjects = nearestObjects [player,["WeaponHolder","LandVehicle","Air"],10]; + +_near = []; _out = []; +{ + _near append magazineCargo _x; + _near append itemCargo _x; + _near append weaponCargo _x; +} forEach _nearObjects; + +_player = (magazines player) + (items player) + (weapons player); + +{ + _recipe = if (_x isEqualType "STRING") then {[_x,1]} else {_x}; + _cP = {_x == (_recipe select 0)} count _player; + _cN = {_x == (_recipe select 0)} count _near; + _out pushBack [_cP, _cN, _recipe select 1]; +} forEach _recipes; + +_out diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkNearby.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkNearby.sqf new file mode 100644 index 0000000..6c56a53 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkNearby.sqf @@ -0,0 +1,68 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkNearby.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_check","_countAlive","_countOnFire","_find","_nearObjects","_result","_test1","_test2","_tmpResult"]; +//[[[end]]] +params ["","","",["_arr",[2,""]],["_dist",0],["_cnt",1],["_inflamed",0],["_alive",0]]; +_arr params ["_type","_check"]; +_result = false; +switch (_type) do { + case 0: + { + private ["_test1","_test2","_find"]; + _nearObjects = nearestObjects [player, [], _dist]; + _test1 = 0; + { + _test2 = _x; + _find = {(str _x find _test2) != -1} count _nearObjects; + _test1 = _test1 + _find; + } forEach _check; + + _result = (_cnt <= _test1); + }; + case 1: + { + _nearObjects = nearestObjects [player, _check, _dist]; + _result = (_cnt <= (count _nearObjects)); + }; + case 2: + { + _nearObjects = nearestObjects [player, [], _dist]; + _check = _check select 0; + _tmpResult = false; + { + if (alive _x) then { + _tmpResult = [_x, _check] call EPOCH_worldObjectType; + }; + if (_tmpResult) exitWith {_result = _tmpResult}; + } forEach _nearObjects; + }; +}; + +if !(_result) exitWith {false}; //not enough objects + +if (_inflamed > 0) then { + _countOnFire = 0; + _countOnFire = {inflamed _x} count _nearObjects; + _result = (_cnt <= _countOnFire); +}; +if !(_result) exitWith {false}; + +if (_alive > 0) then { + _countAlive = 0; + _countAlive = {alive _x} count _nearObjects; + _result = (_cnt <= _countAlive); +}; +_result diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkResources.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkResources.sqf new file mode 100644 index 0000000..519c776 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkResources.sqf @@ -0,0 +1,109 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkResources.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_animSpeed","_cfg","_chck","_cnt","_color","_count","_countTxt","_ctrl","_display","_h","_img","_imgParsed","_ncCFrame","_ncCLB","_ncGroup","_ncRFrame","_ncRText","_nearbyArr","_out","_selection","_stText","_txt"]; +//[[[end]]] +params [["_in",false,[true] ] ]; + +//Defines +_out = true; +_cfg = 'CfgCrafting' call EPOCH_returnConfig; +_selection = lbCurSel (rmx_var_crafting_ctrl_main select 0); +_nearbyArr = rmx_var_crafting_SearchConfigData select _selection select 8; + +//check nearby resources only, requires false args +if !(_in) exitWith { + if !(_nearbyArr isEqualTo []) then { //just to be safe + { + _out = _x call EPOCH_crafting_checkNearby; + if !(_out) exitWith {}; + } forEach _nearbyArr; + }; + _out +}; + +disableSerialization; +private ["_display","_ncGroup","_ncCFrame","_ncRFrame","_ncRText","_ncCLB"]; +_display = findDisplay 77700; + +if (isNil "rmx_var_crafting_ctrl_GROUP") then { + rmx_var_crafting_ctrl_GROUP = [_display ctrlCreate ["rmx_rscControlsGroup",77821]]; +} else { + ctrlDelete (rmx_var_crafting_ctrl_GROUP select 0); + rmx_var_crafting_ctrl_GROUP = [_display ctrlCreate ["rmx_rscControlsGroup",77821]]; +}; + +_ncCFrame = rmx_var_crafting_ctrl_main select 3; +_ncRFrame = rmx_var_crafting_ctrl_main select 4; +_ncRText = rmx_var_crafting_ctrl_main select 5; +_ncCLB = rmx_var_crafting_ctrl_main select 1; +_ncGroup = rmx_var_crafting_ctrl_GROUP select 0; + +if !(_nearbyArr isEqualTo []) then { + _ncGroup ctrlShow true; + _ncRFrame ctrlShow true; + _ncRText ctrlShow true; + + private ["_chck","_color","_img","_imgParsed","_cnt","_countTxt","_txt","_stText","_count","_h","_animSpeed"]; + { + private "_ctrl"; + _chck = _x call EPOCH_crafting_checkNearby; + if !(_chck) then {_out = false}; + + _color = if (_chck) then {"#00FF00"} else {"#FF0000"}; + + _img = if (_x select 1 isEqualTo "") then { + format ["\x\addons\a3_epoch_code\Data\UI\crafting\%1_%2.paa",(_x select 2),_chck] + } else { + format ["%1%2_%3",(_x select 1),(_x select 2),_chck] + }; + + _imgParsed = parseText format ["",_img]; + + _cnt = if ((_x select 5) < 1) then {1} else {_x select 5}; + _countTxt = if (_cnt isEqualTo 1) then {""} else {format ["%1x",_cnt]}; + _txt = parseText format [" %3 %2 %4m",_color,(_x select 0),_countTxt,(_x select 4)]; + + _stText = composeText [_imgParsed,_txt]; + + _ctrl = _display ctrlCreate ["RscStructuredText", -(77800 + _forEachIndex),_ncGroup]; + _ctrl ctrlSetPosition [0,(0.08 * _forEachIndex),0.3,0.08]; + _ctrl ctrlCommit 0; + _ctrl ctrlSetStructuredText _stText; + } forEach _nearbyArr; + + _count = 8 min (count _nearbyArr); //maximum 8 of resources displayed + _h = 0.08 * _count; + _animSpeed = 0.2; + + [_ncGroup, [0.3,1,0.3,0], [0.3,(1-_h),0.3,_h], _animSpeed] call EPOCH_crafting_animate; + [_ncCFrame, [0.3,0,0.3,1], [0.3,0,0.3,(1-_h)], _animSpeed] call EPOCH_crafting_animate; + [_ncRFrame, [0.3,1,0.3,0], [0.3,(0.96-_h),0.3,(_h + 0.04)],_animSpeed] call EPOCH_crafting_animate; + [_ncRText, [0.3,0.96,0.3,0.04], [0.3,(0.96-_h),0.3,0.04], _animSpeed] call EPOCH_crafting_animate; + [_ncCLB, [0.3,0.04,0.3,0.96], [0.3,0.04,0.3,(0.96-_h)], _animSpeed] call EPOCH_crafting_animate; + +} else { + _ncGroup ctrlShow false; + _ncRFrame ctrlShow false; + _ncRText ctrlShow false; + + _ncCLB ctrlSetPosition [0.3,0.04,0.3,0.96]; + _ncCLB ctrlCommit 0; + + _ncCFrame ctrlSetPosition [0.3,0,0.3,1]; + _ncCFrame ctrlCommit 0; +}; + +_out diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_colorScheme.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_colorScheme.sqf new file mode 100644 index 0000000..c44f99f --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_colorScheme.sqf @@ -0,0 +1,51 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_colorScheme.sqf +*/ +params ["_cfg"]; + +rmx_var_crafting_colorScheme = getArray (_cfg >> "colorScheme"); + +//frames +for "_i" from 0 to 5 do { + (rmx_var_crafting_ctrl_colorScheme select _i) ctrlSetTextColor (rmx_var_crafting_colorScheme select 16); +}; + +//recipes +(rmx_var_crafting_ctrl_colorScheme select 6) ctrlSetText (rmx_var_crafting_colorScheme select 3 select 0); +(rmx_var_crafting_ctrl_colorScheme select 6) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 3 select 1); +(rmx_var_crafting_ctrl_main select 0) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 18); + +//ingredients +(rmx_var_crafting_ctrl_colorScheme select 7) ctrlSetText (rmx_var_crafting_colorScheme select 4 select 0); +(rmx_var_crafting_ctrl_colorScheme select 7) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 4 select 1); +(rmx_var_crafting_ctrl_main select 0) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 19); + +//preview +(rmx_var_crafting_ctrl_colorScheme select 8) ctrlSetText (rmx_var_crafting_colorScheme select 5 select 0); +(rmx_var_crafting_ctrl_colorScheme select 8) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 5 select 1); + +//resources +(rmx_var_crafting_ctrl_colorScheme select 9) ctrlSetText (rmx_var_crafting_colorScheme select 6 select 0); +(rmx_var_crafting_ctrl_colorScheme select 9) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 6 select 1); + +//description +(rmx_var_crafting_ctrl_colorScheme select 10) ctrlSetText (rmx_var_crafting_colorScheme select 7 select 0); +(rmx_var_crafting_ctrl_colorScheme select 10) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 7 select 1); +(rmx_var_crafting_ctrl_main select 2) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 17); + +//background +(rmx_var_crafting_ctrl_colorScheme select 11) ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 15); + +//QTY +(rmx_var_crafting_ctrl_Interact select 3) ctrlSetTextColor (rmx_var_crafting_colorScheme select 23); diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_craft.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_craft.sqf new file mode 100644 index 0000000..3576641 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_craft.sqf @@ -0,0 +1,145 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_craft.sqf +*/ + +//dialog closed +if (!rmx_var_craftingENABLED || !rmx_var_craftingLOOPS) exitWith {rmx_var_craftInProgress = false;}; + +//cancel craft button +if (rmx_var_craftInProgress) exitWith {rmx_var_craftInProgress = false;}; + +//close button +if (rmx_var_craftQTYOut isEqualTo 0) exitWith {closeDialog 0;}; + +//exit early if missing nearby +if !(false call EPOCH_crafting_checkResources) exitWith {}; + +//craft button +[] spawn { + + private ["_GiveBackRounds","_TotalroundsIn","_TotalMaxRoundsIn","_roundsCheck","_maxMagrnd","_maxMagRndTmp","_roundsCheckTmp","_magsammosearched","_craftReturn","_needBench","_craftCount","_fnc_UILock","_itemCraftTime","_selection","_craftItem","_item","_itemName","_itemCraftTime","_itemRecipeItems","_itemType","_nearbyReq","_hasNearby","_canCraft","_wH","_nearByHolder","_wHPos","_craftedcount"]; + disableSerialization; + + _fnc_UILock = { + private "_lock"; + _lock = param [0,true]; + (rmx_var_crafting_ctrl_main select 0) ctrlEnable _lock; + (rmx_var_crafting_ctrl_main select 1) ctrlEnable _lock; + (rmx_var_crafting_ctrl_Interact select 1) ctrlEnable _lock; + (rmx_var_crafting_ctrl_Interact select 4) ctrlEnable _lock; + }; + + rmx_var_craftInProgress = true; + + _selection = lbCurSel (rmx_var_crafting_ctrl_main select 0); + _craftItem = rmx_var_crafting_SearchConfigData select _selection; + _item = _craftItem select 0; + _itemName = _craftItem select 1; + _itemCraftTime = _craftItem select 6; + _itemRecipeItems = _craftItem select 7; + _itemType = _craftItem select 13; + _nearbyReq = _craftItem select 8; + _needBench = {"WorkBench_EPOCH" in (_x select 3 select 1)} count _nearbyReq; + _craftCount = _craftItem param [15,1]; + _craftReturn = _craftItem param [16,[]]; + + _BulletCalculateOnCraft = ["CfgEpochClient", "BulletCalculateOnCraft", false] call EPOCH_fnc_returnConfigEntryV2; + + _craftedcount = 0; + + for "_c" from 1 to rmx_var_craftQTYOut do { + false call _fnc_UILock; + _hasNearby = false call EPOCH_crafting_checkResources; + + if !(_hasNearby) exitWith {}; + + _canCraft = [format ["Crafting: %1, %2 seconds",_itemName,_itemCraftTime],_itemCraftTime] call EPOCH_crafting_progress; + + if !(_canCraft && rmx_var_craftingLOOPS) exitWith {}; + + _GiveBackRounds = 0; + _TotalroundsIn = 0; + _TotalMaxRoundsIn = 0; + _roundsCheck = false; + _maxMagrnd = (getnumber (configfile >> "cfgMagazines" >> _item >> "count")) max 1; + { + if !(_x isEqualType []) then {_x = [_x,1]}; + _x params ["_recipetype","_recipetypecount"]; + _recipetype = tolower _recipetype; + _maxMagRndTmp = getnumber (configfile >> "cfgMagazines" >> _recipetype >> "count"); + _roundsCheckTmp = ([_recipetype,"cfgMagazines"] call Epoch_fnc_isAny && [_item,"cfgMagazines"] call Epoch_fnc_isAny && _maxMagrnd > 1 && _maxMagRndTmp > 1 && _BulletCalculateOnCraft); + for "_r" from 1 to _recipetypecount do { + if (_roundsCheckTmp) then { + _roundsCheck = true; + _magsammosearched = []; + { + _x params ["_type","_rounds"]; + if ((tolower _type) isequalto _recipetype) then { + _magsammosearched pushback _x; + }; + } foreach (magazinesammo player); + _TotalMaxRoundsIn = _TotalMaxRoundsIn + _maxMagRndTmp; + _TotalroundsIn = _TotalroundsIn + ((_magsammosearched deleteat 0) select 1); + player removemagazines _recipetype; + { + _x call EPOCH_fnc_addMagazineOverflow; + } foreach _magsammosearched; + } + else { + player removeItem _recipetype; //removes any type of item, but only if not in special slots + }; + }; + } forEach _itemRecipeItems; + + if (_roundsCheck) then { + _GiveBackRounds = (_maxMagrnd * (_TotalroundsIn / _TotalMaxRoundsIn)); + }; + + _nearByBench = nearestObjects [player,["WorkBench_EPOCH"],3]; + + if (!(_nearByBench isEqualTo []) && (_needBench > 0)) then { //adds item on top of bench if bench was required + if (_roundsCheck) then { + (_nearByBench select 0) addMagazineAmmoCargo [_item, _craftCount, ((ceil (_GiveBackRounds / _craftCount)) min _maxMagrnd) max 1]; + } + else { + (_nearByBench select 0) addItemCargoGlobal [_item,_craftCount]; + }; + } + else { + if (_roundsCheck) then { + for "_i" from 1 to _craftCount do { + [_item,((ceil (_GiveBackRounds / _craftCount)) min _maxMagrnd) max 1] call EPOCH_fnc_addMagazineOverflow; + }; + } + else { + [_item,_craftCount] call EPOCH_fnc_addItemOverflow; + }; + }; + + // return items + { + _x call EPOCH_fnc_addItemOverflow; + } forEach _craftReturn; + + call EPOCH_crafting_LB_click; + _craftedcount = _craftedcount + 1; + }; + if (_craftedcount > 0) then { + ["CraftedItems",_craftedcount,true] call EPOCH_client_updatePlayerStat; + }; + call EPOCH_crafting_LB_defaults; + true call _fnc_UILock; + rmx_var_craftInProgress = false; +}; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_ctrl_collector.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_ctrl_collector.sqf new file mode 100644 index 0000000..98c7030 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_ctrl_collector.sqf @@ -0,0 +1,84 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_ctrl_collector.sqf +*/ + +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_display"]; +//[[[end]]] + +_display = findDisplay 77700; + +rmx_var_crafting_ctrl_DEVMisc = [_display displayCtrl 77701,_display displayCtrl 77702]; + +rmx_var_crafting_ctrl_DEV = []; +{rmx_var_crafting_ctrl_DEV set [count rmx_var_crafting_ctrl_DEV,_display displayCtrl _x];} count + +[ + 77703, //bckgrnd + 77704, //btn setScale + 77705, //btn export + 77706, //btn setpos + 77707, //btn + + 77708, //btn - //5 + 77709, //edit scale + 77710, //edit x + 77711, //edit z + 77712, //edit y + 77713, //edit vector //10 + 77714,77715,77716,77717,77718,77719 //text + +]; + +rmx_var_crafting_ctrl_Interact = []; +{rmx_var_crafting_ctrl_Interact set [count rmx_var_crafting_ctrl_Interact,_display displayCtrl _x];} count + +[ + 77801, //btn craft + 77802, //btn clear + 77803, //progress bar + 77804, //progress QTY + 77810 //Search field +]; + +rmx_var_crafting_ctrl_main = []; +{rmx_var_crafting_ctrl_main set [count rmx_var_crafting_ctrl_main,_display displayCtrl _x];} count + +[ + 77811, //LB recipes + 77812, //LB ingredients + 77820, //ST description + 77831, //craft frame + 77833, //resource frame + 77843 //resource text +]; + +rmx_var_crafting_ctrl_colorScheme = []; +{rmx_var_crafting_ctrl_colorScheme set [count rmx_var_crafting_ctrl_colorScheme,_display displayCtrl _x];} count + +[ + 77830,77831,77832,77833,77834,77835, //frames + 77840, //recipes + 77841, //ingredients + 77842, //preview + 77843, //resources + 77844, //description + 77800 //background +]; + +rmx_var_craftingENABLED = true; +rmx_var_craftingLOOPS = true; + + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_dev_toggle.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_dev_toggle.sqf new file mode 100644 index 0000000..2e79e6d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_dev_toggle.sqf @@ -0,0 +1,111 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_dev_toggle.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_3DCTRL","_3DPos","_ctrlPos","_curLB","_devBtnExport","_devBtnSetPos","_devBtnSetScale","_devX","_devY","_devZ","_mainDevBtn"]; +//[[[end]]] +_mainDevBtn = rmx_var_crafting_ctrl_DEVMisc select 1; +_3DCTRL = rmx_var_crafting_ctrl_DEVMisc select 0; + +switch (ctrlShown (rmx_var_crafting_ctrl_DEV select 0)) do { + case true: //off + { + disableSerialization; + { + _x ctrlShow false; + } forEach rmx_var_crafting_ctrl_DEV; + _mainDevBtn ctrlSetText "x\addons\a3_epoch_code\Data\UI\dev_mode_off.paa"; + _3DCTRL ctrlEnable false; + _3DCTRL ctrlRemoveAllEventHandlers "MouseButtonUp"; + rmx_fnc_craftingExport = nil; + rmx_fnc_crafting3DPosText = nil; + rmx_fnc_crafting3DMove = nil; + }; + case false: //on + { + disableSerialization; + { + _x ctrlShow true; + } forEach rmx_var_crafting_ctrl_DEV; + _mainDevBtn ctrlSetText "x\addons\a3_epoch_code\Data\UI\dev_mode_on.paa"; + + private ["_devBtnSetScale","_devBtnExport","_devBtnSetPos"]; + _devBtnSetScale = rmx_var_crafting_ctrl_DEV select 1; + _devBtnExport = rmx_var_crafting_ctrl_DEV select 2; + _devBtnSetPos = rmx_var_crafting_ctrl_DEV select 3; + + _3DCTRL ctrlEnable true; + + rmx_fnc_craftingExport = { + private ["_ctrlPos","_curLB"]; + + _ctrlPos = ctrlPosition (rmx_var_crafting_ctrl_DEVMisc select 0); + _curLB = rmx_var_crafting_ctrl_main select 0; + + //weird UI bug that outputs 1.49012e-008 if setting vector too fast + if (rmx_var_3dCtrlSpin_Vector < 0.1 && rmx_var_3dCtrlSpin_Vector > -0.1) then {rmx_var_3dCtrlSpin_Vector = 0;}; + + diag_log format [ + " + << Exporting settings for [%1] >> + + previewPosition[] = {%2,%3,%4}; + previewScale = %5; + previewVector = %6; + ", + _curLB lbData (lbCurSel _curLB), + _ctrlPos select 0, + _ctrlPos select 1, + _ctrlPos select 2, + ctrlModelScale (rmx_var_crafting_ctrl_DEVMisc select 0), + rmx_var_3dCtrlSpin_Vector + ]; + true + }; + rmx_fnc_crafting3DPosText = { + private ["_3DPos","_devX","_devZ","_devY"]; + disableSerialization; + _devX = rmx_var_crafting_ctrl_DEV select 7; + _devZ = rmx_var_crafting_ctrl_DEV select 8; + _devY = rmx_var_crafting_ctrl_DEV select 9; + _3DPos = ctrlPosition (rmx_var_crafting_ctrl_DEVMisc select 0); + + _devX ctrlSetText str (_3DPos select 0); + _devZ ctrlSetText str (_3DPos select 1); + _devY ctrlSetText str (_3DPos select 2); + true + }; + rmx_fnc_crafting3DMove = { + private ["_devX","_devZ","_devY"]; + disableSerialization; + _devX = rmx_var_crafting_ctrl_DEV select 7; + _devZ = rmx_var_crafting_ctrl_DEV select 8; + _devY = rmx_var_crafting_ctrl_DEV select 9; + (rmx_var_crafting_ctrl_DEVMisc select 0) ctrlSetPosition [(call compile (ctrlText _devX)),(call compile (ctrlText _devZ)),(call compile (ctrlText _devY))]; + true + }; + + _3DCTRL ctrlSetEventHandler ["MouseButtonUp","call rmx_fnc_crafting3DPosText;"]; + + _devBtnSetScale buttonSetAction + " + (rmx_var_crafting_ctrl_DEVMisc select 0) ctrlSetModelScale ( call compile ctrlText (rmx_var_crafting_ctrl_DEV select 6)); + "; + + _devBtnExport buttonSetAction "call rmx_fnc_craftingExport"; + + _devBtnSetPos buttonSetAction "call rmx_fnc_crafting3DMove;"; + + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_getConfig.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_getConfig.sqf new file mode 100644 index 0000000..1a2e2f4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_getConfig.sqf @@ -0,0 +1,81 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Receives array of CONFIGS + Returns array of items pulled + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_getConfig.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_Suppressed","_arr","_arrIn","_cCTime","_cDescFull","_cDescShort","_cDisplayName","_cModel","_cName","_cNearbyArr","_cPicture","_cPreviewArr","_cPreviewScale","_cPreviewVector","_cPriority","_cRecipeArr","_cRecipeReturn","_cType","_cUsedInArr","_cfg","_craftCount","_out","_type0","_type1","_type2","_type3"]; +//[[[end]]] + +_arrIn = _this; +_cfg = 'CfgEpochClient' call EPOCH_returnConfig; +_Suppressed = getarray (_cfg >> "SuppressedCraftingItems"); + +if !((_arrIn select 0) isEqualType configNull) exitWith {[]}; + +_type0 = []; _type1 = []; _type2 = []; _type3 = []; _out = []; +{ + _cName = configName _x; + + //overrides + _arr = [_cName,["displayName","picture","descriptionShort","model"]] call epoch_itemData; + + _cDisplayName = if (isText (_x >> "displayName")) then {getText (_x >> "displayName")} else {_arr select 0}; + _cPicture = if (isText (_x >> "picture")) then {getText (_x >> "picture")} else {_arr select 1}; + _cDescShort = if (isText (_x >> "descriptionShort")) then {getText (_x >> "descriptionShort")} else {_arr select 2}; + _cModel = if (isText (_x >> "model")) then {getText (_x >> "model")} else {_arr select 3}; + + //Basic cfg data + _cPriority = getNumber (_x >> "priority"); + _cCTime = getNumber (_x >> "craftTime"); + _cRecipeArr = getArray (_x >> "recipe"); + _cNearbyArr = getArray (_x >> "nearby"); + _cUsedInArr = getArray (_x >> "usedIn"); + _cPreviewArr = getArray (_x >> "previewPosition"); + _cPreviewScale = getNumber (_x >> "previewScale"); + _cPreviewVector = getNumber (_x >> "previewVector"); + _cDescFull = getText (_x >> "descriptionFull"); + _cType = getNumber (_x >> "type"); + _craftCount = getNumber (_x >> "craftCount"); + _cRecipeReturn = getArray (_x >> "recipeReturn"); + + if !(_Suppressed isequalto []) then { + if (_cName in _Suppressed) then { + _cRecipeArr = []; + }; + { + if (_x in _cUsedInArr) then { + _cUsedInArr = _cUsedInArr - [_x]; + }; + } foreach _Suppressed; + if (_cRecipeArr isequalto [] && _cUsedInArr isequalto []) then { + _cPriority = -1; + }; + }; + + + switch (_cPriority) do { + case 0: {_type0 pushBack [_cName,_cDisplayName,_cPicture,_cDescShort,_cModel,_cPriority,_cCTime,_cRecipeArr,_cNearbyArr,_cUsedInArr,_cPreviewArr,_cPreviewScale,_cPreviewVector,_cType,_cDescFull,_craftCount,_cRecipeReturn]}; + case 1: {_type1 pushBack [_cName,_cDisplayName,_cPicture,_cDescShort,_cModel,_cPriority,_cCTime,_cRecipeArr,_cNearbyArr,_cUsedInArr,_cPreviewArr,_cPreviewScale,_cPreviewVector,_cType,_cDescFull,_craftCount,_cRecipeReturn]}; + case 2: {_type2 pushBack [_cName,_cDisplayName,_cPicture,_cDescShort,_cModel,_cPriority,_cCTime,_cRecipeArr,_cNearbyArr,_cUsedInArr,_cPreviewArr,_cPreviewScale,_cPreviewVector,_cType,_cDescFull,_craftCount,_cRecipeReturn]}; + case 3: {_type3 pushBack [_cName,_cDisplayName,_cPicture,_cDescShort,_cModel,_cPriority,_cCTime,_cRecipeArr,_cNearbyArr,_cUsedInArr,_cPreviewArr,_cPreviewScale,_cPreviewVector,_cType,_cDescFull,_craftCount,_cRecipeReturn]}; + }; + +} forEach _this; + +_out append _type0; +_out append _type1; +_out append _type2; +_out append _type3; + +_out diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_load.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_load.sqf new file mode 100644 index 0000000..169208a --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_load.sqf @@ -0,0 +1,155 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_load.sqf +*/ +if (rmx_var_craftingENABLED) exitWith {false}; + +createDialog "rmx_craftingUI"; +_this spawn { + private ["_in","_cfg","_3DCTRL","_recipeCTRL","_recipeConfigs"]; + + disableSerialization; + + _in = param [0,""]; + + waitUntil {!isNull findDisplay 77700}; + call EPOCH_crafting_ctrl_collector; + + //Var defs + rmx_var_craftQTY = 0; + rmx_var_craftQTYOut = 0; + rmx_var_craftInProgress = false; + + //Defines + _cfg = 'CfgCrafting' call EPOCH_returnConfig; + + _cfg call EPOCH_crafting_colorScheme; + + _3DCTRL = rmx_var_crafting_ctrl_DEVMisc select 0; + _recipeCTRL = rmx_var_crafting_ctrl_main select 0; + + //First Launch + _recipeConfigs = "true" configClasses _cfg; + _recipeConfigs deleteRange [0,6]; //delete main templates as they are not real items + + rmx_var_crafting_FullConfigData = _recipeConfigs call EPOCH_crafting_getConfig; + rmx_var_crafting_SearchConfigData = rmx_var_crafting_FullConfigData; + + [_3DCTRL] call Epoch_3DctrlSpin; + _3DCTRL ctrlEnable false; + + call EPOCH_crafting_LB_defaults; //Default state + + //Basic EH setup + if (getNumber (_cfg >> "DeveloperMode") > 0) then { + private "_ctrlDevMain"; + _ctrlDevMain = rmx_var_crafting_ctrl_DEVMisc select 1; + _ctrlDevMain ctrlEnable true; + _ctrlDevMain ctrlShow true; + }; + rmx_var_crafting_progressClicked = false; + + ctrlSetFocus _recipeCTRL; + + //puts arguments into search field + if (_in isEqualType "STRING") then { + if (count _in > 0) then { //required, empty string crashes game for some reason + (rmx_var_crafting_ctrl_Interact select 4) ctrlSetText _in; + }; + }; + + //Post Processing + rmx_var_crafting_PP_CC = ["colorCorrections",11] call epoch_postProcessCreate; + rmx_var_crafting_PP_DB = ["dynamicBlur",11] call epoch_postProcessCreate; + + [rmx_var_crafting_PP_CC, 0, [1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0.296494,1]] call epoch_postprocessAdjust; + [rmx_var_crafting_PP_DB, 1, [1]] call epoch_postprocessAdjust; + + //Custom textures + + + //Manages quantity slider + [] spawn { + private ["_pos","_txt"]; + while {rmx_var_craftingLOOPS} do { + _pos = progressPosition (rmx_var_crafting_ctrl_Interact select 2); + rmx_var_craftQTYOut = round (_pos * rmx_var_craftQTY); + _txt = format ["[%1/%2]",rmx_var_craftQTYOut,rmx_var_craftQTY]; + (rmx_var_crafting_ctrl_Interact select 3) ctrlSetText _txt; + }; + }; + + //Search box + [] spawn { + disableSerialization; + private ["_searchCTRL","_searchTextTEMP"]; + _searchCTRL = rmx_var_crafting_ctrl_Interact select 4; + _searchTextTEMP = ""; + + + while {rmx_var_craftingLOOPS} do { + + uiSleep 0.5; //speed of search, should be less or equal to unload delay + + if !(_searchTextTEMP isEqualTo (ctrlText _searchCTRL)) then { + rmx_var_crafting_SearchConfigData = []; + { + _idx = toLower(_x select 1) find toLower (ctrlText _searchCTRL); + if !(_idx isEqualTo -1) then { + rmx_var_crafting_SearchConfigData pushBack _x; + }; + } forEach rmx_var_crafting_FullConfigData; + + _searchTextTEMP = ctrlText _searchCTRL; + call EPOCH_crafting_LB_defaults; + (rmx_var_crafting_ctrl_main select 0) lbSetCurSel 0; + ctrlSetFocus _searchCTRL; + }; + }; + }; + + //Craft button states + [] spawn { + private ["_btn","_btn_cancel","_btn_craft","_btn_close"]; + disableSerialization; + _btn = rmx_var_crafting_ctrl_Interact select 0; + _btn ctrlEnable true; + + _btn_cancel = rmx_var_crafting_colorScheme select 0; + _btn_craft = rmx_var_crafting_colorScheme select 1; + _btn_close = rmx_var_crafting_colorScheme select 2; + + while {rmx_var_craftingLOOPS} do { + uiSleep 0.1; + + if (rmx_var_craftInProgress) then { + _btn ctrlSetText _btn_cancel; + } else { + if (rmx_var_craftQTYOut > 0) then { + _btn ctrlSetText _btn_craft; + } else { + _btn ctrlSetText _btn_close; + }; + } + }; + }; + + [] spawn { + private "_pos"; + _pos = position player; + while {rmx_var_craftingLOOPS} do { + if ((_pos distance (position player)) > 1) exitWith {closeDialog 0;}; + }; + }; +}; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_progress.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_progress.sqf new file mode 100644 index 0000000..f44f646 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_progress.sqf @@ -0,0 +1,66 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_progress.sqf +*/ +if !(isNil "rmx_var_craftProgressInProgress") exitWith {false}; +rmx_var_craftProgressInProgress = true; + +//[[[cog import generate_private_arrays ]]] +private ["_ctrl","_ctrl2","_ctrl3","_display","_h","_idc","_layer","_out","_posX","_posY","_stColor","_tick","_time","_txt","_w"]; +//[[[end]]] + +disableSerialization; +_txt = param [0,"No text"]; +_time = param [1,1]; +_posY = param [2,1.05]; +_posX = param [3,0.25]; + +_w = 0.5; +_h = 0.05; +_idc = 10100; + +_stColor = rmx_var_crafting_colorScheme select 22; +_out = true; + +_layer = str _idc call BIS_fnc_rscLayer; +_layer cutRsc ["rmx_CraftingProgress","PLAIN",0,false]; +_display = uiNamespace getVariable "rmx_var_CraftingProgressDisplay"; + +_ctrl3 = _display ctrlCreate ["RscText",_idc + 3]; +_ctrl3 ctrlSetPosition [_posX,_posY,_w,_h]; +_ctrl3 ctrlCommit 0; +_ctrl3 ctrlSetBackgroundColor (rmx_var_crafting_colorScheme select 21); + +_ctrl = _display ctrlCreate ["RscProgress",_idc + 1]; +_ctrl ctrlSetPosition [_posX,_posY,_w,_h]; +_ctrl ctrlCommit 0; +_ctrl ctrlSetTextColor (rmx_var_crafting_colorScheme select 20); + +_ctrl2 = _display ctrlCreate ["RscStructuredText",_idc + 2]; +_ctrl2 ctrlSetPosition [_posX + _w / 2 - (count _txt / 2) / 100,_posY + 0.005,_w,_h]; +_ctrl2 ctrlCommit 0; +_ctrl2 ctrlSetStructuredText parseText format ["%1",_txt,_stColor]; + +_tick = diag_tickTime; + +while {((diag_tickTime - _tick) < _time && rmx_var_craftingLOOPS) } do { + if !(rmx_var_craftInProgress) exitWith {_out = false;}; + _ctrl progressSetPosition ((diag_tickTime - _tick)/_time); + + uiSleep 0.01; //smoothness vs performance +}; + +_layer cutRsc ["Default","PLAIN"]; +rmx_var_craftProgressInProgress = nil; + +_out diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_unload.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_unload.sqf new file mode 100644 index 0000000..e3ff05d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_unload.sqf @@ -0,0 +1,42 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_unload.sqf +*/ +rmx_var_craftingLOOPS = false; +rmx_var_3dCtrlSpin = false; +//post processing fade to defaults +[rmx_var_crafting_PP_CC, 1, [1,1,0,0,0,0,0,0,0,0,1,0,0,0,0]] call epoch_postprocessAdjust; +[rmx_var_crafting_PP_DB, 1, [0]] call epoch_postprocessAdjust; + +[] spawn { + uiSleep 1; //delay required for loops to finish + rmx_var_crafting_PP_CC call epoch_postprocessDestroy; + rmx_var_crafting_PP_DB call epoch_postprocessDestroy; + rmx_var_crafting_PP_CC = nil; + rmx_var_crafting_PP_DB = nil; + rmx_var_crafting_ctrl_DEV = nil; + rmx_var_crafting_ctrl_Interact = nil; + rmx_var_crafting_ctrl_main = nil; + rmx_var_crafting_ctrl_colorScheme = nil; + rmx_var_crafting_ctrl_GROUP = nil; + rmx_var_crafting_progressClicked = nil; + rmx_var_crafting_SearchConfigData = nil; + rmx_var_craftQTY = nil; + rmx_var_craftQTYOut = nil; + rmx_var_craftInProgress = nil; + rmx_var_crafting_colorScheme = nil; + + rmx_var_craftingENABLED = false; +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf new file mode 100644 index 0000000..c2fec18 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf @@ -0,0 +1,231 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: He-Man + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_iconcode","_action","_arr","_buttonSettings","_c","_cfg","_checkConfigs","_config","_configs","_dName","_display","_entries","_hasTarget","_icon","_in","_selfOrTarget","_subclasses","_tTip","_tooltip","_tooltipcode","_x"]; +//[[[end]]] +_in = [_this, 0, "",[""]] call BIS_fnc_param; + +_display = findDisplay 66600; +_cfg = "CfgActionMenu" call EPOCH_returnConfig; +_arr = []; +_buttonSettings = []; + +/** Variable Defines **/ +{ + call compile (format ["%1 = %2;",configName _x,getText _x]); +} count (configProperties [(_cfg >> "variableDefines"),"true",false]); + +_hasTarget = !(dyna_cursorTarget isEqualTo objNull); + +if (isNull _display && dialog) exitWith {false call Epoch_dynamicMenuCleanup; false}; + +if (isNull _display) then { + if!(visibleMap)then{ + if (_hasTarget) then { + createDialog "rmx_dynamenu"; + } else { + findDisplay 46 createDisplay "rmx_dynamenu"; + } + } else { + findDisplay 12 createDisplay "rmx_dynamenu"; + }; +}; + +_selfOrTarget = if!(visibleMap)then{ if !(_hasTarget) then {"self"} else {"target"} } else {"map"}; +_checkConfigs = { + + _config = switch (_in) do { + case "build_upgrade": + { + _cfg = "CfgBaseBuilding" call EPOCH_returnConfig; + (_cfg >> dyna_cursorTargetType) + }; + case "PaintGarage": + { + private _garagevehs = nearestobjects [dyna_cursorTarget,["LandVehicle","AIR"],10]; + if (_garagevehs isEqualTo []) exitwith { + ["No Paintable Vehicle found in Garage",5] call Epoch_message; + (_cfg >> _selfOrTarget) + }; + private _cfgtmp = "CfgPainting" call EPOCH_returnConfig; + _garageveh = _garagevehs select 0; + private _isclass = isclass (_cfgtmp >> (typeof _garageveh)); + if (!_isclass && (("true" configClasses (configFile >> "CfgVehicles" >> (typeof _garageveh) >> "TextureSources")) isEqualTo [])) exitwith { + ["No Paintable Vehicle found in Garage",5] call Epoch_message; + (_cfg >> _selfOrTarget) + }; + dyna_Paintobj = _garageveh; + if (_isclass) exitwith { + (_cfgtmp >> (typeof _garageveh)) + }; + (_cfgtmp >> "DefaultVehicle") + }; + case "": + { + (_cfg >> _selfOrTarget) + }; + default + { + _c = format ["_cfg >> '%1'",_selfOrTarget]; + _arr = _this; + { + _c = _c + (format [" >> '%1'",_x]); + } forEach _arr; + + (call compile _c) + }; + }; + + switch (_in) do { + case "build_upgrade": + { + if !(isClass _config) exitWith {_in = "";}; + + { + _dName = getText(configfile >> "CfgVehicles" >> (_x select 0) >> "DisplayName"); + _tTip = ""; + _icon = ""; + { + if !(_x isEqualType []) then {_x = [_x, 1]}; + _c = configfile >> "CfgMagazines" >> (_x select 0); + _tTip = _tTip + format ["[%1 x %2] ", _x select 1, getText(_c >> "DisplayName")]; + if (_icon isEqualTo "") then {_icon = getText (_c >> "picture")}; + } forEach (_x select 1); + + _tooltip = format ["%1 >> %2 ",_dName,_tTip]; + _action = format ["[dyna_cursorTarget,%1] call EPOCH_upgradeBUILD; true call Epoch_dynamicMenuCleanup;",_forEachIndex]; + + _buttonSettings pushBack [ + _icon, + _tooltip, + _action + ]; + + } forEach (getArray (_config >> "upgradeBuilding")); + + + }; + case "PaintGarage": + { + if !(isClass _config) exitWith {_in = "";}; + private _usedefaultcolors = tolower (gettext (_config >> "UseArmaDefaultColors")); + _icon = gettext (_config >> "icon"); + if (_usedefaultcolors isEqualTo "true") then { + { + private _textures = getarray (_x >> "textures"); + _tooltip = gettext (_x >> "displayName"); + _iconcolor = [1,1,1,1]; + { + if ((tolower _tooltip) find (_x select 0) > -1) exitwith { + _iconcolor = _x select 1; + }; + } foreach [ + ["red",[1,0,0,1]], + ["green",[0,1,0,1]], + ["blue",[0,0,1,1]], + ["yellow",[1,1,0,1]], + ["white",[1,1,1,1]], + ["black",[0,0,0,1]], + ["grey",[0.5, 0.5, 0.5, 1]], + ["orange",[1, 0.9, 0, 1]], + ["hex",[0.74, 0.72, 0.42, 1]], + ["sand",[1, 0.9, 0.8, 1]], + ["olive",[0.33, 0.42, 0.185, 1]] + ]; + _action = format ["[dyna_cursorTarget,dyna_Paintobj,%1] call EPOCH_vehicle_Paintgarage; true call Epoch_dynamicMenuCleanup;",_textures]; + _buttonSettings pushBack [ + _icon, + _tooltip, + _action, + _iconcolor + ]; + } foreach ("true" configClasses (configFile >> "CfgVehicles" >> (typeof dyna_Paintobj) >> "TextureSources")); + }; + { + _tooltip = gettext (_x >> "ColorName"); + _iconcolor = getarray (_x >> "iconcolor"); + private _textures = getarray (_x >> "textures"); + if (_textures isEqualTo []) exitwith {_in = "";}; + _action = format ["[dyna_cursorTarget,dyna_Paintobj,%1] call EPOCH_vehicle_Paintgarage; true call Epoch_dynamicMenuCleanup;",_textures]; + _buttonSettings pushBack [ + _icon, + _tooltip, + _action, + _iconcolor + ]; + } forEach (configProperties [_config, "isClass _x",true]); + }; + default + { + _configs = "true" configClasses _config; + { + if (call compile (getText(_x >> "condition"))) then { + + if (_selfOrTarget in ["self","map"] || dyna_distance) then { + + _subclasses = configProperties [_x, "isClass _x",true]; + + _action = if (_subclasses isEqualTo []) then { + format ["%1; true call Epoch_dynamicMenuCleanup;",getText(_x >> "action")] + } else { + format ["%2 %1 call Epoch_dynamicMenu;",_arr + [(configName _x)],getText(_x >> "action")] + }; + + _tooltip = ""; + _tooltipcode = getText(_x >> "tooltipcode"); + if (_tooltipcode != "") then { + _tooltip = [] call compile _tooltipcode; + } + else { + _tooltip = getText(_x >> "tooltip"); + }; + + _icon = ""; + _iconcode = getText(_x >> "iconcode"); + if (_iconcode != "") then { + _icon = [] call compile _iconcode; + } + else { + _icon = getText(_x >> "icon"); + }; + if (!(_icon isequaltype "") || _icon isequalto "") then { + _icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + }; + + _buttonSettings pushBack [ + _icon, + _tooltip, + _action + ]; + + }; + }; + } forEach _configs; + }; + }; +}; + +call _checkConfigs; +if (_buttonSettings isEqualTo []) then {_selfOrTarget = if!(visibleMap)then{"self"}else{"map"}; call _checkConfigs;}; + +_entries = count _buttonSettings; +if !(_entries <= 0) then { + [_entries, _buttonSettings] spawn epoch_dynamicMenuPopulate; +} else { + true call Epoch_dynamicMenuCleanup; +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf new file mode 100644 index 0000000..cd23a1e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf @@ -0,0 +1,50 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cfg","_cleanupVars","_close"]; +//[[[end]]] +disableSerialization; +_close = param [0,false,[false]]; + +_cleanupVars = { + _cfg = "CfgActionMenu" call EPOCH_returnConfig; + { + // call compile (format ["%1 = nil;",configName _x]); + missionNamespace setVariable [configName _x,nil]; + } count (configProperties [(_cfg >> "variableDefines"),"true",false]); +}; + +if (_close) then { + _display = findDisplay 66600; + if !(isNull _display) then { + _display closeDisplay 1; + }; +}; + +if (uiNamespace getVariable ["rmx_var_dynamicMenuInProgress",false]) then { + + uiNamespace setVariable ["rmx_var_dynamicMenuInProgress", nil]; + + call _cleanupVars; + + + [rmx_var_dynamenuPPHandle, 1, [0]] call epoch_postprocessAdjust; + rmx_var_dynaControls = nil; + rmx_var_dynamenuPPHandle call epoch_postprocessDestroy; + rmx_var_dynamenuPPHandle = nil; +} else { + call _cleanupVars; +}; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf new file mode 100644 index 0000000..c5677fc --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf @@ -0,0 +1,110 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf +*/ +#include "\A3\ui_f\hpp\defineCommonGrids.inc" +//[[[cog import generate_private_arrays ]]] +private ["_arr","_c","_center","_ctrl","_ctrl2","_defaultScaleX","_defaultScaleY","_display","_distance","_inProgress","_points","_positions","_positions2","_scale","_scaleLargeX","_scaleLargeY","_scaleSmallX","_scaleSmallY","_x","_y"]; +//[[[end]]] +params ["_entries","_buttonSettings"]; +disableSerialization; + +_inProgress = uiNamespace getVariable ["rmx_var_dynamicMenuInProgress", false]; + +waitUntil{!isNull (findDisplay 66600)}; +_display = findDisplay 66600; + +if (_inProgress) then { + { + ctrlDelete _x; + } forEach rmx_var_dynaControls; +} else { + uiNamespace setVariable ["rmx_var_dynamicMenuInProgress", true]; + //Post processing + if (isNil "rmx_var_dynamenuPPHandle") then { + rmx_var_dynamenuPPHandle = ["dynamicBlur",10] call epoch_postProcessCreate; + [rmx_var_dynamenuPPHandle, 1, [1]] call epoch_postprocessAdjust; + }; +}; + +//defaults don't edit +_center = 0.5; +_scale = 12; +_defaultScaleX = _scale * GUI_GRID_W; +_defaultScaleY = _scale * GUI_GRID_H; + +_distance = 0.6 + _entries / 100; + +//edit scaling here (divisor only, larger values produce smaller image) +_scaleLargeX = _defaultScaleX / (1 + _entries / 10); //anim +_scaleLargeY = _defaultScaleY / (1 + _entries / 10); +_scaleSmallX = _defaultScaleX / (2 + _entries / 10); //icons +_scaleSmallY = _defaultScaleY / (2 + _entries / 10); + +_points = 360 / _entries; + +_positions = []; +_positions2 = []; +for "_p" from 0 to 360 step _points do { + + _x = cos _p * (0.3 * _distance); + _y = sin _p * (0.4 * _distance); + + _positions pushBack [_x + (_center - (_scaleLargeX / 2)),_y + (_center - (_scaleLargeY / 2)),_scaleLargeX,_scaleLargeY]; + _positions2 pushBack [_x + (_center - (_scaleSmallX / 2)),_y + (_center - (_scaleSmallY / 2)),_scaleSmallX,_scaleSmallY]; +}; + +missionNamespace setVariable ["rmx_var_dynaControls",[]]; +//_buttonSettings [icon,tooltip,action] +for "_e" from 0 to (_entries - 1) do { + private ["_ctrl","_ctrl2"]; + _ctrl = _display ctrlCreate ["rmx_rscPicture",(66600 + _e)]; + _ctrl ctrlSetText "x\addons\a3_epoch_code\Data\UI\buttons\dm_selection_b1.paa"; + _ctrl ctrlSetPosition (_positions select _e); + _ctrl ctrlSetFade 1; + _ctrl ctrlCommit 0; + [_ctrl,0.55,0.2] call BIS_fnc_ctrlSetScale; + _ctrl ctrlSetTooltip (_buttonSettings select _e select 1); + + _ctrl ctrlSetTooltipColorBox [0, 0, 0, 0]; + _ctrl ctrlSetTooltipColorShade [0, 0, 0, 0]; + _ctrl ctrlSetEventHandler ["mouseEnter", "_c = _this select 0; _c ctrlSetFade 0; [_c,0.8,0.2] call BIS_fnc_ctrlSetScale"]; + _ctrl ctrlSetEventHandler ["mouseExit", "_c = _this select 0; _c ctrlSetFade 1; [_c,0.55,0.2] call BIS_fnc_ctrlSetScale"]; + _ctrl ctrlSetEventHandler ["mouseButtonDown", (_buttonSettings select _e select 2)]; + _ctrl ctrlEnable true; + + _ctrl2 = _display ctrlCreate ["RscPictureKeepAspect",-(66600 + _e)]; + _ctrl2 ctrlSetTooltip (_buttonSettings select _e select 1); + _ctrl2 ctrlSetTooltipColorBox [0, 0, 0, 0]; + _ctrl2 ctrlSetTooltipColorShade [0, 0, 0, 0]; + _ctrl2 ctrlSetText (_buttonSettings select _e select 0); + if (count (_buttonSettings select _e) > 3) then { + if ((_buttonSettings select _e select 3) isEqualType []) then { + if !((_buttonSettings select _e select 3) isEqualTo []) then { + _ctrl2 ctrlSetTextColor (_buttonSettings select _e select 3); + }; + }; + }; + + _ctrl2 ctrlSetPosition [0.5,0.5,0,0]; + _ctrl2 ctrlCommit 0; + + _ctrl2 ctrlSetPosition (_positions2 select _e); + _ctrl2 ctrlCommit 0.2; + + _arr = missionNamespace getVariable ["rmx_var_dynaControls",[]]; + _arr append [_ctrl,_ctrl2]; + missionNamespace setVariable ["rmx_var_dynaControls",_arr]; +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_adjust.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_adjust.sqf new file mode 100644 index 0000000..636848c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_adjust.sqf @@ -0,0 +1,50 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Creates special dialog that allows players to reposition (move) all HUD groups on the screen and save to profile + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamicHUD/Epoch_dynamicHUD_adjust.sqf +*/ +_this spawn { + disableSerialization; + (findDisplay 49) closeDisplay 0; + + waitUntil {isNull (findDisplay 49)}; + + if (_this) then { + findDisplay 46 createDisplay "rmx_moveDynamicHUD"; + _dsp = findDisplay 66666; + rmx_var_dynamicHUD_groupsAdjust = []; + rmx_var_drag_MouseDown = false; + { + _c = _dsp ctrlCreate ["rmx_drag_RscActivePicture", call epoch_getIDC]; + _c ctrlSetText "#(rgb,8,8,3)color(1,1,1,1)"; + _c ctrlSetPosition (ctrlPosition _x); + _c ctrlCommit 0; + rmx_var_dynamicHUD_groupsAdjust set [_forEachIndex, _c]; + } forEach rmx_var_dynamicHUD_groups; + + waitUntil {!isNull (findDisplay 66666)}; + while {!isNull (findDisplay 66666)} do { + if !(rmx_var_drag_MouseDown) then { + { + _c = (rmx_var_dynamicHUD_groups select _forEachIndex); + _c ctrlSetPosition (ctrlPosition _x); + _c ctrlCommit 0; + } forEach rmx_var_dynamicHUD_groupsAdjust; + }; + uiSleep 0.1; + }; + } else { + //reset hud positions + }; +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_loadSave.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_loadSave.sqf new file mode 100644 index 0000000..a6028f9 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_loadSave.sqf @@ -0,0 +1,13 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamicHUD/Epoch_loadSave.sqf +*/ \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_start.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_start.sqf new file mode 100644 index 0000000..426fab0 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_start.sqf @@ -0,0 +1,141 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Creates special HUD Groups defined in CfgDynamicHUD.hpp at the start of the game. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamicHUD/Epoch_dynamicHUD_start.sqf +*/ +#include "\A3\ui_f\hpp\defineCommonGrids.inc" +//[[[cog import generate_private_arrays ]]] +private ["_angle","_arraySize","_c","_cPos","_center","_cfg","_classname","_configs","_defaultPopulate","_defaultPos","_dsp","_evenOdd","_group","_groupPos","_h","_hCtrl","_height","_oX","_oY","_offsetX","_offsetY","_result","_scale","_w","_wCtrl","_width"]; +//[[[end]]] +_cfg = "rmx_dynamicHUD" call EPOCH_returnConfig; +_configs = "true" configClasses _cfg; + +// diag_log format ["Epoch_dynamicHUD_start: %1", _configs]; + +setMousePosition [0.5,0.5]; + +disableSerialization; +_dsp = findDisplay 46; + +{ + _group = _dsp ctrlCreate ["rmx_rscControlsGroup", call Epoch_getIDC]; + rmx_var_dynamicHUD_groups set [_forEachIndex, _group]; + + _defaultPopulate = getNumber (_x >> "defaultPopulate"); + _defaultPos = getNumber (_x >> "defaultPos"); + _arraySize = getNumber (_x >> "arraySize"); + _classname = getText (_x >> "classname"); + _offsetX = getNumber (_x >> "offSetX"); + _offsetY = getNumber (_x >> "offSetY"); + _height = getNumber (_x >> "height"); + _width = getNumber (_x >> "width"); + + (getArray (_x >> "angle")) params [["_deg",0],["_xCenter",0.5],["_yCenter",0.5],["_tilt",0]]; + (getArray (_x >> "scale")) params [["_scale",1.0],["_reduction",0]]; + + _wCtrl = _width * GUI_GRID_W; + _hCtrl = _height * GUI_GRID_H; + _oX = _offsetX * _wCtrl; + _oY = _offsetY * _hCtrl; + + _w = 0; _h = 0; + if (_defaultPopulate in [0,1,4]) then { + _w = _arraySize * _width * GUI_GRID_W; + _h = _height * GUI_GRID_H; + } else { + _w = _width * GUI_GRID_W; + _h = _arraySize * _height * GUI_GRID_H; + }; + + _groupPos = switch _defaultPos do { + case 0: {[SafezoneX, safezoneY, _w, _h]}; + case 1: {[0.5 - _w/2, safezoneY, _w, _h]}; + case 2: {[(safezoneW + safezoneX) - _w, safezoneY, _w, _h]}; + case 3: {[SafezoneX, 0.5 - _h/2, _w, _h]}; + case 4: {[0.5 - _w/2, 0.5 - _h/2, _w, _h]}; + case 5: {[(safezoneW + safezoneX) - _w, 0.5 - _h/2, _w, _h]}; + case 6: {[SafezoneX, (safezoneH + safezoneY) - _h, _w, _h]}; + case 7: {[0.5 - _w/2, (safezoneH + safezoneY) - _h, _w, _h]}; + case 8: {[(safezoneW + safezoneX) - _w, (safezoneH + safezoneY) - _h, _w, _h]}; + default {[0,0,0,0]}; + }; + + _groupPos set [0, (_groupPos select 0)+_oX]; + _groupPos set [1, (_groupPos select 1)+_oY]; + _group ctrlSetPosition _groupPos; + + _group ctrlCommit 0; + + _evenOdd = true; + rmx_var_dynamicHUD_groupCTRL set [_forEachIndex, [(configName _x)]]; + + _angle = [_deg,_xCenter,_yCenter]; + + + for "_i" from 0 to (_arraySize - 1) do { + _c = _dsp ctrlCreate [_classname, call Epoch_getIDC, _group]; + _c ctrlSetAngle _angle; + + _angle set [0, (_angle select 0) - _tilt]; + + (rmx_var_dynamicHUD_groupCTRL select _forEachIndex) pushBack _c; + + _cPos = switch _defaultPopulate do { + case 0: {[_i * _wCtrl,0,_wCtrl, _hCtrl]}; + case 1: {[(_arraySize - 1 - _i) * _wCtrl,0,_wCtrl, _hCtrl]}; + case 2: {[0,_i * _hCtrl,_wCtrl, _hCtrl]}; + case 3: {[0,(_arraySize - 1 - _i) * _hCtrl,_wCtrl, _hCtrl]}; + case 4: + { + _center = _w/2 - _wCtrl/2; + + _result = if (_i == 0) then { + [_center, 0, _wCtrl, _hCtrl] + } else { + if _evenOdd then { + [_wCtrl * _i/2 + _center, 0, _wCtrl, _hCtrl] + } else { + [(_center - _wCtrl/2) - (_wCtrl * _i/2), 0, _wCtrl, _hCtrl] + }; + }; + _evenOdd = !_evenOdd; + _result + }; + case 5: + { + _center = _h/2 - _hCtrl/2; + + _result = if (_i == 0) then { + [0, _center, _wCtrl, _hCtrl] + } else { + if _evenOdd then { + [0, _hCtrl * _i/2 + _center, _wCtrl, _hCtrl] + } else { + [0, (_center - _hCtrl/2) - (_hCtrl * _i/2), _wCtrl, _hCtrl] + }; + }; + _evenOdd = !_evenOdd; + _result + }; + default {[0,0,0,0]}; + }; + _c ctrlSetPosition _cPos; + _c ctrlSetScale _scale; + _c setVariable ["ctrl_scale", _scale]; + _scale = _scale - _reduction; + _c ctrlCommit 0; + }; +} forEach _configs; + + //dump default positions into an array + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamicHUD/epoch_getHUDCtrl.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamicHUD/epoch_getHUDCtrl.sqf new file mode 100644 index 0000000..a2cc9f5 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/dynamicHUD/epoch_getHUDCtrl.sqf @@ -0,0 +1,30 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Returns Control from Dynamic HUD to be manipulated externally. See CfgDynamicHUD.hpp on how to create your own HUD groups. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamicHUD/Epoch_getHUDCtrl.sqf + + Usage: + [_configName, _index] call epoch_getHUDCtrl; + ["myHudName", 2] call epoch_getHUDCtrl; +*/ +//[[[cog import generate_private_arrays ]]] +private ["_gIdx"]; +//[[[end]]] +if !(_this isEqualTypeArray ["",0]) exitWith {controlNull}; +params ["_gName","_cIdx"]; +_gIdx = -1; +{ + if ((_x select 0) isEqualTo _gName) exitWith {_gIdx = _forEachIndex}; +} forEach rmx_var_dynamicHUD_groupCTRL; +if (_gIdx == -1) exitWith {controlNull}; + +((rmx_var_dynamicHUD_groupCTRL select _gIdx) param [_cIdx,controlNull]) diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/e_pad/EPOCH_EPad_Reset.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/e_pad/EPOCH_EPad_Reset.sqf new file mode 100644 index 0000000..d89332e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/e_pad/EPOCH_EPad_Reset.sqf @@ -0,0 +1,13 @@ +_cfg = "e_pad_config" call EPOCH_returnConfig; +_startvars = getarray (_cfg >> "LoadVarsFromProfile"); +{ + _x params ["_varname",["_default","false",[""]]]; + if (_varname isequaltype "" && !(_varname isequalto "")) then { + _value = if ((tolower _default) isequalto "true") then {true} else {false}; + missionnamespace setvariable [_varname,_value]; + }; +} foreach _startvars; +profilenamespace setvariable ["Epoch_ToggleVars",nil]; +saveprofilenamespace; +hintsilent ""; +["E-Pad settings resetted",5] call epoch_message; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/e_pad/EPOCH_EPad_clearscreen.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/e_pad/EPOCH_EPad_clearscreen.sqf new file mode 100644 index 0000000..85bc749 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/e_pad/EPOCH_EPad_clearscreen.sqf @@ -0,0 +1,5 @@ +disableSerialization; +_display = finddisplay 9898; +{ + (_display displayctrl _x) ctrlshow false; +} foreach [1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1814,1900,1902,1903]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/e_pad/EPOCH_EPad_dialog.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/e_pad/EPOCH_EPad_dialog.sqf new file mode 100644 index 0000000..b94003f --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/e_pad/EPOCH_EPad_dialog.sqf @@ -0,0 +1,166 @@ +disableSerialization; +if (isnull (finddisplay 9898)) exitwith {}; +_display = finddisplay 9898; +call EPOCH_EPad_clearscreen; + +params [["_in",""],["_animate",false]]; +_cfg = "e_pad_config" call EPOCH_returnConfig; +_arr = []; +_buttonSettings = []; + +_config = switch (_in) do { + case "": + { + (_cfg >> "Apps") + }; + default + { + _c = format ["_cfg >> '%1'","Apps"]; + _arr = _in; + { + _c = _c + (format [" >> '%1'",_x]); + } forEach _arr; + + (call compile _c) + }; +}; +_configs = "true" configClasses _config; +for "_i" from ((Epoch_E_Pad_Page-1)*12) to (((count _configs)-1) min (((Epoch_E_Pad_Page-1)*12)+11)) do { + _configx = _configs select _i; + _subclasses = configProperties [_configx, "isClass _x",true]; + _action = format ["%1;",getText(_configx >> "action")]; + _togglevar = getText(_configx >> "ToggleVar"); + _html = getText (_configx >> "html"); + if (_html isequalto "") then { + if !(_subclasses isEqualTo []) then { + _action = _action + format ["Epoch_E_Pad_Page = 1; [%1] call EPOCH_EPad_dialog", _arr + [(configName _configx)]]; + } + else { + if (tolower (getText(_configx >> "ToggleAble")) isequalto "true") then { + if !(_togglevar isequalto "") then { + _action = _action + format ["%1 = %2; ['Epoch_ToggleVars','%1',%2] call Epoch_SaveVarsToProfile; [%3] call EPOCH_EPad_dialog",_togglevar,!(missionnamespace getvariable [format ["%1",_togglevar],false]),_arr]; + }; + }; + }; + } + else { + _action = format ["disableserialization;call EPOCH_EPad_clearscreen;_htmlctrlsgrp = ((finddisplay 9898) displayctrl 1900); _htmlctrlsgrp ctrlshow true; _htmlctrl = _htmlctrlsgrp controlsGroupCtrl 1901;_htmlctrl htmlLoad %1;",str _html]; + }; + + _ButtonText = ""; + _ButtonTextcode = getText(_configx >> "ButtonTextCode"); + if (_ButtonTextcode != "") then {_ButtonText = call compile _ButtonTextcode;} else {_ButtonText = getText(_configx >> "ButtonText");}; + if !(_ButtonText isequaltype "") then {_ButtonText = ""}; + + _Description = ""; + _DescriptionCode = getText(_configx >> "DescriptionCode"); + if (_DescriptionCode != "") then {_Description = call compile _DescriptionCode;} else { _Description = getText(_configx >> "Description");}; + if !(_Description isequaltype "") then {_Description = ""}; + + _tooltip = ""; + _tooltipcode = getText(_configx >> "tooltipcode"); + if (_tooltipcode != "") then {_tooltip = call compile _tooltipcode;} else {_tooltip = getText(_configx >> "tooltip");}; + if !(_tooltip isequaltype "") then {_tooltip = ""}; + + _icon = ""; + _iconcode = getText(_configx >> "iconcode"); + if (_iconcode != "") then {_icon = call compile _iconcode;} else {_icon = getText(_configx >> "icon");}; + if !(_icon isequaltype "") then {_icon = ""}; + + _color = [1,1,1,1]; + _cfgcolor = getarray(_configx >> "color"); + if (!(_cfgcolor isequalto []) && count _cfgcolor == 4) then {_color = _cfgcolor;}; + + _colortoggled = [0,1,0,1]; + _cfgcolortoggled = getarray(_configx >> "colortoggled"); + if (!(_cfgcolortoggled isequalto []) && count _cfgcolortoggled == 4) then {_colortoggled = _cfgcolortoggled;}; + + _buttonSettings pushBack [ + _ButtonText, + _tooltip, + _action, + _togglevar, + _icon, + _color, + _colortoggled, + _Description + ]; +}; + +_entries = count _buttonSettings; +if (_entries <= 0) exitwith {}; +for "_i" from 0 to (_entries - 1) do { + (_buttonSettings select _i) params ["_ButtonText","_tooltip","_action","_togglevar","_icon","_color","_colortoggled","_Description"]; + private ["_ctrl","_ctrl2"]; + _ctrl = _display displayctrl (_i+1601); + _ctrl2 = _display displayctrl (_i+1701); + _ctrl3 = _display displayctrl (_i+1801); + _ctrl ctrlShow true; + _ctrl ctrlSetText _ButtonText; + _ctrl ctrlSetEventHandler ["mouseButtonDown", _action]; + _ctrl ctrlEnable !(_action isequalto ";"); + if !(_togglevar isequalto "") then { + _toggled = missionnamespace getvariable [format ["%1",_togglevar],false]; + if (_toggled) then { + _ctrl ctrlsettextcolor _colortoggled; + _ctrl2 ctrlsettextcolor _colortoggled; + } + else { + _ctrl ctrlsettextcolor _color; + _ctrl2 ctrlsettextcolor _color; + }; + } + else { + _ctrl ctrlsettextcolor _color; + _ctrl2 ctrlsettextcolor _color; + }; + if !(_icon isequalto "") then { + _ctrl2 ctrlShow true; + _ctrl2 ctrlSetText _icon; + }; + _ctrl ctrlSetTooltip _tooltip; + _ctrl2 ctrlSetTooltip _tooltip; + _ctrl3 ctrlShow true; + _ctrl3 ctrlSetText _Description; + if (_animate) then { + { + _pos = ctrlposition (_display displayCtrl _x); + _display displayCtrl _x ctrlSetposition [0.5 * safezoneW + safezoneX, 0.599027 * safezoneH + safezoneY, 0, 0]; + _display displayCtrl _x ctrlcommit 0; + _display displayCtrl _x ctrlSetposition _pos; + _display displayCtrl _x ctrlcommit 0.5; + } foreach [_i+1601,_i+1701,_i+1801]; + }; +}; + +{ + (_display displayctrl _x) ctrlshow true; +} foreach [1614,1615,1714,1715]; +if (Epoch_E_Pad_Page > 1) then { + (_display displayctrl 1614) ctrlenable true; + (_display displayctrl 1614) ctrlSetEventHandler ["mouseButtonDown",format ["Epoch_E_Pad_Page = Epoch_E_Pad_Page - 1; [%1] call EPOCH_EPad_dialog",_arr]]; + (_display displayctrl 1714) ctrlsettextcolor [1,1,1,1]; +} +else { + (_display displayctrl 1614) ctrlenable false; + (_display displayctrl 1714) ctrlsettextcolor [1,1,1,0.5]; +}; +if ((count _configs) > (((Epoch_E_Pad_Page-1)*13)+12)) then { + (_display displayctrl 1615) ctrlenable true; + (_display displayctrl 1615) ctrlSetEventHandler ["mouseButtonDown",format ["Epoch_E_Pad_Page = Epoch_E_Pad_Page + 1; [%1] call EPOCH_EPad_dialog",_arr]]; + (_display displayctrl 1715) ctrlsettextcolor [1,1,1,1]; +} +else { + (_display displayctrl 1615) ctrlenable false; + (_display displayctrl 1715) ctrlsettextcolor [1,1,1,0.5]; +}; +if (_animate) then { + { + _pos = ctrlposition (_display displayCtrl _x); + _display displayCtrl _x ctrlSetposition [0.5 * safezoneW + safezoneX, 0.599027 * safezoneH + safezoneY, 0, 0]; + _display displayCtrl _x ctrlcommit 0; + _display displayCtrl _x ctrlSetposition _pos; + _display displayCtrl _x ctrlcommit 0.5; + } foreach [1614,1615,1714,1715]; +}; +ctrlSetFocus (_display displayctrl 1599); diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/e_pad/EPOCH_SaveVarsToProfile.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/e_pad/EPOCH_SaveVarsToProfile.sqf new file mode 100644 index 0000000..17b069d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/e_pad/EPOCH_SaveVarsToProfile.sqf @@ -0,0 +1,12 @@ +params ["_type","_var","_value"]; +_arr = profilenamespace getvariable [_type,[[],[]]]; +_find = (_arr select 0) find _var; +if (_find > -1) then { + (_arr select 1) set [_find, _value]; +} +else { + (_arr select 0) pushback _var; + (_arr select 1) pushback _value; +}; +profilenamespace setvariable [_type,_arr]; +saveprofilenamespace; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/epoch_dragControl.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/epoch_dragControl.sqf new file mode 100644 index 0000000..4b9dbde --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/epoch_dragControl.sqf @@ -0,0 +1,28 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Gives ability to move active controls like RscActivePicture (see Epoch_GUI_rmx.hpp for an example). + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_dragControl.sqf + + Usage: + No direct usage, simply create your control in configs following example in HPP mentioned in description +*/ +//[[[cog import generate_private_arrays ]]] +private ["_ctrl","_curr","_mpos"]; +//[[[end]]] +_ctrl = param [0]; +_curr = ctrlPosition _Ctrl; +_mpos = getmousePosition; + +if (rmx_var_drag_MouseDown) then { + _ctrl ctrlSetPosition [(_mpos select 0) - (_curr select 2) / 2, (_mpos select 1) - (_curr select 3) / 2 ]; + _ctrl ctrlCommit 0; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_action.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_action.sqf new file mode 100644 index 0000000..b89ed3e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_action.sqf @@ -0,0 +1,67 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: manages actions when user presses favorites key + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_action.sqf + + Usage: none +*/ +private ["_throw","_item","_slot","_dsp","_kee","_tileIdx","_itemHasInteraction","_force","_errorCode","_curSlot","_Fav_DropIfOverflow","_Fav_FastWeaponSwitching"]; +params ["_dsp","_kee"]; + +_tileIdx = switch (_kee) do { + case EPOCH_keysfav1:{0}; + case EPOCH_keysfav2:{1}; + case EPOCH_keysfav3:{2}; + case EPOCH_keysfav4:{3}; + case EPOCH_keysfav5:{4}; +}; + +_item = rmx_var_favBar_current select _tileIdx; +if (_item isequalto "") exitwith {false}; +_throw = ""; + { + if (_item in (getarray (_x >> "Magazines"))) exitwith { + _throw = configname _x; + }; + } foreach ("true" configClasses (configfile >> "CfgWeapons" >> "Throw")); +if !(_throw isequalto "") then { + player forceWeaponFire [_throw,_throw]; +} +else { + _itemHasInteraction = str(missionConfigFile >> "CfgItemInteractions" >> _item) != ""; + if ((_itemHasInteraction) && (_item in magazines player)) then { + EPOCH_InteractedItem = ["",_item,""]; + [] call EPOCH_consumeItem; + EPOCH_favBar_itemConsumed = true; + } else { + _Fav_DropIfOverflow = ["CfgEpochClient", "Fav_DropIfOverflow", false] call EPOCH_fnc_returnConfigEntryV2; + _slot = _item call epoch_itemTypeSlot; + _force = if (_slot in [3,4,5,7,8,10,11,16]) then {true} else {false}; //see how it works with other items, definitely keep true for weapons + _errorCode = [_item,_Fav_DropIfOverflow,_force] call epoch_equip; + player selectWeapon _item; + + if (_slot in [3,4,5]) then { + _curSlot = _item call epoch_itemTypeSlot; + _Fav_FastWeaponSwitching = ["CfgEpochClient", "Fav_FastWeaponSwitching", false] call EPOCH_fnc_returnConfigEntryV2; + if (_curSlot == _slot && !_Fav_FastWeaponSwitching && _errorCode in [1,2]) then {player playAction "reloadMagazine";}; + }; + if(_errorCode in [0,3]) then{ + if(!(true in EPOCH_modKeys) && (_kee isEqualTo 2))then{player selectWeapon (primaryWeapon player)}; + if(!(true in EPOCH_modKeys) && (_kee isEqualTo 3))then{player selectWeapon (handgunWeapon player)}; + if(!(true in EPOCH_modKeys) && (_kee isEqualTo 4))then{player selectWeapon (secondaryWeapon player)}; + }; + if (_errorCode isEqualTo 2) then {"Not enough space, item dropped on the ground!" call epoch_message;}; + if (_errorCode isEqualTo 4 && _item != (currentWeapon player)) then {"Not enough space!" call epoch_message;}; + if (_errorCode isEqualTo 3) then {"Item not found!" call epoch_message;}; + if (_errorCode isEqualTo 5) then {"No compatible weapon found!" call epoch_message;}; + }; +}; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_draw.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_draw.sqf new file mode 100644 index 0000000..67243a7 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_draw.sqf @@ -0,0 +1,122 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: manages drawing of favbar changes + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_draw.sqf + + Usage: none +*/ +disableSerialization; +private ["_action","_idx","_bidx","_mod","_baritems","_Fav_BannedItems"]; +params ["_action","_idx","_bidx","_mod"]; +_Fav_BannedItems = ["CfgEpochClient", "Fav_BannedItems", []] call EPOCH_fnc_returnConfigEntryV2; + +switch _action do { + case "load": + { + private ["_tmp","_c","_p"]; + rmx_var_favBar_MNone = profileNamespace getVariable ["rmx_var_favBar_MNone",["","","","",""]]; + rmx_var_favBar_MCtrl = profileNamespace getVariable ["rmx_var_favBar_MCtrl",["","","","",""]]; + rmx_var_favBar_MShift = profileNamespace getVariable ["rmx_var_favBar_MShift",["","","","",""]]; + rmx_var_favBar_MAlt = profileNamespace getVariable ["rmx_var_favBar_MAlt",["","","","",""]]; + { + _baritems = _x; + { + if (_x in _Fav_BannedItems) then { + _baritems set [_foreachindex,""]; + }; + } foreach _x; + } foreach [rmx_var_favBar_MNone,rmx_var_favBar_MCtrl,rmx_var_favBar_MShift,rmx_var_favBar_MAlt]; + + rmx_var_favBar_current = rmx_var_favBar_MNone; + + waitUntil {uiSleep 0.1; ctrlShown (["fav_equipped", 1] call epoch_getHUDCtrl)}; + + _tmp = ctrlPosition (["fav_pic_bg", 1] call epoch_getHUDCtrl); + + for "_i" from 1 to 5 do { + _c = (["fav_equipped", _i] call epoch_getHUDCtrl); + _c ctrlSetText "#(rgb,8,8,3)color(1,1,1,0.7)"; + _p = ctrlPosition _c; + _p set [2, (_tmp select 2)/10]; + _p set [3, (_tmp select 3)/10]; + _c ctrlSetPosition _p; + _c ctrlCommit 0; + }; + + call epoch_favBar_drawCurrent; + call epoch_favBar_refresh; + }; + case "add": + { + private ["_type","_isBanned","_isAmmo","_itemIsWeapon","_itemHasInteraction","_c"]; + if (rmx_var_favBar_Item in _Fav_BannedItems) exitWith {"Item is not allowed in favorites!" call epoch_message; false}; + if (rmx_var_favBar_Item in rmx_var_favBar_current) exitWith {"Item already exists in favorites!" call epoch_message; false}; //if duplicate + + _type = (rmx_var_favBar_Item call BIS_fnc_itemType) select 1; + _isBanned = _type in ["BombLauncher", "Cannon", "GrenadeLauncher", "Launcher", "MissileLauncher", "RocketLauncher", "Magazine", "Mortar", "Shotgun","Rocket", "BarrelBomb2_EPOCH_Remote_Mag","BarrelBomb_EPOCH_Remote_Mag"]; + _isAmmo = _type == "Bullet" && !(rmx_var_favBar_Item in ["EnergyPack","EnergyPackLg"]); + + //if (_type in ["AccessoryMuzzle","AccessoryPointer","AccessorySights","AccessoryBipod"]) exitWith {"Attachments are not supported at the moment!" call epoch_message; false}; + if (_isBanned || _isAmmo) exitWith {"Item cannot be added to favorites!" call epoch_message; false}; //Don't allow certain types + + _itemIsWeapon = [rmx_var_favBar_Item, "CfgWeapons"] call EPOCH_fnc_isAny; + _itemHasInteraction = str(missionConfigFile >> "CfgItemInteractions" >> rmx_var_favBar_Item) != ""; + + if (!_itemIsWeapon && !_itemHasInteraction && rmx_var_favBar_Item == "") exitWith {"Please equip item first and try again!" call epoch_message; false}; //Workaround + + rmx_var_favBar_current set [_idx,rmx_var_favBar_Item]; + + switch EPOCH_modKeys do { + case [true,false,false]: //shift + { + rmx_var_favBar_MShift set [_idx,rmx_var_favBar_Item]; + profileNamespace setVariable ["rmx_var_favBar_MShift",rmx_var_favBar_MShift]; + rmx_var_favBar_current = rmx_var_favBar_MShift; + }; + case [false,true,false]: //Ctrl + { + rmx_var_favBar_MCtrl set [_idx,rmx_var_favBar_Item]; + profileNamespace setVariable ["rmx_var_favBar_MCtrl",rmx_var_favBar_MCtrl]; + rmx_var_favBar_current = rmx_var_favBar_MCtrl; + }; + case [false,false,true]: //Alt + { + rmx_var_favBar_MAlt set [_idx,rmx_var_favBar_Item]; + profileNamespace setVariable ["rmx_var_favBar_MAlt",rmx_var_favBar_MAlt]; + rmx_var_favBar_current = rmx_var_favBar_MAlt; + }; + default { //Any other combo or no modifier + rmx_var_favBar_MNone set [_idx,rmx_var_favBar_Item]; + profileNamespace setVariable ["rmx_var_favBar_MNone",rmx_var_favBar_MNone]; + rmx_var_favBar_current = rmx_var_favBar_MNone; + }; + }; + //draw current here + if !(rmx_var_favBar_Item isEqualTo "") then { + _c = (["fav_pic", _idx+1] call epoch_getHUDCtrl); + _c ctrlSetText (rmx_var_favBar_Item call EPOCH_itemPicture); + }; + }; + case "remove": + { + if (_bidx == 1) then { //if right mouse click + rmx_var_favBar_current set [_idx,""]; + _c = (["fav_pic", _idx+1] call epoch_getHUDCtrl); + _c ctrlSetText ""; + }; + }; + default {systemChat "fail"}; +}; + +for "_i" from 1 to 5 do { + (["fav_pic_bg", _i] call epoch_getHUDCtrl) ctrlSetText "x\addons\a3_epoch_code\Data\UI\favbar\fav_bg.paa"; +}; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_drawCurrent.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_drawCurrent.sqf new file mode 100644 index 0000000..1c8f791 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_drawCurrent.sqf @@ -0,0 +1,5 @@ +for "_i" from 0 to 4 do { + _c = (["fav_pic", _i+1] call epoch_getHUDCtrl); + _c ctrlSetText ((rmx_var_favBar_current select _i) call EPOCH_itemPicture); +}; +true \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_getGearItem.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_getGearItem.sqf new file mode 100644 index 0000000..ee54c94 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_getGearItem.sqf @@ -0,0 +1,33 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: no use outside favbar probably. Weapons return display names only, so this hack allows getting their className + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_getGearItem.sqf + + Usage: none + + RETURNS: classname for item in inventory +*/ +private ["_return","_dispName","_idx","_className"]; +(_this select 1 select 0) params ["_dispName","_idx","_className"]; +_return = ""; + +if (_className isEqualTo "") then { //do itemsWithMagazines instead + +{ + _txt = getText (configFile >> "CfgWeapons" >> _x >> "displayName"); + if (_txt isEqualTo _dispName) exitWith {_return = _x}; +} forEach (items player); + +} else { + _return = _className; +}; + +_return \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_getItemByIDC.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_getItemByIDC.sqf new file mode 100644 index 0000000..803bb16 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_getItemByIDC.sqf @@ -0,0 +1,136 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: Returns className of an item or weapon from inventory IDC + This function has no practical use outside of Favorite Bar menu due to IDC used as a case + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_getItemByIDC.sqf + + Usage: none +*/ +private ["_item","_ammo","_cnt"]; +//switch + +_item = switch (_this) do { + case 610: //Primary + { + primaryWeapon player + }; + case 620: //Primary silencer + { + (primaryWeaponItems player) select 0 + }; + case 621: //Primary Optic (TWS) + { + (primaryWeaponItems player) select 2 + }; + case 622: //Primary Flashlight/Laser + { + (primaryWeaponItems player) select 1 + }; + case 641: //Primary bipod + { + (primaryWeaponItems player) select 3 + }; + case 644: //Primary Grenade shell + { + _ammo = primaryWeaponMagazine player; + _cnt = count _ammo; + if (_cnt > 0) then { + if (_cnt > 1) then { + _ammo select 1 + } else { + _ammo select 0 + }; + } else {""}; + }; + case 623: //Primary Magazine + { + _ammo = primaryWeaponMagazine player; + _cnt = count _ammo; + if (_cnt > 0) then { + _ammo select 0 + } else {""}; + }; + case 611: //Secondary + { + secondaryWeapon player + }; + case 624: //Secondary silencer + { + (secondaryWeaponItems player) select 0 + }; + case 625: //Secondary Optic (TWS) + { + (secondaryWeaponItems player) select 2 + }; + case 626: //Secondary Flashlight/Laser + { + (secondaryWeaponItems player) select 1 + }; + case 642: //Secondary bipod + { + (secondaryWeaponItems player) select 3 + }; + case 627: //Secondary Magazine + { + _ammo = secondaryWeaponMagazine player; + _cnt = count _ammo; + if (_cnt > 0) then { + _ammo select 0 + } else {""}; + }; + case 612: //Handgun + { + handgunWeapon player + }; + case 628: //Handgun silencer + { + (handgunItems player) select 0 + }; + case 629: //Handgun Optic (TWS) + { + (handgunItems player) select 2 + }; + case 630: //Handgun Flashlight/Laser + { + (handgunItems player) select 1 + }; + case 643: //Handgun bipod + { + (handgunItems player) select 3 + }; + case 631: //Handgun Magazine + { + _ammo = handgunMagazine player; + _cnt = count _ammo; + if (_cnt > 0) then { + _ammo select 0 + } else {""}; + }; + case 6240: //headgear + { + headgear player; + }; + case 6216: //goggles + { + goggles player; + }; + case 6217: //hmd + { + hmd player; + }; + case 6238: //goggles + { + binocular player; + }; + default {""}; +}; + +_item diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_inventory.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_inventory.sqf new file mode 100644 index 0000000..bfa115e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_inventory.sqf @@ -0,0 +1,90 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: loaded every time Gear menu is opened + + + Developer's FYI: + To increase amount of favorite bars you need to edit: + CfgDynamicHUD.hpp - increase array sizes for fav_*, maybe even width/height + EPOCH_clientKeyMap.sqf - add keys to keymap array + EPOCH_keyDown.sqf - add new keys to dikCode check array + epoch_favBar_action.sqf - add tile indexes for new keymaps + epoch_favBar_draw.sqf - increase FOR loop accordingly + epoch_favBar_refresh.sqf - increase FOR loop accordingly + THIS script - increase FOR loop accordingly + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_inventory.sqf + + Usage: none +*/ +private ["_display","_c","_gIdx","_g"]; + +if !(["CfgEpochClient", "Fav_enableFavoriteBar", true] call EPOCH_fnc_returnConfigEntryV2) exitWith {false}; +disableSerialization; +waitUntil {!isNull findDisplay 602}; + +_display = (findDisplay 602); +_display displayAddEventHandler ["MouseButtonUp","[] spawn {rmx_var_fav_selected = false}"]; +rmx_var_fav_selected = false; +{ + _c = _display displayCtrl _x; + _c ctrlAddEventHandler ["LBDrag","rmx_var_favBar_Item = (_this call epoch_favBar_getGearItem); rmx_var_fav_selected = true"]; +} forEach [619,638,633]; +// call epoch_getGearItem; +//(_this select 1 select 0 select 2) +{ + _c = _display displayCtrl _x; + _c ctrlAddEventHandler ["MouseButtonDown",(format ["call epoch_favBar_modifier; rmx_var_favBar_Item = %1 call epoch_favBar_getItemByIDC; rmx_var_fav_selected = true",_x])]; +} forEach [610,620,641,622,621,644,623,611,624,642,626,625,627,612,628,643,630,629,631,6240,6216,6217,6238]; + +_gIdx = 0; + +{ + if ((_x select 0) isEqualTo "fav_pic") exitWith {_gIdx = _forEachIndex}; +} forEach rmx_var_dynamicHUD_groupCTRL; + +_g = _display ctrlCreate ["rmx_rscControlsGroup",125342]; +_g ctrlSetPosition (ctrlPosition (rmx_var_dynamicHUD_groups select _gIdx)); +_g ctrlCommit 0; +for "_i" from 0 to 4 do { + + _c = _display ctrlCreate ["RscPictureKeepAspect",125342+_i,_g]; + _c ctrlSetPosition (ctrlPosition (["fav_pic", _i + 1] call epoch_getHUDCtrl)); + _c ctrlSetText "#(rgb,8,8,3)color(1,1,1,0.1)"; + _c ctrlCommit 0; + _c ctrlSetEventHandler ["MouseButtonUp",format["['remove',%1,(_this select 1)] call epoch_favBar_draw;",_i]]; + _c ctrlSetEventHandler ["MouseEnter",format ["if (rmx_var_fav_selected) then {['add',%1] call epoch_favBar_draw; rmx_var_fav_dragging = false}",_i]]; + _c ctrlEnable true; + + _c = _display ctrlCreate ["RscPictureKeepAspect",125342+_i,_g]; + _c ctrlSetPosition (ctrlPosition (["fav_pic_bg", _i + 1] call epoch_getHUDCtrl)); + _c ctrlSetText "x\addons\a3_epoch_code\Data\UI\favbar\fav_bg2.paa"; + _c ctrlSetTextColor [0,0,0,0.5]; + _c ctrlCommit 0; +}; + +for "_i" from 1 to 5 do { + (["fav_keymap", _i] call epoch_getHUDCtrl) ctrlShow true; + (["fav_pic_bg", _i] call epoch_getHUDCtrl) ctrlShow true; +}; + +true +/* +{ +_crl = _display displayCtrl _x; +_c = _display ctrlCreate ["RscText",1253422+_forEachIndex]; +_c ctrlSetPosition (ctrlPosition _crl); +_c ctrlSetText (format ["%2",ctrlClassName _crl, _x]); +_c ctrlCommit 0; +}foreach [610,620,641,622,621,644,623,611,624,642,626,625,627,612,628,643,630,629,631,6240,6216,6217,6238]; +*/ +//Listboxes? +//6325,1241 +//619,638,633 \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_modifier.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_modifier.sqf new file mode 100644 index 0000000..0f9b479 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_modifier.sqf @@ -0,0 +1,9 @@ +switch EPOCH_modKeys do { +case [true,false,false]:{rmx_var_favBar_current = rmx_var_favBar_MShift;}; +case [false,true,false]:{rmx_var_favBar_current = rmx_var_favBar_MCtrl;}; +case [false,false,true]:{rmx_var_favBar_current = rmx_var_favBar_MAlt;}; +default {rmx_var_favBar_current = rmx_var_favBar_MNone;}; +}; +call epoch_favBar_drawCurrent; +call epoch_favBar_refresh; +true \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_refresh.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_refresh.sqf new file mode 100644 index 0000000..006e7fa --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/favBar/epoch_favBar_refresh.sqf @@ -0,0 +1,63 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: This is called by event1.sqf every 1 second as well as every time mod key is pressed. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_refresh.sqf + + Usage: none +*/ + +if !(["CfgEpochClient", "Fav_enableFavoriteBar", true] call EPOCH_fnc_returnConfigEntryV2) exitWith {false}; +private ["_playerItems","_equipped","_mod","_txt"]; + +_playerItems = itemsWithMagazines player; +_equipped = [primaryWeapon player, secondaryWeapon player, handgunWeapon player, headgear player, goggles player, hmd player, binocular player]; +_equipped append (primaryWeaponItems player + primaryWeaponMagazine player + secondaryWeaponItems player + secondaryWeaponMagazine player + handgunItems player + handgunMagazine player); +_equipped append (assignedItems player); + +_mod = switch EPOCH_modKeys do { + case [true,false,false]: {"Shift + "}; + case [false,true,false]: {"Ctrl + "}; + case [false,false,true]: {"Alt + "}; + default {""}; +}; + +for "_i" from 1 to 5 do { + _txt = missionNamespace getVariable [format["EPOCH_keysfav%1",_i],"N/A"]; + (["fav_keymap", _i] call epoch_getHUDCtrl) ctrlSetText (_mod + (_txt call BIS_fnc_keyCode)); +}; + +{ + if (_x != "") then { + (["fav_pic_bg", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow true; + (["fav_keymap", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow true; + + if (_x in _playerItems) then { + (["fav_pic", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlSetTextColor [1,1,1,1]; + } else { + (["fav_pic", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlSetTextColor [1,0,0,1]; + }; + + if (_x in _equipped) then { + (["fav_pic", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlSetTextColor [1,1,1,1]; + (["fav_equipped", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow true; + } else { + (["fav_equipped", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow false; + }; + } else { + (["fav_equipped", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow false; + + if (isNull findDisplay 602) then { + (["fav_pic_bg", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow false; + (["fav_keymap", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow false; + }; + }; +}forEach rmx_var_favBar_current; +true \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/geiger/epoch_geiger_animate.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/geiger/epoch_geiger_animate.sqf new file mode 100644 index 0000000..3c8b168 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/geiger/epoch_geiger_animate.sqf @@ -0,0 +1,57 @@ +disableSerialization; +_rads = param [0,0,[0]]; +_lcd = uiNamespace getVariable ["EPOCH_geiger_LCD",controlNull]; +_led = uiNamespace getVariable ["EPOCH_geiger_LED",controlNull]; + +if (_rads >= 10) then { + if (!EPOCH_geiger_mute_warning) then { + if (EPOCH_playerEnergy > 0) then { + if (EPOCH_playerEnergy < 5) then { + playSound "geiger_epoch_alarm_low"; + } else { + playSound "geiger_epoch_alarm"; + }; + }; + }; + [] spawn { + disableSerialization; + _lcd = uiNamespace getVariable ["EPOCH_geiger_LCD",controlNull]; + _lcd ctrlSetFade 1; + _lcd ctrlCommit 1; + uiSleep 1; + if (EPOCH_playerEnergy <= 100) then { + _lcd ctrlSetFade 1-(EPOCH_playerEnergy / 100); + } else { + _lcd ctrlSetFade 0; + }; + _lcd ctrlCommit 1; + }; +}; + +for "_i" from 1 to (ceil _rads) do { + if (!EPOCH_geiger_mute_counter) then { + if (EPOCH_playerEnergy > 0) then { + + if (EPOCH_playerEnergy < 5) then { + playSound "geiger_epoch_tick_low"; + } else { + playSound "geiger_epoch_tick"; + }; + }; + }; + _led ctrlSetText "x\addons\a3_epoch_assets_1\pictures\geiger\geiger_4on"; + uiSleep (random 0.5); + _led ctrlSetText ""; +}; + +if (EPOCH_playerEnergy <= 100) then { + _lcd ctrlSetFade 1-(EPOCH_playerEnergy / 100); + _lcd ctrlCommit 1; + _led ctrlSetFade 1-(EPOCH_playerEnergy / 100); + _led ctrlCommit 1; +} else { + _lcd ctrlSetFade 0; + _lcd ctrlCommit 1; + _led ctrlSetFade 0; + _led ctrlCommit 1; +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/geiger/epoch_geiger_show_hide.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/geiger/epoch_geiger_show_hide.sqf new file mode 100644 index 0000000..0b8e228 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/geiger/epoch_geiger_show_hide.sqf @@ -0,0 +1,44 @@ +_removeControls = { + EPOCH_geiger_shown = false; + for "_i" from 1 to 8 do{ + (["geigerCounter", _i] call epoch_getHUDCtrl) ctrlSetText ""; + }; + ctrlDelete (uiNamespace getVariable ["EPOCH_geiger_LCD",controlNull]); + ctrlDelete (uiNamespace getVariable ["EPOCH_geiger_LED",controlNull]); +}; + +if !('ItemGeigerCounter_EPOCH' in assignedItems player) exitWith {call _removeControls; false}; + +if (ctrlText(["geigerCounter", 1] call epoch_getHUDCtrl) isEqualTo "") then { + EPOCH_geiger_shown = true; + + for "_i" from 1 to 8 do{ + (["geigerCounter", _i] call epoch_getHUDCtrl) ctrlSetText format ["x\addons\a3_epoch_assets_1\pictures\geiger\geiger_%1",_i]; + }; + _ledBG = (["geigerCounter", 4] call epoch_getHUDCtrl); + _lcdBG = (["geigerCounter", 5] call epoch_getHUDCtrl); + _lcdPos = ctrlPosition _lcdBG; + _ledPos = ctrlPosition _ledBG; + _parent = ctrlParentControlsGroup _lcdBG; + + _lcdPos set [0,(_lcdPos select 2) / 3.35]; + _lcdPos set [2,(_lcdPos select 2) * 43 / 100]; + + _lcd = (findDisplay 46) ctrlCreate ["rmx_geigerTXT",65765,_parent]; + _lcd ctrlSetPosition _lcdPos; + _lcd ctrlCommit 0; + _lcd ctrlSetText ""; //(random 1000 toFixed 1); + + _led = (findDisplay 46) ctrlCreate ["RscPicture",65766,_parent]; + _led ctrlSetPosition _ledPos; + _led ctrlCommit 0; + _led ctrlSetText ""; //"x\addons\a3_epoch_assets_1\pictures\geiger\geiger_4on"; + + uiNamespace setVariable ["EPOCH_geiger_LCD",_lcd]; + uiNamespace setVariable ["EPOCH_geiger_LED",_led]; + if (EPOCH_playerEnergy <= 20) then {"Low Energy!" call epoch_message;}; +} else { + call _removeControls; +}; + +true \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/geiger/epoch_geiger_simulate.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/geiger/epoch_geiger_simulate.sqf new file mode 100644 index 0000000..c4a2cd5 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/geiger/epoch_geiger_simulate.sqf @@ -0,0 +1,51 @@ +disableSerialization; +_energyRange = _this; +_lcd = uiNamespace getVariable ["EPOCH_geiger_LCD",controlNull]; +_led = uiNamespace getVariable ["EPOCH_geiger_LED",controlNull]; + +_src = nearestObjects[player,["All"],_energyRange]; +_radObjects = _src select {(_x getVariable ["EPOCH_Rads", []]) select 0 > 0}; +_rads = 0; +{ + _reldir = player getRelDir _x; + + if (_reldir > 315 || _reldir < 45) then { //only capture 90 degrees in front of player + _reldir = if (_reldir > 315) then { 360 - _reldir} else {_reldir}; //convert into 0-45 degrees + _prc = 100 - (_reldir / 45 * 100); //current direction percent, 45 = 100% + + _x getVariable "EPOCH_Rads" params ["_str","_intensity"]; + _dist = player distance _x; + _radIntensity = if (_dist <= _intensity) then { //only capture rads when within distance + _rds = (_str / _dist); + _rdsPrc = (_prc / 100 * _rds); + _rdsPrc + } else { + 0 + }; + _rads = _rads + _radIntensity + }; +} forEach _radObjects; //sum up radiation of all objects in vicinity and in FOV + +{ + _location = []; + _LocName = (_x select 0) joinString " "; + { + if( (str _x) == _LocName ) exitwith { _location = _x; }; + } foreach EPOCH_nearestLocations; + if !(_location isEqualTo []) then { + _x select 1 params ["_str","_intensity"]; + _dist = player distance getPos _location; + _radIntensity = if (_dist <= _intensity) then { + _str / _dist + } else { + 0 + }; + _rads = _rads + _radIntensity; + }; +}foreach EPOCH_radioactiveLocations; //sum up radiation of all radiactive locations in vicinity + +_rads = _rads + EPOCH_ambientRadiation; +_lcd ctrlSetText format ["%1r",_rads toFixed 1]; +_rads spawn epoch_geiger_animate; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_BtnInvite.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_BtnInvite.sqf new file mode 100644 index 0000000..10332a2 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_BtnInvite.sqf @@ -0,0 +1,68 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_BtnInvite.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_BtnInvite","_InvitePlayerCombo","_groupSize","_currentMember","_found","_playerName","_playerUID","_ret","_txt","_upgradePrice","_upgradeSlots"]; +//[[[end]]] +disableSerialization; +_BtnInvite = (findDisplay -1300) displayCtrl 30; +_playerUID = getPlayerUID player; + +Epoch_my_Group params [ + ["_groupName",""], + ["_leaderName",""], + ["_groupSize",0], + ["_modArray",[]], + ["_memberArray",[]] +]; + +if (_playerUID == Epoch_my_GroupUID || {_x select 0 == _playerUID}count (_modArray) > 0) then { + _currentMember = count(_modArray) + count(_memberArray) + 1; + if (_currentMember < _groupSize) then { + _InvitePlayerCombo = (findDisplay -1300) displayCtrl 41; + _playerUID = _InvitePlayerCombo lbData (lbCurSel _InvitePlayerCombo); + _playerName = _InvitePlayerCombo lbText (lbCurSel _InvitePlayerCombo); + if (_playerUID != "" && _playerName != "" && ({_playerUID in _x} count (_modArray) == 0) && ({_playerUID in _x} count (_memberArray) == 0) && !(_playerUID == Epoch_my_GroupUID)) then { + _txt = format["Do you want to add %1 to your Group?",_playerName]; + [_playerUID,_txt,_groupName] spawn { + params ["_playerUID","_txt","_groupName"]; + _ret = [_txt,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [_playerUID,Epoch_my_GroupUID,_groupName,player,Epoch_personalToken] remoteExec ["EPOCH_server_invitePlayer",2]; + }; + }; + }; + } else { + _found = EPOCH_group_upgrade_lvl find _groupSize; + if (count EPOCH_group_upgrade_lvl >= (_found+3)) then { + _upgradePrice = parseNumber (EPOCH_group_upgrade_lvl select (_found+3)); + if ((EPOCH_playerCrypto-_upgradePrice) >= 0) then { + _upgradeSlots = EPOCH_group_upgrade_lvl select (_found+2); + _txt = format["Do you want to upgrade your group from %1 to %2 slots for %3 Crypto?",_groupSize,_upgradeSlots,_upgradePrice]; + [_txt,_upgradePrice] spawn { + params ["_txt","_upgradePrice"]; + _ret = [_txt,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [Epoch_my_GroupUID,player,Epoch_personalToken] remoteExec ["EPOCH_server_upgradeGroup",2]; + }; + }; + } else { + ["You don't have enough Crypto to upgrade your group!","Epoch Group Menu",true,false] spawn BIS_fnc_GUImessage; + }; + }; + }; + true +} else { + false +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_BtnKick.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_BtnKick.sqf new file mode 100644 index 0000000..9945a74 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_BtnKick.sqf @@ -0,0 +1,48 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_BtnKick.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_BtnKick","_group","_playerName","_playerUID","_ret","_selected","_txt"]; +//[[[end]]] +disableSerialization; +_BtnKick = (findDisplay -1300) displayCtrl 33; + +_playerUID = getPlayerUID player; + +Epoch_my_Group params [ + ["_groupName",""], + ["_leaderName",""], + ["_groupSize",0], + ["_modArray",[]], + ["_memberArray",[]] +]; + +if (_playerUID == Epoch_my_GroupUID || {_x select 0 == _playerUID}count (_modArray) > 0) then { + _group = (findDisplay -1300) displayCtrl 40; + _selected = lbCurSel _group; + if (_selected >= 0) then { + _playerUID = _group lbData _selected; + _playerName = _group lbText _selected; + if (_playerUID != "" && _playerName != "") then { + _txt = format["Do you want to kick %1 from your Group?",_playerName]; + [_playerUID,_txt] spawn { + params ["_playerUID","_txt"]; + _ret = [_txt,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [Epoch_my_GroupUID,_playerUID,false,false,player,Epoch_personalToken] remoteExec ["EPOCH_server_updatePlayerGroup",2]; + }; + }; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_BtnLeave.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_BtnLeave.sqf new file mode 100644 index 0000000..83c4f76 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_BtnLeave.sqf @@ -0,0 +1,42 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_BtnLeave.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_BtnLeave","_ret","_txt"]; +//[[[end]]] +disableSerialization; +Epoch_my_Group params [ + ["_groupName",""], + ["_leaderName",""], + ["_groupSize",0], + ["_modArray",[]], + ["_memberArray",[]] +]; +if (getPlayerUID player == Epoch_my_GroupUID) then { + _txt = format["Do you want to delete your Group called %1?",_groupName]; + _txt spawn { + _ret = [_this,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [player,Epoch_personalToken] remoteExec ["EPOCH_server_deleteGroup",2]; + }; + }; +} else { + _txt = format["Do you want to leave the %1 Group?",_groupName]; + _txt spawn { + _ret = [_this,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [Epoch_my_GroupUID,getPlayerUID player,false,false,player,Epoch_personalToken] remoteExec ["EPOCH_server_updatePlayerGroup",2]; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_BtnMod.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_BtnMod.sqf new file mode 100644 index 0000000..378891c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_BtnMod.sqf @@ -0,0 +1,46 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_BtnMod.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_group","_isMember","_playerUID","_ret","_selected","_txt"]; +//[[[end]]] +if (getPlayerUID player == Epoch_my_GroupUID) then { + _group = (findDisplay -1300) displayCtrl 40; + _selected = lbCurSel _group; + if (_selected >= 0) then { + _playerUID = _group lbData _selected; + if (_playerUID != "") then { + _isMember = (_group lbPicture _selected) == (EPOCH_group_level_img select 2); + _txt = if (_isMember) then { + format["Do you want to give %1 moderator permissions?",_group lbText _selected]; + } else { + format["Do you want to remove %1 moderator permissions?",_group lbText _selected]; + }; + + [_playerUID,_isMember,_txt] spawn { + params ["_playerUID","_isMember","_txt"]; + _ret = [_txt,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [Epoch_my_GroupUID,_playerUID,true,_isMember,player,Epoch_personalToken] remoteExec ["EPOCH_server_updatePlayerGroup",2]; + }; + }; + }; + } else { + ["You need to select a player!", 5] call Epoch_message; + }; + true +} else { + false +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_Combo.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_Combo.sqf new file mode 100644 index 0000000..76f04b4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_Combo.sqf @@ -0,0 +1,43 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_Combo.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_BtnInvite","_ctrl","_currentMember","_playerUID","_selected"]; +//[[[end]]] + +Epoch_my_Group params [ + ["_groupName",""], + ["_leaderName",""], + ["_groupSize",0], + ["_modArray",[]], + ["_memberArray",[]] +]; + +_ctrl = _this select 0; +_selected = _this select 1; +_playerUID = getPlayerUID player; +if (_playerUID == Epoch_my_GroupUID || {_x select 0 == _playerUID}count (_modArray) > 0) then { + _BtnInvite = (findDisplay -1300) displayCtrl 30; + _currentMember = count(_modArray) + count(_memberArray) + 1; + if (_currentMember < _groupSize) then { + _BtnInvite ctrlSetText format ["Invite %1",_ctrl lbtext _selected]; + }; + true +} else { + if (_selected != -1) then { + _ctrl lbSetCurSel -1; + }; + false +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_List.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_List.sqf new file mode 100644 index 0000000..1a16685 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_List.sqf @@ -0,0 +1,39 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_List.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_BtnKick","_BtnSetMod","_img"]; +//[[[end]]] +params ["_ctrl","_selected"]; + +if (getPlayerUID player == Epoch_my_GroupUID) then { + _img = _ctrl lbPicture _selected; + + _BtnSetMod = (findDisplay -1300) displayCtrl 32; + _BtnKick = (findDisplay -1300) displayCtrl 33; + + switch _img do { + case {getPlayerUID player == _ctrl lbData _selected}:{_BtnSetMod ctrlEnable false;_BtnKick ctrlEnable false}; + case(EPOCH_group_level_img select 0) : {_BtnSetMod ctrlEnable false; _BtnKick ctrlEnable false}; + case(EPOCH_group_level_img select 1) : {_BtnSetMod ctrlEnable true; _BtnKick ctrlEnable true; _BtnSetMod ctrlSetText "Remove Mod"}; + case(EPOCH_group_level_img select 2) : {_BtnSetMod ctrlEnable true; _BtnKick ctrlEnable true; _BtnSetMod ctrlSetText "Set Mod"}; + }; + true +} else { + if (_selected != -1) then { + _ctrl lbSetCurSel -1; + }; + false +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_invitePlayer.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_invitePlayer.sqf new file mode 100644 index 0000000..4f1350b --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_invitePlayer.sqf @@ -0,0 +1,18 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_invitePlayer.sqf +*/ +if !(_this in Epoch_invited_GroupUIDs) then { + Epoch_invited_GroupUIDs pushBack _this; + ["Group request received", 5] call Epoch_message; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_onLoad.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_onLoad.sqf new file mode 100644 index 0000000..a77e83b --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_onLoad.sqf @@ -0,0 +1,108 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_onLoad.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_BtnInvite","_GroupMemberList","_InvitePlayerCombo","_currentMaxMember","_display","_found","_index","_myPlayerUID","_onlinePUID","_picture","_playerIsLeader","_playerIsMod","_playerUID","_players"]; +//[[[end]]] +disableSerialization; +_display = findDisplay -1300; +_BtnInvite = _display displayCtrl 30; + +_GroupMemberList = _display displayCtrl 40; +_InvitePlayerCombo = _display displayCtrl 41; + +Epoch_my_Group params [ + ["_groupName",""], + ["_leaderName",""], + ["_groupSize",0], + ["_modArray",[]], + ["_memberArray",[]] +]; + +_currentMaxMember = count(_modArray) + count(_memberArray) + 1; + +(_display displayCtrl 21) ctrlSetText format["Group Name: %1 (%2/%3 Slots)",_groupName,_currentMaxMember,_groupSize]; + +_myPlayerUID = getPlayerUID player; +_playerIsLeader = _myPlayerUID == Epoch_my_GroupUID; +_playerIsMod = {_x select 0 == _myPlayerUID}count (_modArray) > 0; +(_display displayCtrl 32) ctrlEnable false; +(_display displayCtrl 33) ctrlEnable false; + +_onlinePUID = []; +{ + _onlinePUID pushBack (getPlayerUID _x); +}forEach (units group player); + +if (_currentMaxMember < _groupSize) then { + _players = player nearEntities [["Epoch_Male_F","Epoch_Female_F","LandVehicle","Ship","Air","Tank"], 10]; + + if (_playerIsLeader || _playerIsMod) then { + { + if (!isNull _x) then { + if (isPlayer _x && alive _x) then { + _index = _InvitePlayerCombo lbAdd format["%1",name _x]; + _InvitePlayerCombo lbSetData [_index,getPlayerUID _x]; + }; + }; + }forEach (_players-(units group player)); + }; + + if ((lbSize _InvitePlayerCombo) == 0) then { + _InvitePlayerCombo ctrlEnable false; + _BtnInvite ctrlEnable false; + _BtnInvite ctrlSetText (if (_playerIsLeader || _playerIsMod) then {"No one nearby to invite."} else {"Must be an Owner or a Mod to invite!"}); + } else { + _InvitePlayerCombo lbSetCurSel 0; + lbsort _InvitePlayerCombo; + }; +} else { + if (_playerIsLeader || _playerIsMod) then { + _found = EPOCH_group_upgrade_lvl find _currentMaxMember; + if (count EPOCH_group_upgrade_lvl >= (_found+3)) then { + _BtnInvite ctrlSetText format ["Upgrade +%1 Slots for %2 Crypto",abs (_currentMaxMember-(EPOCH_group_upgrade_lvl select (_found+2))),EPOCH_group_upgrade_lvl select (_found+3)]; + } else { + _BtnInvite ctrlSetText format ["No Upgrade Available!"]; + _BtnInvite ctrlEnable false; + }; + } else { + _BtnInvite ctrlSetText format ["You need to be the Owner or a Mod to Upgrade the group!"]; + _BtnInvite ctrlEnable false; + }; +}; + +if (_playerIsLeader) then { + (findDisplay -1300) displayCtrl 31 ctrlSetText "Delete Group"; +}; + + +{ + _picture = EPOCH_group_level_img select _forEachIndex; //0 = lead / 1 = mod / 2 = member + { + _playerUID = _x select 0; + + _index = _GroupMemberList lbAdd format["%1",_x select 1]; + _GroupMemberList lbSetColor [_index,if (_playerUID in _onlinePUID) then {[1,1,1,1]}else{[1,1,1,0.45]}]; + _GroupMemberList lbSetPicture [_index, _picture]; + + if (_playerIsLeader || _playerIsMod) then { + _GroupMemberList lbSetData [_index,_playerUID]; + }; + }forEach _x; +}forEach +[ + [[Epoch_my_GroupUID,_leaderName]], + _modArray, + _memberArray +]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_update.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_update.sqf new file mode 100644 index 0000000..f6389a4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_Group_update.sqf @@ -0,0 +1,19 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_update.sqf +*/ +if (!isNull (findDisplay -1300)) then { + (findDisplay -1300) closeDisplay 0; + uisleep 0.2; + createDialog "Epoch_myGroup"; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_cGroup_BtnCreate.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_cGroup_BtnCreate.sqf new file mode 100644 index 0000000..cb808db --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_cGroup_BtnCreate.sqf @@ -0,0 +1,53 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_cGroup_BtnCreate.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_array","_groupName","_ret","_timeout","_txt","_txtCtrl","_upgradePrice"]; +//[[[end]]] +disableSerialization; +_txtCtrl = (findDisplay -1200) displayCtrl 21; +_array = toArray(ctrlText _txtCtrl); + +if (count _array > 24) then { + _array resize 24; +}; + +if (count (_array-[32]) == 0) then { //32 = SPACE + ["Your group need a name!","Epoch Group Menu",true,false] spawn BIS_fnc_GUImessage; +} else { + _groupName = toString(_array); + _txtCtrl ctrlSetText _groupName; + + _upgradePrice = parseNumber (EPOCH_group_upgrade_lvl select 1); + if ((EPOCH_playerCrypto-_upgradePrice) >= 0) then { + [_groupName,_upgradePrice] spawn { + _txt = format["Do you want to create your group called %1? You cannot change the group name later!",_this select 0]; + _ret = [_txt,"Epoch Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [player,_this select 0,Epoch_personalToken] remoteExec ["EPOCH_server_createGroup",2]; + + _timeout = diag_tickTime+10; + waitUntil { + ((Epoch_my_GroupUID != "") && !(Epoch_my_Group isEqualTo [])) || ((_timeout - diag_tickTime) <= 0) + }; + (findDisplay -1200) closeDisplay 0; + if ((Epoch_my_GroupUID != "") && !(Epoch_my_Group isEqualTo [])) then { + createDialog "Epoch_myGroup"; + }; + }; + }; + } else { + ["You don't have enough Crypto to create a group!","Epoch Group Menu",true,false] spawn BIS_fnc_GUImessage; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_cGroup_groupText.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_cGroup_groupText.sqf new file mode 100644 index 0000000..9c251b6 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_cGroup_groupText.sqf @@ -0,0 +1,34 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_cGroup_groupText.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_array","_ctrl"]; +//[[[end]]] +_ctrl = (findDisplay -1200) displayCtrl 21; +_array = toArray(ctrlText _ctrl); + +if (count _array > 24) then { + _array resize 24; +}; + +// remove any disallowed chars in group name "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 -_" +{ + if !(_x in [97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,49,50,51,52,53,54,55,56,57,48,32,45,95]) then { + _array = _array - [_x]; + }; +} forEach _array; + +_ctrl ctrlSetText (toString _array); +false diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_cGroup_onLoad.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_cGroup_onLoad.sqf new file mode 100644 index 0000000..b53c107 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_cGroup_onLoad.sqf @@ -0,0 +1,25 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_cGroup_onLoad.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_textCtrl"]; +//[[[end]]] +if (Epoch_my_GroupUID != "") exitWith {(findDisplay -1200) closeDisplay 0}; +disableSerialization; +_textCtrl = (findDisplay -1200) displayCtrl 22; +if (EPOCH_playerCrypto < parseNumber(EPOCH_group_upgrade_lvl select 1)) then { + _textCtrl CtrlSetText format ["Need %1 Crypto to create your own group",EPOCH_group_upgrade_lvl select 1]; +} else { + _textCtrl CtrlSetText format["Cost to create group %1 Crypto", EPOCH_group_upgrade_lvl select 1]; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_iGroup_acceptInvite.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_iGroup_acceptInvite.sqf new file mode 100644 index 0000000..d71aaaa --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_iGroup_acceptInvite.sqf @@ -0,0 +1,21 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_iGroup_acceptInvite.sqf +*/ +if (Epoch_invited_GroupUID != "") then { + if !(Epoch_my_GroupUID == "") exitwith { + ["Leave your current Group first...",5] call Epoch_Message; + }; + [Epoch_invited_GroupUID,getPlayerUID player,true,false,player,Epoch_personalToken] remoteExec ["EPOCH_server_updatePlayerGroup",2]; +}; +(findDisplay -1500) closeDisplay 0; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_iGroup_onLoad.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_iGroup_onLoad.sqf new file mode 100644 index 0000000..08c45a4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_iGroup_onLoad.sqf @@ -0,0 +1,22 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_iGroup_onLoad.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_display","_text"]; +//[[[end]]] +_display = findDisplay -1400; +if (Epoch_invited_GroupUID == "" || Epoch_invited_GroupName == "") exitWith { _display closeDisplay 0}; +_text = _display displayCtrl 21; +_text ctrlSetText format ["Join the group called %1?",Epoch_invited_GroupName]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_iGroup_refresh.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_iGroup_refresh.sqf new file mode 100644 index 0000000..ef6328e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/group/EPOCH_iGroup_refresh.sqf @@ -0,0 +1,25 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_iGroup_refresh.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_index"]; +//[[[end]]] +if !(Epoch_invited_GroupUIDs isEqualTo []) then { + Epoch_invited_GroupUIDsPrev = Epoch_invited_GroupUIDs; + lbClear 1500; + { + _index = lbAdd[1500, _x select 1]; + lbSetData[1500, _index, _x select 0]; + } forEach Epoch_invited_GroupUIDs; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_cTempGroup_BtnCreate.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_cTempGroup_BtnCreate.sqf new file mode 100644 index 0000000..244871e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_cTempGroup_BtnCreate.sqf @@ -0,0 +1,47 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/groupTemp/EPOCH_cTempGroup_BtnCreate.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_array","_groupName","_ret","_timeout","_txt","_txtCtrl","_upgradePrice"]; +//[[[end]]] +disableSerialization; +_txtCtrl = (findDisplay -1200) displayCtrl 21; +_array = toArray(ctrlText _txtCtrl); + +if (count _array > 24) then { + _array resize 24; +}; + +if (count (_array-[32]) == 0) then { //32 = SPACE + ["Your group need a name!","Epoch Temp Group Menu",true,false] spawn BIS_fnc_GUImessage; +} else { + _groupName = toString(_array); + _txtCtrl ctrlSetText _groupName; + + _groupName spawn { + _txt = format["Do you want to create your temp group called %1? You can disband/leave this group to create a new one!",_this]; + _ret = [_txt,"Epoch Temp Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [player,_this,Epoch_personalToken] remoteExec ["EPOCH_server_createTempGroup",2]; + _timeout = diag_tickTime+10; + waitUntil { + ((Epoch_my_tempGroupUID != "") && !(Epoch_my_tempGroup isEqualTo [])) || ((_timeout - diag_tickTime) <= 0) + }; + (findDisplay -1200) closeDisplay 0; + if ((Epoch_my_tempGroupUID != "") && !(Epoch_my_tempGroup isEqualTo [])) then { + createDialog "Epoch_myTempGroup"; + }; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_cTempGroup_onLoad.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_cTempGroup_onLoad.sqf new file mode 100644 index 0000000..7c93806 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_cTempGroup_onLoad.sqf @@ -0,0 +1,21 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/groupTemp/EPOCH_cTempGroup_onLoad.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_textCtrl"]; +//[[[end]]] +if!(Epoch_my_tempGroup isEqualTo [])exitWith {(findDisplay -1200) closeDisplay 0}; +disableSerialization; +_textCtrl = (findDisplay -1200) displayCtrl 22; +_textCtrl CtrlSetText format ["%1, Temp Groups are free forever",name player]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_iTempGroup_acceptInvite.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_iTempGroup_acceptInvite.sqf new file mode 100644 index 0000000..6f52588 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_iTempGroup_acceptInvite.sqf @@ -0,0 +1,21 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/groupTemp/EPOCH_itempGroup_acceptInvite.sqf +*/ +if (Epoch_invited_tempGroupUID != "") then { + if !(Epoch_my_tempGroupUID == "") exitwith { + ["Leave your current Group first...",5] call Epoch_Message; + }; + [Epoch_invited_tempGroupUID,getPlayerUID player,true,false,player,Epoch_personalToken] remoteExec ["EPOCH_server_updatePlayerTempGroup",2]; +}; +(findDisplay -1500) closeDisplay 0; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_iTempGroup_onLoad.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_iTempGroup_onLoad.sqf new file mode 100644 index 0000000..9116040 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_iTempGroup_onLoad.sqf @@ -0,0 +1,22 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/groupTemp/EPOCH_iTempGroup_onLoad.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_display","_text"]; +//[[[end]]] +_display = findDisplay -1400; +if (Epoch_invited_tempGroupUID == "" || Epoch_invited_tempGroupName == "") exitWith { _display closeDisplay 0}; +_text = _display displayCtrl 21; +_text ctrlSetText format ["Join the temp group called %1?",Epoch_invited_tempGroupName]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_iTempGroup_refresh.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_iTempGroup_refresh.sqf new file mode 100644 index 0000000..743016f --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_iTempGroup_refresh.sqf @@ -0,0 +1,25 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/groupTemp/EPOCH_iTempGroup_refresh.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_index"]; +//[[[end]]] +if !(Epoch_invited_tempGroupUIDs isEqualTo []) then { + Epoch_invited_tempGroupUIDsPrev = Epoch_invited_tempGroupUIDs; + lbClear 1500; + { + _index = lbAdd[1500, _x select 1]; + lbSetData[1500, _index, _x select 0]; + } forEach Epoch_invited_tempGroupUIDs; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_BtnInvite.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_BtnInvite.sqf new file mode 100644 index 0000000..9ac7c09 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_BtnInvite.sqf @@ -0,0 +1,58 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/groupTemp/EPOCH_tempGroup_BtnInvite.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_BtnInvite","_InvitePlayerCombo","_groupSize","_currentMember","_found","_playerName","_playerUID","_ret","_txt","_upgradePrice","_upgradeSlots"]; +//[[[end]]] +disableSerialization; +_BtnInvite = (findDisplay -1300) displayCtrl 30; +_playerUID = getPlayerUID player; + +Epoch_my_tempGroup params [ + ["_groupName",""], + ["_leaderName",""], + ["_groupSize",0], + ["_modArray",[]], + ["_memberArray",[]] +]; + +Epoch_my_Group params [ + ["_groupName2",""], + ["_leaderName2",""], + ["_groupSize2",0], + ["_modArray2",[]], + ["_memberArray2",[]] +]; + +if (_playerUID == Epoch_my_tempGroupUID || {_x select 0 == _playerUID}count (_modArray) > 0) then { + _currentMember = count(_modArray) + count(_memberArray) + 1; + if (_currentMember < _groupSize) then { + _InvitePlayerCombo = (findDisplay -1300) displayCtrl 41; + _playerUID = _InvitePlayerCombo lbData (lbCurSel _InvitePlayerCombo); + _playerName = _InvitePlayerCombo lbText (lbCurSel _InvitePlayerCombo); + if (_playerUID != "" && _playerName != "" && ({_playerUID in _x} count (_modArray) == 0) && ({_playerUID in _x} count (_memberArray) == 0) && ({_playerUID in _x} count (_modArray2) == 0) && ({_playerUID in _x} count (_memberArray2) == 0) && !(_playerUID == Epoch_my_tempGroupUID)) then { + _txt = format["Do you want to add %1 to your Temp Group?",_playerName]; + [_playerUID,_txt,_groupName] spawn { + params ["_playerUID","_txt","_groupName"]; + _ret = [_txt,"Epoch Temp Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [_playerUID,Epoch_my_tempGroupUID,_groupName,player,Epoch_personalToken] remoteExec ["EPOCH_server_invitePlayerTempGroup",2]; + }; + }; + }; + }; + true +} else { + false +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_BtnKick.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_BtnKick.sqf new file mode 100644 index 0000000..d951af2 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_BtnKick.sqf @@ -0,0 +1,48 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/groupTemp/EPOCH_tempGroup_BtnKick.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_BtnKick","_group","_playerName","_playerUID","_ret","_selected","_txt"]; +//[[[end]]] +disableSerialization; +_BtnKick = (findDisplay -1300) displayCtrl 33; + +_playerUID = getPlayerUID player; + +Epoch_my_tempGroup params [ + ["_groupName",""], + ["_leaderName",""], + ["_groupSize",0], + ["_modArray",[]], + ["_memberArray",[]] +]; + +if (_playerUID == Epoch_my_tempGroupUID || {_x select 0 == _playerUID}count (_modArray) > 0) then { + _group = (findDisplay -1300) displayCtrl 40; + _selected = lbCurSel _group; + if (_selected >= 0) then { + _playerUID = _group lbData _selected; + _playerName = _group lbText _selected; + if (_playerUID != "" && _playerName != "") then { + _txt = format["Do you want to kick %1 from your Temp Group?",_playerName]; + [_playerUID,_txt] spawn { + params ["_playerUID","_txt"]; + _ret = [_txt,"Epoch Temp Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [Epoch_my_tempGroupUID,_playerUID,false,false,player,Epoch_personalToken] remoteExec ["EPOCH_server_updatePlayerTempGroup",2]; + }; + }; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_BtnLeave.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_BtnLeave.sqf new file mode 100644 index 0000000..16ecedd --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_BtnLeave.sqf @@ -0,0 +1,42 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/groupTemp/EPOCH_tempGroup_BtnLeave.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_BtnLeave","_ret","_txt"]; +//[[[end]]] +disableSerialization; +Epoch_my_tempGroup params [ + ["_groupName",""], + ["_leaderName",""], + ["_groupSize",0], + ["_modArray",[]], + ["_memberArray",[]] +]; +if (getPlayerUID player == Epoch_my_tempGroupUID) then { + _txt = format["Do you want to delete your Temp Group called %1?",_groupName]; + _txt spawn { + _ret = [_this,"Epoch Temp Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [player,Epoch_personalToken] remoteExec ["EPOCH_server_deleteTempGroup",2]; + }; + }; +} else { + _txt = format["Do you want to leave the %1 Temp Group?",_groupName]; + _txt spawn { + _ret = [_this,"Epoch Temp Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [Epoch_my_tempGroupUID,getPlayerUID player,false,false,player,Epoch_personalToken] remoteExec ["EPOCH_server_updatePlayerTempGroup",2]; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_BtnMod.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_BtnMod.sqf new file mode 100644 index 0000000..d60cbb5 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_BtnMod.sqf @@ -0,0 +1,46 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_BtnMod.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_group","_isMember","_playerUID","_ret","_selected","_txt"]; +//[[[end]]] +if (getPlayerUID player == Epoch_my_tempGroupUID) then { + _group = (findDisplay -1300) displayCtrl 40; + _selected = lbCurSel _group; + if (_selected >= 0) then { + _playerUID = _group lbData _selected; + if (_playerUID != "") then { + _isMember = (_group lbPicture _selected) == (EPOCH_group_level_img select 2); + _txt = if (_isMember) then { + format["Do you want to give %1 moderator permissions?",_group lbText _selected]; + } else { + format["Do you want to remove %1 moderator permissions?",_group lbText _selected]; + }; + + [_playerUID,_isMember,_txt] spawn { + params ["_playerUID","_isMember","_txt"]; + _ret = [_txt,"Epoch Temp Group Menu",true,true] call BIS_fnc_GUImessage; + if (_ret) then { + [Epoch_my_tempGroupUID,_playerUID,true,_isMember,player,Epoch_personalToken] remoteExec ["EPOCH_server_updatePlayerTempGroup",2]; + }; + }; + }; + } else { + ["You need to select a player!", 5] call Epoch_message; + }; + true +} else { + false +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_Combo.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_Combo.sqf new file mode 100644 index 0000000..057443d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_Combo.sqf @@ -0,0 +1,43 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_Combo.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_BtnInvite","_ctrl","_currentMember","_playerUID","_selected"]; +//[[[end]]] + +Epoch_my_tempGroup params [ + ["_groupName",""], + ["_leaderName",""], + ["_groupSize",0], + ["_modArray",[]], + ["_memberArray",[]] +]; + +_ctrl = _this select 0; +_selected = _this select 1; +_playerUID = getPlayerUID player; +if (_playerUID == Epoch_my_tempGroupUID || {_x select 0 == _playerUID}count (_modArray) > 0) then { + _BtnInvite = (findDisplay -1300) displayCtrl 30; + _currentMember = count(_modArray) + count(_memberArray) + 1; + if (_currentMember < _groupSize) then { + _BtnInvite ctrlSetText format ["Invite %1",_ctrl lbtext _selected]; + }; + true +} else { + if (_selected != -1) then { + _ctrl lbSetCurSel -1; + }; + false +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_List.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_List.sqf new file mode 100644 index 0000000..2c51b38 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_List.sqf @@ -0,0 +1,39 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/groupTemp/EPOCH_tempGroup_List.sqf +*/ +disableSerialization; +//[[[cog import generate_private_arrays ]]] +private ["_BtnKick","_BtnSetMod","_img"]; +//[[[end]]] +params ["_ctrl","_selected"]; + +if (getPlayerUID player == Epoch_my_tempGroupUID) then { + _img = _ctrl lbPicture _selected; + + _BtnSetMod = (findDisplay -1300) displayCtrl 32; + _BtnKick = (findDisplay -1300) displayCtrl 33; + + switch _img do { + case {getPlayerUID player == _ctrl lbData _selected}:{_BtnSetMod ctrlEnable false;_BtnKick ctrlEnable false}; + case(EPOCH_group_level_img select 0) : {_BtnSetMod ctrlEnable false; _BtnKick ctrlEnable false}; + case(EPOCH_group_level_img select 1) : {_BtnSetMod ctrlEnable true; _BtnKick ctrlEnable true; _BtnSetMod ctrlSetText "Remove Mod"}; + case(EPOCH_group_level_img select 2) : {_BtnSetMod ctrlEnable true; _BtnKick ctrlEnable true; _BtnSetMod ctrlSetText "Set Mod"}; + }; + true +} else { + if (_selected != -1) then { + _ctrl lbSetCurSel -1; + }; + false +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_invitePlayer.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_invitePlayer.sqf new file mode 100644 index 0000000..7370452 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_invitePlayer.sqf @@ -0,0 +1,18 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_invitePlayer.sqf +*/ +if !(_this in Epoch_invited_tempGroupUIDs) then { + Epoch_invited_tempGroupUIDs pushBack _this; + ["Temp Group request received", 5] call Epoch_message; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_onLoad.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_onLoad.sqf new file mode 100644 index 0000000..72a3ec1 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_onLoad.sqf @@ -0,0 +1,94 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/groupTemp/EPOCH_tempGroup_onLoad.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_BtnInvite","_GroupMemberList","_InvitePlayerCombo","_currentMaxMember","_display","_found","_index","_myPlayerUID","_onlinePUID","_picture","_playerIsLeader","_playerIsMod","_playerUID","_players"]; +//[[[end]]] +disableSerialization; +_display = findDisplay -1300; +_BtnInvite = _display displayCtrl 30; + +_GroupMemberList = _display displayCtrl 40; +_InvitePlayerCombo = _display displayCtrl 41; + +Epoch_my_tempGroup params [ + ["_groupName",""], + ["_leaderName",""], + ["_groupSize",0], + ["_modArray",[]], + ["_memberArray",[]] +]; + +_currentMaxMember = count(_modArray) + count(_memberArray) + 1; + +(_display displayCtrl 21) ctrlSetText format["Temp Name: %1 (%2/%3 Slots)",_groupName,_currentMaxMember,_groupSize]; + +_myPlayerUID = getPlayerUID player; +_playerIsLeader = _myPlayerUID == Epoch_my_tempGroupUID; +_playerIsMod = {_x select 0 == _myPlayerUID}count (_modArray) > 0; +(_display displayCtrl 32) ctrlEnable false; +(_display displayCtrl 33) ctrlEnable false; + +_onlinePUID = []; +{ + _onlinePUID pushBack (getPlayerUID _x); +}forEach (units group player); + +if (_currentMaxMember < _groupSize) then { + _players = player nearEntities [["Epoch_Male_F","Epoch_Female_F","LandVehicle","Ship","Air","Tank"], 10]; + + if (_playerIsLeader || _playerIsMod) then { + { + if (!isNull _x) then { + if (isPlayer _x && alive _x) then { + _index = _InvitePlayerCombo lbAdd format["%1",name _x]; + _InvitePlayerCombo lbSetData [_index,getPlayerUID _x]; + }; + }; + }forEach (_players-(units group player)); + }; + + if ((lbSize _InvitePlayerCombo) == 0) then { + _InvitePlayerCombo ctrlEnable false; + _BtnInvite ctrlEnable false; + _BtnInvite ctrlSetText (if (_playerIsLeader || _playerIsMod) then {"No one nearby to invite."} else {"Must be an Owner or a Mod to invite!"}); + } else { + _InvitePlayerCombo lbSetCurSel 0; + lbsort _InvitePlayerCombo; + }; +}; + +if (getPlayerUID player == Epoch_my_tempGroupUID) then { + (findDisplay -1300) displayCtrl 31 ctrlSetText "Delete TempGrp"; +}; + +{ + _picture = EPOCH_group_level_img select _forEachIndex; //0 = lead / 1 = mod / 2 = member + { + _playerUID = _x select 0; + + _index = _GroupMemberList lbAdd format["%1",_x select 1]; + _GroupMemberList lbSetColor [_index,if (_playerUID in _onlinePUID) then {[1,1,1,1]}else{[1,1,1,0.45]}]; + _GroupMemberList lbSetPicture [_index, _picture]; + + if (_playerIsLeader || _playerIsMod) then { + _GroupMemberList lbSetData [_index,_playerUID]; + }; + }forEach _x; +}forEach +[ + [[Epoch_my_tempGroupUID,_leaderName]], + _modArray, + _memberArray +]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_update.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_update.sqf new file mode 100644 index 0000000..da19de8 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/groupTemp/EPOCH_tempGroup_update.sqf @@ -0,0 +1,19 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/groupTemp/EPOCH_tempGroup_update.sqf +*/ +if (!isNull (findDisplay -1300)) then { + (findDisplay -1300) closeDisplay 0; + uisleep 0.2; + createDialog "Epoch_myTempGroup"; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/inventory/EPOCH_Inventory_Group.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/inventory/EPOCH_Inventory_Group.sqf new file mode 100644 index 0000000..f2316fe --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/inventory/EPOCH_Inventory_Group.sqf @@ -0,0 +1,17 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/inventory/EPOCH_Inventory_Group.sqf +*/ +disableSerialization; +(findDisplay 602) closeDisplay 0; +createDialog (if ((Epoch_my_GroupUID == "") && (Epoch_my_Group isEqualTo [])) then {"EPOCH_createGrp"} else {"Epoch_myGroup"}); diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/inventory/EPOCH_Inventory_iGroup.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/inventory/EPOCH_Inventory_iGroup.sqf new file mode 100644 index 0000000..1b61879 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/inventory/EPOCH_Inventory_iGroup.sqf @@ -0,0 +1,20 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/inventory/EPOCH_Inventory_iGroup.sqf +*/ +disableSerialization; +(findDisplay 602) closeDisplay 0; +if !(Epoch_invited_GroupUIDs isEqualTo[]) exitWith { + createDialog "GroupRequests"; +}; +["No pending requests", 5] call Epoch_message; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/inventory/EPOCH_Inventory_itempGroup.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/inventory/EPOCH_Inventory_itempGroup.sqf new file mode 100644 index 0000000..d873f74 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/inventory/EPOCH_Inventory_itempGroup.sqf @@ -0,0 +1,20 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/inventory/EPOCH_Inventory_itempGroup.sqf +*/ +disableSerialization; +(findDisplay 602) closeDisplay 0; +if !(Epoch_invited_tempGroupUIDs isEqualTo[]) exitWith { + createDialog "tempGroupRequests"; +}; +["No pending requests", 5] call Epoch_message; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/inventory/EPOCH_Inventory_tempGroup.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/inventory/EPOCH_Inventory_tempGroup.sqf new file mode 100644 index 0000000..3199aac --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/inventory/EPOCH_Inventory_tempGroup.sqf @@ -0,0 +1,17 @@ +/* + Author: Niklas Wagner - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: DESC-TBA + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/inventory/EPOCH_Inventory_tempGroup.sqf +*/ +disableSerialization; +(findDisplay 602) closeDisplay 0; +createDialog (if ((Epoch_my_tempGroupUID == "") && (Epoch_my_tempGroup isEqualTo [])) then {"EPOCH_createTempGrp"} else {"Epoch_myTempGroup"}); diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/messaging/Epoch_message.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/messaging/Epoch_message.sqf new file mode 100644 index 0000000..8611dc4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/messaging/Epoch_message.sqf @@ -0,0 +1,162 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Description: + Displays custom text message to player + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/blob/release/Sources/epoch_code/gui/scripts/messaging/Epoch_message.sqf + + Usage: + "TEST" call Epoch_message +*/ +//[[[cog import generate_private_arrays ]]] +private ["_bgCol","_c","_c1StartPos","_c1pos","_c2pos","_c3pos","_col","_config","_ctrl","_ctrlArr","_customCol","_dsp","_fade","_fnc_animFirst","_fnc_animShiftCtrl","_fontSize","_msg","_oldCtrl","_pos","_tick","_time","_txtCol","_uniqueID","_yPos","_ySize"]; +//[[[end]]] +#include "\A3\ui_f\hpp\defineCommonGrids.inc" +_msg = param [0, "No input"]; +_time = param [1, 2]; +_customCol = param[2,[]]; +private["_bgCol","_txtCol"]; +if(_customCol isEqualTo [])then{ + _config = 'CfgEpochClient' call EPOCH_returnConfig; + _bgCol = getArray(_config >> "epochMessageBackgroundCol"); + _txtCol = getArray(_config >> "epochMessageTextCol"); + if !(_bgCol isEqualTypeAll 0)then{_bgCol = [0,0,0,0.2]}; + if !(_txtCol isEqualTypeAll 0)then{_txtCol = [1,1,1,0.95]}; +}else{ + _bgCol = if((_customCol select 0)isEqualTypeAll 0) then [{_customCol select 0},{_bgCol = [0,0,0,0.2]}]; + _txtCol = if((_customCol select 1)isEqualTypeAll 0) then [{_customCol select 1},{_txtCol = [1,1,1,0.95]}]; +}; + +if !(_msg isEqualType "STRING") then { //Needed to remove quotations from strings + _msg = str (parseText str _msg); //Parses and converts text back to small string +}; + +if !(isNil "rmx_var_msgQueue") exitWith {rmx_var_msgQueue pushBack [_msg, _time, [_bgCol,_txtCol]]}; + +rmx_var_msgQueue = [[_msg, _time, [_bgCol,_txtCol]] ]; + +[] spawn { + private ["_c1pos","_c2pos","_c3pos","_clr","_dsp"]; + + disableSerialization; + _dsp = findDisplay 46; + _yPos = 15; + _ySize = 2; + _c1StartPos = [safeZoneX,((_yPos - _ySize) * GUI_GRID_H + GUI_GRID_Y),safeZoneW, _ySize * GUI_GRID_H]; + _c1pos = [safeZoneX,(_yPos * GUI_GRID_H + GUI_GRID_Y),safeZoneW, _ySize * GUI_GRID_H]; + _c2pos = [safeZoneX,((_yPos + _ySize) * GUI_GRID_H + GUI_GRID_Y),safeZoneW, _ySize * GUI_GRID_H]; + _c3pos = [safeZoneX,((_yPos + _ySize * 2) * GUI_GRID_H + GUI_GRID_Y),safeZoneW, _ySize * GUI_GRID_H]; + + //Start anim + _msg = ""; + _time = (rmx_var_msgQueue select 0 select 1); + _col = (rmx_var_msgQueue select 0)select 2; + + _fnc_animFirst = { + private "_ctrl"; + _ctrl = param [0]; + _msg = param [1]; + _col = param [2]; + + _ctrl ctrlSetBackgroundColor (_col select 0); + _ctrl ctrlSetText _msg; + _ctrl ctrlSetTextColor (_col select 1); + + _ctrl ctrlSetPosition _c1StartPos; + _ctrl ctrlSetFade 1; + _ctrl ctrlCommit 0; + + _ctrl ctrlSetPosition _c1pos; + _ctrl ctrlSetFade 0; + _ctrl ctrlCommit 0.3; + }; + + _fnc_animShiftCtrl = { + private ["_ctrl", "_fade", "_fontSize", "_pos"]; + _ctrl = param [0]; + _fade = param [1]; + _fontSize = param [2]; + _pos = param [3]; + + _ctrl ctrlSetPosition _pos; + _ctrl ctrlSetFontHeight _fontSize; + _ctrl ctrlSetFade _fade; + _ctrl ctrlCommit 0.3; + }; + + _tick = diag_tickTime; + _ctrlArr = []; + while {(diag_tickTime - _tick) < _time} do { + + if !(rmx_var_msgQueue isEqualTo []) then { + + _msg = (rmx_var_msgQueue select 0 select 0); + _time = (rmx_var_msgQueue select 0 select 1); + _col = (rmx_var_msgQueue select 0)select 2; + _tick = diag_tickTime; + rmx_var_msgQueue deleteAt 0; + //_uniqueID = + switch (count _ctrlArr) do { + case 0: + { + _c = _dsp ctrlCreate ["rmx_t1", call epoch_getIDC]; + _ctrlArr = [[_c, _msg]]; + [_c, _msg, _col] call _fnc_animFirst; + }; + case 1: + { + _c = _dsp ctrlCreate ["rmx_t1", call epoch_getIDC]; + _ctrlArr set [count _ctrlArr, [_c, _msg]]; + [_c, _msg, _col] call _fnc_animFirst; + + [_ctrlArr select 0 select 0, 0.5, 0.035, _c2pos] call _fnc_animShiftCtrl; + }; + case 2: + { + _c = _dsp ctrlCreate ["rmx_t1", call epoch_getIDC]; + _ctrlArr set [count _ctrlArr, [_c, _msg]]; + [_c, _msg, _col] call _fnc_animFirst; + + [_ctrlArr select 1 select 0, 0.5, 0.035, _c2pos] call _fnc_animShiftCtrl; + [_ctrlArr select 0 select 0, 0.75, 0.03, _c3pos] call _fnc_animShiftCtrl; + }; + case 3: + { + _oldCtrl = (_ctrlArr select 0 select 0); + [_oldCtrl] call epoch_getIDC; + ctrlDelete _oldCtrl; + _ctrlArr deleteAt 0; + + _c = _dsp ctrlCreate ["rmx_t1", call epoch_getIDC]; + _ctrlArr pushBack [_c, _msg]; + [_c, _msg, _col] call _fnc_animFirst; + + [_ctrlArr select 1 select 0, 0.5, 0.035, _c2pos] call _fnc_animShiftCtrl; + [_ctrlArr select 0 select 0, 0.75, 0.03, _c3pos] call _fnc_animShiftCtrl; + }; + }; + }; + }; + + //End anim + { + (_x select 0) ctrlSetFade 1; + (_x select 0) ctrlSetPosition [safeZoneX, ((_yPos + _ySize * (_forEachIndex + 1)) * GUI_GRID_H + GUI_GRID_Y)]; + (_x select 0) ctrlCommit (0.4 - ((_foreachIndex + 1) / 10)); + } forEach _ctrlArr; + + uisleep 0.50; + + { + ctrlDelete (_x select 0); + } forEach _ctrlArr; + + rmx_var_msgQueue = nil; +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/messaging/Epoch_message_old1.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/messaging/Epoch_message_old1.sqf new file mode 100644 index 0000000..a1dd1f0 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/messaging/Epoch_message_old1.sqf @@ -0,0 +1,115 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + Displays custom text message to player + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/blob/release/Sources/epoch_code/gui/scripts/messaging/Epoch_message_old1.sqf + + Usage: + "TEST" call Epoch_message_old1 +*/ +//[[[cog import generate_private_arrays ]]] +private ["_add","_alreadyEnabled","_arr","_centerX","_centerY","_cnt","_controls","_ctrl","_ctrlGroup","_ctrlText","_del","_display","_height","_input","_scale","_text","_tick","_width","_xPos","_y","_yPos"]; +//[[[end]]] +#include "\A3\ui_f\hpp\defineCommonGrids.inc" + +params [["_text","Missing text",["",(text "")]],["_time",5,[1]],["_color","#ffffff",[""]] ]; + +if (_text isEqualType "STRING") then {_text = parseText _text}; + +_alreadyEnabled = uiNamespace getVariable ["rmx_var_dynamicText",false]; + +_input = count str _text * 2; +_scale = 1; +_width = _scale * GUI_GRID_W; +_height = _scale * GUI_GRID_H; +_centerX = 0.5; +_centerY = -18 * GUI_GRID_H + GUI_GRID_Y; + +disableSerialization; +_display = findDisplay 46; + +_ctrlGroup = _display ctrlCreate ["RscControlsGroupNoScrollbars", call Epoch_getIDC]; +_ctrlGroup ctrlSetPosition [_centerX - _width/2 * _input / 2, _centerY - _height, _width * _input, _height * 2]; +_ctrlGroup ctrlCommit 0; + +_y = 0; +_cnt = -1; +_controls = []; +for "_i" from 0 to (_input - 1) do { + _ctrl = _display ctrlCreate ["RscPicture", call Epoch_getIDC,_ctrlGroup]; + _cnt = _cnt + 1; + if (_cnt == (_input / 2)) then {_y = _height; _cnt = 0;}; + _ctrl ctrlSetPosition [_cnt * _width,_y,_width,_height]; + _ctrl ctrlSetText "#(rgb,8,8,3)color(1,1,1,1)"; + _ctrl ctrlCommit 0; + _ctrl ctrlSetFade 1-(random 0.2); + [_ctrl, 1-(random 0.2),0] call BIS_fnc_ctrlSetScale; + + _controls set [_i, _ctrl]; +}; + +_ctrlText = _display ctrlCreate ["rmx_ST1", call Epoch_getIDC,_ctrlGroup]; +_ctrlText ctrlSetStructuredText _text; +_ctrlText ctrlSetPosition [0, 0, _width * _input /2, _height * 2]; +_ctrlText ctrlCommit 0; + + +_add = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]]; +_add pushBack _ctrlGroup; +uiNamespace setVariable ["rmx_var_dynamicTextCTRL",_add]; + +[_time,_ctrlGroup,_ctrlText,_controls] spawn { + disableSerialization; + params ["_time","_ctrlGroup","_ctrlText","_controls"]; + + _tick = diag_tickTime; + while {(diag_tickTime - _tick) < _time} do { + { + _x ctrlSetFade 1-(random 0.2); + [_x, 1-(random 0.2), (random 1)] call BIS_fnc_ctrlSetScale; + } forEach _controls; + uiSleep 0.5; + }; + _arr = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]]; + _del = + { + if (str _x isEqualTo str _ctrlGroup) exitWith {_forEachIndex}; + 0 + } forEach _arr; + + _arr deleteAt _del; + uiNamespace setVariable ["rmx_var_dynamicTextCTRL",_arr]; + uiSleep 0.01; + { + _x call Epoch_getIDC; + ctrlDelete _x; + } forEach (_controls + [_ctrlText] + [_ctrlGroup]); +}; + +if !(_alreadyEnabled) then { + uiNamespace setVariable ["rmx_var_dynamicText",true]; + [ctrlPosition _ctrlGroup] spawn { + disableSerialization; + params ["_defaultPos"]; + _yPos = _defaultPos param [1]; + _height = _defaultPos param [3]; + while {uiNamespace getVariable ["rmx_var_dynamicText",false]} do { + _arr = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]]; + if (_arr isEqualTo []) exitWith {uiNamespace setVariable ["rmx_var_dynamicText",nil];}; + { + _xPos = (ctrlPosition _x) select 0; + _x ctrlSetPosition [_xPos,_yPos + _height * _forEachIndex]; + _x ctrlCommit 0; + } forEach _arr; + }; + }; +}; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/messaging/Epoch_message_old2.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/messaging/Epoch_message_old2.sqf new file mode 100644 index 0000000..a4362e1 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/messaging/Epoch_message_old2.sqf @@ -0,0 +1,113 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Description: + Displays custom text message to player, supports any variable and structured text + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/blob/release/Sources/epoch_code/gui/scripts/messaging/Epoch_message_old2.sqf + + Usage: + "TEST" call Epoch_message_old2 +*/ +//[[[cog import generate_private_arrays ]]] +private ["_c","_c2","_c3","_clr","_cmt","_cnt","_ct","_dsp","_height","_in","_timer","_w2","_width"]; +//[[[end]]] +#include "\A3\ui_f\hpp\defineCommonGrids.inc" + +_in = param [0, "No input given"]; +_timer = param [1, 2]; + +if !(_in isEqualType "STRING") then {_in = str _in}; + +if (isnil "rmx_var_dtMessageArr") then { + rmx_var_dtMessageArr = []; +}; + +if (!isnil "rmx_var_dtEnabled") exitWith { + if !([_in, _timer] in rmx_var_dtMessageArr) then //spam protection + { + rmx_var_dtMessageArr pushBack [_in, _timer]; + }; +}; +rmx_var_dtEnabled = true; +rmx_var_dtMessageArr pushBack [_in, _timer]; + +[GUI_GRID_W, GUI_GRID_H] spawn { + params ["_gridW","_gridH"]; + disableSerialization; + + _dsp = findDisplay 46; + + _c = _dsp ctrlCreate ["rmx_ST2", -8777]; + _c2 = _dsp ctrlCreate ["RscText", -8776]; + _c3 = _dsp ctrlCreate ["RscText", -8775]; + + _clr = call Epoch_getColorScheme; + + _c ctrlSetBackgroundColor [_clr select 0, _clr select 1, _clr select 2, 0.5]; + _c2 ctrlSetBackgroundColor _clr; + _c3 ctrlSetBackgroundColor _clr; + + //first animation + _width = 0.2 * _gridW; + _height = 2 * _gridH; + + _c ctrlSetPosition [0.5 - _gridW / 2,1,_gridW,_height]; + _c2 ctrlSetPosition[0.5 - _gridW / 2,1,_width,_height]; + _c3 ctrlSetPosition[0.5 + _gridW / 2,1,_width,_height]; + _c ctrlCommit 0; + _c2 ctrlCommit 0; + _c3 ctrlCommit 0; + + _cmt = 0.25; + + //Main queue + while {!(rmx_var_dtMessageArr isEqualTo [])} do + { + + _in = parseText (rmx_var_dtMessageArr select 0 select 0); + _timer = rmx_var_dtMessageArr select 0 select 1; + rmx_var_dtMessageArr deleteAt 0; + + _c ctrlSetStructuredText _in; + + _cnt = 0; + + { + _ct = if (_x in [65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90]) then {1} else {0.5}; + _cnt = _cnt +_ct; + } count (toArray str _in); + + _w2 = ((_cnt max 5) min 80) * _gridW; + + _c ctrlSetPosition [0.5 - _w2 / 2,1,_w2,_height]; + _c2 ctrlSetPosition[0.5 - _w2 / 2,1,_width,_height]; + _c3 ctrlSetPosition[0.5 + _w2 / 2,1,_width,_height]; + + _c ctrlCommit _cmt; + _c2 ctrlCommit _cmt; + _c3 ctrlCommit _cmt; + + uiSleep _timer; + }; + + //exit with animation + _c ctrlSetPosition [0.5 - _gridW / 2,1,_gridW,_height]; + _c2 ctrlSetPosition[0.5 - _gridW / 2,1,_width,_height]; + _c3 ctrlSetPosition[0.5 + _gridW / 2,1,_width,_height]; + _c ctrlCommit _cmt; + _c2 ctrlCommit _cmt; + _c3 ctrlCommit _cmt; + + uiSleep _cmt; + + ctrlDelete _c; + ctrlDelete _c2; + ctrlDelete _c3; + + rmx_var_dtEnabled = nil; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/messaging/Epoch_message_stack.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/messaging/Epoch_message_stack.sqf new file mode 100644 index 0000000..1e539e6 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/messaging/Epoch_message_stack.sqf @@ -0,0 +1,106 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Description: + Displays custom text message to player + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/blob/release/Sources/epoch_code/gui/scripts/messaging/Epoch_message_stack.sqf + + Usage: + "TEST" call Epoch_message_stack + + ["===================================",5,[[0,0,0,0.2],[1,0.5,0,1]]] call Epoch_message_stack; + ["World!",5,[[0,0,0,0.2],[1,1,1,1]]] call Epoch_message_stack; + ["Hello",5,[[0,0,0,0.2],[1,1,1,1]]] call Epoch_message_stack; + ["===================================",5,[[0,0,0,0.2],[1,0.5,0,1]]] call Epoch_message_stack; +*/ + +#include "\A3\ui_f\hpp\defineCommonGrids.inc" +_msg = param [0, "No input"]; +_time = param [1, 2]; +_customCol = param[2,[]]; +private["_bgCol","_txtCol"]; +if(_customCol isEqualTo [])then{ + _config = 'CfgEpochClient' call EPOCH_returnConfig; + _bgCol = getArray(_config >> "epochMessageBackgroundCol"); + _txtCol = getArray(_config >> "epochMessageTextCol"); + if !(_bgCol isEqualTypeAll 0)then{_bgCol = [0,0,0,0.2]}; + if !(_txtCol isEqualTypeAll 0)then{_txtCol = [1,1,1,0.95]}; +}else{ + _bgCol = if((_customCol select 0)isEqualTypeAll 0) then [{_customCol select 0},{_bgCol = [0,0,0,0.2]}]; + _txtCol = if((_customCol select 1)isEqualTypeAll 0) then [{_customCol select 1},{_txtCol = [1,1,1,0.95]}]; +}; +if !(_msg isEqualType "STRING") then { //Needed to remove quotations from strings + _msg = str (parseText str _msg); //Parses and converts text back to small string +}; + + +if !(isNil "rmx_var_msgStackQueue") exitWith {rmx_var_msgStackQueue pushBack [_msg, _time, [_bgCol,_txtCol]]}; + +rmx_var_msgStackQueue = [[_msg, _time, [_bgCol,_txtCol]] ]; + +[] spawn { + private ["_dsp"]; + + disableSerialization; + _dsp = findDisplay 46; + _yPos = 15; + _ySize = 2; + _cStartPos = [safeZoneX,((_yPos - _ySize) * GUI_GRID_H + GUI_GRID_Y),safeZoneW, _ySize * GUI_GRID_H]; + + _ctrlArr = [1]; + + _fnc_reorganizeCtrls = { + if !(_ctrlArr isEqualTo []) then { + { + _newPos = [safeZoneX,(((_yPos - 3) - (_ySize * _forEachIndex)) * GUI_GRID_H + GUI_GRID_Y),safeZoneW, _ySize * GUI_GRID_H]; + _c = _x select 0; + _c ctrlSetPosition _newPos; + _c ctrlCommit 0; + } forEach _ctrlArr; + }; + }; + + while {(count _ctrlArr) > 0} do { + if ((_ctrlArr select 0) isEqualTo 1) then {_ctrlArr = [];}; + if !(rmx_var_msgStackQueue isEqualTo []) then { + _msg = (rmx_var_msgStackQueue select 0 select 0); + _time = diag_tickTime + (rmx_var_msgStackQueue select 0 select 1); + _col = (rmx_var_msgStackQueue select 0)select 2; + rmx_var_msgStackQueue deleteAt 0; + + _c = _dsp ctrlCreate ["rmx_t1", call epoch_getIDC]; + _c ctrlSetBackgroundColor (_col select 0); + _c ctrlSetText _msg; + _c ctrlSetTextColor (_col select 1); + + _c ctrlSetPosition _cStartPos; + _c ctrlSetFade 1; + _c ctrlCommit 0; + + _c ctrlSetFade 0; + _c ctrlCommit 0.5; + + _ctrlArr pushBack [_c,_time]; + call _fnc_reorganizeCtrls; + }; + + { + _time = _x select 1; + _c = _x select 0; + if (_time <= diag_tickTime) then { + ctrlDelete _c; + [_c] call epoch_getIDC; + _ctrlArr deleteAt _forEachIndex; + call _fnc_reorganizeCtrls; + }; + } forEach _ctrlArr; + }; + rmx_var_msgStackQueue = nil; +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/missions/EPOCH_mission_description.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/missions/EPOCH_mission_description.sqf new file mode 100644 index 0000000..e90f9c1 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/missions/EPOCH_mission_description.sqf @@ -0,0 +1,32 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark + + Description: + Reload trader menu description, from config, when mission is clicked on. Filter out disabled missions. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_index","_menuCondition","_missionClasses","_missionDesc"]; +//[[[end]]] +_missionClasses = getArray(getMissionConfig "EpochMissionList" >> "traderMissionClasses"); + +_index = lbCurSel 1500; + +_menuCondition = getText(getMissionConfig "epochMissions" >> (_missionClasses select _index) >> "missionDeny"); +_missionDesc = getText(getMissionConfig "epochMissions" >> (_missionClasses select _index) >> "missionDesc"); + +if!(_menuCondition=="")then{ + if(call compile _menuCondition)then{ + _missionDesc = "NOT AVAILABLE - " + _missionDesc; + lbSetColor [1001, 0, [0.73,0.24,0.11,1] ] ; + }; +}; + +ctrlSetText [1001, _missionDesc]; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf new file mode 100644 index 0000000..d671fe5 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf @@ -0,0 +1,41 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark + + Description: + Loads trader menu with available missions from config. Applies conditions and tooltips. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf +*/ +private ["_lbl","_missionClasses","_missionName","_menuCondition","_toolTip","_uiNSTask"]; +params [["_currentTask",""]]; +_missionClasses = getArray(getMissionConfig "EpochMissionList" >> "traderMissionClasses"); +_uiNSTask = ""; +if (count EPOCH_ActiveTraderMission > 0) then { + _uiNSTask = EPOCH_ActiveTraderMission select 1; +}; +{ + _missionName = getText(getMissionConfig "epochMissions" >> _x >> "missionName"); + if!(_missionName == "")then{ + _lbl = lbAdd[1500, _missionName]; + lbSetValue[1500, _lbl, _forEachIndex]; + _toolTip = getText(getMissionConfig "epochMissions" >> _x >> "missionToolTip"); + _menuCondition = getText(getMissionConfig "epochMissions" >> _x >> "missionDeny"); + if!(_menuCondition=="")then{ + if(call compile _menuCondition)then{ + lbSetColor [1500, _lbl, [0.73,0.24,0.11,1] ] ; + _toolTip = getText(getMissionConfig "epochMissions" >> _x >> "missionDenyToolTip"); + }; + }; + if(_uiNSTask in getArray(getMissionConfig "epochMissions" >> _x >> "tasksList"))then{ + lbSetColor [1500, _lbl, [0.98,0.98,0.33,1]] ; + _toolTip = "CONTINUE - " + _toolTip; + }; + lbSetTooltip [1500, _lbl, _toolTip]; + }; +}forEach _missionClasses; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/EPOCH_postprocessAdjust.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/EPOCH_postprocessAdjust.sqf new file mode 100644 index 0000000..57b4fdb --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/EPOCH_postprocessAdjust.sqf @@ -0,0 +1,40 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + Adjusts PP created elsewhere (or by epoch_postprocessCreate) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/blob/release/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessAdjust.sqf + + Params: [Handle, speed integer, Effect array] + + Usage: [_handle, 2, [1]] call epoch_postprocessAdjust; //apply dynamic blur with animation of 2 seconds + [_handle, _speed, _effect] call epoch_postprocessAdjust; + + Default Engine values: + colorCorrections >> [1,1,0,0,0,0,0,0,0,0,1,0,0,0,0] + chromAberration >> [0,0,false] + filmGrain >> [0,0,1,0,0,false] + radialBlur >> [0,0,0,0] + wetdistortion >> [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + dynamicBlur >> [0] + colorInversion >> [0,0,0] +*/ +params [["_handle",666],["_animSpeed",666],["_effect",[]],["_fixBool",false]]; +//needed because PPs have variable array sizes +if ((_handle isEqualTo 666) || (_animSpeed isEqualTo 666) || (_effect isEqualTo [])) exitWith {hint "Wrong PPAdjust input"; false}; + +// fix any strings to bool +if (_fixBool) then { + _effect = _effect call EPOCH_fnc_arrayStringToBool; +}; + +_handle ppEffectEnable true; +_handle ppEffectAdjust _effect; +_handle ppEffectCommit _animSpeed; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/EPOCH_postprocessCreate.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/EPOCH_postprocessCreate.sqf new file mode 100644 index 0000000..aa0627c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/EPOCH_postprocessCreate.sqf @@ -0,0 +1,39 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + TODO: Make sure to use handle to be able to delete effect later + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/blob/release/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessCreate.sqf + + Params: [Name of PP, Priority] + + Usage: _handle = ["dynamicBlur",10] call epoch_postProcessCreate; + _handle = "dynamicBlur" call epoch_postProcessCreate; //not recommended, but ok for tests +*/ +private ["_priority","_hndl"]; +params [["_effect",""],["_prioIn",0]]; + +if (_effect isEqualTo "") exitWith {hint "Wrong PPcreate input"; false}; +if !(_effect in ["colorCorrections","chromAberration","filmGrain","radialBlur","wetdistortion","dynamicBlur","colorInversion"]) exitWith {hint format ["Wrong effect - %1",_effect]; false}; + +_priority = switch (_effect) do { + case "colorCorrections": {1501}; + case "chromAberration": {201}; + case "filmGrain": {2001}; + case "radialBlur": {101}; + case "wetdistortion": {301}; + case "dynamicBlur": {401}; + case "colorInversion": {2501}; +}; + +_hndl = ppEffectCreate [_effect,(_priority + _prioIn)]; +_hndl ppEffectEnable false; + +_hndl diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/EPOCH_postprocessDestroy.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/EPOCH_postprocessDestroy.sqf new file mode 100644 index 0000000..81b4c4f --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/EPOCH_postprocessDestroy.sqf @@ -0,0 +1,27 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Destroys single or multiple post process effects + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/blob/release/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessDestroy.sqf + + + + Params: single handle or array of handles + + Usage: _handle call epoch_postprocessDestroy; //single + [_handle] call epoch_postprocessDestroy; //array of handles + [_hndl_1,_hndl_2,_hndl_3,_hndl_4] call epoch_postprocessDestroy; //array of singles +*/ + +if !(_this isEqualType []) then { + _this = [_this] +}; +ppEffectDestroy _this; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/Epoch_setDrunk.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/Epoch_setDrunk.sqf new file mode 100644 index 0000000..86b3d22 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/Epoch_setDrunk.sqf @@ -0,0 +1,93 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Drunk effects + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/blob/release/Sources/epoch_code/gui/scripts/post_process/Epoch_setDrunk.sqf + + Usage: + 0.5 call epoch_setDrunk; + [0.2, _time] call epoch_setDrunk; + Notes: + Drunk levels 1-9, 0 to disable + Use low times, wet distortion does not work well when animated over time + To reuse code in a new PP function, adjust _priority so they don't overwrite each other +*/ +private ["_priority","_wd","_db"]; +params [["_level",0,[0]],["_speed",0,[0]]]; + +if (isNil "rmx_var_drunkHandles") then { + _priority = 15; + _wd = ["wetdistortion",_priority] call epoch_postProcessCreate; + _db = ["dynamicBlur",_priority] call epoch_postProcessCreate; + rmx_var_drunkHandles = [_wd,_db]; + + // Preload defaults + [(rmx_var_drunkHandles select 0), 0, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), 0, [0]] call epoch_postprocessAdjust; +}; + +switch _level do { + case 0: + { + (rmx_var_drunkHandles select 0) ppEffectEnable false; + (rmx_var_drunkHandles select 1) ppEffectEnable false; + }; + case 0.1: + { + [(rmx_var_drunkHandles select 0), _speed, [-1,0.0144629,0,1,0,-0.551644,0.0309715,0.202484,0,0,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0]] call epoch_postprocessAdjust; + }; + case 0.2: + { + [(rmx_var_drunkHandles select 0), _speed, [-1,0.0144629,0,1,0,-0.551644,0.0309715,0.390503,0,0,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0]] call epoch_postprocessAdjust; + }; + case 0.3: + { + [(rmx_var_drunkHandles select 0), _speed, [-1,0.0144629,0,1,0,-0.53718,-0.157049,0.390503,-1,0,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0]] call epoch_postprocessAdjust; + }; + case 0.4: + { + [(rmx_var_drunkHandles select 0), _speed, [-1,0.0144629,0,1,0,-0.53718,-0.157049,0.390503,-1,1,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0]] call epoch_postprocessAdjust; + }; + case 0.5: + { + [(rmx_var_drunkHandles select 0), _speed, [1,0.0144616,0.0144629,1,0,-0.53718,-0.157049,0.390503,-1,1,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0.146676]] call epoch_postprocessAdjust; + }; + case 0.6: + { + [(rmx_var_drunkHandles select 0), _speed, [1,0.0144616,0.0144629,1,0,-0.53718,-0.157049,0.390503,-1,1,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0.334697]] call epoch_postprocessAdjust; + }; + case 0.7: + { + [(rmx_var_drunkHandles select 0), _speed, [1,0.0144616,0.0289258,1,0,-0.53718,-0.157049,0.390503,-1,1,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0.334697]] call epoch_postprocessAdjust; + }; + case 0.8: + { + [(rmx_var_drunkHandles select 0), _speed, [1,0.0289245,0.0289258,1,0,-0.53718,-0.157049,0.390503,-1,1,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0.334697]] call epoch_postprocessAdjust; + }; + case 0.9: + { + [(rmx_var_drunkHandles select 0), _speed, [1,0,-0.0867792,0.435939,-0.592987,-0.739664,-1,0.144629,-1,0.103286,0.247918,0,0,1,-0.378086]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0.0940112]] call epoch_postprocessAdjust; + }; + case 1: + { + [(rmx_var_drunkHandles select 0), _speed, [1,0.0723131,-0.0433885,1,-0.592987,-0.811979,-1,0.882248,-1,1,1,0,0,0.373996,-1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0.151864]] call epoch_postprocessAdjust; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/Epoch_setRadiation.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/Epoch_setRadiation.sqf new file mode 100644 index 0000000..888bbe3 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/post_process/Epoch_setRadiation.sqf @@ -0,0 +1,102 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Radiation effects [Temporary test] + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/blob/release/Sources/epoch_code/gui/scripts/post_process/Epoch_setRadiation.sqf + + Usage: + 0.5 call epoch_setRadiation; + [0.2, _time] call epoch_setRadiation; + Notes: + Radiation levels 1-9, 0 to disable + To reuse code in a new PP function, adjust _priority so they don't overwrite each other +*/ +//[[[cog import generate_private_arrays ]]] +private ["_cc","_ci","_fg","_priority"]; +//[[[end]]] +params [["_level",0,[0]],["_speed",0,[0]] ]; + +if (isNil "rmx_var_RadiationHandles") then { + _priority = 16; + _fg = ["filmGrain",_priority] call epoch_postProcessCreate; + _cc = ["colorCorrections",_priority] call epoch_postProcessCreate; + _ci = ["colorInversion",_priority] call epoch_postProcessCreate; + rmx_var_RadiationHandles = [_fg,_cc,_ci]; + + // Preload defaults + [(rmx_var_RadiationHandles select 0), 0, [0.005,1.25,2.01,0.75,1.0,true]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 1), 0, [1,1,0,[0,0,0,0],[1,1,1,1],[0.299,0.587,0.114,0],[-1,-1,0,0,0,0,0]]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 2), 0, [0,0,0]] call epoch_postprocessAdjust; +}; + +switch _level do { + case 0; + case 0.1: + { + (rmx_var_RadiationHandles select 0) ppEffectEnable false; + (rmx_var_RadiationHandles select 1) ppEffectEnable false; + (rmx_var_RadiationHandles select 2) ppEffectEnable false; + }; + case 0.2: + { + [(rmx_var_RadiationHandles select 0), _speed, [0.185533,1,1,1,1,true]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 1), _speed, [1,1,0,0,0,0,0,0,0,0,1,0,0,0,0]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 2), _speed, [0,0,0]] call epoch_postprocessAdjust; + }; + case 0.3: + { + [(rmx_var_RadiationHandles select 0), _speed, [0.330168,1,1,1,1,true]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 1), _speed, [1,1,0,0,0,0,0,0,0,0,1,0,0,0,0]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 2), _speed, [0,0,0]] call epoch_postprocessAdjust; + }; + case 0.4: + { + [(rmx_var_RadiationHandles select 0), _speed, [0.330168,1,1,1,1,true]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 1), _speed, [1,1,0,1,0,0,0.32542,1,0,0,1,0,0,0,0.486561,0.710738,0.848138,0,0,0,0.231408,1]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 2), _speed, [0,0,0]] call epoch_postprocessAdjust; + }; + case 0.5: + { + [(rmx_var_RadiationHandles select 0), _speed, [0.330168,1,1,1,1,true]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 1), _speed, [1,1,0,1,0,0,0.32542,1,0,0,1,0,0,0,0.486561,0.710738,0.848138,0,0,0,0.231408,1]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 2), _speed, [0,0,0.130168]] call epoch_postprocessAdjust; + }; + case 0.6: + { + [(rmx_var_RadiationHandles select 0), _speed, [0.330168,1,1,1,1,true]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 1), _speed, [1,1,0,1,0,0,0.32542,1,0,0,1,0,0,0,0.486561,0.710738,0.848138,0,0,0,0,1]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 2), _speed, [0,0,0.216946]] call epoch_postprocessAdjust; + }; + case 0.7: + { + [(rmx_var_RadiationHandles select 0), _speed, [0.330168,1,1,1,1,true]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 1), _speed, [1,0.493791,0,1,0,0,0.32542,1,0,0,1,0,0,0,0.486561,0.710738,0.848138,0,0,0,0,1]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 2), _speed, [0,0,0.368809]] call epoch_postprocessAdjust; + }; + case 0.8: + { + [(rmx_var_RadiationHandles select 0), _speed, [0.330168,1,1,1,1,true]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 1), _speed, [1,0.247919,0,1,0,0,0.32542,1,0,0,1,0,0,0,0.486561,0.710738,0.848138,0,0,0,0,1]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 2), _speed, [0,0.108473,0.46282]] call epoch_postprocessAdjust; + }; + case 0.9: + { + [(rmx_var_RadiationHandles select 0), _speed, [0.330168,1,1,1,1,true]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 1), _speed, [1,0,0,1,0,0,0.32542,1,0,0,1,0,0,0,0.486561,0.710738,0.848138,0,0,0,0,1]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 2), _speed, [0,0.245873,0.368809]] call epoch_postprocessAdjust; + }; + case 1: + { + [(rmx_var_RadiationHandles select 0), _speed, [0.330168,1,1,1,1,true]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 1), _speed, [1,0,0,1,0,0,0.32542,1,0,0,1,0,0,0,0.486561,0.710738,0.848138,0,0,0,0,0.41943]] call epoch_postprocessAdjust; + [(rmx_var_RadiationHandles select 2), _speed, [0,0.361578,0.368809]] call epoch_postprocessAdjust; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf new file mode 100644 index 0000000..2f8ff1d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf @@ -0,0 +1,107 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Attach a cooldown to a 3D world space that will be visible on a UI + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf + + Usage: + [_pos, _time, _distance, "myVariable"] call Epoch_gui3DCooldown; + + Position is a world position + Time is time it takes for cooldown to do full animation + Distance (optional) is used to exit cooldown if distance from player is greater than this value, default 10m + + Variable name is optional, but it allows you to remove cooldown externally: + should be a global boolean + must exist + must be true +*/ + +_this spawn { + private ["_error","_pos","_time","_distance","_bool","_display","_ctrlPos","_ctrlGrp","_rnd","_var","_id","_ctrl","_partTime","_ct","_cl"]; + disableSerialization; + params + [ + ["_pos", false, [[]], 3], + ["_time", false, [0]], + ["_distance", 10, [0]], + ["_bool", "", [""]] + ]; + + _error = "Wrong params, requires [position, time, distance (optional), variable name (bool, optional)]"; + + if (_pos isEqualType true) exitWith {hint _error}; + if (_time isEqualType true) exitWith {hint _error}; + + _display = findDisplay 46; + _ctrlPos = [0.469062 * safezoneW + safezoneX, 0.445 * safezoneH + safezoneY, 0.061875 * safezoneW, 0.11 * safezoneH]; + + _ctrlGrp = _display ctrlCreate ["RscControlsGroupNoScrollbars",call epoch_getIDC]; + _ctrlGrp ctrlSetPosition _ctrlPos; + _ctrlGrp ctrlCommit 0; + + _rnd = format ["rmx_var_temp%1%2",floor random 100, selectRandom ["A","B","C","D","E","F"]]; + uiNamespace setVariable [_rnd,[_ctrlGrp, _pos,(ctrlPosition _ctrlGrp),_distance/2]]; + _var = format ["uiNamespace getVariable '%1'",_rnd]; + + _id = addMissionEventHandler ['Draw3D',_var + "call Epoch_gui3DCooldownEH;"]; + + _ctrl = []; + for "_i" from 0 to 9 do { + _ct = _display ctrlCreate ["RscPicture",call epoch_getIDC,_ctrlGrp]; + _ct ctrlSetText format ["x\addons\a3_epoch_code\Data\UI\cooldown\%1.paa",_i]; + _ct ctrlSetPosition [0.0375,0.05,(_ctrlPos select 2) / 2,(_ctrlPos select 3) / 2]; + _ct ctrlSetFade 1; + _ct ctrlCommit 0; + _ctrl set [_i,_ct]; + }; + + _ctrl2 = _display ctrlCreate ["RscText",call epoch_getIDC,_ctrlGrp]; + _ctrl2 ctrlSetPosition [0.0375,0,_ctrlPos select 2,_ctrlPos select 3]; + _ctrl2 ctrlCommit 0; + + _partTime = _time / 10; + _continue = true; + _tock = diag_tickTime; + + for "_i" from 0 to 9 do { + _cl = _ctrl select _i; + _cl ctrlSetFade 0; + _cl ctrlSetPosition [0,0,_ctrlPos select 2,_ctrlPos select 3]; + _cl ctrlCommit _partTime; + + _ctrl2 ctrlSetTextColor [1-(_i / 10),_i / 10,0,1]; + + _tick = diag_tickTime; + + while {(diag_tickTime - _tick) < _partTime} do { + if !(missionNamespace getVariable [_bool, true]) exitWith {_continue = false}; + if ((player distance _pos) > _distance) exitWith {_continue = false}; + _ctrl2 ctrlSetText ([1 + _time - (diag_tickTime - _tock),"MM:SS"] call BIS_fnc_secondsToString); + }; + + if !(_continue) exitWith {}; + }; + removeMissionEventHandler ["Draw3D", _id]; + uiNamespace setVariable [_rnd, nil]; + { + _x call epoch_getIDC; + ctrlDelete _x; + } forEach _ctrl; + + _ctrl2 call epoch_getIDC; + _ctrlGrp call epoch_getIDC; + + ctrlDelete _ctrl2; + ctrlDelete _ctrlGrp; +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf new file mode 100644 index 0000000..5f23c36 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf @@ -0,0 +1,25 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + TODO: Description + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf +*/ +private ["_pos2","_scale"]; +params ["_ctrlGrp","_loc","_pos","_dst"]; +_pos2 = worldToScreen _loc; +if (_pos2 isEqualTo []) then {_pos2 = [-2,-2]}; +_pos set [0, (_pos2 select 0)-((_pos select 2)/2)]; +_pos set [1, (_pos2 select 1)-((_pos select 3)/2)]; +_ctrlGrp ctrlSetPosition _pos; +_scale = linearConversion [0, _dst, player distance _loc, 0, 1, false]; +_ctrlGrp ctrlSetFade _scale; +_ctrlGrp ctrlCommit 0; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPos.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPos.sqf new file mode 100644 index 0000000..bcce687 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPos.sqf @@ -0,0 +1,64 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Attaches picture and text to model's local space and projects on UI. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/blob/release/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPos.sqf + + Example: + [_object, _time, _image, _text, _objectSpace, _distance, _externalBool] call epoch_gui3dModelPos; +*/ +#include "\A3\ui_f\hpp\defineCommonGrids.inc" +_this spawn { + private ["_obj","_loc","_time","_pic","_txt","_dst","_bool","_display","_ctrl","_rnd","_var","_imgParsed","_txtParsed","_id","_tick"]; + disableSerialization; + params + [ + ["_obj", objNull, [objNull]], + ["_time", 10, [0]], + ["_pic", "#(argb,8,8,3)color(0,0,0,0)", [""]], + ["_txt", "", [""]], + ["_loc", [0,0,0], [[]]], + ["_dst", 10, [0]], + ["_bool", "", [""]] + ]; + + if (_obj isEqualTo objNull) exitWith {hint "Wrong params, missing object"}; + + _display = findDisplay 46; + + _ctrl = _display ctrlCreate ["RscStructuredText",call epoch_getIDC]; + _ctrl ctrlSetPosition [10 * GUI_GRID_W + GUI_GRID_X,10 * GUI_GRID_H + GUI_GRID_Y,10 * GUI_GRID_W,10 * GUI_GRID_H]; + _ctrl ctrlCommit 0; + + _imgParsed = parseText format ["",_pic]; + _txtParsed = parseText format ["%1",_txt]; + + _ctrl ctrlSetStructuredText (composeText [_imgParsed, parseText "
", _txtParsed]); + + _rnd = format ["rmx_var_temp%1%2",floor random 100, selectRandom ["A","B","C","D","E","F"]]; + uiNamespace setVariable [_rnd,[_ctrl, _obj, _loc, (ctrlPosition _ctrl),_dst/2]]; + _var = format ["uiNamespace getVariable '%1'",_rnd]; + + _id = addMissionEventHandler ['Draw3D',_var + "call epoch_gui3dModelPosEH;"]; + + _tick = diag_tickTime; + while {(diag_tickTime - _tick) < _time} do { + if !(missionNamespace getVariable [_bool, true]) exitWith {}; + if ((player distance (_obj modelToWorld _loc)) > _dst) exitWith {}; + }; + + removeMissionEventHandler ["Draw3D", _id]; + uiNamespace setVariable [_rnd, nil]; + _ctrl call epoch_getIDC; + ctrlDelete _ctrl; +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf new file mode 100644 index 0000000..17844bd --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf @@ -0,0 +1,26 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + TODO: Description + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf +*/ +private ["_pos2","_m2w","_scale"]; +params ["_ctrl", "_obj", "_loc","_pos","_dst"]; +_m2w = _obj modelToWorld _loc; +_pos2 = worldToScreen _m2w; +if (_pos2 isEqualTo []) then {_pos2 = [-2,-2]}; +_pos set [0, (_pos2 select 0)-((_pos select 2)/2)]; +_pos set [1, (_pos2 select 1)-((_pos select 3)/2)]; +_ctrl ctrlSetPosition _pos; +_scale = linearConversion [0, _dst, player distance _m2w, 0, 1, false]; +_ctrl ctrlSetFade _scale; +_ctrl ctrlCommit 0; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf new file mode 100644 index 0000000..690719c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf @@ -0,0 +1,62 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Attaches picture and text to World location and projects on UI. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf + + Example: + [_location, _time, _image, _text, _distance, _externalBool] call epoch_gui3dWorldPos; +*/ +#include "\A3\ui_f\hpp\defineCommonGrids.inc" +_this spawn { + private ["_loc","_time","_pic","_txt","_dst","_bool","_display","_ctrl","_rnd","_var","_imgParsed","_txtParsed","_id","_tick"]; + disableSerialization; + params + [ + ["_loc", [0,0,0], [[]]], + ["_time", 10, [0]], + ["_pic", "#(argb,8,8,3)color(0,0,0,0)", [""]], + ["_txt", "", [""]], + ["_dst", 10, [0]], + ["_bool", "", [""]] + ]; + + _display = findDisplay 46; + + _ctrl = _display ctrlCreate ["RscStructuredText",call epoch_getIDC]; + _ctrl ctrlSetPosition [10 * GUI_GRID_W + GUI_GRID_X,10 * GUI_GRID_H + GUI_GRID_Y,10 * GUI_GRID_W,10 * GUI_GRID_H]; + _ctrl ctrlCommit 0; + + _imgParsed = parseText format ["",_pic]; + _txtParsed = parseText format ["%1",_txt]; + + _ctrl ctrlSetStructuredText (composeText [_imgParsed, parseText "
", _txtParsed]); + + _rnd = format ["rmx_var_temp%1%2",floor random 100, selectRandom ["A","B","C","D","E","F"]]; + uiNamespace setVariable [_rnd,[_ctrl, _loc,(ctrlPosition _ctrl),_dst/2]]; + _var = format ["uiNamespace getVariable '%1'",_rnd]; + + _id = addMissionEventHandler ['Draw3D',_var + "call epoch_gui3dWorldPosEH;"]; + + + _tick = diag_tickTime; + while {(diag_tickTime - _tick) < _time} do { + if !(missionNamespace getVariable [_bool, true]) exitWith {}; + if ((player distance _loc) > _dst) exitWith {}; + }; + + removeMissionEventHandler ["Draw3D", _id]; + uiNamespace setVariable [_rnd, nil]; + _ctrl call epoch_getIDC; + ctrlDelete _ctrl; +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf new file mode 100644 index 0000000..c45fd9c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf @@ -0,0 +1,25 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + TODO: Description + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf +*/ +private ["_pos2","_scale"]; +params ["_ctrl","_loc","_pos","_dst"]; +_pos2 = worldToScreen _loc; +if (_pos2 isEqualTo []) then {_pos2 = [-2,-2]}; +_pos set [0, (_pos2 select 0)-((_pos select 2)/2)]; +_pos set [1, (_pos2 select 1)-((_pos select 3)/2)]; +_ctrl ctrlSetPosition _pos; +_scale = linearConversion [0, _dst, player distance _loc, 0, 1, false]; +_ctrl ctrlSetFade _scale; +_ctrl ctrlCommit 0; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/init/both_init.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/init/both_init.sqf new file mode 100644 index 0000000..12e4d08 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/init/both_init.sqf @@ -0,0 +1,104 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Initalize variables used client side and server side + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/init/both_init.sqf +*/ +//[[[cog import generate_private_arrays ]]] +private ["_communityStatsInit","_customVarsInit","_dynSimToggle","_JammerConfig","_JammerClass","_preview"]; +//[[[end]]] + +// Check if Advanced Vehicle Repair is enabled +if (["CfgEpochClient", "UseAdvancedVehicleRepair", true] call EPOCH_fnc_returnConfigEntryV2) then { + EPOCH_AdvancedVehicleRepair_Enabled = true; + diag_log "Epoch: Advanced Vehicle Repair Enabled"; +} else { + EPOCH_AdvancedVehicleRepair_Enabled = false; +}; + +// Init Custom vars +EPOCH_customVars = []; +EPOCH_defaultVars = []; +EPOCH_customVarLimits = []; +EPOCH_customVarsDefaults = [ + ["Temp",98.6,[106.7,95]], + ["Hunger",5000,[5000,0]], + ["Thirst",2500,[2500,0]], + ["AliveTime",0,[0,0]], + ["Energy",0,[2500,0]], + ["Wet",0,[100,0]], + ["Soiled",0,[100,0]], + ["Immunity",0,[100,0]], + ["Toxicity",0,[100,0]], + ["Stamina",100,["EPOCH_playerStaminaMax",0]], + ["Crypto",0,[250000,0]], + ["HitPoints",[0,0,0,0],[1,1,1,1]], + ["BloodP",100,[190,0]], + ["SpawnArray",[],[]], + ["NotUsed",0,[50000,-50000]], + ["Alcohol",0,[100,0]], + ["Radiation",0,[100,0]], + ["Nuisance",0,[100,0]], + ["MissionArray",[],[]] +]; +_customVarsInit = ["CfgEpochClient", "customVarsDefaults", EPOCH_customVarsDefaults] call EPOCH_fnc_returnConfigEntryV2; +EPOCH_customVars = _customVarsInit apply {_x param [0,""]}; +EPOCH_defaultVars = _customVarsInit apply {_x param [1,0]}; +EPOCH_customVarLimits = _customVarsInit apply {_x param [2,[]]}; +EPOCH_customVarCount = count EPOCH_customVars; + +// Init Community Stats +EPOCH_communityStats = []; +EPOCH_defaultStatVars = []; +EPOCH_communityStatsLimits = []; +_communityStatsInit = ["CfgEpochClient", "defineCommunityStats", []] call EPOCH_fnc_returnConfigEntryV2; +EPOCH_communityStats = _communityStatsInit apply {_x param [0,""]}; +EPOCH_defaultStatVars = _communityStatsInit apply {_x param [1,0]}; +EPOCH_communityStatsLimits = _communityStatsInit apply {_x param [2,[]]}; +EPOCH_communityStatsCount = count EPOCH_communityStats; + +//GroupSize (number) // Price (String) +EPOCH_group_upgrade_lvl = ["CfgEpochClient", "group_upgrade_lvl", [4,"100",6,"300",8,"500",10,"1000",12,"1500",13,"1750",14,"2000",15,"3000",16,"5000"]] call EPOCH_fnc_returnConfigEntryV2; + +// disable remote sensors on server and client as all Epoch AI is local to the side controlling it. +disableRemoteSensors (["CfgEpochClient", "disableRemoteSensors", true] call EPOCH_fnc_returnConfigEntryV2); + +// preload multiple used Jammer Configs +EPOCH_JammerClasses = []; +EPOCH_JammerGhosts = []; +EPOCH_MaxJammerRange = 75; +_JammerConfig = (getmissionconfig "CfgEpochClient" >> "CfgJammers"); +if !(isclass _JammerConfig) exitwith { + diag_log "EPOCH_debug: Error: No Jammerclasses defined in CfgEpochClient"; +}; +{ + private ["_JammerRangeX"]; + EPOCH_JammerClasses pushback (configname _x); + _JammerRangeX = getnumber (_x >> "buildingJammerRange"); + if (_JammerRangeX > EPOCH_MaxJammerRange) then { + EPOCH_MaxJammerRange = _JammerRangeX; + }; +} foreach ("true" configClasses _JammerConfig); +if (EPOCH_JammerClasses isEqualTo []) then { + diag_log "EPOCH_debug: Error: Jammerconfig in CfgEpochClient seems to be wrong"; +}; +{ + _JammerClass = _x; + { + _preview = gettext (getmissionconfig "CfgBaseBuilding" >> _JammerClass >> _x); + if !(_preview isEqualTo "" || _preview isEqualTo _JammerClass) then { + EPOCH_JammerGhosts pushBackUnique _preview; + }; + } foreach ["GhostPreview","simulClass"]; +} foreach EPOCH_JammerClasses; +EPOCH_JammerClasses = compilefinal (str EPOCH_JammerClasses); +EPOCH_MaxJammerRange = compilefinal (str EPOCH_MaxJammerRange); +EPOCH_JammerGhosts = compilefinal (str EPOCH_JammerGhosts) \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/init/client_init.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/init/client_init.sqf new file mode 100644 index 0000000..65e1e77 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/init/client_init.sqf @@ -0,0 +1,110 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Initalize variables used client side and start login FSM + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/init/client_init.sqf +*/ +EPOCH_Vehicle_MaintainLock = false; +EPOCH_CraftingItem = ""; +EPOCH_ESP_TARGETS = []; +EPOCH_ESPMAP_TARGETS = []; +EPOCH_ESPGROUPS = []; +EPOCH_ESPGROUPCOLORS = []; +EPOCH_ESP_PLAYER = false; +EPOCH_ESP_VEHICLES = false; +EPOCH_ESP_VEHICLEPLAYER = []; +EPOCH_group_level_img = ["x\addons\a3_epoch_code\data\owner.paa", "x\addons\a3_epoch_code\data\mod.paa", "x\addons\a3_epoch_code\data\member.paa"]; +if (isNil 'EPOCH_diag_fps') then { + EPOCH_diag_fps = 0; +}; +EPOCH_lastTrash = diag_tickTime; +EPOCH_tradeDone = false; +EPOCH_bankBalance = 0; +EPOCH_antiWallCount = 0; +EPOCH_lastTargetTime = diag_tickTime; +EPOCH_arr_countdown = []; +EP_light = objNull; +EPOCH_p2ptradeTarget = objNull; +EPOCH_Holstered = ""; +Epoch_invited_GroupUID = ""; +Epoch_invited_GroupName = ""; +Epoch_invited_GroupUIDs = []; +Epoch_invited_GroupUIDsPrev = []; +Epoch_my_Group = []; +Epoch_invited_tempGroupUID = ""; +Epoch_invited_tempGroupName = ""; +Epoch_invited_tempGroupUIDs = []; +Epoch_invited_tempGroupUIDsPrev = []; +Epoch_my_tempGroup = []; +EPOCH_prevOffer = []; +EPOCH_drawIcon3d = false; +EPOCH_velTransform = false; +EPOCH_stabilityTarget = objNull; +EPOCH_currentTarget = objNull; +EPOCH_currentTargetMode = 0; +EPOCH_LootedBlds = []; +EPOCH_lootObjects = []; +EPOCH_soundLevel = 1; +EPOCH_arr_interactedObjs = []; +EPOCH_buildOption = 0; +EPOCH_nearestLocations = []; +EPOCH_lastFiredLocation = []; +EPOCH_IsAutoRunning = false; +EPOCH_Earplugsin = false; +EPOCH_LastAutoRunKeyPressed = diag_ticktime; +EPOCH_PlayerMarkerOn = false; +EPOCH_DeathMarkerOn = false; + +//Radiation +EPOCH_geiger_shown = false; +EPOCH_geiger_mute_counter = true; +EPOCH_geiger_mute_warning = true; +EPOCH_ambientRadiation = 0; //TODO: needs to go server side. Adds constant incremental radiation to all players. Use in special events. + +rmx_var_drag_MouseDown = false; +rmx_var_dynamicHUD_groups = []; +rmx_var_dynamicHUD_groupCTRL = []; + +//Favorites bar +EPOCH_favBar_itemConsumed = false; +rmx_var_favBar_Item = ""; +EPOCH_modKeys = [false,false,false]; + +["EPOCH_onEachFrame", "onEachFrame", EPOCH_onEachFrame] call BIS_fnc_addStackedEventHandler; + +// Custom Keys +EPOCH_keysActionPressed = false; //prevents EH spam +0 call EPOCH_clientKeyMap; + +// load some frequently used configs to variables +EPOCH_maxBuildingHeight = ["CfgEpochClient", "maxBuildingHeight", 100] call EPOCH_fnc_returnConfigEntryV2; +EPOCH_MaxBuildingTilt = ["CfgEpochClient", "MaxBuildingTilt", 180] call EPOCH_fnc_returnConfigEntryV2; +Epoch_NuisanceMulti = ["CfgEpochClient", "NuisanceMulti", 0.5] call EPOCH_fnc_returnConfigEntryV2; + +// Use Eventhandler "Fired" on Reviver instead of Eventhandler "HandeDamage" on Client to be revived for Heal / Revive Player +EPOCH_OldRevive = ["CfgEpochClient", "UseOldRevive", false] call EPOCH_fnc_returnConfigEntryV2; + +//ON INIT and RESPAWN +call EPOCH_clientInit; + +[] execFSM "epoch_code\system\player_login.fsm"; + +if (isclass (configFile >> "CfgPatches" >> "ace_common")) then { + if (["CfgEpochClient", "DisableDoorInteractForACE", true] call EPOCH_fnc_returnConfigEntryV2) then { + [] spawn { + private _start = diag_ticktime; + waituntil {!isnil "MACRO_DOOR_REACH_DISTANCE" || diag_ticktime - _start > 90}; + MACRO_DOOR_REACH_DISTANCE = -1; + }; + }; +}; + +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/init/fn_init.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/init/fn_init.sqf new file mode 100644 index 0000000..059d439 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/init/fn_init.sqf @@ -0,0 +1,41 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Initalize both init and run custom client function compiler + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/init/fn_init.sqf +*/ +if !(isNil "Epoch_Survival_Started") exitWith { false }; +Epoch_Survival_Started = true; + +private _selectedFunction = "CfgClientFunctions"; +if (isDedicated) then { + // dedicated server + _selectedFunction = "CfgServerFunctions"; + call compile preprocessFileLineNumbers "epoch_code\init\both_init.sqf"; +} else { + if (hasInterface) then { + // all players + call compile preprocessFileLineNumbers "epoch_code\init\both_init.sqf"; + if (isServer) then { + // listen server host + _selectedFunction = "CfgEpochListenServerFunctions"; + } else { + // all players + _selectedFunction = "CfgClientFunctions"; + }; + } else { + // Headless Clients + _selectedFunction = "CfgEpochClientHCFunctions"; + }; +}; +diag_log format["Loading Functions: %1",_selectedFunction]; +_selectedFunction call EPOCH_fnc_compiler; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/init/fn_postinit.sqf b/Server/mpmissions/epoch.Bornholm/epoch_code/init/fn_postinit.sqf new file mode 100644 index 0000000..d0f1bb6 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/init/fn_postinit.sqf @@ -0,0 +1,39 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Initalize Player + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/init/fn_postinit.sqf +*/ +if (isDedicated) then { + // dedicated server + call compile preprocessFileLineNumbers "\epoch_server\init\server_init.sqf"; +} else { + if (hasInterface) then { + + if (isMultiplayer) then { + // start multiplayer game + call compile preprocessFileLineNumbers "epoch_code\init\client_init.sqf"; + }; + + if (isServer) then { + // listen server host + + } else { + // all players + + + }; + } else { + // Headless Clients + + }; +}; +true diff --git a/Server/mpmissions/epoch.Bornholm/epoch_code/license.txt b/Server/mpmissions/epoch.Bornholm/epoch_code/license.txt new file mode 100644 index 0000000..35440e4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_code/license.txt @@ -0,0 +1,9 @@ +Epoch Mod for Arma 3 +http://epochmod.com +by Epoch Mod Team +https://github.com/EpochModTeam/Epoch + +The contents of this pbo are under the following license: +http://www.bistudio.com/community/licenses/arma-public-license-share-alike + +Keep this file and file headers with attribution intact for proper use. \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp new file mode 100644 index 0000000..c990a58 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp @@ -0,0 +1,72 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + Action Menu Core Config + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp +*/ + +class CfgActionMenu +{ + class variableDefines //must be global, nil when menu closes + { + dyna_cursorTarget = "([10] call EPOCH_fnc_cursorTarget)"; + dyna_cursorTargetType = "typeOf ([10] call EPOCH_fnc_cursorTarget)"; + dyna_inVehicle = "vehicle player != player"; + dyna_IsDriver = "dyna_inVehicle && player == (driver (vehicle player))"; + dyna_itemsPlayer = "items player"; + dyna_magazinesPlayer = "magazines player"; + dyna_assigneditems = "assignedItems player"; + dyna_sizeOf = "((sizeOf dyna_cursorTargetType/2) max 6) min 30"; + dyna_distance = "(player distance dyna_cursorTarget) <= dyna_sizeOf"; + + dyna_buildMode = "([10] call EPOCH_fnc_cursorTarget) call EPOCH_checkBuild;"; + dyna_isVehicle = "if (!(isNull dyna_cursorTarget) && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'LandVehicle') || (dyna_cursorTarget isKindOf 'Air') || (dyna_cursorTarget isKindOf 'Ship') || (dyna_cursorTarget isKindOf 'Tank'))} else {false}"; + dyna_isTrader = "if (!(isNull dyna_cursorTarget) && alive dyna_cursorTarget) then {((dyna_cursorTarget != player) && (!isPlayer dyna_cursorTarget) && ((dyna_cursorTarget getVariable['AI_SLOT', -1]) != -1))} else {false}"; + dyna_isPlayer = "if (!(isNull dyna_cursorTarget) && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'Man') && (dyna_cursorTarget != player) && (isPlayer dyna_cursorTarget))} else {false}"; + dyna_isDeadPlayer = "if (!(isNull dyna_cursorTarget) && !(alive dyna_cursorTarget)) then {(dyna_cursorTargetType in ['Epoch_Male_F','Epoch_Female_F'])} else {false}"; + dyna_canAcceptTrade = "if (!(isNull EPOCH_pendingP2ptradeTarget) && alive EPOCH_pendingP2ptradeTarget) then {((EPOCH_pendingP2ptradeTarget isKindOf 'Man') && (dyna_cursorTarget isEqualTo EPOCH_pendingP2ptradeTarget))} else {false}"; + dyna_locked = "locked dyna_cursorTarget in [2,3]"; + dyna_lockedInVehicle = "locked vehicle player in [2,3]"; + + dyna_blockWeapons = "[]"; + dyna_Turret = "if (!dyna_inVehicle) then {[]} else {if ((assignedVehicleRole player) isequalto ['driver']) then {[-1]} else {if (count (assignedVehicleRole player) == 2) then {(assignedVehicleRole player) select 1}else {[]}}}"; + dyna_weaponsTurret = "if (!dyna_inVehicle) then {[]}else {((vehicle player) weaponsTurret dyna_Turret) select {!((getArray(configFile >> 'CfgWeapons' >> _x >> 'magazines')) select {!((getText (configFile >> 'CfgMagazines' >> _x >> 'picture')) isequalto '')} isequalto [])}}"; + dyna_WeapsMagsTurret = "call {_out = [];if (dyna_inVehicle) then {_added = [];{_weapon = _x;_WeaponMags = ((vehicle player) magazinesTurret dyna_Turret) select {(_x in (getArray (configFile >> 'CfgWeapons' >> _weapon >> 'magazines'))) && !((getText (configFile >> 'CfgMagazines' >> _x >> 'picture')) isequalto '')};if !(_WeaponMags isequalto []) then {{if !(_x in _added) then {_out pushback [_weapon,_x];_added pushback _x;};} foreach _WeaponMags;};} foreach dyna_weaponsTurret;};_out}"; + + dyna_mapPlayerMarkerON = "(getNumber(('CfgEpochClient' call EPOCH_returnConfig) >> 'playerLocationMarkerGPSOnly') isEqualTo 1)"; + dyna_mapPlayerMarker = "(((getArray(('CfgMarkerSets' call EPOCH_returnConfig) >> 'PlayerMarker' >> 'markerArray') select 0) select 0) in allMapMarkers)"; + + dyna_deathMarkerON = "(getNumber(('CfgEpochClient' call EPOCH_returnConfig) >> 'playerDeathMarkerGPSOnly') isEqualTo 1)"; + dyna_deathMarker = "profileNameSpace getVariable['EPOCHLastKnownDeath',[]]"; + dyna_deathMarkerAvail = "!(dyna_deathMarker isEqualTo [])"; + dyna_mapDeathMarker = "(((getArray(('CfgMarkerSets' call EPOCH_returnConfig) >> 'DeathMarker' >> 'markerArray') select 0) select 0) in allMapMarkers)"; + + dyna_AtHome = "call {_nearjammers = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {player distance _x < (getnumber (getmissionconfig 'cfgEpochClient' >> 'CfgJammers' >> (typeof _x) >> 'buildingJammerRange'))};if (_nearjammers isEqualTo []) exitwith {false};_nearestJammer = _nearjammers select 0;((_nearestJammer getVariable['BUILD_OWNER', '-1']) in[getPlayerUID player, Epoch_my_GroupUID])}"; + dyna_Watersource = "call {_nearObjects = nearestObjects [player, [], 2];_check = 'water';_ok = false;{if (alive _x) then {_ok = [_x, _check] call EPOCH_worldObjectType;};if (_ok) exitWith {};} forEach _nearObjects;_ok}"; + dyna_DirtyWatersource = "((surfaceiswater position player) && (position player isFlatEmpty [-1, -1, -1, -1, 0, true] isEqualTo []) && (getPosASL player select 2 > 2) && (getPosATL player select 2 < 0.1))"; + dyna_Paintobj = "objnull"; // <--- internal use only! + }; + + class self + { + #include "CfgActionMenu_self.hpp" + }; + + class target + { + #include "CfgActionMenu_target.hpp" + }; + + class map + { + #include "CfgActionMenu_map.hpp" + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/CfgActionMenu_map.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/CfgActionMenu_map.hpp new file mode 100644 index 0000000..6f4a7f0 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/CfgActionMenu_map.hpp @@ -0,0 +1,45 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: DirtySanchez + + Description: + Action Menu Map Config + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_map.hpp +*/ +/* +// Moved to E-Pad +class playerMarker_on +{ + condition = "!EPOCH_PlayerMarkerOn"; + action = "EPOCH_PlayerMarkerOn = true; if !('ItemGPS' in dyna_assignedItems) then {['You need a GPS to see your Position',5] call epoch_message}"; + icon = "x\addons\a3_epoch_community\buttons\gps.paa"; + tooltip = "Toggle ON player marker"; +}; +class playerMarker_off +{ + condition = "EPOCH_PlayerMarkerOn"; + action = "EPOCH_PlayerMarkerOn = false"; + icon = "x\addons\a3_epoch_community\buttons\gps.paa"; + tooltip = "Toggle OFF player marker"; +}; +class deathMarker_on +{ + condition = "!EPOCH_DeathMarkerOn"; + action = "EPOCH_DeathMarkerOn = true; if ((profileNameSpace getVariable ['EPOCHLastKnownDeath',[]]) isequalto []) then {['You had no GPS on last death',5] call epoch_message}"; + icon = "x\addons\a3_epoch_community\icons\skull.paa"; + tooltip = "Toggle ON death marker"; +}; +class deathMarker_off +{ + condition = "EPOCH_DeathMarkerOn"; + action = "EPOCH_DeathMarkerOn = false"; + icon = "x\addons\a3_epoch_community\icons\skull.paa"; + tooltip = "Toggle OFF death marker"; +}; +*/ \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp new file mode 100644 index 0000000..2afd7bc --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp @@ -0,0 +1,278 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + Action Menu Self Config + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp +*/ + +class veh_lock +{ + condition = "if (vehicle player iskindof 'Bicycle') exitwith {false};dyna_inVehicle && !dyna_lockedInVehicle"; + action = "[vehicle player, true, player, Epoch_personalToken] remoteExec ['EPOCH_server_lockVehicle',2];"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa"; + tooltip = "Lock"; +}; +class veh_unLock +{ + condition = "dyna_inVehicle && dyna_lockedInVehicle"; + action = "[vehicle player, false, player, Epoch_personalToken] remoteExec ['EPOCH_server_lockVehicle',2];"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa"; + tooltip = "Unlock"; +}; +class player_inspect +{ + condition = "!dyna_inVehicle"; + action = "if !(underwater player) then {call EPOCH_lootTrash}else {if !(((nearestobjects [player,['container_epoch','weaponholdersimulated','GroundWeaponHolder'],5]) select {(_x getvariable ['EPOCH_Loot',false]) || (_x iskindof 'container_epoch' && _x animationPhase 'open_lid' > 0.5)}) isequalto []) then {call EPOCH_QuickTakeLoad} else {call EPOCH_lootTrash}};"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + tooltip = "Examine"; +}; +class Groups +{ + condition = "true"; + action = ""; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\group_menu_ca.paa"; + tooltip = "Groups Menu"; + class Group + { + condition = "true"; + action = "call EPOCH_Inventory_Group;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\perm_group_menu_ca.paa"; + tooltip = "Perm Group Menu"; + }; + class TempGroup + { + condition = "true"; + action = "call EPOCH_Inventory_TempGroup;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\temp_group_menu_ca.paa"; + tooltip = "Temp Group Menu"; + }; +}; +class player_group_requests +{ + condition = "!(Epoch_invited_GroupUIDs isEqualTo[])"; + action = "call EPOCH_Inventory_iGroup;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\group_requests_ca.paa"; + tooltip = "Group Requests"; +}; +class player_tempGroup_requests +{ + condition = "!(Epoch_invited_tempGroupUIDs isEqualTo[])"; + action = "call EPOCH_Inventory_itempGroup;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\group_requests_ca.paa"; + tooltip = "Temp Group Requests"; +}; + +class base_mode_enable +{ + condition = "EPOCH_buildMode in [0,2] && !dyna_inVehicle"; + action = "if (EPOCH_playerEnergy > 0) then {EPOCH_stabilityTarget = objNull;EPOCH_buildMode = 1;['Build Mode: Enabled Snap alignment', 5] call Epoch_message;EPOCH_buildDirection = 0} else {['Need Energy!', 5] call Epoch_message};"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_maintain.paa"; + tooltip = "Build Mode: Snap alignment"; +}; +class base_mode_enable_free +{ + condition = "EPOCH_buildMode == 1 && EPOCH_playerEnergy > 0"; + action = "EPOCH_stabilityTarget = objNull;EPOCH_buildMode = 2;['Build Mode: Enabled Free alignment', 5] call Epoch_message;EPOCH_buildDirection = 0;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_maintain.paa"; + tooltip = "Build Mode: Free alignment"; +}; +class base_mode_disable +{ + condition = "EPOCH_buildMode > 0"; + action = "EPOCH_buildMode = 0;EPOCH_snapDirection = 0;['Build Mode: Disabled', 5] call Epoch_message;EPOCH_Target = objNull;EPOCH_Z_OFFSET = 0;EPOCH_X_OFFSET = 0;EPOCH_Y_OFFSET = 5;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_remove.paa"; + tooltip = "Build Mode: Disable"; +}; +class base_mode_snap_direction +{ + condition = "EPOCH_buildMode == 1"; + action = "EPOCH_snapDirection = EPOCH_snapDirection + 1; if (EPOCH_snapDirection > 3) then {EPOCH_snapDirection = 0};[format['SNAP DIRECTION: %1°', EPOCH_snapDirection*90], 5] call Epoch_message;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_rotate.paa"; + tooltip = "Build Mode: Rotate 90°"; + tooltipcode = "format ['Build Mode: Switch Snap Direction to %1° (current %2°)',if (EPOCH_snapDirection < 3) then {(EPOCH_snapDirection+1)*90} else {0},EPOCH_snapDirection*90]"; +}; +class base_mode_detach +{ + condition = "EPOCH_buildMode > 0 && !isnull EPOCH_target && EPOCH_target_attachedTo isequalto player && Epoch_target iskindof 'Const_Ghost_EPOCH'"; + action = "EPOCH_target_attachedTo = objnull; ['Object Detached', 5] call Epoch_message;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_detach.paa"; + tooltip = "Build Mode: Detach Object"; +}; +class base_mode_attach +{ + condition = "EPOCH_buildMode > 0 && !isnull EPOCH_target && !(EPOCH_target_attachedTo isequalto player) && Epoch_target iskindof 'Const_Ghost_EPOCH'"; + action = "EPOCH_target_attachedTo = player; ['Object Attached', 5] call Epoch_message;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_attach.paa"; + tooltip = "Build Mode: Attach Object"; +}; +class Drink +{ + condition = "dyna_Watersource || dyna_DirtyWatersource"; + action = "if (currentweapon player == '') then {player playmove 'AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon';}else {if (currentweapon player == handgunweapon player) then {player playmove 'AinvPknlMstpSrasWpstDnon_Putdown_AmovPknlMstpSrasWpstDnon';}else { player playmove 'AinvPknlMstpSrasWrflDnon_Putdown_AmovPknlMstpSrasWrflDnon';};};{_output = _x call EPOCH_giveAttributes;if (_output != '') then {[_output, 5] call Epoch_message_stack;};} foreach [['Thirst',100],['Toxicity',1,1],['Stamina',10]];"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Drink.paa"; + tooltip = "Drink"; +}; +class Wash +{ + condition = "dyna_Watersource"; + action = "if !('Soap_Epoch' in magazines player) exitwith {['You need a Soap to wash yourself',5] call Epoch_Message;};[] spawn {player playMove 'AinvPknlMstpSnonWrflDnon_medic0';player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd';['Washing ...',5] call Epoch_Message;player removeitem 'Soap_Epoch';uisleep 6;{_output = _x call EPOCH_giveAttributes; if (_output != '') then {[_output, 5] call Epoch_message_stack;};} foreach [['Soiled',-25]];};"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Washing.paa"; + tooltip = "Wash yourself"; +}; +class ServicePoint +{ + condition = "call EPOCH_SP_Check"; + action = "[dyna_Turret] call EPOCH_SP_Start;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_man.paa"; + tooltip = "Service Point"; + + class Refuel + { + condition = "!isnil 'Ignatz_Refuel'"; + action = "(Ignatz_Refuel select 1) spawn EPOCH_SP_Refuel"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\vehicle_refuel.paa"; + tooltipcode = "Ignatz_Refuel select 0"; + }; + class Repair + { + condition = "!isnil 'Ignatz_Repair'"; + action = "(Ignatz_Repair select 1) spawn EPOCH_SP_Repair"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\repair.paa"; + tooltipcode = "Ignatz_Repair select 0"; + }; + class Rearm0 + { + condition = "!isnil 'Ignatz_Rearm0'"; + action = "(Ignatz_Rearm0 select 1) call EPOCH_SP_Rearm"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa"; + tooltipcode = "Ignatz_Rearm0 select 0"; + }; + class Rearm1 + { + condition = "!isnil 'Ignatz_Rearm1'"; + action = "(Ignatz_Rearm1 select 1) call EPOCH_SP_Rearm"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa"; + tooltipcode = "Ignatz_Rearm1 select 0"; + }; + class Rearm2 + { + condition = "!isnil 'Ignatz_Rearm2'"; + action = "(Ignatz_Rearm2 select 1) call EPOCH_SP_Rearm"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa"; + tooltipcode = "Ignatz_Rearm2 select 0"; + }; +}; +class veh_Rearm1 +{ + condition = "if (count dyna_weaponsTurret > 0) then {!((dyna_weaponsTurret select 0) in dyna_blockWeapons)}else{false}"; + action = "[vehicle player, dyna_weaponsTurret select 0, dyna_Turret] call EPOCH_vehicle_checkTurretAmmo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa"; + tooltipcode = "format['Add Mag to %1',getText(configFile >> 'CfgWeapons' >> dyna_weaponsTurret select 0 >> 'displayName')]"; +}; +class veh_Rearm2 +{ + condition = "if (count dyna_weaponsTurret > 1) then {!((dyna_weaponsTurret select 1) in dyna_blockWeapons)}else{false}"; + action = "[vehicle player,dyna_weaponsTurret select 1, dyna_Turret] call EPOCH_vehicle_checkTurretAmmo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa"; + tooltipcode = "format['Add Mag to %1',getText(configFile >> 'CfgWeapons' >> dyna_weaponsTurret select 1 >> 'displayName')]"; +}; +class veh_Rearm3 +{ + condition = "if (count dyna_weaponsTurret > 2) then {!((dyna_weaponsTurret select 2) in dyna_blockWeapons)}else{false}"; + action = "[vehicle player,dyna_weaponsTurret select 2, dyna_Turret] call EPOCH_vehicle_checkTurretAmmo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa"; + tooltipcode = "format['Add Mag to %1',getText(configFile >> 'CfgWeapons' >> dyna_weaponsTurret select 2 >> 'displayName')]"; +}; +class veh_Rearm4 +{ + condition = "if (count dyna_weaponsTurret > 3) then {!((dyna_weaponsTurret select 3) in dyna_blockWeapons)}else{false}"; + action = "[vehicle player,dyna_weaponsTurret select 3, dyna_Turret] call EPOCH_vehicle_checkTurretAmmo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa"; + tooltipcode = "format['Add Mag to %1',getText(configFile >> 'CfgWeapons' >> dyna_weaponsTurret select 3 >> 'displayName')]"; +}; +class veh_RemoveAmmo1 +{ + condition = "if (count dyna_WeapsMagsTurret > 0) then {!((dyna_WeapsMagsTurret select 0 select 0) in dyna_blockWeapons)}else{false}"; + action = "[vehicle player,dyna_WeapsMagsTurret select 0 select 0,dyna_WeapsMagsTurret select 0 select 1, dyna_Turret] call EPOCH_vehicle_removeTurretAmmo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\RemoveMag.paa"; + tooltipcode = "format['Remove %1 from %2',getText(configFile >> 'CfgMagazines' >> (dyna_WeapsMagsTurret select 0 select 1) >> 'displayName'),getText(configFile >> 'CfgWeapons' >> (dyna_WeapsMagsTurret select 0 select 0) >> 'displayName')]"; +}; +class veh_RemoveAmmo2 +{ + condition = "if (count dyna_WeapsMagsTurret > 1) then {!((dyna_WeapsMagsTurret select 1 select 0) in dyna_blockWeapons)}else{false}"; + action = "[vehicle player,dyna_WeapsMagsTurret select 1 select 0,dyna_WeapsMagsTurret select 1 select 1, dyna_Turret] call EPOCH_vehicle_removeTurretAmmo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\RemoveMag.paa"; + tooltipcode = "format['Remove %1 from %2',getText(configFile >> 'CfgMagazines' >> (dyna_WeapsMagsTurret select 1 select 1) >> 'displayName'),getText(configFile >> 'CfgWeapons' >> (dyna_WeapsMagsTurret select 1 select 0) >> 'displayName')]"; +}; +class veh_RemoveAmmo3 +{ + condition = "if (count dyna_WeapsMagsTurret > 2) then {!((dyna_WeapsMagsTurret select 2 select 0) in dyna_blockWeapons)}else{false}"; + action = "[vehicle player,dyna_WeapsMagsTurret select 2 select 0,dyna_WeapsMagsTurret select 2 select 1, dyna_Turret] call EPOCH_vehicle_removeTurretAmmo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\RemoveMag.paa"; + tooltipcode = "format['Remove %1 from %2',getText(configFile >> 'CfgMagazines' >> (dyna_WeapsMagsTurret select 2 select 1) >> 'displayName'),getText(configFile >> 'CfgWeapons' >> (dyna_WeapsMagsTurret select 2 select 0) >> 'displayName')]"; +}; +class veh_RemoveAmmo4 +{ + condition = "if (count dyna_WeapsMagsTurret > 3) then {!((dyna_WeapsMagsTurret select 3 select 0) in dyna_blockWeapons)}else{false}"; + action = "[vehicle player,dyna_WeapsMagsTurret select 3 select 0,dyna_WeapsMagsTurret select 3 select 1, dyna_Turret] call EPOCH_vehicle_removeTurretAmmo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\RemoveMag.paa"; + tooltipcode = "format['Remove %1 from %2',getText(configFile >> 'CfgMagazines' >> (dyna_WeapsMagsTurret select 3 select 1) >> 'displayName'),getText(configFile >> 'CfgWeapons' >> (dyna_WeapsMagsTurret select 3 select 0) >> 'displayName')]"; +}; + +class geiger_menu +{ + condition = "'ItemGeigerCounter_EPOCH' in dyna_assigneditems"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\geiger_radiation.paa"; + tooltip = "Geiger counter settings"; + + class geiger_toggle + { + condition = "true"; + action = "call epoch_geiger_show_hide"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\geiger_toggle.paa"; + tooltip = "Toggle HUD"; + }; + class geiger_counter_mute + { + condition = "!EPOCH_geiger_mute_counter"; + action = "EPOCH_geiger_mute_counter = !EPOCH_geiger_mute_counter"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\geiger_volumeoff.paa"; + tooltip = "Mute counter"; + }; + class geiger_counter_unmute + { + condition = "EPOCH_geiger_mute_counter"; + action = "EPOCH_geiger_mute_counter = !EPOCH_geiger_mute_counter"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\geiger_volumeon.paa"; + tooltip = "Unmute counter"; + }; + class geiger_warning_mute + { + condition = "!EPOCH_geiger_mute_warning"; + action = "EPOCH_geiger_mute_warning = !EPOCH_geiger_mute_warning"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\geiger_alarmoff.paa"; + tooltip = "Mute warnings"; + }; + class geiger_warning_unmute + { + condition = "EPOCH_geiger_mute_warning"; + action = "EPOCH_geiger_mute_warning = !EPOCH_geiger_mute_warning"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\geiger_alarmon.paa"; + tooltip = "Unmute warnings"; + }; +}; +class Epad +{ + condition = "EPOCH_EpadButtonOn"; + action = "if (isnull (finddisplay 9898)) then {createdialog 'epoch_tablet_gui';};"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Epad.paa"; + tooltip = "E-Pad"; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp new file mode 100644 index 0000000..7aa9e47 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp @@ -0,0 +1,619 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: Aaron Clark + + Description: + Action Menu Target Config + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp +*/ + +class build_upgrade +{ + condition = "dyna_buildMode select 0"; + //action = "dyna_cursorTarget call EPOCH_QuickUpgrade;"; //TODO: scripted dyna menu + action = ""; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_upgrade.paa"; + tooltipcode = "format['Upgrade %1',getText(configFile >> 'CfgVehicles' >> (typeof dyna_cursorTarget) >> 'displayName')]"; + class special {}; //uses external config, hardcoded +}; +class PaintGarage +{ + condition = "(dyna_cursortargettype isEqualTo 'paintshop' && {player distance2d (dyna_cursorTarget modelToWorld (dyna_cursorTarget selectionPosition 'action1')) < 1.5}) || dyna_cursortargettype in ['Add other Buildings here']"; + action = ""; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Paint.paa"; + tooltip = "Paint Garage"; + class special {}; //uses external config, hardcoded +}; +class build_remove +{ + condition = "dyna_buildMode select 1"; + action = "dyna_cursorTarget call EPOCH_removeBUILD;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_trash.paa"; + tooltipcode = "format['Remove %1',getText(configFile >> 'CfgVehicles' >> (typeof dyna_cursorTarget) >> 'displayName')]"; +}; +class build_move +{ + condition = "dyna_buildMode select 2"; + action = "dyna_cursorTarget call EPOCH_fnc_SelectTargetBuild;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_move.paa"; + tooltipcode = "format['Move %1',getText(configFile >> 'CfgVehicles' >> (typeof dyna_cursorTarget) >> 'displayName')]"; +}; + +//Vehicle interaction +class veh_gear +{ + condition = "dyna_isVehicle && !dyna_locked"; + action = "call Epoch_client_gearVehicle;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + tooltip = "Inspect"; +}; +class veh_lock +{ + condition = "if (dyna_cursorTarget iskindof 'Bicycle') exitwith {false};dyna_isVehicle && !dyna_locked"; + action = "[dyna_cursorTarget, true, player, Epoch_personalToken] remoteExec ['EPOCH_server_lockVehicle',2];"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa"; + tooltipcode = "format['Lock %1',getText(configFile >> 'CfgVehicles' >> (typeof dyna_cursorTarget) >> 'displayName')]"; +}; +class veh_unLock +{ + condition = "dyna_isVehicle && dyna_locked"; + action = "[dyna_cursorTarget, false, player, Epoch_personalToken] remoteExec ['EPOCH_server_lockVehicle',2];"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa"; + tooltipcode = "format['Unlock %1',getText(configFile >> 'CfgVehicles' >> (typeof dyna_cursorTarget) >> 'displayName')]"; +}; + +//Trader interaction +class tra_talk +{ + condition = "dyna_isTrader"; + action = "dyna_cursorTarget call EPOCH_startInteractNPC;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\talk_blue.paa"; + tooltip = "Talk"; +}; +class tra_shop +{ + condition = "dyna_isTrader"; + action = "call EPOCH_startNPCTraderMenu;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\krypto.paa"; + tooltip = "Shop"; +}; + +class player_takeCrypto +{ + condition = "dyna_isDeadPlayer || !(((nearestobjects [player,[],5]) select {(_x getvariable ['Crypto',0]) > 0}) isEqualTo [])"; + action = "dyna_cursorTarget call EPOCH_takeCrypto;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\krypto.paa"; + tooltip = "Take Crypto"; +}; +class player_trade +{ + condition = "dyna_isPlayer"; + action = "[dyna_cursorTarget, player, Epoch_personalToken] call EPOCH_startTRADEREQ;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\krypto.paa"; + tooltip = "Make Trade Request"; +}; +class player_trade_accept +{ + condition = "dyna_isPlayer && dyna_canAcceptTrade"; + action = "EPOCH_p2ptradeTarget = EPOCH_pendingP2ptradeTarget;call EPOCH_startTrade;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\krypto.paa"; + tooltip = "Accept Trade Request"; +}; + +//User action replacement +class maintain_jammer +{ + condition = "dyna_cursorTargetType in (call EPOCH_JammerClasses) && (damage dyna_cursorTarget < 1)"; + action = "dyna_cursorTarget call EPOCH_maintainIT;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_maintain.paa"; + tooltip = "Maintain"; +}; +class select_jammer +{ + condition = "dyna_cursorTargetType in (call EPOCH_JammerClasses) && (damage dyna_cursorTarget < 1)"; + action = "[dyna_cursorTarget,player,Epoch_personalToken] remoteExec [""EPOCH_server_makeSP"",2];"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\spawnpoint.paa"; + tooltip = "Make Spawnpoint"; +}; + +//lock unlock +class unlock_lockbox +{ + condition = "(dyna_cursorTargetType in ['LockBox_EPOCH','LockBoxProxy_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])"; + action = "dyna_cursorTarget call Epoch_secureStorageHandler"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa"; + tooltip = "Unlock Lockbox"; +}; +class lock_lockbox +{ + condition = "(dyna_cursorTargetType in ['LockBox_EPOCH','LockBoxProxy_EPOCH']) && !(dyna_cursorTarget getVariable ['EPOCH_Locked',false])"; + action = "dyna_cursorTarget call Epoch_secureStorageHandler"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa"; + tooltip = "Lock Lockbox"; +}; +class unlock_safe +{ + condition = "(dyna_cursorTargetType in ['Safe_EPOCH','Safe_s_EPOCH','SafeProxy_EPOCH','GunSafe_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])"; + action = "dyna_cursorTarget call Epoch_secureStorageHandler"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa"; + tooltip = "Unlock Safe"; +}; +class lock_safe +{ + condition = "(dyna_cursorTargetType in ['Safe_EPOCH','Safe_s_EPOCH','SafeProxy_EPOCH','GunSafe_EPOCH']) && !(dyna_cursorTarget getVariable ['EPOCH_Locked',false])"; + action = "dyna_cursorTarget call Epoch_secureStorageHandler"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa"; + tooltip = "Lock Safe"; +}; + +//pack +class pack_lockbox +{ + condition = "(dyna_cursorTargetType in ['LockBox_EPOCH','LockBoxProxy_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])"; + action = "[dyna_cursorTarget,player,Epoch_personalToken] remoteExec ['EPOCH_server_packStorage',2];"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_pack.paa"; + tooltip = "Pack Lockbox"; +}; +class pack_safe +{ + condition = "(dyna_cursorTargetType in ['Safe_EPOCH','Safe_s_EPOCH','SafeProxy_EPOCH','GunSafe_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])"; + action = "[dyna_cursorTarget,player,Epoch_personalToken] remoteExec ['EPOCH_server_packStorage',2];"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_pack.paa"; + tooltip = "Pack Safe"; +}; + +class VehMaintanance +{ + condition = "dyna_isVehicle && !EPOCH_Vehicle_MaintainLock"; + action = "dyna_cursorTarget call EPOCH_client_VehicleMaintananceCheck;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_man.paa"; + tooltip = "Vehicle Maintanance"; + class Repair + { + condition = "(!((EPOCH_VehicleRepairs select 0) isequalto []) || !((EPOCH_VehicleRepairs select 2) isequalto [])) && EPOCH_AdvancedVehicleRepair_Enabled"; + action = ""; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa"; + tooltip = "Repair Vehicle"; + class RepairHull + { + condition = "'hithull' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hithull'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_HullBody.paa"; + tooltip = "Repair Hull"; + }; + class ReplaceHull + { + condition = "'hithull' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hithull'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_HullBody.paa"; + tooltip = "Repair Hull"; + }; + class RepairEngine + { + condition = "'hitengine' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitengine'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Engine.paa"; + tooltip = "Repair Engine"; + }; + class ReplaceEngine + { + condition = "'hitengine' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitengine'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Engine.paa"; + tooltip = "Replace Engine"; + }; + class ReplaceGlass + { + condition = "'glass' in (EPOCH_VehicleRepairs select 0) || 'glass' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','glass'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Glass.paa"; + tooltip = "Replace Glass"; + }; + class RepairBody + { + condition = "'hitbody' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitbody'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_HullBody.paa"; + tooltip = "Repair Body"; + }; + class ReplaceBody + { + condition = "'hitbody' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitbody'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_HullBody.paa"; + tooltip = "Repair Body"; + }; + class RepairFuel + { + condition = "'hitfuel' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitfuel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Fuel.paa"; + tooltip = "Repair Fuel Hose"; + }; + class RepairMainRotor + { + condition = "'hithrotor' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hithrotor'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_MainRotor.paa"; + tooltip = "Repair Main Rotor"; + }; + class ReplaceFuel + { + condition = "'hitfuel' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitfuel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Fuel.paa"; + tooltip = "Replace Fuel Hose"; + }; + class ReplaceMainRotor + { + condition = "'hithrotor' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hithrotor'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_MainRotor.paa"; + tooltip = "Replace Main Rotor"; + }; + class RepairTailRotor + { + condition = "'hitvrotor' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitvrotor'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_TailRotor.paa"; + tooltip = "Repair Tail Rotor"; + }; + class ReplaceTailRotor + { + condition = "'hitvrotor' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitvrotor'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_TailRotor.paa"; + tooltip = "Replace Tail Rotor"; + }; + class ReplaceWinch + { + condition = "'hitwinch' in (EPOCH_VehicleRepairs select 0) || 'hitwinch' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitwinch'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_SLG.paa"; + tooltip = "Replace Winch"; + }; + class RepairTireBike1 + { + condition = "'hitfwheel' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitfwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa"; + tooltip = "Repair 1st Wheel"; + }; + class RepairTireBike2 + { + condition = "'hitbwheel' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitbwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa"; + tooltip = "Repair 2nd Wheel"; + }; + class RepairTire1 + { + condition = "'hitlfwheel' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitlfwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa"; + tooltip = "Repair 1st Left Wheel"; + }; + class RepairTire2 + { + condition = "'hitlf2wheel' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitlf2wheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa"; + tooltip = "Repair 2nd Left Wheel"; + }; + class RepairTire3 + { + condition = "'hitlmwheel' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitlmwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa"; + tooltip = "Repair 3rd Left Wheel"; + }; + class RepairTire4 + { + condition = "'hitlbwheel' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitlbwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa"; + tooltip = "Repair 4th Left Wheel"; + }; + class RepairTire5 + { + condition = "'hitrfwheel' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitrfwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa"; + tooltip = "Repair 1st Right Wheel"; + }; + class RepairTire6 + { + condition = "'hitrf2wheel' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitrf2wheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa"; + tooltip = "Repair 2nd Right Wheel"; + }; + class RepairTire7 + { + condition = "'hitrmwheel' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitrmwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa"; + tooltip = "Repair 3rd Right Wheel"; + }; + class RepairTire8 + { + condition = "'hitrbwheel' in (EPOCH_VehicleRepairs select 0)"; + action = "[dyna_cursorTarget,'repair','hitrbwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa"; + tooltip = "Repair 4th Right Wheel"; + }; + class ReplaceTireBike1 + { + condition = "'hitfwheel' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitfwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa"; + tooltip = "Replace 1st Wheel"; + }; + class ReplaceTireBike2 + { + condition = "'hitbwheel' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitbwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa"; + tooltip = "Replace 2nd Wheel"; + }; + class ReplaceTire1 + { + condition = "'hitlfwheel' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitlfwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa"; + tooltip = "Replace 1st Left Wheel"; + }; + class ReplaceTire2 + { + condition = "'hitlf2wheel' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitlf2wheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa"; + tooltip = "Replace 2nd Left Wheel"; + }; + class ReplaceTire3 + { + condition = "'hitlmwheel' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitlmwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa"; + tooltip = "Replace 3rd Left Wheel"; + }; + class ReplaceTire4 + { + condition = "'hitlbwheel' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitlbwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa"; + tooltip = "Replace 4th Left Wheel"; + }; + class ReplaceTire5 + { + condition = "'hitrfwheel' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitrfwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa"; + tooltip = "Replace 1st Right Wheel"; + }; + class ReplaceTire6 + { + condition = "'hitrf2wheel' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitrf2wheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa"; + tooltip = "Replace 2nd Right Wheel"; + }; + class ReplaceTire7 + { + condition = "'hitrmwheel' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitrmwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa"; + tooltip = "Replace 3rd Right Wheel"; + }; + class ReplaceTire8 + { + condition = "'hitrbwheel' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitrbwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa"; + tooltip = "Replace 4th Right Wheel"; + }; + class RepairAvionics + { + condition = "'hitavionics' in (EPOCH_VehicleRepairs select 0) || 'hitavionics' in (EPOCH_VehicleRepairs select 2)"; + action = "[dyna_cursorTarget,'replace','hitavionics'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Avionics.paa"; + tooltip = "Repair Avionics"; + }; + }; + class Remove + { + condition = "!((EPOCH_VehicleRepairs select 1) isequalto []) && EPOCH_AdvancedVehicleRepair_Enabled"; + action = ""; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa"; + tooltip = "Remove Parts"; + class RemoveEngine + { + condition = "'hitengine' in (EPOCH_VehicleRepairs select 1)"; + action = "[dyna_cursorTarget,'remove','hitengine'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Engine.paa"; + tooltip = "Remove Engine"; + }; + class RemoveTire1 + { + condition = "'hitlfwheel' in (EPOCH_VehicleRepairs select 1)"; + action = "[dyna_cursorTarget,'remove','hitlfwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa"; + tooltip = "Remove 1st Left Wheel"; + }; + class RemoveTire2 + { + condition = "'hitlf2wheel' in (EPOCH_VehicleRepairs select 1)"; + action = "[dyna_cursorTarget,'remove','hitlf2wheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa"; + tooltip = "Remove 2nd Left Wheel"; + }; + class RemoveTire3 + { + condition = "'hitlmwheel' in (EPOCH_VehicleRepairs select 1)"; + action = "[dyna_cursorTarget,'remove','hitlmwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa"; + tooltip = "Remove 3rd Left Wheel"; + }; + class RemoveTire4 + { + condition = "'hitlbwheel' in (EPOCH_VehicleRepairs select 1)"; + action = "[dyna_cursorTarget,'remove','hitlbwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa"; + tooltip = "Remove 4th Left Wheel"; + }; + class RemoveTire5 + { + condition = "'hitrfwheel' in (EPOCH_VehicleRepairs select 1)"; + action = "[dyna_cursorTarget,'remove','hitrfwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa"; + tooltip = "Remove 1st Right Wheel"; + }; + class RemoveTire6 + { + condition = "'hitrf2wheel' in (EPOCH_VehicleRepairs select 1)"; + action = "[dyna_cursorTarget,'remove','hitrf2wheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa"; + tooltip = "Remove 2nd Right Wheel"; + }; + class RemoveTire7 + { + condition = "'hitrmwheel' in (EPOCH_VehicleRepairs select 1)"; + action = "[dyna_cursorTarget,'remove','hitrmwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa"; + tooltip = "Remove 3rd Right Wheel"; + }; + class RemoveTire8 + { + condition = "'hitrbwheel' in (EPOCH_VehicleRepairs select 1)"; + action = "[dyna_cursorTarget,'remove','hitrbwheel'] spawn EPOCH_client_VehicleMaintananceDo"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa"; + tooltip = "Remove 4th Right Wheel"; + }; + }; + class UpgradeVehicle + { + condition = "dyna_isVehicle"; + action = "dyna_cursorTarget call EPOCH_client_upgradeVehicleCheck;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_upgrade.paa"; + tooltip = "Upgrade Vehicle"; + class Upgrade0 + { + condition = "(count Ignatz_VehicleUpgradeArray) > 0"; + action = "(Ignatz_VehicleUpgradeArray select 0) call EPOCH_client_upgradeVehicle"; + iconcode = "gettext (configfile >> 'CfgVehicles' >> (Ignatz_VehicleUpgradeArray select 0 select 1) >> 'picture')"; + tooltipcode = "format ['Upgrade to %1 - %2',(Ignatz_VehicleUpgradeArray select 0 select 2),(Ignatz_VehicleUpgradeArray select 0 select 3)]"; + }; + class Upgrade1 + { + condition = "(count Ignatz_VehicleUpgradeArray) > 1"; + action = "(Ignatz_VehicleUpgradeArray select 1) call EPOCH_client_upgradeVehicle"; + iconcode = "gettext (configfile >> 'CfgVehicles' >> (Ignatz_VehicleUpgradeArray select 1 select 1) >> 'picture')"; + tooltipcode = "format ['Upgrade to %1 - %2',(Ignatz_VehicleUpgradeArray select 1 select 2),(Ignatz_VehicleUpgradeArray select 1 select 3)]"; + }; + class Upgrade2 + { + condition = "(count Ignatz_VehicleUpgradeArray) > 2"; + action = "(Ignatz_VehicleUpgradeArray select 2) call EPOCH_client_upgradeVehicle"; + iconcode = "gettext (configfile >> 'CfgVehicles' >> (Ignatz_VehicleUpgradeArray select 2 select 1) >> 'picture')"; + tooltipcode = "format ['Upgrade to %1 - %2',(Ignatz_VehicleUpgradeArray select 2 select 2),(Ignatz_VehicleUpgradeArray select 2 select 3)]"; + }; + class Upgrade3 + { + condition = "(count Ignatz_VehicleUpgradeArray) > 3"; + action = "(Ignatz_VehicleUpgradeArray select 3) call EPOCH_client_upgradeVehicle"; + iconcode = "gettext (configfile >> 'CfgVehicles' >> (Ignatz_VehicleUpgradeArray select 3 select 1) >> 'picture')"; + tooltipcode = "format ['Upgrade to %1 - %2',(Ignatz_VehicleUpgradeArray select 3 select 2),(Ignatz_VehicleUpgradeArray select 3 select 3)]"; + }; + class Upgrade4 + { + condition = "(count Ignatz_VehicleUpgradeArray) > 4"; + action = "(Ignatz_VehicleUpgradeArray select 4) call EPOCH_client_upgradeVehicle"; + iconcode = "gettext (configfile >> 'CfgVehicles' >> (Ignatz_VehicleUpgradeArray select 4 select 1) >> 'picture')"; + tooltipcode = "format ['Upgrade to %1 - %2',(Ignatz_VehicleUpgradeArray select 4 select 2),(Ignatz_VehicleUpgradeArray select 4 select 3)]"; + }; + }; + class ChangePlate + { + condition = "{dyna_cursorTarget iskindof _x} count ['Van_01_base_F','Van_02_base_F','SUV_01_base_F','Hatchback_01_base_F','Offroad_01_base_F','Offroad_02_base_F'] > 0"; + action = "[dyna_cursorTarget,player] spawn EPOCH_vehicle_ChangeLicensePlate"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Epoch_LicensePlate.paa"; + tooltip = "Change License Plate"; + }; +}; + +//Groups +class Groups +{ + condition = "dyna_isPlayer"; + action = ""; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\group_menu_ca.paa"; + tooltip = "Groups Menu"; + class Group + { + condition = "dyna_isPlayer"; + action = "call EPOCH_Inventory_Group;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\perm_group_menu_ca.paa"; + tooltip = "Perm Group Menu"; + }; + class TempGroup + { + condition = "dyna_isPlayer"; + action = "call EPOCH_Inventory_TempGroup;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\temp_group_menu_ca.paa"; + tooltip = "Temp Group Menu"; + }; +}; +class player_group_requests +{ + condition = "dyna_isPlayer && !(Epoch_invited_GroupUIDs isEqualTo[])"; + action = "call EPOCH_Inventory_iGroup;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\group_requests_ca.paa"; + tooltip = "Group Requests"; +}; +class player_tempGroup_requests +{ + condition = "dyna_isPlayer && !(Epoch_invited_tempGroupUIDs isEqualTo[])"; + action = "call EPOCH_Inventory_itempGroup;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\group_requests_ca.paa"; + tooltip = "Temp Group Requests"; +}; + +// Working defibrillator + +class player_revive +{ + condition = "dyna_isDeadPlayer && isplayer dyna_cursorTarget"; + action = "dyna_cursorTarget call EPOCH_DefibrillatorUse;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Revive.paa"; + tooltipcode = "format ['Revive %1',name dyna_cursorTarget]"; +}; + +class BaseCam +{ + condition = "dyna_cursorTargetType isEqualTo 'BaseCamTerminal_EPOCH'"; + action = "call Epoch_CamUse;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Camera.paa"; + tooltip = "Watch BaseCam"; +}; +class ConnectUAV +{ + condition = "(dyna_cursorTarget iskindof 'UAV_01_base_F' || dyna_cursorTarget iskindof 'UAV_06_base_F') && alive dyna_cursorTarget"; + action = "if (missionnamespace getvariable ['insafezone',false]) exitwith {['Not allowed in Safe Zones',5] call Epoch_Message};if !({_x in (assigneditems player)} count ['B_UavTerminal','O_UavTerminal','I_UavTerminal','C_UavTerminal'] > 0) exitwith {['You need an UAV-Terminal to connect',5] call epoch_message;}; dyna_cursorTarget spawn {_unit = _this;if (isnull (driver _unit)) then {_plyr = player;_grp = createGroup side _plyr;_driver = _grp createUnit[""I_UAV_AI"", position _unit, [], 0, ""CAN_COLLIDE""];_driver moveInAny _unit;uisleep 0.5;};player action [""SwitchToUAVDriver"", _unit];_unit setvariable ['Ignatz_UavOwner',name player,true];};"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\epoch_UAV.paa"; + tooltip = "Connect to UAV"; +}; +class Defuse_Bomb +{ + condition = "if (player != vehicle player) exitwith {false};if (player distance dyna_cursorTarget > 3.5) exitwith {false};!((gettext (configfile >> 'cfgammo' >> (typeof dyna_cursorTarget) >> 'defaultMagazine')) isEqualTo '')"; + action = "dyna_cursorTarget spawn Epoch_DefuseBomb"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Defuse.paa"; + tooltip = "Defuse Bomb"; +}; + + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/EXAMPLE.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/EXAMPLE.hpp new file mode 100644 index 0000000..a94a3af --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgActionMenu/EXAMPLE.hpp @@ -0,0 +1,79 @@ +class CfgActionMenu +{ + /** GLOBAL VARIABLES ONLY - removed automatically **/ + class variableDefines //must be global, nil when menu closes + { + dyna_cursorTarget = "cursorTarget"; + dyna_typeOfCursorTarget = "typeOf cursorTarget"; + + dyna_player = "vehicle player"; + dyna_itemsPlayer = "items player"; + }; + + /** No cursor target **/ + class CfgActionMenu_self + { + class player_craftMenu + { + condition = "true"; + action = "call EPOCH_crafting_load;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_maintain.paa"; + tooltip = "Crafting V2"; + }; + }; + + /** Has cursor target **/ + class CfgActionMenu_target + { + class player_inspect + { + condition = "dyna_typeOfCursorTarget isEqualTo 'someClassName'"; + action = "hint 'Detective is on the case'"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + tooltip = "Examine"; + }; + }; +}; + +/** Sub-category example **/ +/* +class CAT_pad +{ + condition = "true"; //must be value + action = ""; //can be empty for categories + icon = "#(rgb,8,8,3)color(1,0,1,0.5)"; + tooltip = "Main cat"; + + class SUB_CAT_test1 + { + condition = "true"; //must be value + action = ""; //can be empty for categories + icon = "#(rgb,8,8,3)color(1,1,1,0.5)"; + tooltip = "Subcat1"; + + class SUB_CAT_test2 + { + condition = "true"; //must be value + action = ""; //can be empty for categories + icon = "#(rgb,8,8,3)color(1,0,0,0.5)"; + tooltip = "Subcat2"; + + class SUB_CAT_test3 + { + condition = "true"; //must be value + action = ""; //can be empty for categories + icon = "#(rgb,8,8,3)color(0,1,1,0.5)"; + tooltip = "Subcat3"; + + class SUB_CAT_test4 + { + condition = "true"; //must be value + action = ""; //can be empty for categories + icon = "#(rgb,8,8,3)color(0,1,0,0.5)"; + tooltip = "Subcat4"; + }; + }; + }; + }; +}; +*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgBaseBuilding.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgBaseBuilding.hpp new file mode 100644 index 0000000..af0365d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgBaseBuilding.hpp @@ -0,0 +1,1738 @@ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {}; + @description = "Configs for base building upgrades and removal"; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgBaseBuilding.hpp"; +*/ +class CfgBaseBuilding +{ +// Power Sources (only for Energy Calculations) + class Land_spp_Tower_F + { + powerCapacity = 10; + powerType = 1; // Solar + }; + class Land_wpp_Turbine_V1_F + { + powerCapacity = 10; + powerType = 2; // Wind + }; + class Land_wpp_Turbine_V2_F : Land_wpp_Turbine_V1_F {}; + class Land_Wreck_Satellite_EPOCH + { + powerCapacity = 10; + powerType = 3; // Satellite + }; + +// BaseBuilding + class Default + { + upgradeBuilding[] = {}; + removeParts[] = {}; + maxSnapDistance = 1; + }; + class FirePlace_EPOCH : Default + { + upgradeBuilding[] = {{"FirePlaceOn_EPOCH",{{"WoodLog_EPOCH",1}}}}; + removeParts[] = {{"ItemRock",2}}; + staticClass = "FirePlace_EPOCH"; + simulClass = "Fireplace_SIM_EPOCH"; + GhostPreview = "FirePlace_EPOCH"; + limitNearby = 2; + bypassJammer = 1; + isTemporary = 1; + }; + class Fireplace_SIM_EPOCH : FirePlace_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class FirePlaceOn_EPOCH : FirePlace_EPOCH + { + upgradeBuilding[] = {}; + }; + class Foundation_EPOCH : Default + { + removeParts[] = {{"ItemRock",4}}; + GhostPreview = "Foundation_Ghost_EPOCH"; + staticClass = "Foundation_EPOCH"; + snapPointsPara[] = {"N","S","E","W","C"}; + snapPointsPerp[] = {}; + maxHeight = 2.5; + maxSnapDistance = 4.5; + // snap points for Foundation_EPOCH + C[] = {0,0,0.806411}; + N[] = {0,10.474,0}; + E[] = {10.474,0,0}; + S[] = {0,-10.474,0}; + W[] = {-10.474,0,0}; + NE[] = {2.47112,2.46379,0.269223}; + NW[] = {-2.4783,2.46379,0.269223}; + SE[] = {2.47112,-2.46097,0.269223}; + SW[] = {-2.4783,-2.46097,0.269223}; + NF[] = {0,5.23361,0.806411}; + SF[] = {0,-5.25013,0.806411}; + EF[] = {5.24796,0,0.806219}; + WF[] = {-5.21655,0,0.806219}; + }; + class Foundation_Ghost_EPOCH : Foundation_EPOCH + { + allowedSnapPoints[] = {"N","S","E","W"}; + allowedSnapObjects[] = {"Constructions_foundation_F"}; + }; + class WoodFoundation_EPOCH : Default + { + removeParts[] = {{"PartPlankPack",4}}; + GhostPreview = "WoodFoundation_Ghost_EPOCH"; + staticClass = "WoodFoundation_EPOCH"; + snapPointsPara[] = {"N","S","E","W","C"}; + snapPointsPerp[] = {}; + allowedSnapPoints[] = {"N","S","E","W"}; + allowedSnapObjects[] = {"Constructions_foundation_F"}; + maxHeight = 2.5; + maxSnapDistance = 3; + // snap points for Foundation_EPOCH + C[] = {0,0,0.806411}; + N[] = {0,10.474,0}; + E[] = {10.474,0,0}; + S[] = {0,-10.474,0}; + W[] = {-10.474,0,0}; + NE[] = {2.47112,2.46379,0.269223}; + NW[] = {-2.4783,2.46379,0.269223}; + SE[] = {2.47112,-2.46097,0.269223}; + SW[] = {-2.4783,-2.46097,0.269223}; + NF[] = {0,5.23361,0.806411}; + SF[] = {0,-5.25013,0.806411}; + EF[] = {5.24796,0,0.806219}; + WF[] = {-5.21655,0,0.806219}; + }; + class WoodFoundation_Ghost_EPOCH : WoodFoundation_EPOCH + { + allowedSnapPoints[] = {"N","S","E","W"}; + allowedSnapObjects[] = {"Constructions_foundation_F"}; + }; + class Hesco3_EPOCH : Default + { + removeParts[] = {{"KitHesco3",1}}; + simulClass = "Hesco3_SIM_EPOCH"; + staticClass = "Hesco3_EPOCH"; + GhostPreview = "Hesco3_Ghost_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"C","E","W"}; + energyCost = 0.4; + limitNearby = 4; + bypassJammer = 1; + // snap points for Hesco3_EPOCH + C[] = {0,0,1.2}; + E[] = {3.375,0,0}; + W[] = {-3.375,0,0}; + }; + class Hesco3_SIM_EPOCH : Hesco3_EPOCH + { + allowedSnapPoints[] = {"C","E","W"}; + allowedSnapObjects[] = {"Hesco3_EPOCH"}; + removeParts[] = {}; + }; + class Hesco3_Ghost_EPOCH : Hesco3_SIM_EPOCH {}; + class TankTrap_EPOCH : Default + { + removeParts[] = {{"KitTankTrap",1}}; + simulClass = "TankTrap_SIM_EPOCH"; + staticClass = "TankTrap_EPOCH"; + GhostPreview = "TankTrap_EPOCH"; + energyCost = 0.2; + limitNearby = 4; + bypassJammer = 1; + }; + class TankTrap_SIM_EPOCH : TankTrap_EPOCH + { + removeParts[] = {}; + }; + class Spike_TRAP_EPOCH : Default + { + simulClass = "Spike_TRAP_SIM_EPOCH"; + staticClass = "Spike_TRAP_EPOCH"; + GhostPreview = "Spike_TRAP_EPOCH"; + ammoClass = "Spike_TRAP_AMMO_EPOCH"; + energyCost = 0.2; + limitNearby = 2; + bypassJammer = 1; + }; + class Spike_TRAP_SIM_EPOCH : Spike_TRAP_EPOCH {}; + class Metal_TRAP_EPOCH : Default + { + simulClass = "Metal_TRAP_SIM_EPOCH"; + staticClass = "Metal_TRAP_EPOCH"; + GhostPreview = "Metal_TRAP_EPOCH"; + ammoClass = "Metal_TRAP_AMMO_EPOCH"; + energyCost = 0.4; + limitNearby = 2; + bypassJammer = 1; + }; + class Metal_TRAP_SIM_EPOCH : Metal_TRAP_EPOCH {}; + class SolarGen_EPOCH : Default + { + removeParts[] = {{"KitSolarGen",1}}; + powerCapacity = 10; + powerType = 1; + GhostPreview = "SolarGen_Ghost_EPOCH"; + staticClass = "SolarGen_EPOCH"; + simulClass = "SolarGen_SIM_EPOCH"; + }; + class SolarGen_SIM_EPOCH : SolarGen_EPOCH + { + removeParts[] = {}; + }; + class SolarGen_Ghost_EPOCH : SolarGen_SIM_EPOCH {}; + class PlotPole_EPOCH : Default + { + upgradeBuilding[] = {{"PlotPole_M_EPOCH",{{"ItemCorrugatedLg",5},{"EnergyPackLg",2},{"CircuitParts",3},{"ItemBattery",3},{"ItemPipe",1}}}}; + removeParts[] = {{"KitPlotPole",1}}; + GhostPreview = "PlotPole_EPOCH"; + staticClass = "PlotPole_EPOCH"; + simulClass = "PlotPole_SIM_EPOCH"; + bypassJammer = 1; + }; + class PlotPole_SIM_EPOCH : PlotPole_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class PlotPole_M_EPOCH : Default + { + upgradeBuilding[] = {{"PlotPole_L_EPOCH",{{"ItemCorrugatedLg",5},{"EnergyPackLg",2},{"CircuitParts",3},{"ItemBattery",3},{"ItemPipe",1}}}}; + removeParts[] = {{"KitPlotPole_M",1}}; + GhostPreview = "PlotPole_M_EPOCH"; + staticClass = "PlotPole_M_EPOCH"; + simulClass = "PlotPole_M_SIM_EPOCH"; + bypassJammer = 1; + }; + class PlotPole_M_SIM_EPOCH : PlotPole_M_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class PlotPole_L_EPOCH : Default + { + upgradeBuilding[] = {{"PlotPole_XL_EPOCH",{{"ItemCorrugatedLg",5},{"EnergyPackLg",2},{"CircuitParts",3},{"ItemBattery",3},{"ItemPipe",1}}}}; + removeParts[] = {{"KitPlotPole_L",1}}; + GhostPreview = "PlotPole_L_EPOCH"; + staticClass = "PlotPole_L_EPOCH"; + simulClass = "PlotPole_L_SIM_EPOCH"; + bypassJammer = 1; + }; + class PlotPole_L_SIM_EPOCH : PlotPole_L_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class PlotPole_XL_EPOCH : Default + { + upgradeBuilding[] = {{"PlotPole_XXL_EPOCH",{{"ItemCorrugatedLg",5},{"EnergyPackLg",2},{"CircuitParts",3},{"ItemBattery",3},{"ItemPipe",1}}}}; + removeParts[] = {{"KitPlotPole_XL",1}}; + GhostPreview = "PlotPole_XL_EPOCH"; + staticClass = "PlotPole_XL_EPOCH"; + simulClass = "PlotPole_XL_SIM_EPOCH"; + bypassJammer = 1; + }; + class PlotPole_XL_SIM_EPOCH : PlotPole_XL_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class PlotPole_XXL_EPOCH : Default + { + upgradeBuilding[] = {}; + removeParts[] = {{"KitPlotPole_XXL",1}}; + GhostPreview = "PlotPole_XXL_EPOCH"; + staticClass = "PlotPole_XXL_EPOCH"; + simulClass = "PlotPole_XXL_SIM_EPOCH"; + bypassJammer = 1; + }; + class PlotPole_XXL_SIM_EPOCH : PlotPole_XXL_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodRamp_EPOCH : Default + { + removeParts[] = {{"PartPlankPack",3}}; + simulClass = "WoodRamp_SIM_EPOCH"; + staticClass = "WoodRamp_EPOCH"; + GhostPreview = "WoodRamp_Ghost_EPOCH"; + snapPointsPara[] = {}; + snapPointsPerp[] = {}; + energyCost = 0.2; + }; + class WoodRamp_SIM_EPOCH : WoodRamp_EPOCH + { + allowedSnapPoints[] = {"NF","SF","EF","WF","CB"}; + allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"}; + removeParts[] = {}; + }; + class WoodRamp_Ghost_EPOCH : WoodRamp_SIM_EPOCH {}; + class WoodFloor_EPOCH : Default + { + upgradeBuilding[] = {{"MetalFloor_EPOCH",{{"ItemCorrugatedLg",3}}}}; + removeParts[] = {{"PartPlankPack",4}}; + simulClass = "WoodFloor_SIM_EPOCH"; + staticClass = "WoodFloor_EPOCH"; + GhostPreview = "WoodFloor_Ghost_EPOCH"; + snapPointsPara[] = {"NF","SF","EF","WF","C","CB","Cx2","NWQF","NQF","NEQF","SWQF","SQF","SEQF","ENQF","EQF","ESQF","WNQF","WQF","WSQF","NWHF","NEHF","SWHF","SEHF","WNHF","WSHF","ENHF","ESHF"}; + snapPointsPerp[] = {"N","S","E","W","CinN","CinS","CinE","CinW"}; + energyCost = 0.2; + // snap points for WoodFloor_EPOCH + C[] = {0,0,3.31243}; + Cx2[] = {0,0,6.37277}; + CB[] = {0,0,0.268722}; + CinN[] = {0,2.87136,-0.000576986}; + CinE[] = {2.87868,0,-0.000576986}; + CinS[] = {0,-2.86826,-0.000576986}; + CinW[] = {-2.88969,0,-0.000576986}; + N[] = {0,2.46379,0.269223}; + E[] = {2.47112,0,0.269223}; + S[] = {0,-2.46097,0.269223}; + W[] = {-2.4783,0,0.269223}; + NE[] = {2.47112,2.46379,0.269223}; + NW[] = {-2.4783,2.46379,0.269223}; + SE[] = {2.47112,-2.46097,0.269223}; + SW[] = {-2.4783,-2.46097,0.269223}; + NF[] = {0,5.237,0}; + SF[] = {0,-5.237,0}; + EF[] = {5.237,0,0}; + WF[] = {-5.237,0,0}; + NWQF[] = {-1.30925,3.92775,0}; + NQF[] = {0,3.92775,0}; + NEQF[] = {1.30925,3.92775,0}; + SWQF[] = {-1.30925,-3.92775,0}; + SQF[] = {0,-3.92775,0}; + SEQF[] = {1.30925,-3.92775,0}; + ENQF[] = {3.92775,1.30925,0}; + EQF[] = {3.92775,0,0}; + ESQF[] = {3.92775,-1.30925,0}; + WNQF[] = {-3.92775,1.30925,0}; + WQF[] = {-3.92775,0,0}; + WSQF[] = {-3.92775,-1.30925,0}; + + NWHF[] = {-1.30925,5.237,0}; + NEHF[] = {1.30925,5.237,0}; + SWHF[] = {-1.30925,-5.237,0}; + SEHF[] = {1.30925,-5.237,0}; + WNHF[] = {-5.237,1.30925,0}; + WSHF[] = {-5.237,-1.30925,0}; + ENHF[] = {5.237,1.30925,0}; + ESHF[] = {5.237,-1.30925,0}; + + }; + class WoodFloor_SIM_EPOCH : WoodFloor_EPOCH + { + allowedSnapPoints[] = {"NF","SF","EF","WF","C","Cx2"}; + allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodFloor_Ghost_EPOCH : WoodFloor_SIM_EPOCH {}; + class WoodHalfFloor_EPOCH : Default + { + upgradeBuilding[] = {{"MetalHalfFloor_EPOCH",{{"ItemCorrugatedLg",2}}}}; + removeParts[] = {{"PartPlankPack",2}}; + simulClass = "WoodHalfFloor_SIM_EPOCH"; + staticClass = "WoodHalfFloor_EPOCH"; + GhostPreview = "WoodHalfFloor_Ghost_EPOCH"; + snapPointsPara[] = {"NF","SF","EF","WF","C","Cx2","CB","NWQF","NQF","NEQF","SWQF","SQF","SEQF","ENQF","EQF","ESQF","WNQF","WQF","WSQF","NWHF","NEHF","SWHF","SEHF","WNHF","WSHF","ENHF","ESHF"}; + snapPointsPerp[] = {"N","S","E","W","CinN","CinS","CinE","CinW"}; + energyCost = 0.2; + // snap points for WoodHalfFloor_EPOCH + C[] = {0,0,3.31243}; + Cx2[] = {0,0,6.37277}; + CB[] = {0,0,0.268722}; + CinN[] = {0,2.87136,-0.000576986}; + CinE[] = {1.444845,0,-0.000576986}; + CinS[] = {0,-2.86826,-0.000576986}; + CinW[] = {-1.444845,0,-0.000576986}; + N[] = {0,2.46379,0.269223}; + E[] = {1.15,0,0.269223}; + S[] = {0,-2.46097,0.269223}; + W[] = {-1.15,0,0.269223}; + NE[] = {1.23556,2.46379,0.269223}; + NW[] = {-1.23915,2.46379,0.269223}; + SE[] = {1.23556,-2.46097,0.269223}; + SW[] = {-1.23915,-2.46097,0.269223}; + NF[] = {0,5.237,0}; + SF[] = {0,-5.237,0}; + EF[] = {3.92775,0,0}; + WF[] = {-3.92775,0,0}; + NWQF[] = {-1.30925,3.92775,0}; + NQF[] = {0,3.92775,0}; + NEQF[] = {1.30925,3.92775,0}; + SWQF[] = {1.30925,-3.92775,0}; + SQF[] = {0,-3.92775,0}; + SEQF[] = {-1.30925,-3.92775,0}; + ENQF[] = {2.6185,1.30925,0}; + EQF[] = {2.6185,0,0}; + ESQF[] = {2.6185,-1.30925,0}; + WNQF[] = {-2.6185,1.30925,0}; + WQF[] = {-2.6185,0,0}; + WSQF[] = {-2.6185,-1.30925,0}; + + NWHF[] = {-1.30925,5.237,0}; + NEHF[] = {1.30925,5.237,0}; + SWHF[] = {-1.30925,-5.237,0}; + SEHF[] = {1.30925,-5.237,0}; + WNHF[] = {-3.92775,1.30925,0}; + WSHF[] = {-3.92775,-1.30925,0}; + ENHF[] = {3.92775,1.30925,0}; + ESHF[] = {3.92775,-1.30925,0}; + + }; + class WoodHalfFloor_SIM_EPOCH : WoodHalfFloor_EPOCH + { + allowedSnapPoints[] = {"C","Cx2","NF","SF","EF","WF","NQF","SQF","EQF","WQF","NWHF","NEHF","SWHF","SEHF","WNHF","WSHF","ENHF","ESHF"}; + allowedSnapObjects[] = {"Const_floors_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodHalfFloor_Ghost_EPOCH : WoodHalfFloor_SIM_EPOCH {}; + class WoodQuarterFloor_EPOCH : Default + { + upgradeBuilding[] = {{"MetalQuarterFloor_EPOCH",{{"ItemCorrugatedLg",1}}}}; + removeParts[] = {{"PartPlankPack",1}}; + simulClass = "WoodQuarterFloor_SIM_EPOCH"; + staticClass = "WoodQuarterFloor_EPOCH"; + GhostPreview = "WoodQuarterFloor_Ghost_EPOCH"; + snapPointsPara[] = {"NF","SF","EF","WF","C","Cx2","CB","NQF","SQF","EQF","WQF"}; + snapPointsPerp[] = {"N","S","E","W","CinN","CinS","CinE","CinW"}; + energyCost = 0.1; + // snap points for WoodQuarterFloor_EPOCH + C[] = {0,0,3.31243}; + Cx2[] = {0,0,6.37277}; + CB[] = {0,0,0.268722}; + CinN[] = {0,1.43568,-0.000576986}; + CinE[] = {1.444845,0,-0.000576986}; + CinS[] = {0,-1.43412,-0.000576986}; + CinW[] = {-1.444845,0,-0.000576986}; + N[] = {0,1.15,0.269223}; + E[] = {1.15,0,0.269223}; + S[] = {0,-1.15,0.269223}; + W[] = {-1.15,0,0.269223}; + NE[] = {1.23556,1.231895,0.269223}; + NW[] = {-1.23915,1.231895,0.269223}; + SE[] = {1.23556,-1.230485,0.269223}; + SW[] = {-1.23915,-1.230485,0.269223}; + NF[] = {0,3.92775,0}; + SF[] = {0,-3.92775,0}; + EF[] = {3.92775,0,0}; + WF[] = {-3.92775,0,0}; + NQF[] = {0,2.6185,0}; + SQF[] = {0,-2.6185,0}; + EQF[] = {2.6185,0,0}; + WQF[] = {-2.6185,0,0}; + }; + class WoodQuarterFloor_SIM_EPOCH : WoodQuarterFloor_EPOCH + { + allowedSnapPoints[] = {"C","Cx2","NWQF","NQF","NEQF","SWQF","SQF","SEQF","ENQF","EQF","ESQF","WNQF","WQF","WSQF"}; + allowedSnapObjects[] = {"Const_floors_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodQuarterFloor_Ghost_EPOCH : WoodQuarterFloor_SIM_EPOCH {}; + class MetalFloor_EPOCH : WoodFloor_EPOCH + { + upgradeBuilding[] = {{"CinderFloor_EPOCH",{{"CinderBlocks",3},{"MortarBucket",3}}}}; + removeParts[] = {{"ItemCorrugatedLg",1},{"ItemCorrugated",1}}; + simulClass = "MetalFloor_SIM_EPOCH"; + staticClass = "MetalFloor_EPOCH"; + GhostPreview = "MetalFloor_Ghost_EPOCH"; + energyCost = 0.5; + }; + class MetalFloor_SIM_EPOCH : MetalFloor_EPOCH + { + allowedSnapPoints[] = {"NF","SF","EF","WF","C","Cx2"}; + allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class MetalFloor_Ghost_EPOCH : MetalFloor_SIM_EPOCH {}; + class MetalHalfFloor_EPOCH : WoodHalfFloor_EPOCH + { + upgradeBuilding[] = {{"CinderHalfFloor_EPOCH",{{"CinderBlocks",2},{"MortarBucket",2}}}}; + removeParts[] = {{"ItemCorrugatedLg",1}}; + simulClass = "MetalHalfFloor_SIM_EPOCH"; + staticClass = "MetalHalfFloor_EPOCH"; + GhostPreview = "MetalHalfFloor_Ghost_EPOCH"; + energyCost = 0.2; + }; + class MetalHalfFloor_SIM_EPOCH : MetalHalfFloor_EPOCH + { + allowedSnapPoints[] = {"C","Cx2","NF","SF","EF","WF","NWQF","NQF","NEQF","SWQF","SQF","SEQF","ENQF","EQF","ESQF","WNQF","WQF","WSQF","NWHF","NEHF","SWHF","SEHF","WNHF","WSHF","ENHF","ESHF"}; + allowedSnapObjects[] = {"Const_floors_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class MetalHalfFloor_Ghost_EPOCH : MetalHalfFloor_SIM_EPOCH {}; + class MetalQuarterFloor_EPOCH : WoodQuarterFloor_EPOCH + { + upgradeBuilding[] = {{"CinderQuarterFloor_EPOCH",{{"CinderBlocks",1},{"MortarBucket",1}}}}; + removeParts[] = {{"ItemCorrugated",1}}; + simulClass = "MetalQuarterFloor_SIM_EPOCH"; + staticClass = "MetalQuarterFloor_EPOCH"; + GhostPreview = "MetalQuarterFloor_Ghost_EPOCH"; + energyCost = 0.1; + }; + class MetalQuarterFloor_SIM_EPOCH : MetalQuarterFloor_EPOCH + { + allowedSnapPoints[] = {"C","Cx2","NWQF","NQF","NEQF","SWQF","SQF","SEQF","ENQF","EQF","ESQF","WNQF","WQF","WSQF"}; + allowedSnapObjects[] = {"Const_floors_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class MetalQuarterFloor_Ghost_EPOCH : MetalQuarterFloor_SIM_EPOCH {}; + class CinderFloor_EPOCH : WoodFloor_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {{"CinderBlocks",2},{"MortarBucket",1}}; + simulClass = "CinderFloor_SIM_EPOCH"; + staticClass = "CinderFloor_EPOCH"; + GhostPreview = "CinderFloor_Ghost_EPOCH"; + energyCost = 1; + }; + class CinderFloor_SIM_EPOCH : CinderFloor_EPOCH + { + allowedSnapPoints[] = {"NF","SF","EF","WF","C","Cx2"}; + allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class CinderFloor_Ghost_EPOCH : CinderFloor_SIM_EPOCH {}; + class CinderHalfFloor_EPOCH : WoodHalfFloor_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {{"CinderBlocks",1},{"MortarBucket",1}}; + simulClass = "CinderHalfFloor_SIM_EPOCH"; + staticClass = "CinderHalfFloor_EPOCH"; + GhostPreview = "CinderHalfFloor_Ghost_EPOCH"; + energyCost = 0.5; + }; + class CinderHalfFloor_SIM_EPOCH : CinderHalfFloor_EPOCH + { + allowedSnapPoints[] = {"C","Cx2","NF","SF","EF","WF","NWQF","NQF","NEQF","SWQF","SQF","SEQF","ENQF","EQF","ESQF","WNQF","WQF","WSQF","NWHF","NEHF","SWHF","SEHF","WNHF","WSHF","ENHF","ESHF"}; + allowedSnapObjects[] = {"Const_floors_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class CinderHalfFloor_Ghost_EPOCH : CinderHalfFloor_SIM_EPOCH {}; + class CinderQuarterFloor_EPOCH : WoodQuarterFloor_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {{"CinderBlocks",1}}; + simulClass = "CinderQuarterFloor_SIM_EPOCH"; + staticClass = "CinderQuarterFloor_EPOCH"; + GhostPreview = "CinderQuarterFloor_Ghost_EPOCH"; + energyCost = 0.25; + }; + class CinderQuarterFloor_SIM_EPOCH : CinderQuarterFloor_EPOCH + { + allowedSnapPoints[] = {"C","Cx2","NWQF","NQF","NEQF","SWQF","SQF","SEQF","ENQF","EQF","ESQF","WNQF","WQF","WSQF"}; + allowedSnapObjects[] = {"Const_floors_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class CinderQuarterFloor_Ghost_EPOCH : CinderQuarterFloor_SIM_EPOCH {}; + class CinderWallGarage_EPOCH : Default + { + removeParts[] = {{"CinderBlocks",4},{"ItemCorrugatedLg",1},{"CircuitParts",1}}; + simulClass = "CinderWallGarage_SIM_EPOCH"; + staticClass = "CinderWallGarage_EPOCH"; + GhostPreview = "CinderWallGarage_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.5; + // snap points for CinderWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + }; + class CinderWall_window_EPOCH : Default + { + removeParts[] = {{"CinderBlocks",4},{"ItemCorrugatedLg",2},{"ItemGlass",1}}; + staticClass = "CinderWall_window_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.5; + // snap points for CinderWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.47,2.8}; + }; + // Kit_Garden + class Garden_EPOCH : Default + { + removeParts[] = {{"Kit_Garden",1}}; + simulClass = "Garden_SIM_EPOCH"; + staticClass = "Garden_EPOCH"; + GhostPreview = "Garden_Ghost_EPOCH"; + snapPointsPara[] = {"NF","SF","EF","WF","C","CB"}; + snapPointsPerp[] = {"N","S","E","W","CinN","CinS","CinE","CinW"}; + energyCost = 0.5; + // snap points for Garden_EPOCH + C[] = {-0.000379709,0.000134847,2.6837}; + CB[] = {-0.000379709,0.000134847,0.279171}; + CinN[] = {-0.000379709,2.26851,0.0664249}; + CinE[] = {2.27378,0.000134847,0.0664249}; + CinS[] = {-0.000379709,-2.26579,0.0664249}; + CinW[] = {-2.28323,0.000134847,0.0664249}; + N[] = {-0.000379709,1.94653,0.279567}; + E[] = {1.95181,0.000134847,0.279567}; + S[] = {-0.000379709,-1.94403,0.279567}; + W[] = {-1.95824,0.000134847,0.279567}; + NE[] = {1.95181,1.94653,0.279567}; + NW[] = {-1.95824,1.94653,0.279567}; + SE[] = {1.95181,-1.94403,0.279567}; + SW[] = {-1.95824,-1.94403,0.279567}; + NF[] = {-0.000379709,4.13736,0.0668807}; + SF[] = {-0.000379709,-4.1371,0.0668807}; + EF[] = {4.13685,0.000134847,0.0668807}; + WF[] = {-4.13761,0.000134847,0.0668807}; + }; + class Garden_SIM_EPOCH : Garden_EPOCH + { + allowedSnapPoints[] = {"NF","SF","EF","WF","C"}; + allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"}; + removeParts[] = {}; + }; + class Garden_Ghost_EPOCH : Garden_SIM_EPOCH {}; + class BarbedWire_EPOCH : Default + { + removeParts[] = {{"ItemScraps",10},{"ItemRope",2}}; + simulClass = "BarbedWire_SIM_EPOCH"; + staticClass = "BarbedWire_EPOCH"; + GhostPreview = "BarbedWire_Ghost_EPOCH"; + energyCost = 0.5; + }; + class BarbedWire_SIM_EPOCH : BarbedWire_EPOCH + { + allowedSnapObjects[] = {"BarbedWire_SIM_EPOCH"}; + removeParts[] = {}; + }; + class BarbedWire_Ghost_EPOCH : BarbedWire_SIM_EPOCH {}; + + class CinderWallGarage_SIM_EPOCH : CinderWallGarage_EPOCH + { + allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F","Const_WoodWalls_static_F"}; + removeParts[] = {}; + }; + class CinderWallHalf_EPOCH : Default + { + upgradeBuilding[] = {{"CinderWall_EPOCH",{{"CinderBlocks",2},{"MortarBucket",1}}}}; + removeParts[] = {{"CinderBlocks",2},{"ItemRock",1}}; + simulClass = "CinderWallHalf_SIM_EPOCH"; + staticClass = "CinderWallHalf_EPOCH"; + GhostPreview = "CinderWallHalf_Ghost_EPOCH"; + energyCost = 0.2; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + // snap points for CinderWallHalf_EPOCH + N[] = {0,0,1.57378}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.47,1.4}; + }; + class CinderWallHalf_SIM_EPOCH : CinderWallHalf_EPOCH + { + allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F","Const_WoodWalls_static_F"}; + removeParts[] = {}; + upgradeBuilding[] = {}; + }; + class CinderWallHalf_Ghost_EPOCH : CinderWallHalf_SIM_EPOCH {}; + class CinderWall_EPOCH : Default + { + upgradeBuilding[] = {{"CinderWallGarage_EPOCH",{{"ItemCorrugatedLg",1},{"CircuitParts",1}}},{"CinderWallDoorwHatch_EPOCH",{{"ItemCorrugatedLg",1},{"CircuitParts",1}}},{"CinderWall_window_EPOCH",{{"ItemCorrugatedLg",2},{"ItemGlass",1}}}}; + removeParts[] = {{"CinderBlocks",4},{"ItemRock",2}}; + simulClass = "CinderWall_SIM_EPOCH"; + staticClass = "CinderWall_EPOCH"; + GhostPreview = "CinderWall_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.4; + // snap points for CinderWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.47,2.8}; + }; + class CinderWall_SIM_EPOCH : CinderWall_EPOCH + { + allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F","Const_WoodWalls_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class CinderWallDoorwHatch_EPOCH : Default + { + removeParts[] = {{"CinderBlocks",4},{"ItemCorrugatedLg",1},{"CircuitParts",1}}; + staticClass = "CinderWallDoorwHatch_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + // snap points for CinderWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.47,2.8}; + }; + class WoodLargeWall_EPOCH : Default + { + upgradeBuilding[] = {{"WoodWall1_EPOCH",{{"ItemPlywoodPack",1}}},{"WoodLargeWallCor_EPOCH",{{"ItemCorrugated",1}}}}; + removeParts[] = {{"PartPlankPack",2}}; + simulClass = "WoodLargeWall_SIM_EPOCH"; + staticClass = "WoodLargeWall_EPOCH"; + GhostPreview = "WoodLargeWall_Ghost_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W"}; + allowedSnapPoints[] = {"N","S","E","W"}; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + }; + class WoodLargeWall_SIM_EPOCH : WoodLargeWall_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {}; + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"}; + }; + class WoodLargeWall_Ghost_EPOCH : WoodLargeWall_SIM_EPOCH {}; + class JailWall_EPOCH : Default + { + upgradeBuilding[] = {{"JailWallDoor_EPOCH",{{"ItemPipe",2},{"ItemCorrugated",2}}}}; + removeParts[] = {{"ItemPipe",2},{"ItemScraps",2}}; + simulClass = "JailWall_SIM_EPOCH"; + staticClass = "JailWall_EPOCH"; + GhostPreview = "JailWall_Ghost_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W"}; + allowedSnapPoints[] = {"N","S","E","W"}; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + }; + class JailWall_SIM_EPOCH : JailWall_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {}; + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"}; + }; + class JailWall_Ghost_EPOCH : JailWall_SIM_EPOCH {}; + class JailWallDoor_EPOCH : Default + { + removeParts[] = {{"ItemPipe",3},{"ItemScraps",4}}; + staticClass = "JailWallDoor_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W"}; + allowedSnapPoints[] = {"N","S","E","W"}; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + }; + class PlyThirdWall_EPOCH : Default + { + upgradeBuilding[] = {}; + removeParts[] = {{"PartPlankPack",1},{"ItemPlywoodPack",1}}; + simulClass = "PlyThirdWall_SIM_EPOCH"; + staticClass = "PlyThirdWall_EPOCH"; + GhostPreview = "PlyThirdWall_Ghost_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W"}; + allowedSnapPoints[] = {"N","S","E","W"}; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,1.02012}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + }; + class PlyThirdWall_SIM_EPOCH : PlyThirdWall_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {}; + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"}; + }; + class PlyThirdWall_Ghost_EPOCH : PlyThirdWall_SIM_EPOCH {}; + class WoodWall1_EPOCH : Default + { + upgradeBuilding[] = {{"WoodWall2_EPOCH",{{"PartPlankPack",1}}},{"WoodLargeWallCor_EPOCH",{{"ItemCorrugated",1}}},{"WoodWallWindow_EPOCH",{{"ItemGlass",2}}},{"WoodWallGarage_EPOCH",{{"ItemPlywoodPack",1},{"PartPlankPack",4},{"CircuitParts",1}}}}; + removeParts[] = {{"PartPlankPack",2}}; + simulClass = "WoodWall1_SIM_EPOCH"; + staticClass = "WoodWall1_EPOCH"; + GhostPreview = "WoodWall1_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.2; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.4,2.8}; + }; + class WoodWall1_SIM_EPOCH : WoodWall1_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"}; + energyCost = 0.2; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodWallWindow_EPOCH : Default + { + removeParts[] = {{"ItemGlass",2},{"PartPlankPack",2}}; + staticClass = "WoodWallWindow_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.5; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.4,2.8}; + }; + class WoodLargeWallCor_EPOCH : Default + { + upgradeBuilding[] = {{"WoodLargeWallDoorway_EPOCH",{{"PartPlankPack",1}}},{"MetalWallGarage_EPOCH",{{"ItemCorrugated",1},{"PartPlankPack",4},{"CircuitParts",1}}}}; + removeParts[] = {{"PartPlankPack",2},{"ItemCorrugated",1}}; + simulClass = "WoodLargeWallCor_SIM_EPOCH"; + staticClass = "WoodLargeWallCor_EPOCH"; + GhostPreview = "WoodLargeWallCor_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.2; + availableTextures[] = {"\x\addons\a3_epoch_assets\textures\cor\corrugated_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_black_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_blue_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_brown_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_green_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_orange_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_purple_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_red_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_teal_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_yellow_co.paa"}; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.47,2.8}; + }; + class WoodLargeWallCor_SIM_EPOCH : WoodLargeWallCor_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class MetalWallGarage_EPOCH : Default + { + removeParts[] = {{"PartPlankPack",2},{"ItemScraps",2},{"CircuitParts",1}}; + simulClass = "MetalWallGarage_SIM_EPOCH"; + staticClass = "MetalWallGarage_EPOCH"; + GhostPreview = "MetalWallGarage_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.5; + // snap points for CinderWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + }; + class MetalWallGarage_SIM_EPOCH : MetalWallGarage_EPOCH + { + allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F","Const_WoodWalls_static_F"}; + removeParts[] = {}; + }; + class WoodWallGarage_EPOCH : Default + { + removeParts[] = {{"PartPlankPack",2},{"CircuitParts",1}}; + simulClass = "WoodWallGarage_SIM_EPOCH"; + staticClass = "WoodWallGarage_EPOCH"; + GhostPreview = "WoodWallGarage_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.5; + // snap points for CinderWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + }; + class WoodWallGarage_SIM_EPOCH : MetalWallGarage_EPOCH + { + allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F","Const_WoodWalls_static_F"}; + removeParts[] = {}; + }; + class WoodWall2_EPOCH : Default + { + upgradeBuilding[] = {{"WoodWall3_EPOCH",{{"ItemPlywoodPack",1},{"PartPlankPack",1}}},{"WoodLargeWallDoor_EPOCH",{{"ItemCorrugated",1},{"PartPlankPack",1}}}}; + removeParts[] = {{"ItemPlywoodPack",1},{"PartPlankPack",2}}; + simulClass = "WoodWall2_SIM_EPOCH"; + staticClass = "WoodWall2_EPOCH"; + GhostPreview = "WoodWall2_EPOCH"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.2; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.4,2.8}; + }; + class WoodWall2_SIM_EPOCH : WoodWall2_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodLargeWallDoorway_EPOCH : Default + { + upgradeBuilding[] = {{"WoodLargeWallDoor_EPOCH",{{"ItemCorrugated",1},{"PartPlankPack",1}}}}; + removeParts[] = {{"PartPlankPack",2},{"ItemCorrugated",1}}; + simulClass = "WoodLargeWallDoorway_SIM_EPOCH"; + staticClass = "WoodLargeWallDoorway_EPOCH"; + GhostPreview = "WoodLargeWallDoorway_EPOCH"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.2; + availableTextures[] = {"\x\addons\a3_epoch_assets\textures\cor\corrugated_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_black_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_blue_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_brown_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_green_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_orange_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_purple_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_red_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_teal_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_yellow_co.paa"}; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.47,2.8}; + }; + class WoodLargeWallDoorway_SIM_EPOCH : WoodLargeWallDoorway_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodWall3_EPOCH : Default + { + upgradeBuilding[] = {{"WoodWall4_EPOCH",{{"CircuitParts",1}}},{"WoodLargeWallDoorL_EPOCH",{{"ItemCorrugated",1},{"CircuitParts",1}}}}; + removeParts[] = {{"ItemPlywoodPack",1},{"PartPlankPack",2}}; + simulClass = "WoodWall3_SIM_EPOCH"; + staticClass = "WoodWall3_EPOCH"; + GhostPreview = "WoodWall3_EPOCH"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.2; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.4,2.8}; + }; + class WoodWall3_SIM_EPOCH : WoodWall3_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodLargeWallDoor_EPOCH : Default + { + upgradeBuilding[] = {{"WoodLargeWallDoorL_EPOCH",{{"ItemCorrugated",1},{"CircuitParts",1}}}}; + removeParts[] = {{"PartPlankPack",2},{"ItemCorrugated",1}}; + simulClass = "WoodLargeWallDoor_SIM_EPOCH"; + staticClass = "WoodLargeWallDoor_EPOCH"; + GhostPreview = "WoodLargeWallDoor_EPOCH"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + availableTextures[] = {"\x\addons\a3_epoch_assets\textures\cor\corrugated_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_black_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_blue_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_brown_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_green_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_orange_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_purple_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_red_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_teal_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_yellow_co.paa"}; + energyCost = 0.2; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.47,2.8}; + }; + class WoodLargeWallDoor_SIM_EPOCH : WoodLargeWallDoor_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodWall4_EPOCH : Default + { + removeParts[] = {{"ItemPlywoodPack",1},{"PartPlankPack",2},{"CircuitParts",1}}; + simulClass = "WoodWall4_SIM_EPOCH"; + staticClass = "WoodWall4_EPOCH"; + GhostPreview = "WoodWall4_EPOCH"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.2; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.4,2.8}; + }; + class WoodWall4_SIM_EPOCH : WoodWall4_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodLargeWallDoorL_EPOCH : Default + { + removeParts[] = {{"PartPlankPack",2},{"ItemCorrugated",1},{"CircuitParts",1}}; + simulClass = "WoodLargeWallDoorL_SIM_EPOCH"; + staticClass = "WoodLargeWallDoorL_EPOCH"; + GhostPreview = "WoodLargeWallDoorL_EPOCH"; + snapPointsPara[] = {"N","E","W","CAM"}; + allowedSnapPoints[] = {"N","S","E","W"}; + availableTextures[] = {"\x\addons\a3_epoch_assets\textures\cor\corrugated_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_black_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_blue_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_brown_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_green_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_orange_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_purple_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_red_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_teal_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_yellow_co.paa"}; + energyCost = 0.2; + // snap points for WoodLargeWall_EPOCH + N[] = {0,0,3.06034}; + E[] = {5.237,0,0}; + W[] = {-5.237,0,0}; + CAM[] = {0,-0.47,2.8}; + }; + class WoodLargeWallDoorL_SIM_EPOCH : WoodLargeWallDoorL_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodStairs_EPOCH : Default + { + upgradeBuilding[] = {{"WoodStairs2_EPOCH",{{"PartPlankPack",4}}}}; + removeParts[] = {{"PartPlankPack",4}}; + simulClass = "WoodStairs_SIM_EPOCH"; + staticClass = "WoodStairs_EPOCH"; + GhostPreview = "WoodStairs_Ghost_EPOCH"; + snapPointsPara[] = {}; + snapPointsPerp[] = {}; + energyCost = 0.2; + // snap points for WoodStairs_EPOCH + NF2[] = {0,5.237,0}; + SF2[] = {0,-5.237,0}; + EF2[] = {5.237,0,0}; + WF2[] = {-5.237,-0.003,0}; + C[] = {-0.000251044,-0.00293543,6.37273}; + CB[] = {-0.000299305,-0.000390954,3.32902}; + CinN[] = {0.0214193,2.87136,3.05972}; + CinE[] = {2.87868,-0.000390954,3.05972}; + CinS[] = {0.0214193,-2.86826,3.05972}; + CinW[] = {-2.88969,-0.000390954,3.05972}; + N[] = {0.0195083,2.46379,3.32952}; + E[] = {2.47112,-0.000253316,3.32952}; + S[] = {0.0195083,-2.46097,3.32952}; + W[] = {-2.4783,-0.000253316,3.32952}; + NE[] = {2.47112,2.46379,3.32952}; + NW[] = {-2.4783,2.46379,3.32952}; + SE[] = {2.47112,-2.46097,3.32952}; + SW[] = {-2.4783,-2.46097,3.32952}; + NF[] = {0,5.237,3.06}; + SF[] = {0,-5.237,3.06}; + EF[] = {5.237,0,3.06}; + WF[] = {-5.237,0,3.06}; + NWQF[] = {-1.30925,3.92775,3.06}; + NQF[] = {0,3.92775,3.06}; + NEQF[] = {1.30925,3.92775,3.06}; + SWQF[] = {-1.30925,-3.92775,3.06}; + SQF[] = {0,-3.92775,3.06}; + SEQF[] = {1.30925,-3.92775,3.06}; + ENQF[] = {3.92775,1.30925,3.06}; + EQF[] = {3.92775,0,3.06}; + ESQF[] = {3.92775,-1.30925,3.06}; + WNQF[] = {-3.92775,1.30925,3.06}; + WQF[] = {-3.92775,0,3.06}; + WSQF[] = {-3.92775,-1.30925,3.06}; + + NWHF[] = {-1.30925,5.237,3.06}; + NEHF[] = {1.30925,5.237,3.06}; + SWHF[] = {-1.30925,-5.237,3.06}; + SEHF[] = {1.30925,-5.237,3.06}; + WNHF[] = {-5.237,1.30925,3.06}; + WSHF[] = {-5.237,-1.30925,3.06}; + ENHF[] = {5.237,1.30925,3.06}; + ESHF[] = {5.237,-1.30925,3.06}; + + }; + class WoodStairs_SIM_EPOCH : WoodStairs_EPOCH + { + allowedSnapPoints[] = {"NF","SF","EF","WF","CB","CS"}; + allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodStairs_Ghost_EPOCH : WoodStairs_SIM_EPOCH {}; + class WoodStairs2_EPOCH : Default + { + upgradeBuilding[] = {{"WoodStairs3_EPOCH",{{"ItemPipe",1},{"CircuitParts",1}}}}; + removeParts[] = {{"PartPlankPack",4}}; + simulClass = "WoodStairs2_SIM_EPOCH"; + staticClass = "WoodStairs2_EPOCH"; + GhostPreview = "WoodStairs2_EPOCH"; + snapPointsPara[] = {"NF2","SF2","EF2","WF2","NF","SF","EF","WF","C","CB","NWQF","NQF","NEQF","SWQF","SQF","SEQF","ENQF","EQF","ESQF","WNQF","WQF","WSQF","NWHF","NEHF","SWHF","SEHF","WNHF","WSHF","ENHF","ESHF"}; + snapPointsPerp[] = {"N","S","E","W","CinN","CinS","CinE","CinW"}; + energyCost = 0.3; + // snap points for WoodStairs_EPOCH + NF2[] = {0,5.237,0}; + SF2[] = {0,-5.237,0}; + EF2[] = {5.237,0,0}; + WF2[] = {-5.237,-0.003,0}; + C[] = {-0.000251044,-0.00293543,6.37273}; + CB[] = {-0.000299305,-0.000390954,3.32902}; + CS[] = {-0.000251044,-0.00293543,3.060298}; // 2x WoodStairs without Space for Floor + CinN[] = {0.0214193,2.87136,3.05972}; + CinE[] = {2.87868,-0.000390954,3.05972}; + CinS[] = {0.0214193,-2.86826,3.05972}; + CinW[] = {-2.88969,-0.000390954,3.05972}; + N[] = {0.0195083,2.46379,3.32952}; + E[] = {2.47112,-0.000253316,3.32952}; + S[] = {0.0195083,-2.46097,3.32952}; + W[] = {-2.4783,-0.000253316,3.32952}; + NE[] = {2.47112,2.46379,3.32952}; + NW[] = {-2.4783,2.46379,3.32952}; + SE[] = {2.47112,-2.46097,3.32952}; + SW[] = {-2.4783,-2.46097,3.32952}; + NF[] = {0,5.237,3.06}; + SF[] = {0,-5.237,3.06}; + EF[] = {5.237,0,3.06}; + WF[] = {-5.237,0,3.06}; + NWQF[] = {-1.30925,3.92775,3.06}; + NQF[] = {0,3.92775,3.06}; + NEQF[] = {1.30925,3.92775,3.06}; + SWQF[] = {-1.30925,-3.92775,3.06}; + SQF[] = {0,-3.92775,3.06}; + SEQF[] = {1.30925,-3.92775,3.06}; + ENQF[] = {3.92775,1.30925,3.06}; + EQF[] = {3.92775,0,3.06}; + ESQF[] = {3.92775,-1.30925,3.06}; + WNQF[] = {-3.92775,1.30925,3.06}; + WQF[] = {-3.92775,0,3.06}; + WSQF[] = {-3.92775,-1.30925,3.06}; + + NWHF[] = {-1.30925,5.237,3.06}; + NEHF[] = {1.30925,5.237,3.06}; + SWHF[] = {-1.30925,-5.237,3.06}; + SEHF[] = {1.30925,-5.237,3.06}; + WNHF[] = {-5.237,1.30925,3.06}; + WSHF[] = {-5.237,-1.30925,3.06}; + ENHF[] = {5.237,1.30925,3.06}; + ESHF[] = {5.237,-1.30925,3.06}; + + }; + class WoodStairs2_SIM_EPOCH : WoodStairs2_EPOCH + { + allowedSnapPoints[] = {"NF","SF","EF","WF","CB"}; + allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"}; + removeParts[] = {}; + }; + class WoodStairs3_EPOCH : Default + { + removeParts[] = {{"PartPlankPack",4},{"ItemPipe",1},{"CircuitParts",1}}; + simulClass = "WoodStairs3_SIM_EPOCH"; + staticClass = "WoodStairs3_EPOCH"; + GhostPreview = "WoodStairs3_EPOCH"; + snapPointsPara[] = {"NF2","SF2","EF2","WF2","NF","SF","EF","WF","C","CB","NWQF","NQF","NEQF","SWQF","SQF","SEQF","ENQF","EQF","ESQF","WNQF","WQF","WSQF","NWHF","NEHF","SWHF","SEHF","WNHF","WSHF","ENHF","ESHF"}; + snapPointsPerp[] = {"N","S","E","W","CinN","CinS","CinE","CinW"}; + energyCost = 0.3; + // snap points for WoodStairs_EPOCH + NF2[] = {0,5.237,0}; + SF2[] = {0,-5.237,0}; + EF2[] = {5.237,0,0}; + WF2[] = {-5.237,-0.003,0}; + C[] = {-0.000251044,-0.00293543,6.37273}; + CB[] = {-0.000299305,-0.000390954,3.32902}; + CS[] = {-0.000251044,-0.00293543,3.060298}; // 2x WoodStairs without Space for Floor + CinN[] = {0.0214193,2.87136,3.05972}; + CinE[] = {2.87868,-0.000390954,3.05972}; + CinS[] = {0.0214193,-2.86826,3.05972}; + CinW[] = {-2.88969,-0.000390954,3.05972}; + N[] = {0.0195083,2.46379,3.32952}; + E[] = {2.47112,-0.000253316,3.32952}; + S[] = {0.0195083,-2.46097,3.32952}; + W[] = {-2.4783,-0.000253316,3.32952}; + NE[] = {2.47112,2.46379,3.32952}; + NW[] = {-2.4783,2.46379,3.32952}; + SE[] = {2.47112,-2.46097,3.32952}; + SW[] = {-2.4783,-2.46097,3.32952}; + NF[] = {0,5.237,3.06}; + SF[] = {0,-5.237,3.06}; + EF[] = {5.237,0,3.06}; + WF[] = {-5.237,0,3.06}; + NWQF[] = {-1.30925,3.92775,3.06}; + NQF[] = {0,3.92775,3.06}; + NEQF[] = {1.30925,3.92775,3.06}; + SWQF[] = {-1.30925,-3.92775,3.06}; + SQF[] = {0,-3.92775,3.06}; + SEQF[] = {1.30925,-3.92775,3.06}; + ENQF[] = {3.92775,1.30925,3.06}; + EQF[] = {3.92775,0,3.06}; + ESQF[] = {3.92775,-1.30925,3.06}; + WNQF[] = {-3.92775,1.30925,3.06}; + WQF[] = {-3.92775,0,3.06}; + WSQF[] = {-3.92775,-1.30925,3.06}; + + NWHF[] = {-1.30925,5.237,3.06}; + NEHF[] = {1.30925,5.237,3.06}; + SWHF[] = {-1.30925,-5.237,3.06}; + SEHF[] = {1.30925,-5.237,3.06}; + WNHF[] = {-5.237,1.30925,3.06}; + WSHF[] = {-5.237,-1.30925,3.06}; + ENHF[] = {5.237,1.30925,3.06}; + ESHF[] = {5.237,-1.30925,3.06}; + + }; + class WoodStairs3_SIM_EPOCH : WoodStairs3_EPOCH + { + allowedSnapPoints[] = {"NF","SF","EF","WF","CB"}; + allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"}; + removeParts[] = {}; + }; + class WoodTower_EPOCH : Default + { + removeParts[] = {{"PartPlankPack",4}}; + upgradeBuilding[] = {{"MetalTower_EPOCH",{{"ItemCorrugatedLg",4}}}}; + upgradeBuildingPart[] = {{"ItemPlywoodPack",1},{"PartPlankPack",2}}; + removeBuildingPart[] = {{"ItemPlywoodPack",1},{"PartPlankPack",2}}; + simulClass = "WoodTower_SIM_EPOCH"; + staticClass = "WoodTower_EPOCH"; + GhostPreview = "WoodTower_Ghost_EPOCH"; + snapPointsPara[] = {"NF2","SF2","EF2","WF2","NF","SF","EF","WF","C","CB"}; + snapPointsPerp[] = {"N","S","E","W","CinN","CinS","CinE","CinW"}; + persistAnimations[] = {"NWall","EWall","SWall","WWall"}; + energyCost = 0.3; + // snap points for WoodTower_EPOCH + NF2[] = {0,5.237,0}; + SF2[] = {0,-5.237,0}; + EF2[] = {5.237,0,0}; + WF2[] = {-5.237,-0.003,0}; + C[] = {-0.000251044,-0.00293543,6.36635}; + CB[] = {-0.000299305,-0.000390954,3.32569}; + CinN[] = {0.0214193,2.87136,3.05666}; + CinE[] = {2.87868,-0.000390954,3.05666}; + CinS[] = {0.0214193,-2.86826,3.05666}; + CinW[] = {-2.88969,-0.000390954,3.05666}; + N[] = {0.0195083,2.46379,3.32619}; + E[] = {2.47112,-0.000253316,3.32619}; + S[] = {0.0195083,-2.46097,3.32619}; + W[] = {-2.4783,-0.000253316,3.32619}; + NE[] = {2.47112,2.46379,3.32619}; + NW[] = {-2.4783,2.46379,3.32619}; + SE[] = {2.47112,-2.46097,3.32619}; + SW[] = {-2.4783,-2.46097,3.32619}; + NF[] = {0,5.237,3.05694}; + SF[] = {0,-5.237,3.05694}; + EF[] = {5.237,0,3.05694}; + WF[] = {-5.237,0,3.05694}; + }; + class WoodTower_SIM_EPOCH : WoodTower_EPOCH + { + allowedSnapPoints[] = {"NF2","SF2","EF2","WF2","CB"}; + allowedSnapObjects[] = {"WoodTower_EPOCH","Const_floors_static_F","Constructions_foundation_F"}; + energyCost = 0.3; + }; + class WoodTower_Ghost_EPOCH : WoodTower_SIM_EPOCH {}; + class MetalTower_EPOCH : WoodTower_EPOCH + { + removeParts[] = {{"ItemCorrugatedLg",2}}; + upgradeBuilding[] = {{"CinderTower_EPOCH",{{"CinderBlocks",4},{"MortarBucket",4}}}}; + upgradeBuildingPart[] = {{"ItemCorrugatedLg",2}}; + removeBuildingPart[] = {{"ItemCorrugatedLg",1}}; + simulClass = "MetalTower_SIM_EPOCH"; + staticClass = "MetalTower_EPOCH"; + GhostPreview = "MetalTower_Ghost_EPOCH"; + energyCost = 0.4; + }; + class MetalTower_SIM_EPOCH : MetalTower_EPOCH + { + allowedSnapPoints[] = {"NF2","SF2","EF2","WF2","CB"}; + allowedSnapObjects[] = {"MetalTower_EPOCH","Const_floors_static_F","Constructions_foundation_F"}; + }; + class MetalTower_Ghost_EPOCH : MetalTower_SIM_EPOCH {}; + class CinderTower_EPOCH : WoodTower_EPOCH + { + removeParts[] = {{"CinderBlocks",2},{"MortarBucket",2}}; + upgradeBuildingPart[] = {{"CinderBlocks",2},{"MortarBucket",2}}; + removeBuildingPart[] = {{"CinderBlocks",2}}; + simulClass = "CinderTower_SIM_EPOCH"; + staticClass = "CinderTower_EPOCH"; + GhostPreview = "CinderTower_Ghost_EPOCH"; + energyCost = 0.5; + }; + class CinderTower_SIM_EPOCH : CinderTower_EPOCH + { + allowedSnapPoints[] = {"NF2","SF2","EF2","WF2","CB"}; + allowedSnapObjects[] = {"CinderTower_EPOCH","Const_floors_static_F","Constructions_foundation_F"}; + }; + class CinderTower_Ghost_EPOCH : CinderTower_SIM_EPOCH {}; + + class WoodLadder_EPOCH : Default + { + removeParts[] = {{"PartPlankPack",2}}; + simulClass = "WoodLadder_SIM_EPOCH"; + staticClass = "WoodLadder_EPOCH"; + GhostPreview = "WoodLadder_Ghost_EPOCH"; + energyCost = 0.1; + }; + class WoodLadder_SIM_EPOCH : WoodLadder_EPOCH + { + removeParts[] = {}; + }; + class WoodLadder_Ghost_EPOCH : WoodLadder_SIM_EPOCH {}; + class Tipi_EPOCH : Default + { + removeParts[] = {{"Pelt_EPOCH",2},{"PartPlankPack",1}}; + GhostPreview = "Tipi_Ghost_EPOCH"; + staticClass = "Tipi_EPOCH"; + simulClass = "Tipi_SIM_EPOCH"; + limitNearby = 2; + bypassJammer = 1; + }; + class Tipi_SIM_EPOCH : Tipi_EPOCH + { + simulClass = "Tipi_SIM_EPOCH"; + staticClass = "Tipi_EPOCH"; + limitNearby = 2; + bypassJammer = 1; + removeParts[] = {}; + }; + class Tipi_Ghost_EPOCH : Tipi_SIM_EPOCH {}; + class TentA_EPOCH : Default + { + removeParts[] = {{"KitTentA",1}}; + GhostPreview = "TentA_Ghost_EPOCH"; + staticClass = "TentA_EPOCH"; + simulClass = "TentA_SIM_EPOCH"; + limitNearby = 2; + bypassJammer = 1; + }; + class TentA_SIM_EPOCH : TentA_EPOCH + { + simulClass = "TentA_SIM_EPOCH"; + staticClass = "TentA_EPOCH"; + limitNearby = 2; + bypassJammer = 1; + removeParts[] = {}; + }; + class TentA_Ghost_EPOCH : TentA_SIM_EPOCH {}; + class TentDome_EPOCH : Default + { + removeParts[] = {{"KitTentDome",1}}; + GhostPreview = "TentDome_Ghost_EPOCH"; + staticClass = "TentDome_EPOCH"; + simulClass = "TentDome_SIM_EPOCH"; + limitNearby = 2; + bypassJammer = 1; + }; + class TentDome_SIM_EPOCH : TentA_EPOCH + { + simulClass = "TentDome_SIM_EPOCH"; + staticClass = "TentDome_EPOCH"; + limitNearby = 2; + bypassJammer = 1; + removeParts[] = {}; + }; + class TentDome_Ghost_EPOCH : TentDome_SIM_EPOCH {}; + class StorageShelf_EPOCH : Default + { + removeParts[] = {{"ItemCorrugated",2}}; + GhostPreview = "StorageShelf_Ghost_EPOCH"; + staticClass = "StorageShelf_EPOCH"; + simulClass = "StorageShelf_SIM_EPOCH"; + limitNearby = 5; + bypassJammer = 1; + }; + class StorageShelf_SIM_EPOCH : StorageShelf_EPOCH + { + removeParts[] = {}; + }; + class StorageShelf_Ghost_EPOCH : StorageShelf_SIM_EPOCH {}; + class Workbench_EPOCH : Default + { + removeParts[] = {{"PartPlankPack",2}}; + GhostPreview = "WorkBench_Ghost_EPOCH"; + staticClass = "WorkBench_EPOCH"; + simulClass = "WorkBench_SIM_EPOCH"; + limitNearby = 5; + bypassJammer = 1; + }; + class WorkBench_SIM_EPOCH : Workbench_EPOCH + { + removeParts[] = {}; + }; + class WorkBench_Ghost_EPOCH : WorkBench_SIM_EPOCH {}; + class SolarCharger_EPOCH : Default + { + removeParts[] = {{"KitSolarCharger",1}}; + GhostPreview = "SolarCharger_Ghost_EPOCH"; + staticClass = "SolarCharger_EPOCH"; + simulClass = "SolarCharger_SIM_EPOCH"; + }; + class SolarCharger_SIM_EPOCH : SolarCharger_EPOCH + { + removeParts[] = {}; + }; + class SolarCharger_Ghost_EPOCH : SolarCharger_SIM_EPOCH {}; + class SolarChargerXL_EPOCH : Default + { + removeParts[] = {{"KitSolarChargerXL",1}}; + GhostPreview = "SolarChargerXL_Ghost_EPOCH"; + staticClass = "SolarChargerXL_EPOCH"; + simulClass = "SolarChargerXL_SIM_EPOCH"; + }; + class SolarChargerXL_SIM_EPOCH : SolarChargerXL_EPOCH + { + removeParts[] = {}; + }; + class SolarChargerXL_Ghost_EPOCH : SolarChargerXL_SIM_EPOCH {}; + class LockBox_EPOCH : Default + { + returnOnPack[] = {{"ItemLockbox",1}}; + simulClass = "LockBox_SIM_EPOCH"; + staticClass = "LockBox_EPOCH"; + weaponHolderProxy = "LockBoxProxy_EPOCH"; + GhostPreview = "LockBox_EPOCH"; + bypassJammer = 1; + limitNearby = 2; + isSecureStorage = 1; + }; + class LockBox_SIM_EPOCH : LockBox_EPOCH + { + returnOnPack[] = {}; + }; + class Safe_EPOCH : Default + { + returnOnPack[] = {{"ItemSafe",1}}; + simulClass = "Safe_SIM_EPOCH"; + staticClass = "Safe_EPOCH"; + weaponHolderProxy = "SafeProxy_EPOCH"; + GhostPreview = "Safe_EPOCH"; + bypassJammer = 1; + limitNearby = 2; + isSecureStorage = 1; + }; + class Safe_SIM_EPOCH : Safe_EPOCH + { + returnOnPack[] = {}; + }; + class Safe_s_EPOCH : Default + { + returnOnPack[] = {{"ItemSafe_s",1}}; + simulClass = "Safe_s_SIM_EPOCH"; + staticClass = "Safe_s_EPOCH"; + weaponHolderProxy = "SafeProxy_EPOCH"; + GhostPreview = "Safe_s_EPOCH"; + bypassJammer = 1; + limitNearby = 2; + isSecureStorage = 1; + }; + class Safe_s_SIM_EPOCH : Safe_s_EPOCH + { + returnOnPack[] = {}; + }; + class GunSafe_EPOCH : Default + { + returnOnPack[] = {{"ItemGunSafe",1}}; + simulClass = "GunSafe_SIM_EPOCH"; + staticClass = "GunSafe_EPOCH"; + weaponHolderProxy = "SafeProxy_EPOCH"; + GhostPreview = "GunSafe_EPOCH"; + bypassJammer = 1; + limitNearby = 2; + isSecureStorage = 1; + }; + class GunSafe_SIM_EPOCH : GunSafe_EPOCH + { + returnOnPack[] = {}; + }; + class Jack_EPOCH : Default + { + simulClass = "Jack_SIM_EPOCH"; + staticClass = "Jack_EPOCH"; + GhostPreview = "Jack_EPOCH"; + limitNearby = 2; + bypassJammer = 1; + energyCost = 0.1; + }; + class Jack_SIM_EPOCH : Jack_EPOCH {}; + class BurnBarrel_EPOCH : Default + { + removeParts[] = {{"KitBurnBarrel",1}}; + GhostPreview = "BurnBarrel_Ghost_EPOCH"; + staticClass = "BurnBarrel_EPOCH"; + simulClass = "BurnBarrel_SIM_EPOCH"; + }; + class BurnBarrel_SIM_EPOCH : BurnBarrel_EPOCH + { + removeParts[] = {}; + }; + class BurnBarrel_Ghost_EPOCH : BurnBarrel_SIM_EPOCH {}; + class LightPole_EPOCH : Default + { + removeParts[] = {{"KitLightPole",1}}; + GhostPreview = "LightPole_Ghost_EPOCH"; + staticClass = "LightPole_EPOCH"; + simulClass = "LightPole_SIM_EPOCH"; + }; + class LightPole_SIM_EPOCH : LightPole_EPOCH + { + removeParts[] = {}; + }; + class LightPole_Ghost_EPOCH : LightPole_SIM_EPOCH {}; + class SmallForestCamoNet_EPOCH : Default + { + removeParts[] = {{"KitSmallForestCamoNet",1}}; + GhostPreview = "SmallForestCamoNet_Ghost_EPOCH"; + staticClass = "SmallForestCamoNet_EPOCH"; + simulClass = "SmallForestCamoNet_SIM_EPOCH"; + }; + class SmallForestCamoNet_SIM_EPOCH : SmallForestCamoNet_EPOCH + { + removeParts[] = {}; + }; + class SmallForestCamoNet_Ghost_EPOCH : SmallForestCamoNet_SIM_EPOCH {}; + class SmallDesertCamoNet_EPOCH : Default + { + removeParts[] = {{"KitSmallDesertCamoNet",1}}; + GhostPreview = "SmallDesertCamoNet_Ghost_EPOCH"; + staticClass = "SmallDesertCamoNet_EPOCH"; + simulClass = "SmallDesertCamoNet_SIM_EPOCH"; + }; + class SmallDesertCamoNet_SIM_EPOCH : SmallDesertCamoNet_EPOCH + { + removeParts[] = {}; + }; + class SmallDesertCamoNet_Ghost_EPOCH : SmallDesertCamoNet_SIM_EPOCH {}; + class LargeForestCamoNet_EPOCH : Default + { + removeParts[] = {{"KitLargeForestCamoNet",1}}; + GhostPreview = "LargeForestCamoNet_Ghost_EPOCH"; + staticClass = "LargeForestCamoNet_EPOCH"; + simulClass = "LargeForestCamoNet_SIM_EPOCH"; + }; + class LargeForestCamoNet_SIM_EPOCH : LargeForestCamoNet_EPOCH + { + removeParts[] = {}; + }; + class LargeForestCamoNet_Ghost_EPOCH : LargeForestCamoNet_SIM_EPOCH {}; + class LargeDesertCamoNet_EPOCH : Default + { + removeParts[] = {{"KitLargeDesertCamoNet",1}}; + GhostPreview = "LargeDesertCamoNet_Ghost_EPOCH"; + staticClass = "LargeDesertCamoNet_EPOCH"; + simulClass = "LargeDesertCamoNet_SIM_EPOCH"; + }; + class LargeDesertCamoNet_SIM_EPOCH : LargeDesertCamoNet_EPOCH + { + removeParts[] = {}; + }; + class LargeDesertCamoNet_Ghost_EPOCH : LargeDesertCamoNet_SIM_EPOCH {}; + class FirePlace_02_EPOCH : Default + { + removeParts[] = {{"KitFirePlace_02",1}}; + GhostPreview = "FirePlace_02_Ghost_EPOCH"; + staticClass = "FirePlace_02_EPOCH"; + simulClass = "FirePlace_02_SIM_EPOCH"; + }; + class FirePlace_02_SIM_EPOCH : FirePlace_02_EPOCH + { + removeParts[] = {}; + }; + class FirePlace_02_Ghost_EPOCH : FirePlace_02_SIM_EPOCH {}; + class FieldToilet_EPOCH : Default + { + removeParts[] = {{"KitFieldToilet",1}}; + GhostPreview = "FieldToilet_Ghost_EPOCH"; + staticClass = "FieldToilet_EPOCH"; + simulClass = "FieldToilet_SIM_EPOCH"; + }; + class FieldToilet_SIM_EPOCH : FieldToilet_EPOCH + { + removeParts[] = {}; + }; + class FieldToilet_Ghost_EPOCH : FieldToilet_SIM_EPOCH {}; + class Scaffolding_EPOCH : Default + { + removeParts[] = {{"KitScaffolding",1}}; + GhostPreview = "Scaffolding_Ghost_EPOCH"; + staticClass = "Scaffolding_EPOCH"; + simulClass = "Scaffolding_SIM_EPOCH"; + }; + class Scaffolding_SIM_EPOCH : Scaffolding_EPOCH + { + removeParts[] = {}; + }; + class Scaffolding_Ghost_EPOCH : Scaffolding_SIM_EPOCH {}; + class Sink_EPOCH : Default + { + removeParts[] = {{"KitSink",1}}; + GhostPreview = "Sink_Ghost_EPOCH"; + staticClass = "Sink_EPOCH"; + simulClass = "Sink_SIM_EPOCH"; + }; + class Sink_SIM_EPOCH : Sink_EPOCH + { + removeParts[] = {}; + }; + class Sink_Ghost_EPOCH : Sink_SIM_EPOCH {}; + class PortableLight_Single_EPOCH : Default + { + removeParts[] = {{"KitPortableLight_Single",1}}; + GhostPreview = "PortableLight_Single_Ghost_EPOCH"; + staticClass = "PortableLight_Single_EPOCH"; + simulClass = "PortableLight_Single_SIM_EPOCH"; + }; + class PortableLight_Single_SIM_EPOCH : PortableLight_Single_EPOCH + { + removeParts[] = {}; + }; + class PortableLight_Single_Ghost_EPOCH : PortableLight_Single_SIM_EPOCH {}; + class PortableLight_Double_EPOCH : Default + { + removeParts[] = {{"KitPortableLight_Double",1}}; + GhostPreview = "PortableLight_Double_Ghost_EPOCH"; + staticClass = "PortableLight_Double_EPOCH"; + simulClass = "PortableLight_Double_SIM_EPOCH"; + }; + class PortableLight_Double_SIM_EPOCH : PortableLight_Double_EPOCH + { + removeParts[] = {}; + }; + class PortableLight_Double_Ghost_EPOCH : PortableLight_Double_SIM_EPOCH {}; + class WatchTower_EPOCH : Default + { + removeParts[] = {{"KitWatchTower",1}}; + GhostPreview = "WatchTower_Ghost_EPOCH"; + staticClass = "WatchTower_EPOCH"; + simulClass = "WatchTower_SIM_EPOCH"; + }; + class WatchTower_SIM_EPOCH : WatchTower_EPOCH + { + removeParts[] = {}; + }; + class WatchTower_Ghost_EPOCH : WatchTower_SIM_EPOCH {}; + class SunShade_EPOCH : Default + { + removeParts[] = {{"KitSunShade",1}}; + GhostPreview = "SunShade_Ghost_EPOCH"; + staticClass = "SunShade_EPOCH"; + simulClass = "SunShade_SIM_EPOCH"; + }; + class SunShade_SIM_EPOCH : SunShade_EPOCH + { + removeParts[] = {}; + }; + class SunShade_Ghost_EPOCH : SunShade_SIM_EPOCH {}; + class FuelPump_EPOCH : Default + { + removeParts[] = {{"KitFuelPump",1}}; + GhostPreview = "FuelPump_Ghost_EPOCH"; + staticClass = "FuelPump_EPOCH"; + simulClass = "FuelPump_SIM_EPOCH"; + }; + class FuelPump_SIM_EPOCH : FuelPump_EPOCH + { + removeParts[] = {}; + }; + class FuelPump_Ghost_EPOCH : FuelPump_SIM_EPOCH {}; + class BagBunker_EPOCH : Default + { + removeParts[] = {{"KitBagBunker",1}}; + GhostPreview = "BagBunker_Ghost_EPOCH"; + staticClass = "BagBunker_EPOCH"; + simulClass = "BagBunker_SIM_EPOCH"; + }; + class BagBunker_SIM_EPOCH : BagBunker_EPOCH + { + removeParts[] = {}; + }; + class BagBunker_Ghost_EPOCH : BagBunker_SIM_EPOCH {}; + class SandbagWall_EPOCH : Default + { + removeParts[] = {{"KitSandbagWall",1}}; + GhostPreview = "SandbagWall_Ghost_EPOCH"; + staticClass = "SandbagWall_EPOCH"; + simulClass = "SandbagWall_SIM_EPOCH"; + }; + class SandbagWall_SIM_EPOCH : SandbagWall_EPOCH + { + removeParts[] = {}; + }; + class SandbagWall_Ghost_EPOCH : SandbagWall_SIM_EPOCH {}; + class SandbagWallLong_EPOCH : Default + { + removeParts[] = {{"KitSandbagWallLong",1}}; + GhostPreview = "SandbagWallLong_Ghost_EPOCH"; + staticClass = "SandbagWallLong_EPOCH"; + simulClass = "SandbagWallLong_SIM_EPOCH"; + }; + class SandbagWallLong_SIM_EPOCH : SandbagWallLong_EPOCH + { + removeParts[] = {}; + }; + class SandbagWallLong_Ghost_EPOCH : SandbagWallLong_SIM_EPOCH {}; + class BarGate_EPOCH : Default + { + removeParts[] = {{"KitBarGate",1}}; + GhostPreview = "BarGate_Ghost_EPOCH"; + staticClass = "BarGate_EPOCH"; + simulClass = "BarGate_SIM_EPOCH"; + }; + class BarGate_SIM_EPOCH : BarGate_EPOCH + { + removeParts[] = {}; + }; + class BarGate_Ghost_EPOCH : BarGate_SIM_EPOCH {}; + class WaterPump_EPOCH : Default + { + removeParts[] = {{"KitWaterPump",1}}; + GhostPreview = "WaterPump_Ghost_EPOCH"; + staticClass = "WaterPump_EPOCH"; + simulClass = "WaterPump_SIM_EPOCH"; + }; + class WaterPump_SIM_EPOCH : WaterPump_EPOCH + { + removeParts[] = {}; + }; + class WaterPump_Ghost_EPOCH : WaterPump_SIM_EPOCH {}; + class BaseCam_EPOCH : Default + { + removeParts[] = {{"BaseCam",1}}; + GhostPreview = "BaseCam_Ghost_EPOCH"; + staticClass = "BaseCam_EPOCH"; + simulClass = "BaseCam_SIM_EPOCH"; + }; + class BaseCam_SIM_EPOCH : BaseCam_EPOCH + { + removeParts[] = {}; + allowedSnapPoints[] = {"CAM"}; + allowedSnapObjects[] = {"Const_WoodWalls_static_F","Const_Cinder_static_F"}; + }; + class BaseCam_Ghost_EPOCH : BaseCam_SIM_EPOCH {}; + class BaseCamTerminal_EPOCH : Default + { + removeParts[] = {{"BaseCamTerminal",1}}; + GhostPreview = "BaseCamTerminal_Ghost_EPOCH"; + staticClass = "BaseCamTerminal_EPOCH"; + simulClass = "BaseCamTerminal_SIM_EPOCH"; + }; + class BaseCamTerminal_SIM_EPOCH : BaseCamTerminal_EPOCH + { + removeParts[] = {}; + }; + class BaseCamTerminal_Ghost_EPOCH : BaseCamTerminal_SIM_EPOCH {}; + class snowman_EPOCH : Default + { + removeParts[] = {{1,"KitSnowman"}}; + GhostPreview = "snowman_Ghost_EPOCH"; + staticClass = "snowman_EPOCH"; + simulClass = "snowman_SIM_EPOCH"; + }; + class snowman_SIM_EPOCH : snowman_EPOCH + { + removeParts[] = {}; + }; + class snowman_Ghost_EPOCH : snowman_SIM_EPOCH {}; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgBuildingLootPos.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgBuildingLootPos.hpp new file mode 100644 index 0000000..3642823 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgBuildingLootPos.hpp @@ -0,0 +1,7517 @@ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +class CfgBuildingLootPos +{ + LootCleanupTime = 300; // Loot Cleanup = 300s (if no players are around) + + class Default + { +/* + LootTypes: + civ // Food / Drink / common clothings + mil // Food / Drink / Mil Clothings / Weapons / Magazines + church // ??? + medical // FAK / Defibrillator / morphine... + workshop // Repairs / Tools / Metal ... + industrial // Cinder / Mortar / Metal / Tools... + market // Food / Drink + construction // BaseBuilding parts +*/ + lootType = "civ"; + fridgePos[] = {}; + shelfPos[] = {}; + pelicanPos[] = {}; + wardrobePos[] = {}; + bedPos[] = {}; + couchPos[] = {}; + cookerPos[] = {}; + tablePos[] = {}; + lockerPos[] = {}; + toolRackPos[] = {}; + shoeboxPos[] = {}; + toiletPos[] = {}; + kitchenSinkPos[] = {}; + lootTypes[] = {{"shelfPos","Shelf_EPOCH",false},{"fridgePos","Fridge_EPOCH",false},{"bedPos","Bed_EPOCH",false},{"couchPos","Couch_EPOCH",false},{"wardrobePos","wardrobe_epoch",false},{"cookerPos","cooker_epoch",false},{"chairPos",{"Chair_EPOCH","ChairRed_EPOCH"},false},{"filingPos","Filing_epoch",false},{"pelicanPos","Pelican_EPOCH",false},{"tablePos","Table_EPOCH",false},{"lockerPos","Locker_EPOCH",false},{"toolRackPos","ToolRack_EPOCH",false},{"shoeboxPos","Shoebox_EPOCH",false},{"palletPos","Tarp_EPOCH",false},{"freezerPos","Freezer_EPOCH",false},{"cabinetPos","Cabinet_EPOCH",false},{"toiletPos","toilet_epoch",false},{"kitchenSinkPos","KitchenSink_epoch",false}}; + + EpochLootChance = 15; // 15% of this Building Types will hold default Epoch Loot + limit = 3; // Max 3 Furnitures will spawn in this Building type + + GroundSpawnChance = 50; // 50% Chance for Ground Loot, if no Epoch Loot will spawn + MinGroundContainers = 1; // If Groundloot, min 1 Weaponholder will spawn in this building + MaxGroundContainers = 2; // If Groundloot, max 2 Weaponholder will spawn in this building + }; + class Land_Kiosk_redburger_F : Default + { + lootType = "market"; + fridgePos[] = {{{1.64453,1.43945,-2.897},89.9032}}; + cookerPos[] = {{{1.57813,-0.261719,-2.89732},90.9244}}; + filingPos[] = {{{-1.65625,1.67773,-2.89687},272.463}}; + shoeboxPos[] = {{{-0.275391,-1.92188,-2.07339},358}}; + freezerPos[] = {{{-1.51367,0.0078125,-2.86339},271.8}}; + }; + class Land_Kiosk_blueking_F : Default + { + lootType = "market"; + fridgePos[] = {{{-1.56055,1.67383,-1.79198},0.076973}}; + cookerPos[] = {{{-1.62109,-0.296875,-1.79261},269.732}}; + filingPos[] = {{{1.82031,0.972656,-1.75876},91.8},{{1.82031,1.55664,-1.75876},91.8}}; + shoeboxPos[] = {{{1.86914,-1.18555,-0.645341},90}}; + freezerPos[] = {{{1.54297,-0.0410156,-1.75876},91.8}}; + }; + class Land_Kiosk_gyros_F : Default + { + lootType = "market"; + fridgePos[] = {{{1.64258,0.197266,-2.0025},89.8823}}; + cookerPos[] = {{{1.5,1.62305,-2.0029},89.3177}}; + filingPos[] = {{{-1.52344,1.62109,-2.00235},296.665}}; + pelicanPos[] = {{{2.91016,-0.0703125,0.187521},263.525}}; + shoeboxPos[] = {{{-1.89844,-1.08008,-1.17894},91.8}}; + freezerPos[] = {{{-1.57031,0.199219,-1.96894},269.8}}; + }; + class Land_Kiosk_papers_F : Default + { + lootType = "market"; + shelfPos[] = {{{1.36523,1.79492,-2.0024},1.00576}}; + chairPos[] = {{{-1.47852,1.27148,-1.96894},306.8}}; + filingPos[] = {{{1.69336,0.0625,-2.0024},86.0276},{{-1.68164,-0.347656,-2.00241},266.904},{{1.71484,-0.404297,-2.0024},90.176}}; + shoeboxPos[] = {{{1.81055,-1.86133,-0.808939},338.8}}; + }; + class Land_Research_HQ_F : Default + { + limit = 5; + lootType = "industrial"; + shelfPos[] = {{{0.380859,4.1875,-3.29264},2.04878},{{-1.03125,-6.27734,-3.17222},181.183},{{8.52148,3.01367,-3.17222},90.053}}; + fridgePos[] = {{{5.52148,6.21094,-3.17237},0.0829086}}; + bedPos[] = {{{0.450195,0.876953,-3.29266},0}}; + couchPos[] = {{{2.89746,0.804688,-3.29266},181.475}}; + cookerPos[] = {{{6.66992,6.10547,-3.17264},358.477}}; + chairPos[] = {{{-3.59766,3.67578,-3.29266},325.551}}; + filingPos[] = {{{-1.17676,4.13086,-3.29262},358.166},{{-2.75781,-6.06445,-3.1722},177.048},{{-3.52148,-5.88281,-3.17221},202.305},{{6.77246,-3.36914,-0.692615},84.9868},{{8.46094,3.97266,-3.17206},89.6625}}; + pelicanPos[] = {{{-0.431641,0.957031,-0.767684},213.601},{{4.77832,-4.33398,-3.29265},149.079}}; + lockerPos[] = {{{-3.9668,-4.05664,-3.29265},268.178},{{7.18848,0.742188,-3.29265},89.2752}}; + palletPos[] = {{{0.328125,-3.94141,-0.740771},174},{{2.7959,-6.25977,-10},260}}; + freezerPos[] = {{{2.64355,5.34766,-3.14077},271}}; + cabinetPos[] = {{{-4.21973,-1.09131,-1.87077},0},{{2.64795,-5.21143,-1.87077},270}}; + toiletPos[] = {{{8.27148,-1.80664,-3.12631},89.1022}}; + }; + class Land_Research_house_V1_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{0.408203,3.9668,0.00387025},0.47818},{{-2.37891,3.47461,0.0038693},272.048}}; + fridgePos[] = {{{2.17383,1.02539,-0.132167},91.4155}}; + filingPos[] = {{{-2.18359,2.4082,0.00388861},270},{{-0.384766,3.89453,0.00388622},10.991}}; + pelicanPos[] = {{{-1.88477,0.826172,-0.132179},233.568}}; + lockerPos[] = {{{2.18555,3.36523,0.00385499},88.1972}}; + palletPos[] = {{{-1.45508,-1.11914,-10},174}}; + cabinetPos[] = {{{-0.443359,-0.0527344,1.29856},270}}; + toiletPos[] = {{{-1.11523,3.81445,0.0326004},2.30161}}; + }; + class Land_spp_Tower_F : Default + { + limit = 5; + lootType = "industrial"; + shelfPos[] = {{{2.79297,-1.28906,-14.9882},88.9351},{{-2.72266,-2.93164,-24.3965},179.88}}; + bedPos[] = {{{-1.89648,-0.994141,10.1607},93.8027}}; + couchPos[] = {{{1.39258,-2.8418,-14.9885},89.9995}}; + chairPos[] = {{{1.55859,-1.35156,10.1608},177.348},{{-1.16016,-3.20703,-14.9884},187.768}}; + filingPos[] = {{{-3.67969,-2.19141,-24.3019},180.033},{{4.3125,0.748047,10.1609},87.6986},{{-4.07617,-3.69531,23.799},181.064}}; + pelicanPos[] = {{{-1.03711,-2.03906,25.6749},180.506},{{4.40625,-2.83008,23.7991},113.987}}; + tablePos[] = {{{-0.00390625,0.507813,-14.9885},0.00285339}}; + lockerPos[] = {{{-2.67773,0.0273438,-14.9884},270.033}}; + toolRackPos[] = {{{4.57813,-0.574219,10.1609},89.1923}}; + shoeboxPos[] = {{{2.64648,-2.03516,25.6749},195.354},{{-2.6582,-3.65625,-14.9885},195.527}}; + palletPos[] = {{{1.52539,0.0351563,23.8031},272},{{3.38477,0.015625,23.8031},179}}; + freezerPos[] = {{{3.29102,-1.50195,10.1633},179}}; + cabinetPos[] = {{{-3.93164,0.230469,-22.7967},0}}; + toiletPos[] = {{{-5.34961,-1.48633,23.7807},-92.9635}}; + }; + class Land_MilOffices_V1_F : Default + { + limit = 6; + lootType = "mil"; + GroundSpawnChance = 80; + MinGroundContainers = 3; + MaxGroundContainers = 6; + shelfPos[] = {{{5.89844,0.773438,-2.89318},269.647},{{6.08203,-0.435547,-2.89318},0.742516},{{-4.00781,-5.64648,-2.89318},180.694},{{7.26367,-2.26563,-2.89318},267.774},{{8.74219,-5.70313,-2.89318},178.843},{{5.89063,9.54297,-2.89318},270.185},{{-5.83789,11.2949,-2.89318},359.547},{{-13.8574,-5.7207,-2.89318},179.686},{{-16.1719,-0.859375,-2.89318},358.847},{{-16.9512,0.576172,-2.89318},268.745},{{-16.3457,11.2871,-2.89318},0.686188}}; + fridgePos[] = {{{6.43945,-3.44531,-2.89318},89.5034},{{6.60547,4.67578,-2.89318},180.413},{{-10.707,-5.51563,-2.89318},178.591}}; + bedPos[] = {{{13.5332,5.33789,-2.8932},95.0654}}; + couchPos[] = {{{4.08984,8.96289,-2.8932},4.74224},{{15.9063,9.83789,-2.8932},357.568}}; + wardrobePos[] = {{{16.7813,6.91211,-2.89308},89.005}}; + cookerPos[] = {{{-12.2871,-3.27539,-2.89359},269.464}}; + chairPos[] = {{{-6.48242,-1.26172,-2.89333},30.6329},{{-6.36328,-5.20898,-2.89321},138.614},{{-9.26953,-5.20703,-2.89319},221.625},{{2.14844,10.8848,-2.8932},357.801},{{16.2461,0.330078,-2.89319},58.6309},{{12.3359,10.6348,-2.8932},349.887},{{16.2637,-3.21289,-2.89318},108.767}}; + filingPos[] = {{{-0.710938,-0.902344,-2.89316},273.543},{{-1.625,-5.49219,-2.89316},172.228},{{-2.56445,6.4082,-2.89316},86.596},{{7.35742,-0.585938,-2.89316},269.601},{{6.50391,-5.62305,-2.89316},103.818},{{-1.80859,11.1055,-2.89316},353.219},{{10.082,-5.57422,-2.89316},171.96},{{-11.4727,-5.625,-2.89316},178.889},{{7.61523,11.1699,-2.89316},357.944},{{8.19141,11.0684,-2.89316},328.836},{{-14.7676,-0.96875,-2.89316},359.13},{{-10.7695,11.1172,-2.89316},348.322},{{16.793,3.68164,-2.89316},58.8697},{{-16.8691,-5.51758,-2.89316},190.272}}; + pelicanPos[] = {{{-15.4648,-5.25586,-2.89319},177.065},{{16.1719,5.08984,-2.89319},160.192}}; + tablePos[] = {{{0.990234,-5.35742,-2.8932},181.381},{{-7.78516,-3.08789,-2.8932},0.00653839},{{16.6719,-1.39063,-2.8932},90.476},{{14.0918,9.58008,-2.8932},90.0005}}; + lockerPos[] = {{{7.49805,-4.18359,-2.89319},271.895},{{10.3281,4.60352,-2.89319},179.863},{{-16.7461,-3.25195,-2.89319},266.767}}; + toolRackPos[] = {{{9.29297,-0.222656,-2.89323},359.898},{{-13.0098,-3.95703,-2.89322},89.093}}; + palletPos[] = {{{-15.3184,-3.625,-2.85274},272}}; + freezerPos[] = {{{-12.2461,-4.50391,-2.85274},272}}; + cabinetPos[] = {{{5.3125,4.95215,-1.47264},180},{{5.27734,-5.80957,-1.47264},270},{{-12.1123,-2.60938,-1.47264},270}}; + toiletPos[] = {{{-13.3125,-2.79297,-2.7875},92.6481}}; + }; + class Land_Airport_Tower_F : Default + { + lootType = "mil"; + GroundSpawnChance = 80; + MinGroundContainers = 3; + MaxGroundContainers = 6; + shelfPos[] = {{{1.00195,4.2207,-10.4679},90},{{2.09375,-5.83984,-1.46719},136.235}}; + fridgePos[] = {{{-3.19922,-5.58789,-1.46735},223.518}}; + chairPos[] = {{{0.740234,-0.0332031,-1.46723},3.7747},{{2.19141,-1.23438,-1.46718},54.1489}}; + filingPos[] = {{{-2.14844,1.53906,-7.46764},267.225},{{-0.503906,-3.69141,2.22974},268.915},{{-1.09375,-3.69727,2.2298},90.7877},{{-3.73633,-5.13086,-1.46725},223.885},{{-2.69922,-6.11133,-1.46731},226.111}}; + pelicanPos[] = {{{-0.482422,-6.20898,3.00391},187.096},{{-0.744141,6.49414,1.52821},348.84}}; + lockerPos[] = {{{-3.26172,-0.542969,-1.4672},314.971}}; + palletPos[] = {{{-4.09766,1.40625,-10.6461},272}}; + cabinetPos[] = {{{2.48779,-0.672852,2.53949},135},{{-2.37842,1.64404,-9.16051},0},{{-3.85498,-0.772461,2.53949},45}}; + toiletPos[] = {{{0.578125,6.6416,-10.4447},-314.586}}; + }; + class Land_Slum_House01_F : Default + { + lootType = "workshop"; + chairPos[] = {{{1.20313,1.6582,-1.07285},36.9507}}; + filingPos[] = {{{0.351563,2.05469,-1.08115},8.25228}}; + pelicanPos[] = {{{1.4668,2.32031,1.60821},184.525}}; + toolRackPos[] = {{{-1.56641,0.789063,-1.08133},270.436}}; + palletPos[] = {{{0.169922,0.214844,-1.08145},272}}; + toiletPos[] = {{{1.66797,0.121094,-1.11079},92.4621}}; + }; + class Land_Slum_House02_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{2.52148,3.48438,-0.824517},359.959}}; + couchPos[] = {{{2.14844,0.236328,-0.824545},0.0984116}}; + chairPos[] = {{{1.15234,3.20508,-0.824523},352.052}}; + tablePos[] = {{{-0.15625,0.738281,-0.824542},268.176}}; + toiletPos[] = {{{3.01953,2.18164,-0.955211},-271.898}}; + }; + class Land_Slum_House03_F : Default + { + lootType = "workshop"; + bedPos[] = {{{0.166016,0.230469,-1.07675},95}}; + chairPos[] = {{{-1.99414,2.25586,-1.07675},335}}; + filingPos[] = {{{3.98633,-0.507813,-1.07675},95}}; + toolRackPos[] = {{{0.773438,2.98633,-1.07675},0}}; + palletPos[] = {{{3.60938,2.14453,-1.07675},272}}; + toiletPos[] = {{{-0.810547,2.59668,-1.04755},-0.816681}}; + }; + class Land_cargo_house_slum_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{-0.891602,-1.20117,-0.38667},181.006}}; + bedPos[] = {{{-3.16504,-0.253906,-0.386693},276.075}}; + chairPos[] = {{{0.650391,-0.734375,-0.383496},90.6667}}; + filingPos[] = {{{-4.45898,-1.12109,-0.386626},269.224}}; + }; + class Land_FuelStation_Build_F : Default + { + lootType = "market"; + shelfPos[] = {{{0.415039,1.52734,-1.36232},0.956482}}; + filingPos[] = {{{-2.31543,-1.1582,-1.3623},259.317}}; + pelicanPos[] = {{{-2.79199,0.658203,2.11388},86.4283}}; + shoeboxPos[] = {{{-1.99316,0.386719,-0.361005},112}}; + freezerPos[] = {{{2.10938,-0.701172,-1.391},90}}; + }; + class Land_Factory_Main_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{-3.72852,3.85742,-6.35809},178.041},{{5.62012,-9.38477,2.34198},89.9969},{{-6.9209,10.8223,-6.32809},95.4476},{{-10.208,14.8887,-6.32809},1.97624}}; + fridgePos[] = {{{-1.76074,8.24805,-6.35806},94.2797}}; + couchPos[] = {{{-2.44629,5.73047,-6.35812},2.06058},{{-3.50684,16.8828,-6.41408},90.0061}}; + cookerPos[] = {{{-5.74609,5.52734,-6.35851},183.545}}; + chairPos[] = {{{-5.46777,4.26367,-6.35815},231.258},{{-7.42676,14.3906,-6.3281},42.1397}}; + filingPos[] = {{{-5.79004,6.72266,-6.35807},270.867},{{-4.03516,-9.26758,2.34797},0.889618},{{5.33691,-11.1738,2.34195},75.1523},{{5.16602,-12.2598,2.34194},135.024},{{-10.5898,12.2129,-6.32807},270},{{-10.6104,12.6699,-6.32807},267.548}}; + pelicanPos[] = {{{2.81738,-9.37305,2.3419},2.64822}}; + toolRackPos[] = {{{-3.79004,9.14063,-6.35813},0.489624},{{-6.61133,12.8359,-6.32813},89.3704}}; + palletPos[] = {{{-3.94238,-16.6523,-10},94},{{4.20313,16.6426,-6.35465},95}}; + toiletPos[] = {{{-8.86426,14.8223,-6.3993},-0.588776}}; + }; + class Land_Airport_right_F : Default + { + limit = 5; + lootType = "mil"; + shelfPos[] = {{{-4.19922,-2.1543,-1.76375},359.705},{{-4.57422,2.20514,-1.76375},270.932},{{5.27734,-5.37885,-1.76368},357.591},{{-15.0703,-7.48627,-6.76375},89.4887},{{-14.4297,-11.0059,-6.76375},270.174},{{-15.1445,-10.3417,-6.76375},89.1635},{{-23.3359,-3.69916,-6.76375},358.136},{{-21.1838,14.7402,-6.77192},359.554}}; + fridgePos[] = {{{-2.48633,3.61719,-1.76375},0.951996},{{-15.4355,13.5039,-6.76375},90.2176}}; + bedPos[] = {{{-3.82446,-10.3633,-1.76377},184.477}}; + couchPos[] = {{{4.75195,2.29883,-1.76378},4.2282},{{0.705078,-6.63275,-6.76378},269.802},{{-16.1624,7.51178,-6.76378},358.918},{{-25.6094,1.10944,-6.76377},183.238}}; + wardrobePos[] = {{{0.698975,-5.58197,-1.76363},1.96877}}; + cookerPos[] = {{{-0.195557,3.53906,-1.74532},360}}; + chairPos[] = {{{-5.11133,3.41412,-6.76377},358.691},{{-5.23047,5.16614,-6.76375},180.383},{{5.21094,-6.40814,-6.76376},49.2284},{{5.05273,-13.168,-1.76375},29.6497},{{-4.29688,-14.416,-6.73171},205.019},{{5.29102,-14.1387,-6.76376},130.737},{{5.28906,14.3145,-6.76377},41.909},{{-15.7717,-2.20502,-6.76376},122.506},{{-16.5605,-3.95313,-6.76376},1.55649},{{-23.498,-2.37885,-6.76377},177.809},{{-26.168,5.07813,-6.76375},276.716}}; + filingPos[] = {{{-4.57031,-1.34174,-1.76373},183.677},{{5.76953,-4.59174,-6.76376},164.562},{{-15.1465,-9.57227,-6.76368},88.7803},{{-24.3518,-3.79681,-6.76373},359.584}}; + pelicanPos[] = {{{4.91406,-16.5038,-3.16119},5.77047},{{-25.8479,-2.27734,-6.76375},202.245}}; + tablePos[] = {{{2.9707,2.35364,-1.74532},278},{{-4.41406,-6.25385,-1.76377},271.909},{{5.57227,-10.1172,-6.76377},90.0333},{{-23.7209,1.086,-6.76377},89.9196}}; + lockerPos[] = {{{3.54663,-1.14838,-6.76377},179.474},{{5.26563,-1.10931,-6.76372},179.41},{{-14.2656,-1.27728,-6.76377},269.09},{{-14.1995,6.67194,-6.76373},269.966},{{-14.2229,8.41016,-6.76367},268.618},{{-26.5117,9.03522,-6.76376},269.173},{{-26.5234,10.9512,-6.76368},270.17},{{-26.5178,12.9083,-6.76377},270.361}}; + toolRackPos[] = {{{1.51929,-1.72845,-1.76373},179.724},{{-14.9084,-12.3223,-6.76378},89.5845}}; + shoeboxPos[] = {{{-8.14258,-16.0605,-3.27531},278}}; + palletPos[] = {{{3.84741,-3.8418,-6.74531},350},{{-6.58008,0.285217,-1.86532},278},{{-6.44922,-1.64844,-1.86532},264},{{-23.873,-11.5293,-6.74531},350},{{-23.8867,-13.6483,-6.74531},86}}; + freezerPos[] = {{{-1.31055,3.54303,-1.74532},360}}; + cabinetPos[] = {{{-4.80347,-2.53943,-5.34531},0}}; + toiletPos[] = {{{-26.4805,14.6035,-6.78733},-42.5349}}; + }; + class Land_Airport_center_F : Default + { + lootType = "mil"; + shelfPos[] = {{{11.7051,7.16016,-2.74629},359.37}}; + couchPos[] = {{{-4.50391,-7.57422,1.62245},88.2815},{{11.8594,-11.0684,-2.74632},2.03362}}; + chairPos[] = {{{-12.3184,6.87109,-2.74437},280.834},{{-12.2793,-14.4258,-2.7463},272.565}}; + filingPos[] = {{{12.8184,7.07422,-2.74627},358.116},{{12.7363,-16.0586,-2.74625},90.9752}}; + pelicanPos[] = {{{-1.08398,-10.5664,1.59369},341.766},{{-12.0918,-15.8086,-2.74628},213.62}}; + tablePos[] = {{{12.5625,-14.0469,-2.74631},92.4684}}; + lockerPos[] = {{{12.6758,-6.87891,-2.7463},90.0581},{{-12.5391,-7.84961,-2.7463},270.451},{{-12.541,-9.83398,-2.7463},268.378},{{-12.4824,-11.8047,-2.7463},269.442}}; + toiletPos[] = {{{0.107422,-16.249,-2.71987},-180.036}}; + }; + class Land_Airport_left_F : Default + { + limit = 5; + lootType = "mil"; + shelfPos[] = {{{3.91211,-1.41797,-1.76377},184.071},{{-1.94336,-5.52148,-1.76367},0.193413},{{-5.31641,-4.6875,-6.76368},179.512},{{6.14258,13.9648,-6.76367},268.974},{{15.1094,-8.04102,-6.76375},270.202},{{15.6563,-14.7227,-6.76375},180.679},{{16.9883,14.7461,-6.76375},359.573}}; + fridgePos[] = {{{1.42773,3.67578,-1.76375},359.297},{{15.7793,-2.51563,-6.76374},178.661}}; + bedPos[] = {{{-4.95898,-6.73047,-1.76377},179.773}}; + couchPos[] = {{{-4.08008,2.0957,-1.76377},241.929},{{3.72461,-6.98047,-1.76378},4.04132},{{13.4414,7.67383,-6.76378},3.19656},{{25.5898,12.5527,-6.76377},0.251305}}; + wardrobePos[] = {{{-1.35547,3.14844,-1.7637},62.9544}}; + cookerPos[] = {{{2.95117,3.63477,-1.76408},0.722954},{{16.668,-2.55078,-6.76418},179.019}}; + chairPos[] = {{{-0.699219,-1.14844,-1.76373},179.434},{{-2.9707,-1.18555,-1.76369},181.435},{{4.33398,4.2832,-6.76373},89.2875},{{-3.68945,-5.95117,-6.75249},352.602},{{5.99023,4.28711,-6.76371},269.261},{{-5.23438,-13.1641,-1.76377},338.538},{{4.23047,-14.3047,-6.76375},167.634},{{-5.30859,14.2852,-6.76372},297.672},{{23.127,4.48242,-6.76377},209.073},{{22.8613,7.83984,-6.76376},313.711},{{26.1641,4.21094,-6.76375},135.598},{{26.2402,8.27734,-6.76374},47.2424}}; + filingPos[] = {{{-0.0703125,3.63086,-1.76371},1.43237},{{15.2598,-11.4375,-6.76373},268.46},{{15.2832,-11.8906,-6.76373},270.436},{{15.1895,14.6602,-6.76373},344.677},{{24.4355,-2.6543,-6.76369},180.398},{{26.6348,-2.56055,-6.76373},172.362}}; + pelicanPos[] = {{{6.28711,0.486328,-1.80376},285.45},{{9.81641,-16.4297,-3.16111},3.09702}}; + tablePos[] = {{{4.40625,1.19727,-1.76377},89.5157},{{-5.57227,-7.76367,-6.76377},270.379},{{26.3789,6.25,-6.76377},90.3904}}; + lockerPos[] = {{{3.56445,-1.11523,-6.76379},179.89},{{-5.07617,-1.12891,-6.76377},178.63},{{-0.271484,-5.82422,-6.7637},0.334862},{{1.68945,-5.81836,-6.7637},0.41259},{{15.3574,5.5957,-6.76373},268.91},{{15.2949,7.52344,-6.76377},270.217}}; + toolRackPos[] = {{{14.8926,-9.83789,-6.76369},269.885},{{23.1777,-3.47266,-6.76379},0.366142}}; + palletPos[] = {{{23.9648,-7.17188,-6.77531},357},{{23.6523,-13.7891,-6.77531},90}}; + freezerPos[] = {{{0.832031,-1.19531,-1.75531},182},{{24.3145,-10.5938,-6.77531},90}}; + cabinetPos[] = {{{4.80945,-2.55103,-5.34531},180}}; + toiletPos[] = {{{26.5547,14.6719,-6.73733},-315.035}}; + }; + class Land_Hangar_F : Default + { + limit = 5; + lootType = "mil"; + shelfPos[] = {{{-14.3125,1.24023,-5.40771},270.363},{{-14.2754,6.36328,-5.4077},269.988},{{-14.5117,-19.8359,-5.4077},268.904},{{8.80469,23.3691,-5.4077},359.987},{{13.6602,-21.0078,-5.40769},180.14}}; + couchPos[] = {{{11.9082,22.3652,-5.40773},267.453}}; + chairPos[] = {{{-14.3223,-5.03906,-5.40451},270.026}}; + filingPos[] = {{{-14.5059,-2.35352,-5.40699},272.098},{{-14.4941,-3.14453,-5.40626},278.808},{{-14.457,-3.89453,-5.40769},265.43},{{14.4023,19.6953,-5.40768},91.5292},{{14.4004,20.4277,-5.40769},86.6895},{{9.92969,23.1992,-5.40769},352.998}}; + pelicanPos[] = {{{14.5156,-8.02148,-5.40772},90},{{-14.6602,12.4863,-5.40772},270}}; + shoeboxPos[] = {{{14.9688,-20.9824,-5.375},86}}; + palletPos[] = {{{13.8945,12.375,-5.375},86},{{-12.043,22.7324,-5.375},86},{{-14.209,22.5332,-5.375},86}}; + freezerPos[] = {{{14.6035,21.8516,-5.375},86}}; + cabinetPos[] = {{{10.332,-21.3706,-3.87143},270}}; + }; + class Land_CarService_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{-5.08594,-0.996094,-1.28249},271.675},{{4.69141,5.75781,-1.28248},88.5845},{{-0.40625,7.68945,-1.28235},89.3095},{{0.767578,8.21289,-1.28248},358.72}}; + fridgePos[] = {{{1.85352,8.18359,-1.28246},358.017}}; + couchPos[] = {{{3.74219,0.666016,-1.2825},2.03191}}; + chairPos[] = {{{4.28711,3.18164,-1.28249},83.2968}}; + filingPos[] = {{{4.66992,4.72852,-1.28246},90.2187},{{4.56055,8.21484,-1.28246},359.503}}; + tablePos[] = {{{0.695313,2.63086,-1.2825},269.367}}; + lockerPos[] = {{{-4.9668,7.55469,-1.28248},268.961}}; + toolRackPos[] = {{{-5.35742,4.21484,-1.28251},268.905},{{-2.66602,8.53711,-1.28252},359.227}}; + palletPos[] = {{{1.45898,10.209,-10},271}}; + freezerPos[] = {{{0.634766,0.9375,-1.29904},271}}; + cabinetPos[] = {{{-0.327637,5.11853,0.222353},180}}; + }; + class Land_Cargo_Tower_V1_F : Default + { + limit = 5; + lootType = "mil"; + GroundSpawnChance = 80; + MinGroundContainers = 3; + MaxGroundContainers = 6; + shelfPos[] = {{{0.552734,-1.625,5.05352},178.136},{{-5.64844,-0.777344,-0.146542},268.528},{{3.00781,5.08984,-0.14654},0.118889},{{5.29297,-4.09766,2.45352},181.726},{{5.87109,3.71094,-0.146542},90.215}}; + fridgePos[] = {{{-4.76172,6.00391,2.58955},0.860298}}; + bedPos[] = {{{-1.06836,-2.64844,2.45344},1.62634},{{-1.98633,-5.37109,2.58947},90.633}}; + couchPos[] = {{{-2.73828,-4.30469,0.0657005},92.6866},{{3.06641,4.15234,2.45343},270.898}}; + cookerPos[] = {{{-3.72461,5.85938,2.58907},354.227}}; + chairPos[] = {{{-5.20117,4.55859,-0.146549},342.563}}; + filingPos[] = {{{-4.07422,0.931641,5.05348},270.343},{{1.67773,-3.90039,-0.146523},178.258},{{2.23047,-3.91016,-0.146523},176.187},{{2.77344,-3.92188,-0.146523},177.87},{{-0.625,6.09961,2.58951},5.7925},{{-1.2207,6.14258,2.58951},348.149},{{5.6582,4.91406,-0.14642},44.1073}}; + pelicanPos[] = {{{-0.595703,1.38867,-4.32224},95.4843},{{-2.75977,-0.216797,4.97829},358.108},{{-6.13672,4.19727,2.66941},266.308}}; + tablePos[] = {{{6.55664,-0.714844,2.64038},89.4977}}; + lockerPos[] = {{{5.69727,1.50391,-0.146555},90.7961},{{-5.09961,-5.55469,2.5895},267.631}}; + toolRackPos[] = {{{-5.85156,-0.675781,2.45344},267.998}}; + palletPos[] = {{{4.88086,3.89453,4.99228},0}}; + freezerPos[] = {{{-2.78516,4.82227,0.0422649},0},{{-2.44922,6.07422,2.59228},0}}; + cabinetPos[] = {{{-0.0439453,1.71631,1.22235},180},{{5.98682,1.67432,3.82235},180}}; + }; + class Land_Cargo_Tower_V1_No1_F : Land_Cargo_Tower_V1_F {}; + class Land_Cargo_Tower_V1_No2_F : Land_Cargo_Tower_V1_F {}; + class Land_Cargo_Tower_V1_No3_F : Land_Cargo_Tower_V1_F {}; + class Land_Cargo_Tower_V1_No4_F : Land_Cargo_Tower_V1_F {}; + class Land_Cargo_Tower_V1_No5_F : Land_Cargo_Tower_V1_F {}; + class Land_Cargo_Tower_V1_No6_F : Land_Cargo_Tower_V1_F {}; + class Land_Cargo_Tower_V1_No7_F : Land_Cargo_Tower_V1_F {}; + class Land_Cargo_Tower_V2_F : Land_Cargo_Tower_V1_F {}; + class Land_Cargo_Tower_V3_F : Land_Cargo_Tower_V1_F {}; + class Land_Cargo_Tower_V4_F : Land_Cargo_Tower_V1_F { }; + class Land_Cargo_Patrol_V1_F : Default + { + lootType = "mil"; + shelfPos[] = {{{2.61914,0.96875,-0.789934},90}}; + filingPos[] = {{{0.0117188,-0.283203,-0.585847},1.42631}}; + pelicanPos[] = {{{2.00977,-1.52344,-0.585956},133.857}}; + palletPos[] = {{{-2,-1.18555,-0.546541},0}}; + }; + class Land_Cargo_Patrol_V2_F : Land_Cargo_Patrol_V1_F {}; + class Land_Cargo_Patrol_V3_F : Land_Cargo_Patrol_V1_F {}; + class Land_Cargo_Patrol_V4_F : Land_Cargo_Patrol_V1_F { }; + class Land_Medevac_house_V1_F : Default + { + lootType = "medical"; + shelfPos[] = {{{-2.61328,1.0918,-0.132166},268.449}}; + fridgePos[] = {{{1.60156,3.75977,0.00387168},355.287}}; + filingPos[] = {{{0.804688,3.71875,0.0038867},7.82585},{{-0.345703,3.80273,0.00388789},352.697},{{0.230469,3.85742,0.00388765},358.782}}; + pelicanPos[] = {{{-1.60938,3.26563,0.00385642},310.616}}; + palletPos[] = {{{-0.992188,-1.05469,-10},0}}; + freezerPos[] = {{{1.92969,0.728516,-0.141539},93}}; + cabinetPos[] = {{{-0.466309,-0.0532227,1.20856},270}}; + }; + class Land_Medevac_HQ_V1_F : Default + { + limit = 5; + lootType = "medical"; + shelfPos[] = {{{2.64648,-5.00391,-3.29263},179.273},{{2.29688,5.35156,-3.17222},270.045},{{-3.0918,-6.20117,-3.17222},179.371},{{7.07422,5.46094,-3.17222},89.2793}}; + fridgePos[] = {{{0.632813,-6.04492,-3.17222},175.967}}; + bedPos[] = {{{-2.65625,3.33594,-3.29266},272.831}}; + couchPos[] = {{{0.324219,1.95313,-3.29266},358.773},{{2.9082,1.72461,-3.29266},179.738}}; + cookerPos[] = {{{-0.855469,-6.01172,-3.17265},179.15}}; + filingPos[] = {{{8.4043,2.6875,-3.1722},89.7649},{{8.46094,3.30469,-3.17216},91.4351},{{8.44336,3.92969,-3.1722},86.4131}}; + pelicanPos[] = {{{-1.37891,1.34375,-0.767792},314.355},{{8.10742,-1.68359,-3.17223},92.3688}}; + lockerPos[] = {{{4.35938,6.0918,-3.17224},356.684}}; + palletPos[] = {{{0.730469,-4.40039,-0.740871},88},{{0.443359,5.44727,-10},88},{{8.66406,0.873047,-10},93}}; + freezerPos[] = {{{3.97852,-4.58594,-3.27087},182}}; + cabinetPos[] = {{{-4.21851,-3.41992,-1.96077},0},{{7.48828,0.931152,-1.96077},180}}; + }; + class Land_Cargo_HQ_V1_F : Default + { + limit = 4; + lootType = "mil"; + shelfPos[] = {{{0.302734,4.1875,-3.2987},357.597},{{-4.12695,-4.01367,-3.2987},270.059},{{2.70313,-5.11328,-3.2987},177.669}}; + fridgePos[] = {{{2.61328,5.1543,-3.17829},267.807}}; + bedPos[] = {{{-2.7832,3.32227,-3.29873},275.975}}; + couchPos[] = {{{3.13867,1.7832,-3.29873},191.466}}; + cookerPos[] = {{{6.47852,6.01563,-3.17872},359.818}}; + filingPos[] = {{{1.13867,4.03906,-3.29869},0.783356},{{8.12305,2.75586,-3.17827},92.0529},{{8.17969,3.33203,-3.17827},94.1181},{{8.21094,3.93945,-3.17827},88.4099}}; + pelicanPos[] = {{{1.14453,-4.05273,-0.773856},93.1656},{{7.8418,-1.64844,-0.784355},90.2845}}; + tablePos[] = {{{-4.81055,0.771484,-3.1762},270.808}}; + lockerPos[] = {{{0.353516,-6.19727,-3.17831},179.945},{{-3.07031,-6.14453,-3.1783},178.945}}; + palletPos[] = {{{-4.98828,2.61328,-10},182},{{8.20508,0.830078,-10},182}}; + freezerPos[] = {{{4.70508,6.0332,-3.14694},1.99997}}; + cabinetPos[] = {{{7.48877,0.866943,-1.96684},180}}; + }; + class Land_Cargo_HQ_V2_F : Land_Cargo_HQ_V1_F {}; + class Land_Cargo_HQ_V3_F : Land_Cargo_HQ_V1_F {}; + class Land_Cargo_HQ_V4_F : Land_Cargo_HQ_V1_F { }; + class Land_Cargo_House_V1_F : Default + { + lootType = "mil"; + shelfPos[] = {{{2.3457,3.13867,0.0138698},90}}; + fridgePos[] = {{{-2.57031,1.02148,-0.122166},267.298}}; + chairPos[] = {{{1.95898,1.5293,-0.122179},85.5595},{{-1.5293,2.88867,0.0138509},322.238}}; + filingPos[] = {{{2.32617,0.175781,-0.122146},94.7773}}; + pelicanPos[] = {{{-1.85352,3.45898,0.0138566},317.925}}; + palletPos[] = {{{-0.875,-0.892578,-10},1.99997}}; + freezerPos[] = {{{0.539063,3.60547,0.048461},1.99997}}; + cabinetPos[] = {{{-0.491699,-0.0534668,1.21856},270}}; + }; + class Land_Cargo_House_V2_F : Land_Cargo_House_V1_F {}; + class Land_Cargo_House_V3_F : Land_Cargo_House_V1_F {}; + class Land_Cargo_House_V4_F : Land_Cargo_House_V1_F {}; + class Land_dp_smallFactory_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{-1.50586,4.79297,-1.87129},180.159}}; + pelicanPos[] = {{{0.976563,3.16797,2.601},97.492}}; + palletPos[] = {{{10.5059,3.17969,1.18859},1.99997}}; + cabinetPos[] = {{{5.49805,4.76367,-0.461309},270}}; + }; + class Land_i_Garage_V2_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{4.90039,-1.19922,-0.123899},88.7339}}; + fridgePos[] = {{{4.73438,0.322266,-0.123898},87.5145}}; + chairPos[] = {{{0.949219,-2.05469,-0.124453},180.041},{{0.75,2.23828,-0.120063},0.105392}}; + filingPos[] = {{{-0.519531,-2.26758,-0.123836},181.535},{{-1.18945,-2.25,-0.123765},172.485},{{4.83203,-2.30273,-0.123735},99.5615}}; + tablePos[] = {{{-2.72266,-2.13672,-0.132633},179.857}}; + toolRackPos[] = {{{2.37305,2.75977,-0.124017},0.339218},{{2.76563,-2.57422,-0.124016},179.612}}; + palletPos[] = {{{6.91486,-0.999023,-10},180}}; + freezerPos[] = {{{-0.976563,2.29883,-0.116461},1.99998}}; + }; + class Land_u_Barracks_V2_F : Default + { + limit = 6; + lootType = "mil"; + shelfPos[] = {{{-2.01953,3.59766,1.40866},86.5322},{{-1.18555,4.4082,1.40866},267.099},{{5.37695,-2.42773,-1.92432},268.209},{{-6.13281,2.58594,-1.92432},177.59},{{5.46289,3.92578,1.40866},274.739},{{7.93555,-0.273438,1.40866},358.598},{{8.07617,-0.306641,-1.92432},358.744},{{8.76172,2.60547,-1.92432},177.537},{{-9.86914,3.00391,-1.92432},269.405},{{-10.7129,3.96875,-1.92432},83.8923},{{-12.1953,-0.359375,1.40871},357.971},{{-14.7266,2.57813,1.40876},181.364},{{-16.127,-0.359375,-1.92432},357.877}}; + fridgePos[] = {{{5.38867,-2.61719,1.40864},268.987},{{-10.6797,-1.86133,1.40864},89.0169},{{10.7656,4.75586,-1.92426},91.9329}}; + bedPos[] = {{{0.00390625,3.40234,-1.92435},91.4153},{{3.58984,-1.56055,1.40863},1.31381},{{9.80469,3.27344,1.40863},97.6807},{{-11.7617,-1.10547,-1.92435},269.367}}; + couchPos[] = {{{2.72656,-1.28516,-1.92434},273.867},{{-12.2988,4.4668,1.40864},273.1},{{-14.6855,3.48633,-1.92434},92.4456}}; + wardrobePos[] = {{{-1.10742,-2.48438,1.40877},271.139},{{4.26367,4.1543,-1.92423},90.3193}}; + cookerPos[] = {{{5.52148,-1.29688,1.40827},269.9},{{10.6504,3.61328,-1.92474},90.6279},{{-10.916,-2.91406,1.40832},90.6295}}; + chairPos[] = {{{-0.787109,-2.87109,-1.92433},243.978},{{-0.953125,5.07422,-1.92361},283.609},{{-4.85156,-2.75781,-1.92434},47.0285},{{10.4219,5.0625,1.40864},65.2562},{{-16.418,2.94922,1.40865},214.598},{{-16.4785,-2.82031,-1.91074},233.102}}; + filingPos[] = {{{-1.01953,-0.453125,-1.92431},357.404},{{-2.16602,2.66797,-1.92431},110.166},{{-2.17773,4.83203,-1.9243},85.2777},{{-2.19727,5.30664,1.40868},84.274},{{-2.1875,5.33203,-1.9243},86.7386},{{4.37109,4.39844,1.40868},71.7087},{{5.33984,-3.24219,-1.9243},266.113},{{5.41602,3.54102,-1.9243},263.452},{{4.29102,4.91797,1.40868},85.4132},{{5.37891,4.10938,-1.9243},275.738},{{4.30859,5.38086,1.40868},86.1467},{{5.42188,4.70898,-1.9243},265.797},{{-8.33398,2.60352,1.40874},182.724},{{-8.9707,2.60156,1.40873},180.321},{{-9.7832,2.66797,1.40867},195.667},{{10.8789,-0.318359,1.40868},73.9709},{{10.9199,-2.47656,-1.9243},90.1058},{{10.9004,-3.0625,-1.9243},90.2496},{{-10.8066,5.09375,-1.9243},83.8553},{{-16.6758,-2.74023,1.40868},269.525},{{-16.7051,-3.23438,1.40868},265.732},{{-16.6211,5.41211,1.40871},281.602}}; + pelicanPos[] = {{{-9.26563,-4.74609,1.40864},207.949},{{10.4531,-2.80273,1.40864},136.408},{{-16.666,6.80859,1.40864},268.101}}; + tablePos[] = {{{1.79883,-0.546875,1.40863},0.30365},{{7.95117,-3.04688,1.40863},181.397},{{-16.5781,4.66797,-1.92435},269.307}}; + lockerPos[] = {{{0.539063,2.65234,1.40864},180.316},{{6.29492,-0.507813,-1.92434},359.612},{{-6.15625,2.65625,1.40874},178.513},{{-7.85352,2.64844,-1.92434},178.304}}; + freezerPos[] = {{{-5.82227,-4.86328,1.49066},185},{{-6.21875,5.08398,1.49066},1.99997},{{-16.0039,-0.580078,1.49066},1.99997}}; + cabinetPos[] = {{{-7.6416,-5.42383,-0.409235},270},{{-17.0132,1.60693,2.89076},0}}; + toiletPos[] = {{{-5.88086,-2.2627,-1.87523},1.9996}}; + }; + class Land_i_Barracks_V2_F : Default + { + limit = 6; + lootType = "mil"; + GroundSpawnChance = 80; + MinGroundContainers = 4; + MaxGroundContainers = 8; + shelfPos[] = {{{-3.91406,4.36816,0.579132},0.755371},{{-7.16211,-2.42676,3.91308},90},{{-7.08789,-3.69434,0.579177},88.7136},{{7.91797,2.16504,0.579097},93.2098},{{8.86719,2.98145,0.579103},265.996},{{12.2988,1.54297,3.91308},180.227}}; + fridgePos[] = {{{-13.209,-3.86133,0.579104},267.951},{{-13.1953,-3.96875,3.91308},266.429}}; + bedPos[] = {{{3.25391,2.82422,0.579081},181.072},{{7.13086,-3.10645,0.579082},359.996},{{10.2598,-2.19531,3.91306},274.345},{{-12.0977,2.37695,3.91306},91.0109},{{-12.6543,3.00977,0.579082},184.452}}; + couchPos[] = {{{6.04297,-2.55762,3.91306},280.83},{{10.2754,-2.4502,0.579081},280.799}}; + cookerPos[] = {{{-12.6621,-1.54199,0.578749},358.466},{{-13.2383,-2.48926,3.91281},270.982}}; + chairPos[] = {{{2.58594,-3.91309,0.579165},261.223},{{-1.79297,-5.75391,3.91291},133.686},{{-5.79688,-5.7041,3.91307},219.674},{{-7.625,3.94141,0.579091},54.7852},{{-7.74414,3.70801,3.91307},37.1618},{{9.36328,-3.69824,3.91306},252.24},{{13.834,-3.76172,0.579099},137.181}}; + filingPos[] = {{{2.26172,-1.52051,3.91319},357.145},{{1.2832,3.91797,3.9131},85.9261},{{1.24609,4.37402,3.9131},83.3282},{{4.24805,1.63574,3.9131},173.705},{{4.69336,1.63379,3.9131},177.094},{{-6.30273,3.34766,0.579124},266.774},{{-6.23438,3.84766,0.579123},274.501},{{-7.2832,-4.13379,3.91315},178.61},{{7.93555,3.07422,0.57919},82.7785},{{9.14648,1.65332,3.91318},184.404},{{-13.1055,4.26563,3.91319},288.672},{{14.2305,1.56543,3.9131},90.9699}}; + pelicanPos[] = {{{-2.50391,-5.04199,7.4924},169.602},{{-12.8242,5.72266,3.82744},317.876}}; + tablePos[] = {{{-2.72852,1.75391,3.91306},178.339},{{-3.75781,-6.08105,3.91306},180.247},{{-9.46484,4.12988,3.91306},359.779},{{-10.1289,4.10156,0.579082},0.00921631}}; + lockerPos[] = {{{1.2793,3.78418,0.579087},86.8882},{{-2.58789,-3.3584,0.579131},359.544},{{-6.10352,2.22168,3.9131},269.383},{{-6.22266,2.14551,0.57918},271.326},{{7.8125,3.70313,3.91307},88.2042},{{14.0723,-3.22754,3.91322},88.3252},{{14.2012,3.70703,0.579188},88.1507}}; + toolRackPos[] = {{{-2.93359,1.23438,0.579066},180.737}}; + freezerPos[] = {{{-8.96094,-1.70605,0.508462},360},{{-9.27344,-1.7334,3.85846},360}}; + cabinetPos[] = {{{-6.55322,-2.76904,5.30856},0}}; + toiletPos[] = {{{7.95508,-4.15625,3.93497},89.2524},{{-7.26758,-1.44727,0.537991},47.6757}}; + }; + class Land_i_Barracks_V1_F : Land_i_Barracks_V2_F {}; + class Land_i_Garage_V2_dam_F : Default + { + lootType = "workshop"; + toolRackPos[] = {{{5.12695,-2.06641,-0.159975},90}}; + shoeboxPos[] = {{{-0.900391,1.64063,-0.159975},220}}; + palletPos[] = {{{1.32031,0.759766,-0.159975},170}}; + freezerPos[] = {{{-3.42969,-2.76563,-0.159975},190}}; + toiletPos[] = {{{4.83496,-0.404297,-0.0576477},89.4635}}; + }; + class Land_i_Stone_HouseBig_V1_dam_F : Default + { + shelfPos[] = {{{-0.191406,-3.48438,-1.65251},178}}; + fridgePos[] = {{{1.73438,1.0625,-1.65251},360}}; + bedPos[] = {{{-1.56836,0.713867,1.15249},267}}; + couchPos[] = {{{-1.58203,-2.34082,1.15249},97}}; + wardrobePos[] = {{{1.50195,-3.28125,1.19749},178}}; + tablePos[] = {{{-3.07813,-1.62109,-1.63251},269}}; + shoeboxPos[] = {{{1.07031,1.16113,1.19749},128}}; + }; + class Land_i_Stone_HouseBig_V3_dam_F : Default + { + bedPos[] = {{{-1.96094,0.71875,1.15249},269}}; + couchPos[] = {{{-2.11523,-1.89453,1.12749},169}}; + chairPos[] = {{{2.98047,-3.04883,1.15249},141.7}}; + filingPos[] = {{{0.0800781,1.31836,1.15249},351.7}}; + tablePos[] = {{{-3.07617,-1.59766,-1.77251},269}}; + shoeboxPos[] = {{{-0.470703,0.771484,-0.593828},202.7}}; + palletPos[] = {{{2.15234,0.814453,-1.65383},202.7}}; + freezerPos[] = {{{3.11523,-2.91797,-1.65383},92.7}}; + }; + class Land_Airport_Tower_dam_F : Default + { + lootType = "mil"; + shelfPos[] = {{{1.78906,1.90234,0.798989},0}}; + filingPos[] = {{{-2.93359,-3.1582,0.812261},229}}; + pelicanPos[] = {{{0.587891,8.4043,3.79912},9.99995}}; + lockerPos[] = {{{1.10938,6.14648,-8.19994},360}}; + shoeboxPos[] = {{{2.2793,-5.125,0.798989},9.99995}}; + cabinetPos[] = {{{-0.714844,2.58203,-6.82513},270}}; + }; + class Land_d_Windmill01_F : Default + { + pelicanPos[] = {{{-0.800781,0.158203,0.943356},133}}; + shoeboxPos[] = {{{-1.06055,1.63477,-2.32494},242}}; + palletPos[] = {{{-1.2168,-0.791016,-2.31882},0}}; + }; + class Land_u_Shed_Ind_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{-5.90234,-1.64453,-1.45137},179.958},{{-0.0195313,8.39648,-1.43504},6.50078}}; + chairPos[] = {{{-6.70703,1.93359,-1.43049},357.957}}; + filingPos[] = {{{-4.83203,2.18359,-1.43498},3.3181},{{6.72266,-1.33984,-1.43502},208.603}}; + pelicanPos[] = {{{-4.81055,2.53125,1.51679},180.197}}; + palletPos[] = {{{-2.47266,7.94922,-1.51769},360},{{8.92383,3.15039,-1.51769},91},{{14.834,-0.927734,-1.51769},360}}; + freezerPos[] = {{{-4.94141,0.177734,-1.51769},91}}; + }; + class Land_i_Shed_Ind_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{3.75781,-1.39844,-1.43597},178.598},{{-6.29688,-1.64844,-1.43597},180.042},{{-1.85938,8.64844,-1.43597},1.254},{{15.8086,5.01367,-1.43592},90.0259}}; + fridgePos[] = {{{-4.0918,2.25391,-1.43614},269.878}}; + couchPos[] = {{{0.0527344,3.64453,-1.43621},214.408}}; + cookerPos[] = {{{-5.86523,2.00391,-1.43661},358.838}}; + chairPos[] = {{{15.4688,7.75586,-1.43558},90.0616}}; + filingPos[] = {{{-4.89648,-1.49609,-1.43617},178.115},{{-0.6875,8.5293,-1.43617},358.177},{{15.6309,6.44336,-1.43617},86.6001}}; + lockerPos[] = {{{8.71875,-1.44141,-1.43617},179.064}}; + toolRackPos[] = {{{-1.60742,-1.83594,-1.43602},181.024},{{8.53906,8.82422,-1.43602},0.0482483}}; + shoeboxPos[] = {{{-6.76953,2.15039,-1.43621},356.704}}; + palletPos[] = {{{-3.32031,-0.679688,-1.50884},0},{{2.86133,7.82031,-1.50884},0},{{4.82617,7.72266,-1.50884},91}}; + freezerPos[] = {{{-5.0293,0.304688,-1.47884},91}}; + toiletPos[] = {{{-4.93555,1.31592,-1.52141},-269.849}}; + }; + class Land_BagBunker_Large_F : Default + { + lootType = "mil"; + shelfPos[] = {{{0.0820313,-0.914063,-0.766759},269.689},{{-3.85156,-1.18555,-0.76676},272.369}}; + couchPos[] = {{{2.64648,-3.39258,-0.766787},87.3199}}; + filingPos[] = {{{1.02148,1.80078,-0.766742},359.841},{{-1.57031,1.58008,-0.766741},359.563}}; + pelicanPos[] = {{{0.382813,0.970703,-0.766773},269.105},{{-0.769531,-1.35352,-0.766773},73.6849}}; + tablePos[] = {{{-0.646484,0.492188,-0.766783},90.0316}}; + palletPos[] = {{{3.13672,-1.19922,-0.69166},0},{{-3.17773,-3.54102,-0.69166},0}}; + }; + class Land_BagBunker_01_large_green_F : Land_BagBunker_Large_F {}; + class Land_BagBunker_Tower_F : Default + { + lootType = "mil"; + pelicanPos[] = {{{-1.95508,-0.0195313,-0.90682},269.117},{{-0.703125,-2.67383,0.543192},212.824}}; + shoeboxPos[] = {{{2.37891,-1.93555,-0.873341},0}}; + palletPos[] = {{{-0.732422,2.07617,-2.17334},348},{{-0.771484,-2.21094,-2.17334},0}}; + }; + class Land_HBarrier_01_tower_green_F : Land_BagBunker_Tower_F {}; + class Land_Offices_01_V1_F : Default + { + limit = 6; + shelfPos[] = {{{1.18555,3.91016,0.712739},359.463},{{-1.66797,-5.50195,-7.10147},270.268},{{7.38477,1.79688,4.63913},89.9385},{{7.48047,-4.49414,-3.18539},87.3787},{{8.3457,2.93164,-7.08514},270.832},{{12.4883,3.5293,-7.08517},89.032},{{-16.5742,6.37695,-7.08533},269.995}}; + fridgePos[] = {{{8.60547,1.05273,-7.08536},261.917}}; + couchPos[] = {{{6.63086,2.61133,-7.08539},359.378}}; + cookerPos[] = {{{12.3555,2.48438,-7.0863},88.735}}; + chairPos[] = {{{7.04297,-3.23633,0.71985},54.2617},{{6.82813,-6.80273,0.698915},116.603},{{12.1465,7.50391,-7.08539},21.1554},{{-15.248,7.0293,9.81961},126.25}}; + filingPos[] = {{{-0.162109,3.8457,0.712403},355.347},{{-1.60547,-3.98047,-7.10168},270.008},{{5.1582,0.861328,4.62234},186.369},{{4.81445,3.93164,-3.18698},86.2954},{{5.69531,3.77148,-3.18649},2.55798},{{7.20898,3.4082,4.63931},72.0425},{{7.27148,3.89648,4.63947},84.6359},{{7.46289,-5.73047,-3.18564},89.5913},{{9.43164,-0.173828,4.63879},355.477},{{9.89063,-0.171875,4.63889},357.143},{{8.54883,7.85352,-7.08539},354.434},{{9.14648,7.85742,-7.08536},342.434},{{-16.377,4.77148,-7.08542},249.62},{{-16.3945,5.33789,-7.08539},272.711}}; + pelicanPos[] = {{{-7.70508,3.27539,9.80328},165.226},{{11.9551,-0.947266,4.63934},22.6672},{{-11.2246,-9.87695,9.81973},358.384}}; + tablePos[] = {{{7.39453,-4.98242,0.717866},89.9971}}; + lockerPos[] = {{{10.3047,7.74805,-7.08533},359.889}}; + toolRackPos[] = {{{5.50781,4.16016,4.63971},0.0171576}}; + shoeboxPos[] = {{{3.23438,-0.361328,4.62201},314.676},{{-13.8223,3.53125,9.81958},272.283}}; + palletPos[] = {{{-5.23438,1.21875,9.83307},348},{{6.88477,-4.91602,9.83307},348},{{-7.91797,-7.52734,9.83307},348},{{10.6992,-4.91602,4.62271},0},{{11.6484,6.89063,9.83307},348}}; + freezerPos[] = {{{12.332,1.18555,-7.08542},90}}; + cabinetPos[] = {{{4.25293,0.552734,5.96314},270},{{10.2202,0.577637,-5.76687},270}}; + toiletPos[] = {{{8.41846,4.78711,-7.06345},270.097}}; + }; + class Land_d_Stone_Shed_V1_F : Default + { + bedPos[] = {{{2.83203,1.8418,-0.0155029},269.824}}; + palletPos[] = {{{1.93164,-3.32227,-10},348}}; + toiletPos[] = {{{0.308594,2.5625,0.0315695},2.64121}}; + }; + class Land_i_House_Small_01_V1_F : Default + { + shelfPos[] = {{{0.712891,2.01953,-1.06801},179.636}}; + fridgePos[] = {{{2.66992,4.35742,-1.06878},359.99}}; + bedPos[] = {{{-3.06641,0.388672,-1.06846},273.681}}; + couchPos[] = {{{-1.00195,-3.09766,-1.06751},91.678}}; + wardrobePos[] = {{{-4.11914,-1.85938,-1.08958},269.028}}; + cookerPos[] = {{{3.91992,4.31055,-1.06914},359.993}}; + chairPos[] = {{{0.800781,-1.12109,-1.06701},74.3133},{{-3.79492,2.57031,-1.06882},227.565},{{-3.71875,-3.625,-1.05222},229.261}}; + tablePos[] = {{{-1.875,2.26172,-1.06836},180.248}}; + toiletPos[] = {{{1.16309,-3.91016,-1.10812},142.738}}; + }; + class Land_i_House_Small_01_V2_F : Land_i_House_Small_01_V1_F {}; + class Land_i_House_Small_01_V3_F : Land_i_House_Small_01_V1_F {}; + class Land_i_House_Small_01_b_blue_F : Land_i_House_Small_01_V1_F {}; + class Land_i_House_Small_01_b_pink_F : Land_i_House_Small_01_V1_F {}; + class Land_i_House_Small_01_b_whiteblue_F : Land_i_House_Small_01_V1_F {}; + class Land_i_House_Small_01_b_white_F : Land_i_House_Small_01_V1_F {}; + class Land_i_House_Small_01_b_brown_F : Land_i_House_Small_01_V1_F {}; + class Land_i_House_Small_01_b_yellow_F : Land_i_House_Small_01_V1_F {}; + class Land_u_House_Big_01_V1_F : Default + { + shelfPos[] = {{{1.56055,0.982422,-2.59135},359.087},{{3.06836,-2.5918,0.82871},183.405},{{1.39258,-6.70508,-2.59135},182.249},{{3.20703,6.94922,-2.59135},3.01586}}; + fridgePos[] = {{{0.0546875,6.88477,-2.59135},357.87}}; + bedPos[] = {{{-3.03711,-5.87109,0.828626},91.7906},{{3.26758,-5.99805,0.828626},95.6288},{{3.30273,6.26758,0.828626},272.1}}; + couchPos[] = {{{0.482422,-1.69141,0.828588},90.019},{{-0.523438,-2.12305,-2.59137},184.381},{{-3.01172,5.27344,-2.59138},177.246},{{-2.76172,6.18164,0.828629},269.359}}; + wardrobePos[] = {{{4.35352,-3.9375,0.828695},91.5199},{{4.29102,4.18945,0.828744},90.0946}}; + cookerPos[] = {{{1.33398,6.96289,-2.59177},359.496}}; + chairPos[] = {{{-2.83594,-0.570313,-2.68137},75.9432},{{-2.95898,-2.29102,-2.68137},82.8292},{{0.705078,3.7832,0.828643},180.005},{{-3.65039,2.18164,0.828628},313.022},{{4.05078,3.9043,-2.5792},111.554}}; + tablePos[] = {{{1.75977,0.580078,0.828625},359.479},{{0.232422,-6.57813,0.828625},180.157},{{4.20898,-5.11133,-2.59138},90.4264}}; + toolRackPos[] = {{{-2.86523,1.09375,-2.5914},179.843}}; + freezerPos[] = {{{1.55859,3.71289,-2.61788},177}}; + toiletPos[] = {{{-3.9834,1.85645,-2.61971},-90.0787}}; + }; + class Land_i_House_Big_01_V1_F : Default + { + shelfPos[] = {{{-3.33594,2.69336,0.828649},0.965714},{{2.96875,3.44531,-2.59135},182.75},{{3.70898,-2.63867,0.828707},180.077},{{-4.09961,2.03516,-2.59135},269.739}}; + fridgePos[] = {{{4.11914,3.69922,-2.59135},168.186},{{-3.92578,6.73633,0.828675},290.478}}; + bedPos[] = {{{0.835938,-4.21289,0.828626},273.228},{{3.64844,-4.54688,0.828626},1.43391},{{3.29297,6.20508,0.828626},273.903}}; + couchPos[] = {{{-3.18359,-1.30273,0.828621},181.307},{{3.11328,4.48633,0.828624},89.1209},{{-2.99609,5.30859,-2.59138},178.667},{{3.05664,-5.85938,-2.59137},90.8967}}; + wardrobePos[] = {{{-3.63281,3.60742,0.828697},179.668},{{4.30273,-3.64844,-2.59128},90},{{-2.66016,-6.70117,0.828702},181.241}}; + cookerPos[] = {{{1.91016,3.75781,-2.59176},181.387}}; + chairPos[] = {{{1.875,0.488281,-2.59136},12.1387},{{2.37305,0.478516,0.85181},84.246},{{-3,-0.240234,-2.68137},57.9483},{{-2.76953,-2.30664,-2.68137},80.3317}}; + tablePos[] = {{{-1.17188,-1.95703,-2.59138},270.249},{{0.105469,6.84375,0.828627},0.00192261}}; + toolRackPos[] = {{{-2.8125,1.09375,-2.59139},180.224}}; + freezerPos[] = {{{0.59375,6.80273,-2.61788},3}}; + toiletPos[] = {{{4.27539,-6.80957,0.778091},178.637}}; + }; + class Land_i_House_Big_01_V2_F : Land_i_House_Big_01_V1_F {}; + class Land_i_House_Big_01_V3_F : Land_i_House_Big_01_V1_F {}; + class Land_i_House_Big_01_b_blue_F : Land_i_House_Big_01_V1_F {}; + class Land_i_House_Big_01_b_pink_F : Land_i_House_Big_01_V1_F {}; + class Land_i_House_Big_01_b_whiteblue_F : Land_i_House_Big_01_V1_F {}; + class Land_i_House_Big_01_b_white_F : Land_i_House_Big_01_V1_F {}; + class Land_i_House_Big_01_b_brown_F : Land_i_House_Big_01_V1_F {}; + class Land_i_House_Big_01_b_yellow_F : Land_i_House_Big_01_V1_F {}; + class Land_Hospital_side1_F : Default + { + limit = 5; + lootType = "medical"; + shelfPos[] = {{{-5.40039,2.9082,-7.91957},2.14935},{{-6.25,-7.61719,-7.92645},270.854},{{2.96484,10.916,7.44774},359.647},{{9.71289,-6.21289,-7.92565},87.4192}}; + fridgePos[] = {{{-2.66797,-11.2949,-7.92739},179.351}}; + bedPos[] = {{{-0.912109,-3.25195,-7.92176},91.7708},{{4.10547,-3.19141,-7.92099},89.6996},{{-0.625,-5.79688,-7.92326},266.29}}; + couchPos[] = {{{-0.386719,1.90234,-7.91998},271.421}}; + cookerPos[] = {{{-3.70898,-11.1738,-7.92829},180.136}}; + chairPos[] = {{{7.83008,2.53906,-7.92018},340.336},{{9.28516,2.51367,-7.92017},27.1802}}; + pelicanPos[] = {{{-4.66016,7.12695,-0.617266},177.338}}; + lockerPos[] = {{{-6.14063,0.242188,-7.92175},268.608},{{9.47656,0.0429688,-7.92081},89.4555}}; + toolRackPos[] = {{{-0.167969,6.7832,7.44031},0.197876},{{9.93164,5.09375,-7.92028},90.4358}}; + shoeboxPos[] = {{{9.5293,-5.36328,7.43984},95.593},{{0.126953,11.4395,2.38099},90}}; + palletPos[] = {{{5.7207,5.69727,7.451},90},{{-2.02539,10.0586,-7.89901},90},{{8.43945,-6.91016,7.451},90}}; + freezerPos[] = {{{9.43945,-8.53906,-7.90901},90}}; + cabinetPos[] = {{{-6.39502,-5.93945,-6.56894},0},{{9.81006,-4.22998,-6.56894},180}}; + toiletPos[] = {{{-6.16284,-2.45801,-7.89736},-89.1454}}; + }; + class Land_Hospital_side2_F : Default + { + limit = 5; + lootType = "medical"; + shelfPos[] = {{{4.34766,-10.8809,-8.13902},179.22},{{-5.95703,-10.9258,-8.13085},178.43},{{15.5547,-1.91211,-8.13092},359.336}}; + fridgePos[] = {{{-8.25586,-8.94922,-8.13093},267.631}}; + couchPos[] = {{{-7.19336,1.38867,-8.13095},179.136}}; + cookerPos[] = {{{-8.17969,-10.1816,-8.13134},269.372}}; + pelicanPos[] = {{{-7.36133,3.00391,11.219},282.51},{{-10.5195,-4.00586,7.23841},237.441}}; + lockerPos[] = {{{-1.35938,-10.7207,-8.13079},180.383},{{8.24609,-10.7422,-8.13077},178.528},{{11.8438,-10.709,-8.13078},179.892}}; + toolRackPos[] = {{{-8.71094,-3.51367,-8.13078},270}}; + palletPos[] = {{{1.34766,-0.410156,-8.14045},90},{{-5.58203,-0.400391,-8.14045},90},{{6.58008,3.79297,-8.14045},90}}; + freezerPos[] = {{{-4.11914,-10.6406,-8.14045},180}}; + cabinetPos[] = {{{0.117188,-1.76221,-6.77038},90},{{1.33496,-11.0347,-6.77038},270},{{14.6304,-11.0347,-6.77038},270}}; + toiletPos[] = {{{6.49194,3.99512,11.133},-321.646}}; + }; + class Land_Hospital_main_F : Default + { + limit = 5; + lootType = "medical"; + shelfPos[] = {{{14.3516,-2.75781,-8.04017},90.0092},{{14.4102,-10.8027,-8.04031},88.6201},{{6.71875,-18.9082,7.32756},88.904}}; + chairPos[] = {{{-10.5098,-12.3008,-8.04206},272.027},{{4.49805,19.1055,-8.03925},359.681},{{6.66016,19.1504,-8.0383},356.209},{{0.691406,-20.6602,-8.03756},178.007},{{9.58594,19.1191,-8.03699},359.114},{{5.51953,-20.6738,-8.03836},179.692}}; + pelicanPos[] = {{{5.98242,-6.33008,7.32735},22.9554},{{10.6816,0.878906,-7.01696},300.456}}; + tablePos[] = {{{3.35938,-20.6563,-8.04205},179.332}}; + lockerPos[] = {{{14.1875,10.0137,-8.03923},88.9373},{{14.1895,12.209,-8.03929},89.9901},{{14.2285,14.4941,-8.03952},89.9901}}; + shoeboxPos[] = {{{-1.01367,-4.61133,-1.04287},188.531},{{12.9023,-7.36914,7.32734},210.758}}; + palletPos[] = {{{-10.0547,-6.80469,-8.05151},180},{{1.62305,18.627,-8.05151},180}}; + cabinetPos[] = {{{14.5366,-0.879883,-6.88591},180},{{14.5056,-9.5127,-6.88591},180}}; + toiletPos[] = {{{14.2844,20.4639,-8.05601},-268.689}}; + }; + class Land_d_Shop_02_V1_F : Default + { + shelfPos[] = {{{-1.25195,-3.0293,-2.79755},250.062},{{1.2793,-4.13867,-2.79765},178.402},{{-5.04688,2.14063,1.0899},273.409}}; + fridgePos[] = {{{-1.77148,4.04688,-2.79756},99.5686}}; + couchPos[] = {{{2.12891,-2.2168,1.09474},94.155}}; + chairPos[] = {{{4.9707,-3.16992,1.09518},180.623},{{-4.48633,4.00586,-2.79765},325.405},{{-4.54883,4.10352,1.08889},330.581}}; + pelicanPos[] = {{{0.566406,1.81445,4.50349},353.316}}; + palletPos[] = {{{-4.0918,-2.88086,-2.45702},238},{{4.7832,4.58984,-2.52702},238}}; + toiletPos[] = {{{-2.51367,0.0615234,-2.84089},90.7273}}; + }; + class Land_d_House_Small_01_V1_F : Default + { + shelfPos[] = {{{6.82813,6.42285,-0.861197},354.675}}; + fridgePos[] = {{{8.44141,2.11035,-0.859908},88.0808}}; + couchPos[] = {{{4.75,-0.15918,-0.859535},359.982}}; + chairPos[] = {{{3.43359,4.36914,-0.860575},180.154},{{8.06641,5.74316,-0.861},27.7226}}; + pelicanPos[] = {{{1.42969,-1.45898,2.73048},98.759}}; + palletPos[] = {{{0.865234,-1.24414,-0.196001},238}}; + toiletPos[] = {{{8.92676,7.51758,-1.31014},-177.006}}; + }; + class Land_Church_01_V1_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + wardrobePos[] = {{{4.5957,5.27051,-6.49416},180.222}}; + chairPos[] = {{{5.29492,-5.31055,-6.49177},10.1886}}; + pelicanPos[] = {{{-5.17969,5.49414,-5.52077},284.503}}; + shoeboxPos[] = {{{-5.70313,-4.57422,-5.49586},271.096}}; + palletPos[] = {{{-4.17969,-5.43848,-5.50872},238}}; + }; + class Land_Church_01_V2_F : Land_Church_01_V1_F {}; + class Land_Castle_01_tower_F : Default + { + lootType = "mil"; + shelfPos[] = {{{2.58398,2.0791,-9.50637},85.6591}}; + couchPos[] = {{{-1.63281,-1.07617,-9.50639},183.524}}; + chairPos[] = {{{-2.01953,-1.68555,7.91612},225.648}}; + pelicanPos[] = {{{2.05469,-1.40527,7.91612},117.265}}; + palletPos[] = {{{-1.76758,2.14648,-9.5529},238}}; + }; + class Land_dp_bigTank_F : Default + { + lootType = "industrial"; + pelicanPos[] = {{{0.326172,-0.174805,3.57153},253.033}}; + palletPos[] = {{{-2.50781,-3.73828,3.60099},180},{{-2.02734,4.60449,3.60099},238}}; + }; + class Land_i_House_Small_02_V1_F : Default + { + fridgePos[] = {{{-3.27148,0.0527344,-0.734623},270.037}}; + bedPos[] = {{{6.20313,-2.11328,-0.726701},91.5496}}; + couchPos[] = {{{-0.511719,-1.35156,-0.735134},1.5394},{{6.25391,0.796875,-0.726635},2.02849}}; + wardrobePos[] = {{{1.42578,-2.14453,-0.732787},274.294}}; + cookerPos[] = {{{-3.22266,2.26367,-0.727057},270.633}}; + chairPos[] = {{{1.82813,-0.0859375,-0.732331},294.633},{{3.58398,-2.61719,-0.730065},188.429}}; + tablePos[] = {{{4.15039,2.44727,-0.726453},0.13829}}; + toiletPos[] = {{{7.26953,-1.05078,-0.756542},-268.959}}; + }; + class Land_i_House_Small_02_V2_F : Land_i_House_Small_02_V1_F {}; + class Land_i_House_Small_02_V3_F : Land_i_House_Small_02_V1_F {}; + class Land_i_House_Small_02_b_whiteblue_F : Default { + fridgePos[] = { + { {-5.15283,-0.370117,-0.533894}, 270 } + }; + bedPos[] = { + { {4.48145,0.750977,-0.610384}, 360 } + }; + couchPos[] = { + { {-2.45703,-1.98438,-0.634064}, 4.99997 }, + { {6.25391,0.797852,-0.726635}, 2.0285 } + }; + wardrobePos[] = { + { {-0.522461,-2.36426,-0.622379}, 270.9 } + }; + cookerPos[] = { + { {-5.14209,1.80957,-0.625494}, 271 } + }; + chairPos[] = { + { {-0.303223,-0.370117,-0.631815}, 271 }, + { {1.70459,-3.11914,-0.66921}, 189.8 } + }; + tablePos[] = { + { {2.26221,2.12109,-0.627096}, 360 } + }; + toiletPos[] = { + { {-5.104,-3.36426,-0.615711}, 266 } + }; + }; + class Land_i_House_Small_02_b_blue_F : Land_i_House_Small_02_b_whiteblue_F {}; + class Land_i_House_Small_02_b_pink_F : Land_i_House_Small_02_b_whiteblue_F {}; + class Land_i_House_Small_02_b_white_F : Land_i_House_Small_02_b_whiteblue_F {}; + class Land_i_House_Small_02_b_brown_F : Land_i_House_Small_02_b_whiteblue_F {}; + class Land_i_House_Small_02_b_yellow_F : Land_i_House_Small_02_b_whiteblue_F {}; + class Land_i_House_Small_02_c_blue_F : Land_i_House_Small_02_b_whiteblue_F {}; + class Land_i_House_Small_02_c_pink_F : Land_i_House_Small_02_b_whiteblue_F {}; + class Land_i_House_Small_02_c_whiteblue_F : Land_i_House_Small_02_b_whiteblue_F {}; + class Land_i_House_Small_02_c_white_F : Land_i_House_Small_02_b_whiteblue_F {}; + class Land_i_House_Small_02_c_brown_F : Land_i_House_Small_02_b_whiteblue_F {}; + class Land_i_House_Small_02_c_yellow_F : Land_i_House_Small_02_b_whiteblue_F {}; + class Land_Chapel_V1_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + wardrobePos[] = {{{6.00195,-3.92969,-2.83485},179.372},{{6.51758,3.87891,-2.83486},0.951279}}; + chairPos[] = {{{-5.87305,-3.24414,-2.83491},100.36}}; + pelicanPos[] = {{{6.86914,0.0175781,-2.63492},267.468}}; + tablePos[] = {{{-4.00977,-1.36523,-2.83493},269.847}}; + shoeboxPos[] = {{{1.01758,-1.21484,-2.83492},277.811},{{3.37695,3.05078,-2.83492},276.733},{{-1.56445,-4.63281,-1.51178},1.34718}}; + palletPos[] = {{{-6.60352,-0.580078,-2.83143},107}}; + toiletPos[] = {{{-3.92188,-4.00781,-2.90831},-179.383}}; + }; + class Land_Chapel_V2_F : Land_Chapel_V1_F {}; + class Land_Chapel_Small_V1_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + chairPos[] = {{{3.26953,0.988281,-0.894284},95.6997}}; + pelicanPos[] = {{{1.88379,-1,-0.54896},269.755}}; + shoeboxPos[] = {{{-0.423828,-1.18945,-0.9293},272.97}}; + palletPos[] = {{{5.34961,1.12695,-10},107}}; + }; + class Land_Chapel_Small_V2_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + chairPos[] = {{{1.81445,1.00391,-0.894289},263.639},{{1.86621,-1.23633,-0.894289},264.855}}; + pelicanPos[] = {{{-0.228516,-0.994141,-0.54997},264.521}}; + tablePos[] = {{{3.75586,-0.105469,-0.894377},89.9709}}; + shoeboxPos[] = {{{-0.333984,-0.396484,-0.9293},269.367}}; + }; + class Land_Unfinished_Building_02_F : Default + { + lootType = "construction"; + shelfPos[] = {{{-3.17188,-1.88086,0.949918},269.1},{{5.81641,1.0918,-2.52319},89.9583},{{5.91406,0.357422,0.950038},90.0202},{{-7.89746,0.162109,0.949969},268.502}}; + bedPos[] = {{{-4.95898,3.81641,0.949724},2.84769}}; + couchPos[] = {{{-0.923828,-4.65039,0.949726},89.1011},{{-6.69727,1.0293,-2.52443},191.658}}; + pelicanPos[] = {{{0.539063,3.33398,0.949805},48.6076}}; + lockerPos[] = {{{2.0166,4.06055,0.949846},269.094}}; + toolRackPos[] = {{{1.55176,-1.90625,0.949803},90}}; + shoeboxPos[] = {{{-2.40234,3.50586,-2.29579},316.814}}; + palletPos[] = {{{3.5625,-2.18359,-2.38678},107},{{-4.375,3.11133,-2.43678},107},{{-7.12988,-2.27539,-2.38678},107}}; + toiletPos[] = {{{-7.84375,-3.03906,1.00254},268.293}}; + }; + class Land_Unfinished_Building_01_F : Default + { + lootType = "construction"; + shelfPos[] = {{{1.72168,-2.44336,1.17171},270.818},{{-4.88184,2.35938,1.17171},269.023},{{-3.98438,6.07227,-2.33344},359.657}}; + pelicanPos[] = {{{-0.557617,5.36523,4.46878},7.08017},{{-1.00684,5.38867,-2.33351},80.4785}}; + toolRackPos[] = {{{-5.13184,4.25,1.1717},270.006}}; + shoeboxPos[] = {{{-0.368164,5.74023,-2.31357},26.9766}}; + palletPos[] = {{{-2.25879,-1.67578,1.17496},107},{{-3.6416,-1.50586,-2.30504},107}}; + toiletPos[] = {{{0.53125,2.09277,1.13927},-183.159}}; + }; + class Land_i_Garage_V1_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{-1.55078,2.56055,-0.123878},2.39618},{{1.91309,2.57422,-0.123676},359.724}}; + fridgePos[] = {{{2.73438,-2.17188,-0.123873},182.516},{{4.35547,-1.73828,-0.123592},152.206}}; + cookerPos[] = {{{0.046875,-2.07031,-0.124327},178.265},{{4.73438,-0.0839844,-0.124328},90}}; + chairPos[] = {{{-3.29883,2.07813,-0.115259},30.7671},{{-3.37695,-2.0293,-0.108249},179.713}}; + toolRackPos[] = {{{0.271484,2.77539,-0.124063},0.0454407}}; + freezerPos[] = {{{1.19922,-1.98047,-0.116426},176}}; + }; + class Land_i_Shop_01_V1_F : Default + { + shelfPos[] = {{{-3.48438,-1.17578,-2.788},268.197},{{3.14453,4.45508,-2.78799},180.136}}; + fridgePos[] = {{{1.59961,4.04297,-2.78796},85.053}}; + bedPos[] = {{{-2.6543,2.58594,1.08346},176.063}}; + couchPos[] = {{{-2.60742,2.36133,-2.78802},178.997}}; + wardrobePos[] = {{{1.71094,1.96094,1.10037},90.3614}}; + cookerPos[] = {{{1.47656,0.724609,-2.7976},91.1}}; + chairPos[] = {{{-3.06836,-1.5293,1.08361},216.965},{{-3.23242,6.06445,1.08373},271.268},{{-3.09766,6.14063,-2.78284},312.75}}; + pelicanPos[] = {{{-2.66016,-3.25195,1.07017},300.566}}; + freezerPos[] = {{{1.54688,2.13867,-2.7976},91.1}}; + }; + class Land_i_Shop_01_V2_F : Land_i_Shop_01_V1_F {}; + class Land_i_Shop_01_V3_F : Land_i_Shop_01_V1_F {}; + class Land_u_Shop_01_V1_F : Default + { + shelfPos[] = {{{1.78516,-0.0390625,-2.90725},88.4493},{{-3.54688,-0.136719,-2.90725},269.105},{{-3.5332,-1.28711,-2.90719},270}}; + fridgePos[] = {{{1.63086,4.2793,-2.90721},88.9036}}; + bedPos[] = {{{-2.75195,-0.902344,0.964377},184.931}}; + couchPos[] = {{{0.546875,1.35742,0.963423},8.58237},{{-2.38672,2.46484,-2.90728},183.604}}; + wardrobePos[] = {{{-3.41992,2.08984,0.964587},270.137},{{-3.36719,5.67578,-2.90725},269.105}}; + cookerPos[] = {{{3.19727,4.55469,-2.90767},182.053}}; + chairPos[] = {{{0.945313,4.17188,0.962904},81.2836},{{-2.9707,3.94727,0.964307},304.317}}; + pelicanPos[] = {{{-2.71094,6.19141,0.964416},326.125}}; + toolRackPos[] = {{{2.03125,1.91406,-2.90729},90}}; + palletPos[] = {{{0.800781,-1.02539,0.953138},91.1},{{0.273438,8.36328,-3.16686},91.1}}; + toiletPos[] = {{{3.63281,6.50781,-2.93114},90.3663}}; + }; + class Land_u_Shop_02_V1_F : Default + { + shelfPos[] = {{{-0.126953,2.28711,-2.7004},358.842},{{-4.41406,4.35938,-2.69497},355.221}}; + bedPos[] = {{{-4.14648,-3.36914,1.21215},101.364}}; + couchPos[] = {{{-0.917969,1.4707,1.21215},275.214},{{-0.701172,-2.85156,-2.69499},179.577}}; + wardrobePos[] = {{{-5.29297,1.41602,1.21222},274.211}}; + cookerPos[] = {{{-2,3.81641,-2.69536},88.9063}}; + chairPos[] = {{{2.67773,-3.54297,1.21222},123.36},{{-3.26953,-3.9375,-2.69715},150.356}}; + pelicanPos[] = {{{2.83984,3.80273,1.21219},68.5479}}; + lockerPos[] = {{{-5.19336,1.49219,-2.69484},269.367}}; + toolRackPos[] = {{{-2.47852,-1.13086,-2.69459},89.5903}}; + palletPos[] = {{{2.65234,-3.43359,-2.68103},91.1}}; + toiletPos[] = {{{-5.30762,3.08594,-2.71798},269.971}}; + }; + class Land_i_Shop_02_V1_F : Default + { + shelfPos[] = {{{3.26367,-1.38867,1.21217},90.8952},{{-2.08203,-2.95703,-2.69497},269.105},{{-1.02539,-4.35742,-2.69497},180.056},{{-5.05078,4.06055,-2.69497},316.341}}; + fridgePos[] = {{{-1.98047,3.92383,-2.6833},90.3202},{{-5.27734,3.7793,1.21222},279.71}}; + bedPos[] = {{{-0.222656,1.53906,1.21215},273.796}}; + couchPos[] = {{{0.4375,1.25391,-2.70038},267.738},{{0.759766,-3.41016,1.21215},92.1877}}; + wardrobePos[] = {{{2.8125,4.05664,1.21287},9.59067}}; + cookerPos[] = {{{-5.24609,1.91992,-2.69537},270}}; + chairPos[] = {{{-2.39258,-3.73633,1.21216},148.243},{{-4.91406,-1.41211,1.21217},307.249},{{4.62891,3.41992,1.21202},300.318},{{-4.88477,-3.74023,1.21216},223.381}}; + pelicanPos[] = {{{4.62695,-3.32031,1.21216},96.5193}}; + tablePos[] = {{{-1.75391,-1.13086,-2.69498},258.801},{{-3.5957,-2.40234,1.21215},178.44}}; + lockerPos[] = {{{-2.96484,-3.17773,-2.6967},86.8359}}; + toolRackPos[] = {{{-2.52344,-0.677734,-2.69483},89.3848}}; + freezerPos[] = {{{0.943359,-4.0625,-2.69103},179.201}}; + toiletPos[] = {{{-3.66406,-4.22266,1.24819},-180.395}}; + }; + class Land_i_Shop_02_V2_F : Land_i_Shop_02_V1_F {}; + class Land_i_Shop_02_V3_F : Land_i_Shop_02_V1_F {}; + class Land_i_Shop_02_b_blue_F : Land_i_Shop_02_V1_F {}; + class Land_i_Shop_02_b_pink_F : Land_i_Shop_02_V1_F {}; + class Land_i_Shop_02_b_whiteblue_F : Land_i_Shop_02_V1_F {}; + class Land_i_Shop_02_b_white_F : Land_i_Shop_02_V1_F {}; + class Land_i_Shop_02_b_brown_F : Land_i_Shop_02_V1_F {}; + class Land_i_Shop_02_b_yellow_F : Land_i_Shop_02_V1_F {}; + class Land_d_Shop_01_V1_F : Default + { + shelfPos[] = {{{0.605469,-1.54102,-2.90717},299.385},{{4.18555,0.601563,-2.90725},61.8762}}; + fridgePos[] = {{{4.00195,2.49414,-2.90721},89.2228}}; + bedPos[] = {{{3.50781,-0.328125,0.96386},7.76802}}; + couchPos[] = {{{0.0292969,-2.46289,0.964392},181.746}}; + cookerPos[] = {{{4.14648,2.53125,0.962579},89.109}}; + chairPos[] = {{{-0.193359,1.15234,-2.90727},319.613},{{3.76758,-3.32617,0.964494},152.858}}; + pelicanPos[] = {{{1.72461,1.38086,4.25002},148.152}}; + lockerPos[] = {{{4.16016,3.7207,-2.90727},177.719}}; + toolRackPos[] = {{{4.625,-1.60938,-2.90729},90.0519}}; + palletPos[] = {{{-0.251953,-5.05664,-10},179.201}}; + toiletPos[] = {{{5.9873,2.71289,-2.91811},92.9479}}; + }; + class Land_i_Addon_02_V1_F : Default + { + fridgePos[] = {{{3.17969,3.81641,0.0858998},89.972}}; + bedPos[] = {{{-0.154297,3.38086,0.085825},276.397}}; + wardrobePos[] = {{{-2.44922,3.91602,0.0865474},359.106}}; + chairPos[] = {{{0.693359,0.376953,0.0858068},160.478}}; + tablePos[] = {{{-2.86133,1.26953,0.0858245},269.367}}; + palletPos[] = {{{0.418823,-1.67969,-10},180}}; + toiletPos[] = {{{-1.56445,0.117188,0.047205},180.667}}; + }; + class Land_u_Addon_02_V1_F : Land_i_Addon_02_V1_F {}; + class Land_i_Addon_02_b_white_F : Default { + fridgePos[] = { + { {4.36523,3.05859,0.0886669}, 0 } + }; + bedPos[] = { + { {0.267578,2.0752,0.0914993}, 180 } + }; + wardrobePos[] = { + { {2.27539,3.04395,0.0924225}, 0.999984 } + }; + chairPos[] = { + { {1.26514,-0.660156,0.0912437}, 180 } + }; + tablePos[] = { + { {3.0249,-0.619141,0.0996017}, 180 } + }; + palletPos[] = { + { {0.418945,-1.67969,-10}, 180 } + }; + toiletPos[] = { + { {5.76465,2.99609,0.0392551}, 0 } + }; + }; + class Land_d_Addon_02_V1_F : Default + { + couchPos[] = {{{-0.962891,2.74805,0.41301},261.447}}; + pelicanPos[] = {{{1.94531,2.58301,0.439629},350.421}}; + palletPos[] = {{{-2.35156,0.995117,0.423958},187.201},{{3.19336,1.2168,0.413958},187.201}}; + toiletPos[] = {{{1.60059,0.0820313,0.167738},181.005}}; + }; + class Land_d_Stone_HouseSmall_V1_F : Default + { + shelfPos[] = {{{7.36328,2.99121,-0.59085},87.8075}}; + fridgePos[] = {{{3.63281,-1.93262,-0.616286},268.761}}; + bedPos[] = {{{10.1387,2.39941,-0.585113},271.572}}; + couchPos[] = {{{-0.128906,-0.958008,-0.578321},80.7286}}; + tablePos[] = {{{1.56055,2.4541,-0.599906},3.8147},{{7.77539,-0.0078125,-0.597849},341.959}}; + palletPos[] = {{{-6.20508,1.12988,-0.453797},187.201}}; + toiletPos[] = {{{3.59961,1.16016,-0.614626},-89.6958}}; + }; + class Land_i_Stone_HouseSmall_V3_F : Default + { + shelfPos[] = {{{0.423828,0.0566406,-0.65061},91.2415},{{8.48047,-0.707031,-0.614687},178.388}}; + fridgePos[] = {{{1.63477,-0.37207,-0.645178},237.969}}; + bedPos[] = {{{-7.63867,3.78809,-0.637772},284.46}}; + couchPos[] = {{{-3.54297,3.81445,-0.635458},279.006},{{6.89453,3.41211,-0.618565},306.201}}; + wardrobePos[] = {{{-5.28516,-0.365234,-0.67601},152.535}}; + cookerPos[] = {{{3.74414,-0.546875,-0.636206},178.279}}; + chairPos[] = {{{-0.378906,4.13086,-0.630233},34.7144}}; + tablePos[] = {{{-2.85547,1.70898,-0.659347},164.896},{{5.85547,2.18652,-0.626413},196.919}}; + palletPos[] = {{{9.33398,-2.30273,-10},187.201}}; + }; + class Land_i_Stone_HouseSmall_V2_F : Default + { + shelfPos[] = {{{4.76758,-0.796875,-0.631255},179.539},{{-9.4043,1.01563,-0.670586},267.808}}; + fridgePos[] = {{{1.48047,-0.0341797,-0.645909},258.003}}; + bedPos[] = {{{-1.64648,4.09277,-0.631337},292.711}}; + couchPos[] = {{{-5.07031,0.208008,-0.67044},95.3583}}; + wardrobePos[] = {{{-0.00585938,-0.03125,-0.648986},126.318}}; + cookerPos[] = {{{5.89258,4.7959,-0.619837},359.875}}; + chairPos[] = {{{8.50977,0.861328,-0.614511},139.91},{{8.43945,3.40625,-0.614825},57.7087}}; + pelicanPos[] = {{{-8.76563,4.50488,-0.630112},339.768}}; + tablePos[] = {{{-5.22852,2.18652,-0.655036},2.32285}}; + toiletPos[] = {{{-9.28613,3.25781,-0.63064},-89.3545}}; + }; + class Land_i_Stone_HouseSmall_V1_F : Land_i_Stone_HouseSmall_V2_F {}; + class Land_i_Stone_Shed_V3_F : Default + { + bedPos[] = {{{-2.78711,2.84375,-0.126943},174.67}}; + wardrobePos[] = {{{0.425781,4.04688,-0.139276},1.30153}}; + cookerPos[] = {{{-1.9375,-0.209961,-0.127349},176.707}}; + tablePos[] = {{{2.2207,2.56445,-0.126943},75.8372}}; + toiletPos[] = {{{-0.0234375,-0.324219,-0.132989},-178.641}}; + }; + class Land_i_Stone_Shed_V2_F : Default + { + fridgePos[] = {{{2.71875,3.87891,-0.126784},68.5485}}; + bedPos[] = {{{-2.76758,2.82813,-0.126943},180.094}}; + couchPos[] = {{{-1.91602,0.928711,0.00655437},98.2006}}; + tablePos[] = {{{0.671875,1.21875,-0.126942},176.837}}; + toiletPos[] = {{{0.681641,4.08203,-0.101513},2.11829}}; + }; + class Land_i_Stone_Shed_V1_F : Default + { + bedPos[] = {{{-2.9209,0.884766,-0.126943},183.73}}; + couchPos[] = {{{-0.408203,3.18359,-0.126948},274.981}}; + chairPos[] = {{{-3.11133,3.29883,-0.126935},304.61}}; + tablePos[] = {{{0.279297,-0.111328,-0.126944},178.227}}; + toolRackPos[] = {{{3.20313,3.35938,-0.126961},88.6889}}; + toiletPos[] = {{{1.87305,4.05859,-0.134884},0.344559}}; + }; + class Land_i_Stone_Shed_01_b_clay_F : Default { + bedPos[] = { + { {2.52246,0.351074,-0.128504}, 90 } + }; + couchPos[] = { + { {0.87207,3.16895,-0.026947}, 270 } + }; + chairPos[] = { + { {-0.571289,1.96582,-0.128511}, 280 } + }; + tablePos[] = { + { {0.279297,-0.111328,-0.126944}, 178.227 } + }; + toolRackPos[] = { + { {6.00293,3.41748,-0.126961}, 90 } + }; + toiletPos[] = { + { {5.24414,3.92529,-0.134884}, 360 } + }; + }; + class Land_i_Stone_Shed_01_b_raw_F : Land_i_Stone_Shed_01_b_clay_F {}; + class Land_i_Stone_Shed_01_b_white_F : Land_i_Stone_Shed_01_b_clay_F {}; + class Land_i_Stone_Shed_01_c_clay_F : Land_i_Stone_Shed_01_b_clay_F {}; + class Land_i_Stone_Shed_01_c_raw_F : Land_i_Stone_Shed_01_b_clay_F {}; + class Land_i_Stone_Shed_01_c_white_F : Land_i_Stone_Shed_01_b_clay_F {}; + + class Land_d_Stone_HouseBig_V1_F : Default + { + shelfPos[] = {{{-1.88477,1.23047,-1.6673},89.1051}}; + fridgePos[] = {{{-2.71875,-3.03711,-1.66745},188.243}}; + bedPos[] = {{{-2.0498,-2.62891,1.19249},98.1494}}; + couchPos[] = {{{2.18457,-1.48438,-1.61955},5.4863}}; + wardrobePos[] = {{{-1.54102,1.11914,1.19367},340.004}}; + chairPos[] = {{{-0.714844,-3.05078,-1.6675},178.582}}; + pelicanPos[] = {{{4.28516,-0.453125,1.20476},87.2772}}; + tablePos[] = {{{-2.75977,-0.654297,1.19248},274.611}}; + shoeboxPos[] = {{{-0.728516,0.9375,-0.647514},33.2239}}; + palletPos[] = {{{1.16309,-2.74805,1.18598},98.2006}}; + toiletPos[] = {{{-0.0566406,1.36133,1.30844},-0.226265}}; + }; + class Land_i_Stone_HouseBig_V3_F : Default + { + shelfPos[] = {{{-1.8916,1.73047,-1.68199},270.888},{{0.605469,3.55469,1.19272},359.924},{{4.22168,-1.08594,1.19272},175.587}}; + fridgePos[] = {{{-1.59277,-0.886719,-1.68134},246.969}}; + bedPos[] = {{{-0.640625,-0.460938,1.19249},91.5507}}; + couchPos[] = {{{3.75488,1.30664,-1.66749},9.91046}}; + wardrobePos[] = {{{-1.41113,2.97461,1.19534},300.8}}; + chairPos[] = {{{-1.52539,1.28516,1.1925},266.593}}; + tablePos[] = {{{0.642578,-0.855469,-1.67561},187.85},{{2.20898,-0.970703,1.19249},176.776}}; + shoeboxPos[] = {{{0.287109,3.42773,-0.594017},98.2006}}; + toiletPos[] = {{{4.76855,-1.29297,-1.6743},143.27}}; + }; + class Land_i_Stone_HouseBig_V2_F : Land_i_Stone_HouseBig_V3_F {}; + class Land_i_Stone_HouseBig_V1_F : Land_i_Stone_HouseBig_V3_F {}; + class Land_i_Stone_House_Big_01_b_clay_F : Land_i_Stone_HouseBig_V3_F {}; + class Land_d_House_Big_02_V1_F : Default + { + shelfPos[] = {{{0.669922,-1.39453,-3.06634},90},{{2.7373,4.13477,0.463613},90},{{-5.60547,4.73633,-3.0663},338.985}}; + fridgePos[] = {{{2.41797,0.193359,-3.06639},156.125}}; + bedPos[] = {{{0.832031,1.24023,0.463591},73.8195}}; + couchPos[] = {{{1.16406,3.83398,-3.06641},285.269}}; + wardrobePos[] = {{{-5.1709,0.628906,0.46367},210.054}}; + cookerPos[] = {{{-5.51367,-5.44727,-2.91562},283.817}}; + chairPos[] = {{{-5.57617,0.324219,-3.06635},249.612},{{-5.49219,-2.3457,0.523658},265.17}}; + pelicanPos[] = {{{1.33398,6.15625,0.40361},34.738}}; + tablePos[] = {{{-1.68457,4.60742,0.463591},357.124}}; + palletPos[] = {{{1.80078,-5.45703,-2.37291},98.2006}}; + toiletPos[] = {{{-5.80664,4.81836,0.466156},-49.0076}}; + }; + class Land_u_House_Big_02_V1_F : Default + { + shelfPos[] = {{{-3.04102,-1.03125,0.962879},0},{{-3.25195,0.0253906,-2.40712},185.201}}; + fridgePos[] = {{{2.1748,-1.3457,-2.40712},85}}; + bedPos[] = {{{3.27832,0.75,0.939383},94.647}}; + couchPos[] = {{{3.25391,0.902344,-2.57062},90.0017},{{-3.19824,2.6543,0.939378},187.634}}; + wardrobePos[] = {{{1.70801,4.85156,0.939409},359.848}}; + cookerPos[] = {{{-1.25,-3.69336,-2.40712},185.201}}; + chairPos[] = {{{-3.16992,0.291016,0.939465},245.407},{{-3.71875,-3.23047,-2.40712},215.201},{{3.91016,4.31836,-2.40712},49.2006}}; + pelicanPos[] = {{{3.94434,4.5,0.939445},20.8601}}; + tablePos[] = {{{-1.43262,2.4707,0.939383},85.2193},{{-3.81055,3.12305,-2.40712},272.201}}; + toiletPos[] = {{{3.83008,5.875,0.905819},-181.466}}; + }; + class Land_i_House_Big_02_V1_F : Default + { + shelfPos[] = {{{-4.27734,0.900391,0.757645},273.29},{{4.46875,4.30664,-2.64969},89.2152}}; + fridgePos[] = {{{1.91797,-1.44141,-2.64966},87.5481}}; + bedPos[] = {{{2.97656,0.740234,0.757623},89.4966}}; + couchPos[] = {{{2.94531,0.919922,-2.64972},92.2641},{{0.375,4.0293,0.757618},270.255}}; + wardrobePos[] = {{{4.24219,4.36523,0.757747},92.8048}}; + cookerPos[] = {{{-1.25,-3.58008,-2.63541},184.944}}; + chairPos[] = {{{-3.75586,0.412109,-2.6497},231.099},{{-3.82227,-1.31445,0.757625},308.225},{{2.06641,4.59961,-2.6497},7.39194}}; + pelicanPos[] = {{{3.12305,6.2168,0.697647},31.1078}}; + tablePos[] = {{{-4.03906,2.14258,-2.64971},268.404}}; + freezerPos[] = {{{-3.42383,-1.25195,-2.63541},360}}; + toiletPos[] = {{{-4.15918,4.86914,0.729055},-51.5343}}; + }; + class Land_i_House_Big_02_V2_F : Land_i_House_Big_02_V1_F {}; + class Land_i_House_Big_02_V3_F : Land_i_House_Big_02_V1_F {}; + class Land_i_House_Big_02_b_blue_F : Land_i_House_Big_02_V1_F {}; + class Land_i_House_Big_02_b_pink_F : Land_i_House_Big_02_V1_F {}; + class Land_i_House_Big_02_b_whiteblue_F : Land_i_House_Big_02_V1_F {}; + class Land_i_House_Big_02_b_white_F : Land_i_House_Big_02_V1_F {}; + class Land_i_House_Big_02_b_brown_F : Land_i_House_Big_02_V1_F {}; + class Land_i_House_Big_02_b_yellow_F : Land_i_House_Big_02_V1_F {}; + class Land_i_House_Small_03_V1_F : Default + { + shelfPos[] = {{{-0.678711,4.01953,-0.0356882},270},{{5.26367,4.1875,-0.0356882},89}}; + fridgePos[] = {{{1.34668,1.80469,-0.0356882},91.2}}; + bedPos[] = {{{-4.05957,3.81641,-0.0356882},267}}; + couchPos[] = {{{-4.2793,-0.507813,-0.0356882},180}}; + wardrobePos[] = {{{-1.69336,-1.98828,-0.0356882},180},{{5.06543,1.43945,-0.0356882},89}}; + cookerPos[] = {{{1.24902,2.82031,-0.0356882},89.2}}; + chairPos[] = {{{-1.80762,4.16406,-0.0356882},40},{{2.73828,-5.79297,-0.0356882},219},{{4.80957,-5.86719,-0.0356882},149}}; + tablePos[] = {{{4.98535,-2.73438,-0.0356882},89}}; + palletPos[] = {{{-2.04004,-5.83203,-10},0}}; + toiletPos[] = {{{0.685547,4.5332,-0.0660839},-0.0353432}}; + }; + class Land_u_House_Small_02_V1_F : Default + { + shelfPos[] = {{{-0.0351563,-3.38086,-0.744917},179.437}}; + fridgePos[] = {{{0.369141,-0.267578,-0.743873},91.2655}}; + bedPos[] = {{{6.56055,1.06641,-0.735898},9.02117}}; + couchPos[] = {{{5.23047,-2.19336,-0.738171},98.8483}}; + wardrobePos[] = {{{1.43945,-2.625,-0.74296},270.844}}; + cookerPos[] = {{{-3.2168,0.0839844,-0.745483},269.137}}; + tablePos[] = {{{4.68359,2.11523,-0.736894},356.553}}; + toiletPos[] = {{{7.21875,-2.99609,-0.796741},136.361}}; + }; + class Land_d_House_Small_02_V1_F : Default + { + fridgePos[] = {{{7.47266,-0.1875,-0.999054},79.7224}}; + bedPos[] = {{{2.45508,-0.201172,-0.981503},187.343},{{6.89844,1.89258,-1.00027},4.89485}}; + chairPos[] = {{{4.09766,-2.04297,-0.9844},210.762},{{7.12305,-2.12109,-0.994862},135.992}}; + palletPos[] = {{{-0.767578,-0.916016,-10},276}}; + toiletPos[] = {{{4.01367,2.97266,-1.01966},1.17993}}; + }; + class Land_Lighthouse_small_F : Default + { + shelfPos[] = {{{-1.35547,-2.18555,-3.42188},191.463}}; + chairPos[] = {{{-1.66309,1.66602,-3.4219},311.523}}; + pelicanPos[] = {{{-1.16602,1.19336,-0.0622997},276}}; + toolRackPos[] = {{{5.70996,0.291016,-3.42193},90}}; + palletPos[] = {{{4.57031,-1.70898,-3.3823},276}}; + }; + class Land_WIP_F : Default + { + lootType = "construction"; + limit = 6; + GroundSpawnChance = 80; + MinGroundContainers = 4; + MaxGroundContainers = 8; + shelfPos[] = {{{-0.957031,-4.42969,12.2029},358.087},{{-0.919922,-5.26563,0.396693},178.896},{{-2.20313,5.43164,0.323569},1.17821},{{2.03516,-6.10938,0.397176},14.9686},{{5.12598,-5.45313,8.32229},181.318},{{-6.88477,5.69922,8.33006},356.041},{{-6.33203,9.34375,4.2993},267.673},{{-5.47656,-11.3945,0.348352},178.537},{{-13.2139,1.17383,0.390545},90.2068},{{-13.2334,-2.94336,4.2993},86.318},{{14.3809,6.43945,4.29953},181.218},{{-9.65625,-12.791,12.2983},180.234},{{-12.9834,-10.2734,0.319984},89.2757}}; + fridgePos[] = {{{-3.39063,-7.63477,0.37021},91.2212}}; + bedPos[] = {{{6.81055,9.57617,0.352686},180.055}}; + couchPos[] = {{{-0.21875,7.48438,0.331759},112.451},{{4.41992,-9.9707,4.29707},53.0242},{{-10.5244,4.81836,12.2371},79.3503},{{17.5283,-2.80859,0.327501},353.002},{{-16.7871,9.91406,0.370766},207.103}}; + chairPos[] = {{{-8.98828,4.98828,0.37769},307.949},{{10.1426,-6.32813,0.338495},11.358},{{-14,6.58594,4.29928},138.034},{{-15.9365,7.62305,8.31643},107.749},{{-14.8984,9.5293,8.31799},137.305},{{-9.3418,-17.8223,0.310942},136.534}}; + filingPos[] = {{{5.73438,6.36328,4.29928},183.682}}; + pelicanPos[] = {{{9.72461,-10.5352,8.31388},118.227},{{-7.59766,-14.3633,12.2979},67.7859},{{23.1895,1.08008,4.30315},277.918}}; + tablePos[] = {{{-17.8965,10.6133,8.31348},303.712}}; + lockerPos[] = {{{-7.36816,-9.47852,4.29681},90.0775},{{-9.44043,-11.1738,4.29663},177.772},{{-8.14551,-14.9766,8.31173},180.659}}; + toolRackPos[] = {{{1.60059,-5.43945,0.405369},180.797},{{2.0918,5.63867,0.351912},357.597},{{-2.88086,-12.0996,-0.00143886},360},{{14.0498,-5.80859,4.29928},359.535},{{-10.501,-15.4023,8.312},179.968}}; + shoeboxPos[] = {{{9.66016,6.35352,4.31021},190.576},{{-3.89844,-11.2754,0.345911},173.847},{{28.7275,-2.26172,0.302157},142.217}}; + palletPos[] = {{{-2.81641,3.73828,12.2086},15},{{-3.99902,-3.44336,12.2086},15},{{0.981445,-6.29688,8.33855},15},{{3.71094,6.82617,4.32855},182},{{-3.94727,-10.5742,8.33855},15},{{-5.66602,-9.97656,4.32855},345.6},{{-8.00586,10.6641,4.32855},182},{{-13.8838,-1.19727,0.338561},360},{{-15.0645,1.19141,8.33855},15},{{12.4063,10.8125,0.368561},265.5},{{-17.6748,-1.5,0.368561},265.5},{{-17.7871,-4.42773,4.32855},182},{{-15.6992,-10.6797,0.338561},360},{{23.7109,-1.23633,8.23855},289.5}}; + toiletPos[] = {{{-9.89453,-3.21875,0.236324},-88.9633},{{6.09961,6.27734,0.334097},-131.969},{{-9.86182,-9.21289,0.336166},-92.0463},{{-9.80469,-7.61133,0.294374},-89.5382}}; + }; + class Land_i_Addon_03mid_V1_F : Default + { + lootType = "market"; + couchPos[] = {{{-3.33203,0.30957,-0.0338135},176.588}}; + pelicanPos[] = {{{3.95313,1.0918,-0.0338745},101.571}}; + palletPos[] = {{{0.703125,-0.210938,-0.000281334},15}}; + }; + class Land_i_Addon_03_V1_F : Default + { + lootType = "market"; + chairPos[] = {{{2.5,-0.929688,-0.0765305},346.611},{{-2.61914,-1.03125,-0.0765266},17.8128}}; + palletPos[] = {{{3.56641,2.50391,-0.0765305},344},{{-3.58594,2.75,-0.0765305},15}}; + }; + class Land_i_Addon_04_V1_F : Default + { + lootType = "market"; + chairPos[] = {{{-3.78711,-1.16211,0.050499},21.1258}}; + pelicanPos[] = {{{-2.04883,0.263672,0.0532227},215.663}}; + palletPos[] = {{{-0.130859,2.37695,0.050499},344}}; + }; + class Land_LightHouse_F : Default + { + lootType = "industrial"; + chairPos[] = {{{1.64063,-3.0918,-11.1061},121.303}}; + pelicanPos[] = {{{-0.318359,-3.61328,8.12647},220.41},{{0.697266,-4.32227,-11.1665},248.695}}; + shoeboxPos[] = {{{-0.214844,-4.24609,-11.1689},225.43},{{1.87109,-4.14453,8.13151},344}}; + }; + class Land_GH_Gazebo_F : Default + { + lootType = "mil"; + shelfPos[] = {{{-5.49609,-1.95898,-1.76052},180.195}}; + bedPos[] = {{{6.02734,1.77734,-1.76616},1.01784}}; + couchPos[] = {{{-5.99219,1.83398,-1.76616},175.953}}; + wardrobePos[] = {{{6.67773,-0.783203,-1.7661},88.4633}}; + pelicanPos[] = {{{-0.517578,0.345703,-1.76613},47.9599}}; + tablePos[] = {{{-6.71094,-0.613281,-1.76616},269.48}}; + palletPos[] = {{{1.63672,1.53516,-1.76332},358},{{-2.40039,2.01953,-1.76332},290}}; + }; + class Land_GH_MainBuilding_right_F : Default + { + lootType = "mil"; + shelfPos[] = {{{1.30273,-7.28516,-1.06903},104.132}}; + fridgePos[] = {{{3.30859,1.99219,-5.50915},196.553},{{0.769531,-6.8125,3.37646},185.624},{{1.35352,-11.4238,3.83718},14.2214},{{-14.1602,5.25781,-1.06901},244.418}}; + bedPos[] = {{{-1.76758,1.86133,3.37644},290.999},{{-4.86328,1.69727,3.37644},18.4142},{{-1.08398,5.9043,-1.06907},197.348},{{6.74609,-1.57813,3.37643},24.4042},{{-3.48242,6.48047,-1.06907},21.0007},{{7.32031,1.24609,-1.06908},25.1119},{{-2.52734,10.3438,-5.50922},20.4328},{{8.82813,7.0293,-5.50922},26.5858},{{-10.5645,8.5625,-1.06908},24.9801},{{-13.9043,3.83008,3.37644},196.357},{{-12.2109,10.7422,-5.50922},201.181}}; + couchPos[] = {{{4.1582,8.32813,-5.50922},23.8942}}; + wardrobePos[] = {{{1.61328,-2.05078,-1.06904},192.819},{{1.00977,5.89063,-5.50915},195.313},{{5.52734,-4.44531,3.37651},170.013},{{-9.79492,0.988281,-1.06905},197.093},{{-10.9043,-3.53125,3.37651},199.701},{{-8.48242,13.2871,-5.50919},104.652}}; + cookerPos[] = {{{2.11328,2.37109,-5.50961},195.987}}; + chairPos[] = {{{-1.2207,-2.72656,3.37645},193.938},{{3.36523,2.84375,-1.06907},101.74},{{-10.2559,1.17578,3.37646},283.356},{{-9.08008,5.47266,-1.06906},268.731},{{-0.0585938,11.2246,-5.50921},304.857},{{-11.377,2.25977,3.37684},104.34}}; + filingPos[] = {{{-4.86328,-8.57031,-1.069},282.224}}; + pelicanPos[] = {{{-0.679688,-0.609375,-1.06897},139.998},{{-8.87891,5.31641,-5.50921},202.579},{{-15.1152,-1.07031,3.37656},307.599},{{-15.6387,-10.627,-5.5092},130.018}}; + tablePos[] = {{{-0.0839844,1.53516,-1.06908},192.028},{{2.57422,-1.21094,3.37644},104.506},{{-6.80078,3.25781,-1.06908},194.092},{{-7.66602,-1.30859,3.37644},194.642},{{-0.845703,9.5293,-5.50922},284.72},{{-14.7227,0.589844,3.37643},196.169}}; + lockerPos[] = {{{-4.8125,-5.11523,-1.06906},15.9695}}; + palletPos[] = {{{8.36523,7.57813,-1.0171},37.2845},{{-4.83398,11.3008,-1.0171},357},{{-10.7734,12.9609,-1.0171},96}}; + freezerPos[] = {{{-6.79492,-6.25781,-1.0171},283}}; + toiletPos[] = {{{8.44238,2.38672,-5.49587},103.6},{{1.58789,4.55469,-5.51172},105.21},{{-6.60938,6.31445,-5.51272},-75.2479},{{-13.3604,8.60938,-5.51854},13.4562},{{-7.93652,1.42578,-1.07989},-75.518},{{-14.2695,4.14648,-1.07117},14.211},{{0.579102,0.431641,-1.05479},104.955},{{6.63086,-1.30859,-1.06013},15.9641},{{-14.624,-2.85742,3.40155},-166.609},{{6.29492,-6.08203,3.38538},103.955},{{-0.609375,-4.24023,3.39694},104.464},{{-8.83594,-2.01172,3.39369},13.6471}}; + }; + class Land_GH_MainBuilding_middle_F : Default + { + lootType = "mil"; + shelfPos[] = {{{2.69238,3.21484,-8.37759},179.858},{{-5.88867,0.726563,-3.91598},105.411},{{5.24609,11.0605,-3.91652},270.656},{{-15.541,-6.12305,0.521439},14.5104},{{14.248,-9.52734,0.521439},256.088}}; + fridgePos[] = {{{-15.1309,-2.81836,0.521437},13.9473}}; + couchPos[] = {{{-13.6484,-0.876953,4.97235},195.253}}; + wardrobePos[] = {{{14.1123,-3.39453,0.521494},346.293}}; + chairPos[] = {{{6.45313,0.845703,-3.91599},247.596},{{-12.459,-3.85938,0.521418},73.8369},{{-5.72656,11.7988,-3.90909},37.8367},{{12.8564,5.21484,0.521416},112.013},{{-0.03125,-16.3359,4.97174},184.279},{{-6.17188,-16.8965,0.521433},185.345},{{-3.02246,21.9258,-9.01524},195.022}}; + filingPos[] = {{{-4.35156,3.39844,-8.37744},205.858},{{-16.0371,-5.33398,0.521456},268.695}}; + pelicanPos[] = {{{-1.16016,8.58008,-9.13322},288.066}}; + tablePos[] = {{{14.1885,0.773438,4.97233},74.1932}}; + lockerPos[] = {{{-16.1133,-9.58789,0.521435},196.292}}; + toolRackPos[] = {{{4.72754,4.68555,-8.37762},90.6886}}; + palletPos[] = {{{-6.27344,10.8496,0.576112},251},{{-14.5596,-8.70117,0.576112},251}}; + freezerPos[] = {{{13.5488,-5.76953,0.576112},251}}; + }; + class Land_GH_MainBuilding_left_F : Default + { + lootType = "mil"; + shelfPos[] = {{{-1.02734,-7.3623,-1.06904},255.179},{{-8.17188,1.39258,-1.06893},255.243}}; + fridgePos[] = {{{0.386719,-6.67578,3.37653},165.302},{{-6.97656,-0.431641,-1.06901},172.301},{{11.0391,-3.58008,3.37646},160.127}}; + bedPos[] = {{{-1.83594,-0.640625,3.37644},165.641},{{-1.66797,-1.12305,-1.06908},167.488},{{-4.0625,8.01367,-5.50922},163.408},{{0.40625,9.14844,-5.50922},345.918},{{9.70313,1.55859,3.37644},345.36},{{8.6582,6.32422,-5.50922},165.048},{{8.26172,7.47852,-1.06907},348.908},{{-8.69336,7.13867,-5.50922},165.97},{{14.4043,2.89258,3.37643},345.42}}; + couchPos[] = {{{1.23242,5.67188,-1.06907},350.466},{{2.88281,10.3672,-5.50922},167.118},{{-2.56641,-12.8418,3.83704},261.041},{{12.6992,8.72461,-1.06908},347.645}}; + wardrobePos[] = {{{-2.58008,2.1709,-5.5092},167.528},{{10.0078,0.827148,-1.06901},166.411}}; + cookerPos[] = {{{-0.742188,-6.74805,3.37604},172.375}}; + chairPos[] = {{{2.68555,2.31445,3.37668},40.9297},{{-3.30078,4.20117,-1.06905},248.905},{{-1.18945,6.18945,-5.5092},164.369},{{-5.23242,4.45508,-1.05902},44.6127},{{-6.14648,-4.5498,3.37645},208.166},{{-4.16016,-12.752,-1.06894},256.238},{{7.50781,12.041,-5.50921},65.2004},{{14.0137,5.32227,-1.06907},108.336},{{15.3516,0.828125,3.37644},89.9532},{{9.25,12.7598,-5.50921},264.026},{{12.9297,9.67383,-5.50699},117.822}}; + filingPos[] = {{{1.83984,-8.47363,-1.069},160.823},{{15.752,-11.3574,-5.50917},164.969}}; + pelicanPos[] = {{{8.55664,-2.79004,3.37645},36.1098}}; + tablePos[] = {{{0.234375,1.52344,-1.06908},163.886},{{1.57422,-2.80469,3.37644},166.456},{{-3.63672,-1.45117,3.37644},75.2335},{{4.10352,2.30273,3.37644},254.907},{{6.85156,3.26758,-1.06908},163.381},{{5.79492,7.67578,-5.50922},167.512},{{-8.66992,4.4082,-5.50922},256.113},{{-4.61719,-11.2539,-1.06898},257.112},{{12.7383,11.5723,-5.50922},74.4651},{{-4.82617,-19.6475,3.83704},168.125}}; + lockerPos[] = {{{7.10742,-5.75781,-1.06905},75.8703}}; + palletPos[] = {{{-1.95898,8.42969,-1.0371},77},{{-8.23242,7.49414,-1.0371},321},{{5.07422,10.7188,-1.0371},54}}; + toiletPos[] = {{{14.7822,4.14258,-1.16306},75.5108},{{7.86035,2.48633,-1.04245},75.5179},{{-0.402344,0.275391,-1.04771},-15.6965},{{-7.29492,-1.39844,-1.14091},-103.622},{{15.8828,-0.271484,3.36453},32.9454},{{7.72168,-4.71094,3.40063},-194.399},{{3.16504,-5.91211,3.34099},-195.347},{{-6.03613,-6.28516,3.38759},-104.621},{{13.6055,8.25,-5.48314},73.9992},{{6.70215,6.86719,-5.51726},74.3024},{{-1.23926,4.81836,-5.53954},-13.6965},{{-8.45117,2.93555,-5.49403},-15.121}}; + }; + class Land_GH_House_2_F : Default + { + limit = 4; + lootType = "mil"; + shelfPos[] = {{{-3.61914,-1.67969,-0.301109},359.443},{{4.32227,-6.37305,-0.301155},91.0395}}; + fridgePos[] = {{{-4.25,-5.02637,-0.301128},269.6}}; + bedPos[] = {{{-1.24805,-4.87793,-0.301178},5.78317}}; + couchPos[] = {{{3.05664,-3.25195,-0.301193},2.05902}}; + chairPos[] = {{{0.806641,-6.70605,-0.301163},224.27}}; + filingPos[] = {{{-2.39844,1.31348,-0.301136},11.8617}}; + pelicanPos[] = {{{3.53711,0.832031,-0.30117},35.7628}}; + tablePos[] = {{{0.587891,-3.72168,-0.301182},271.612}}; + palletPos[] = {{{2.25586,-8.62695,-0.307613},54}}; + }; + class Land_GH_House_1_F : Default + { + lootType = "mil"; + fridgePos[] = {{{-4.17383,-2.11719,1.37387},356.381}}; + shelfPos[] = {{{3.35352,1.26758,-2.12615},0.862475},{{-3.58203,-1.93359,-2.12615},1.86357}}; + pelicanPos[] = {{{-3.33398,0.990234,-2.12616},359.887}}; + wardrobePos[] = {{{-4.21094,-4.39258,-2.12611},272.378}}; + bedPos[] = {{{1.22852,-4.24219,-2.12617},181.084},{{3.54102,-5.65625,1.37383},4.33171}}; + couchPos[] = {{{-1.45703,-5.70703,-2.12618},0.461905},{{-3.22266,-5.88867,1.37383},180.141}}; + chairPos[] = {{{0.833984,-6.78516,1.37384},217.232},{{-0.796875,-7.06055,1.38113},139.376},{{-3.92773,-6.72656,-2.12617},216.64},{{3.77539,-7.01172,-2.12617},144.922}}; + filingPos[] = {{{2.1543,-1.97656,1.37398},1.26754}}; + tablePos[] = {{{-0.554688,-4.24219,1.35334},88.7164},{{4.14453,-2.66797,1.37383},87.9678},{{3.95898,-3.00781,-2.12617},85.0581}}; + }; + class Land_Stadium_p9_F : Default + { + lootType = "mil"; + shelfPos[] = {{{-0.947266,-2.85645,0.260189},177.78},{{-3.80273,-1.29102,3.35416},268.338}}; + fridgePos[] = {{{-3.57031,-2.56543,0.270462},268.533}}; + couchPos[] = {{{-1.27344,2.86328,3.35296},92.8845}}; + cookerPos[] = {{{-3.52734,-1.58203,0.259689},273.789}}; + chairPos[] = {{{1.47656,3.48535,3.35328},160.404}}; + filingPos[] = {{{-0.632813,1.39258,3.35342},1.10306},{{-1.58594,1.4082,3.35342},1.39755}}; + pelicanPos[] = {{{-2.21484,2.33984,7.08003},44.2351}}; + toolRackPos[] = {{{1.81055,-1.7666,3.35528},89.8722}}; + toiletPos[] = {{{1.31348,-2.68652,3.35164},176.24}}; + }; + class Land_HouseB_Tenement : Default + { + shelfPos[] = {{{-12.9045,4.21875,-20.8107},269.047}}; + fridgePos[] = {{{3.94238,10.9263,-20.8109},271.337}}; + couchPos[] = {{{2.45361,-4.50049,-20.8027},276.133}}; + chairPos[] = {{{-3.4668,-1.78467,-20.8109},190.415}}; + filingPos[] = {{{-6.31909,6.52441,-20.8109},1.58829}}; + pelicanPos[] = {{{-1.07813,4.78125,-20.8109},174.223}}; + tablePos[] = {{{-0.552246,-1.95654,-20.8043},181.181}}; + shoeboxPos[] = {{{-12.9771,-2.2373,-20.8109},269.642}}; + freezerPos[] = {{{5.33984,14.1865,-20.8109},0.00700378}}; + cabinetPos[] = {{{5.64465,-2.37915,-19.2685},270}}; + }; + class Land_HouseV2_01A : Default + { + shelfPos[] = {{{-0.443115,-3.33936,-5.62667},90.1773}}; + shoeboxPos[] = {{{-3.60864,-3.06836,-5.62945},278.015}}; + }; + class Land_Barn_W_02 : Default + { + lootType = "industrial"; + fridgePos[] = {{{4.66504,5.95215,-2.34131},73.4104}}; + shelfPos[] = {{{3.54199,-6.98242,-2.3354},180.843}}; + pelicanPos[] = {{{-4.61279,1.50342,1.06024},189.27}}; + couchPos[] = {{{3.75586,-2.53906,-2.33824},4.32959}}; + filingPos[] = {{{-6.13037,7.19189,-2.33458},357.942}}; + toolRackPos[] = {{{-6.70459,-3.06445,-2.33691},271.665}}; + shoeboxPos[] = {{{-0.72168,7.42285,1.0585},359.807}}; + palletPos[] = {{{-5.00684,-5.97168,-2.33609},251.999}}; + freezerPos[] = {{{3.05176,6.89844,-2.34122},1.42345}}; + }; + class Land_Shed_W01 : Default + { + lootType = "workshop"; + chairPos[] = {{{-1.21777,0.42627,-1.44093},66.292}}; + toolRackPos[] = {{{2.47363,-0.0288086,-1.31694},269.634}}; + }; + class Land_A_Castle_Bergfrit : Default + { + lootType = "mil"; + shelfPos[] = {{{-0.993164,2.89014,-2.8378},356.361},{{1.80957,4.87695,8.74091},358.335}}; + pelicanPos[] = {{{-3.03516,-5.00195,16.8296},195.125}}; + couchPos[] = {{{2.07031,-1.73779,-2.85995},359.982}}; + chairPos[] = {{{1.5791,-0.515137,8.74054},62.6844},{{1.63281,-2.84229,8.74051},127.602}}; + tablePos[] = {{{-1.22559,-1.10742,8.74051},270.108}}; + shoeboxPos[] = {{{3.47461,3.8999,8.80176},0.625621}}; + }; + class Land_Shed_wooden : Default + { + lootType = "workshop"; + shelfPos[] = {{{0.172363,-1.19922,-1.31766},189.191}}; + filingPos[] = {{{-1.19043,1.20996,-1.31787},273.29}}; + shoeboxPos[] = {{{-0.77002,-1.16211,-1.31796},0}}; + palletPos[] = {{{1.97168,0.560547,-1.31796},357.8}}; + freezerPos[] = {{{1.86523,-0.863281,-1.31796},178.905}}; + }; + class Land_HouseV_1L2 : Default + { + shelfPos[] = {{{2.33252,-5.83691,-10},267.989}}; + bedPos[] = {{{2.53662,4.57813,-10},95.5054}}; + filingPos[] = {{{3.8457,2.2998,-10},266.031}}; + pelicanPos[] = {{{-1.02002,4.17871,-0.403534},51.0824}}; + toolRackPos[] = {{{4.28125,-3.77441,-10},270.154}}; + shoeboxPos[] = {{{0.916016,7.69043,-0.397675},175.886}}; + palletPos[] = {{{-4.99902,2.96875,-10},89.0781}}; + freezerPos[] = {{{-0.606934,4.00098,-10},180.414}}; + }; + class Land_HouseV_1I1 : Default + { + fridgePos[] = {{{-5.5127,4.8623,-10},117.119}}; + chairPos[] = {{{-0.822754,-2.1123,-2.8017},270.285}}; + filingPos[] = {{{0.899414,-1.97656,-2.83847},43.1203}}; + shoeboxPos[] = {{{-1.65918,-1.8125,-1.67868},90.0296}}; + }; + class Land_HouseV_1L1 : Default + { + chairPos[] = {{{1.31738,5.71338,-1.08368},88.2198}}; + shoeboxPos[] = {{{0.444336,6.01123,-1.09442},88.1007}}; + }; + class Land_Misc_deerstand : Default + { + lootType = "mil"; + pelicanPos[] = {{{0.587158,-0.0830078,1.05899},94.5891}}; + shoeboxPos[] = {{{-0.863037,-0.864258,1.05893},355.986}}; + }; + class Land_HouseBlock_A1_1 : Default + { + shelfPos[] = {{{-2.89551,-2.44434,-4.69214},92.8328}}; + filingPos[] = {{{-2.95898,-0.0991211,-4.69229},91.0289}}; + lockerPos[] = {{{-4.78516,3.52197,-4.69232},270.002}}; + toolRackPos[] = {{{-2.58105,3.7561,-4.69196},87.6312}}; + shoeboxPos[] = {{{0.851563,4.91016,-4.69232},160.104}}; + freezerPos[] = {{{-3.1582,-3.96021,-4.69235},95.443}}; + }; + class Land_HouseBlock_A3 : Default + { + fridgePos[] = {{{-1.21191,-4.7356,-5.44312},280.564}}; + couchPos[] = {{{-0.486328,4.81421,-5.44312},179.643}}; + chairPos[] = {{{-0.952148,2.76099,-5.44305},272.88}}; + shoeboxPos[] = {{{-7.55859,4.49561,-5.44315},146.992}}; + palletPos[] = {{{1.05273,0.597656,-5.44315},358.168}}; + }; + class Land_Hut06 : Default + { + lootType = "workshop"; + chairPos[] = {{{0.739502,2.50977,-1.58963},76.0347}}; + filingPos[] = {{{-0.806396,2.76465,-1.61115},322.16}}; + shoeboxPos[] = {{{-1.33862,-0.988281,-1.82275},312.382}}; + freezerPos[] = {{{-0.840332,1.09473,-1.56879},269.861}}; + }; + class Land_A_FuelStation_Build : Default + { + lootType = "market"; + shelfPos[] = {{{0.511719,1.52344,-1.6008},359.975}}; + filingPos[] = {{{2.38086,1.33203,-1.60098},29.5354}}; + pelicanPos[] = {{{0.268066,1.60449,1.51318},196.822}}; + toolRackPos[] = {{{-0.960938,1.66895,-1.60083},356.645}}; + shoeboxPos[] = {{{-1.02441,0.646484,-1.10098},30.3502}}; + palletPos[] = {{{2.10742,-3.15625,-10},89.5756}}; + freezerPos[] = {{{2.17334,-0.862305,-1.57938},89.5756}}; + }; + class Land_HouseV2_04_interier : Default + { + fridgePos[] = {{{-0.904297,6.40674,-5.76508},92.3811}}; + couchPos[] = {{{6.14941,-5.21924,-5.76886},359.884}}; + cookerPos[] = {{{-5.65234,2.6543,-5.7666},177.307}}; + chairPos[] = {{{-1.33594,2.95557,-5.76614},133.309}}; + filingPos[] = {{{7.92773,-2.18066,-5.76855},179.469}}; + pelicanPos[] = {{{0.557617,1.16406,-2.91656},341.166}}; + tablePos[] = {{{-5.5498,5.12793,-5.7655},271.134}}; + lockerPos[] = {{{7.20996,7.07715,-5.76495},358.294}}; + toolRackPos[] = {{{8.28613,2.40527,-5.76694},89.7594}}; + shoeboxPos[] = {{{-3.81738,6.99902,-5.76492},253.823}}; + freezerPos[] = {{{2.98145,7.00977,-5.7554},0}}; + }; + class Land_Ind_Garage01 : Default + { + lootType = "workshop"; + shelfPos[] = {{{0.32373,3.56543,-1.25259},357.258}}; + fridgePos[] = {{{2.79932,1.31641,-1.26077},84.1437}}; + filingPos[] = {{{-1.06348,3.40234,-1.25024},351.15}}; + lockerPos[] = {{{2.82422,-0.936523,-1.26364},88.0941}}; + toolRackPos[] = {{{-1.65771,-1.39258,-1.25879},269.614}}; + shoeboxPos[] = {{{2.21729,3.40918,-1.25677},63.3963}}; + palletPos[] = {{{-0.140625,-1.52051,-1.2254},0}}; + }; + class Land_HouseV2_02_Interier : Default + { + shelfPos[] = {{{8.94824,4.19141,-5.55692},90.8873}}; + fridgePos[] = {{{6.06299,-2.00977,-5.55707},176.197}}; + bedPos[] = {{{-8.03711,-0.987305,-5.5571},184.341}}; + couchPos[] = {{{-6.82422,5.68262,-5.5571},274.703}}; + wardrobePos[] = {{{-8.83203,1.7168,-5.56403},268.499}}; + cookerPos[] = {{{8.7959,-2.00684,-5.5574},179.624}}; + chairPos[] = {{{-2.62451,0.544922,-5.5571},78.4276}}; + filingPos[] = {{{2.37305,5.25586,-5.55707},270.596}}; + pelicanPos[] = {{{8.31055,6.2832,-5.5571},37.3391}}; + tablePos[] = {{{-7.00488,4.00879,-5.5571},181.978}}; + lockerPos[] = {{{-1.11523,1.34863,-5.5571},269.367}}; + shoeboxPos[] = {{{-5.84717,-2.15918,-3.53598},182.785}}; + freezerPos[] = {{{4.64551,-2.0127,-5.55713},179.15}}; + }; + class Land_A_Office02 : Default + { + shelfPos[] = {{{2.7417,-4.16504,-8.17639},11.0089}}; + fridgePos[] = {{{-23.2476,2.61133,-8.16403},25.3519}}; + couchPos[] = {{{2.26904,2.13965,6.55609},272.088}}; + chairPos[] = {{{-0.574707,-6.89551,-8.17813},228.796},{{5.17578,-6.96777,-8.17719},126.645}}; + filingPos[] = {{{1.70068,-4.21973,-8.17661},317.714}}; + pelicanPos[] = {{{-18.9556,3.99902,8.6904},298.688}}; + tablePos[] = {{{4.73682,-4.41992,-8.17679},358.645}}; + toolRackPos[] = {{{-15.4028,0.609375,5.35764},270.07}}; + shoeboxPos[] = {{{-0.565918,-4.23535,-8.17667},351.414}}; + palletPos[] = {{{9.29248,2.92676,5.40057},291},{{-21.335,0.68457,5.40057},0}}; + cabinetPos[] = {{{-15.2732,2.80542,6.75255},0}}; + }; + class Land_Ind_Workshop01_04 : Default + { + lootType = "workshop"; + shelfPos[] = {{{1.25928,-3.33008,-1.55847},27.2942}}; + filingPos[] = {{{-2.01318,-3.40186,-1.55435},293.278}}; + tablePos[] = {{{-1.75049,-5.65186,-1.55209},271.116}}; + lockerPos[] = {{{-1.34473,4.75293,-1.55695},352.726}}; + toolRackPos[] = {{{0.178711,-7.25537,-1.54968},178.882}}; + shoeboxPos[] = {{{1.73438,4.83691,-1.55429},114.503}}; + palletPos[] = {{{-0.102539,-4.55371,-1.51132},340.1}}; + }; + class Land_Ind_TankBig : Default + { + lootType = "industrial"; + pelicanPos[] = {{{-6.74146,1.74805,5.31989},321.741}}; + palletPos[] = {{{0.539551,2.4082,5.36334},25},{{-3.41626,-2.57813,5.36334},340.1}}; + }; + class Land_Ind_Workshop01_L : Default + { + lootType = "workshop"; + shelfPos[] = {{{1.93359,-1.50195,-1.33884},358.185},{{-0.805664,3.11865,-1.33203},181.507}}; + filingPos[] = {{{0.609375,-3.6875,-1.33704},245.604}}; + tablePos[] = {{{3.36523,-5.01807,-1.3364},176.426}}; + toolRackPos[] = {{{3.47949,-5.65381,-1.33569},177.054}}; + shoeboxPos[] = {{{-1.85254,1.84229,-1.30463},25}}; + palletPos[] = {{{2.75781,-3.29102,-1.30463},0.999969},{{-2.88086,4.13037,-1.30463},0.999969}}; + }; + class Land_Ind_Vysypka : Default + { + lootType = "industrial"; + shelfPos[] = {{{2.80957,4.73828,-5.03592},90.1414}}; + fridgePos[] = {{{-4.28125,27.6045,-5.04321},357.803}}; + couchPos[] = {{{-3.60791,1.55469,4.09406},183},{{4.81934,-11.9766,-5.03705},184.375}}; + chairPos[] = {{{-3.03857,-1.72754,4.09406},227},{{-2.76172,4.26465,4.09406},320}}; + filingPos[] = {{{2.69727,3.66992,-5.03604},91.3547}}; + pelicanPos[] = {{{-5.5249,24.7314,-3.82114},358.775}}; + tablePos[] = {{{-0.984375,1.59863,4.09406},91}}; + lockerPos[] = {{{-2.91016,27.584,-5.04214},358.97}}; + toolRackPos[] = {{{3.44922,1.56738,-5.03577},270.011},{{3.0127,-14.3877,-5.03381},89.987}}; + shoeboxPos[] = {{{-0.418945,-22.6094,-5.034},17.1755}}; + palletPos[] = {{{1.82861,-1.39258,-4.99594},0.999969},{{1.86621,-8.21387,-4.99594},0.999969},{{-8.73828,22.5186,-4.99594},0.999969},{{-11.6133,-21.9463,4.08408},183},{{-6.85107,26.7197,-4.99594},0.999969}}; + }; + class Land_Tovarna2 : Default + { + lootType = "industrial"; + shelfPos[] = {{{-0.157715,8.94824,-5.58551},359.048},{{-8.91797,8.95117,-2.25754},359.07}}; + fridgePos[] = {{{-8.09814,6.00781,-5.58575},93.4298},{{-7.38135,7.14648,1.59531},270.644}}; + couchPos[] = {{{-12.2339,6.00293,1.64017},192.359}}; + cookerPos[] = {{{-7.34717,8.47168,1.59488},269.304}}; + chairPos[] = {{{-11.0293,-1.44824,0.397858},288.29},{{-12.7896,1.66406,-2.25778},256.194},{{-10.5977,8.53906,-5.58542},7.869}}; + filingPos[] = {{{-3.76074,4.69141,-2.25797},160.402},{{-11.9707,1.33887,-5.58572},179.608},{{-13.021,1.52051,1.64032},262.552},{{20.0762,16.4258,-5.52646},270.183}}; + pelicanPos[] = {{{-2.12793,7.01758,6.65506},287.139}}; + tablePos[] = {{{-8.11768,0.283203,0.376648},359.581},{{-10.749,8.58691,1.64017},359.286},{{-13.1201,7.74902,-5.58578},270.804}}; + lockerPos[] = {{{3.74805,5.08203,-4.64661},269.986},{{-13.2759,2.98828,-2.25778},271.412}}; + toolRackPos[] = {{{-7.78174,8.01758,-2.25754},271.288},{{-13.6577,2.94336,-5.5856},269.477}}; + shoeboxPos[] = {{{-3.45215,-9.0332,3.39786},287.139}}; + palletPos[] = {{{1.72998,4.39844,-5.59995},23.0657},{{-5.87061,-0.490234,-5.58575},0},{{-4.23682,5.16309,1.59531},92.0019},{{1.79346,6.75781,-5.58884},0.010498},{{9.70654,4.69238,-4.60858},183},{{-12.2871,-5.12402,-5.58575},360},{{-11.9155,-7.37012,-5.58566},197.387}}; + freezerPos[] = {{{-4.59424,9.50977,1.59531},6.14914}}; + }; + class Land_Rail_House_01 : Default + { + lootType = "industrial"; + lockerPos[] = {{{1.89893,2.44336,-1.30908},183.214}}; + palletPos[] = {{{-3.34912,3.12109,-1.27396},183}}; + }; + class Land_Ind_Pec_03b : Default + { + lootType = "industrial"; + couchPos[] = {{{3.66602,-4.47949,5.7338},181.985}}; + chairPos[] = {{{4.10938,-1.91309,5.73383},287.772},{{3.68262,-6.99902,5.73383},247.919}}; + pelicanPos[] = {{{2.27197,-4.89648,5.73383},89.1607}}; + tablePos[] = {{{5.6416,-4.37207,5.7338},88.5916}}; + palletPos[] = {{{-11.5796,-12.9551,0.982483},183},{{-9.27979,-17.4229,0.982483},142}}; + }; + class Land_HouseV_1I4 : Default + { + fridgePos[] = {{{-3.25146,-0.897461,-2.78665},356.197}}; + wardrobePos[] = {{{0.701172,3.27832,-2.746},90.7671}}; + cookerPos[] = {{{-4.33691,-3.19141,-2.79153},270.746}}; + chairPos[] = {{{0.333496,-4.5752,-2.73975},134}}; + tablePos[] = {{{-0.798584,4.34863,-2.76721},1.79366}}; + shoeboxPos[] = {{{-1.82813,-5.14746,-2.73975},25}}; + freezerPos[] = {{{-1.84106,-1.0957,-2.73975},358}}; + }; + class Land_A_Hospital : Default + { + lootType = "medical"; + shelfPos[] = {{{-7.99219,-2.12891,-7.36588},268.792}}; + couchPos[] = {{{-14.5566,1.18652,3.26541},321.707}}; + chairPos[] = {{{-12.1943,-1.09375,3.26541},77.6588}}; + filingPos[] = {{{1.95996,-2.26953,-7.36606},269.665},{{-1.56006,-2.83984,-7.36606},1.40195},{{-8.75537,-3.58887,-7.36606},359.532},{{-9.37305,-3.63574,-7.36606},359.169}}; + pelicanPos[] = {{{16.3394,4.99512,6.13242},0.903763}}; + tablePos[] = {{{14.708,-4.07813,-7.36609},359.602}}; + toolRackPos[] = {{{17.5059,-2.06738,3.26559},0.163071}}; + shoeboxPos[] = {{{-5.40625,8.16602,-4.35254},39},{{9.88281,-1.00098,-7.36609},39.1093},{{-14.6543,-1.31641,-7.36609},321.711}}; + palletPos[] = {{{-8.12305,-5.10742,3.30746},97},{{17.8105,-5.44922,3.30746},359}}; + freezerPos[] = {{{1.0166,-3.02148,-7.34253},359}}; + cabinetPos[] = {{{0.598267,-1.97144,-6.13056},270},{{-2.69324,-1.96851,-6.13056},270}}; + }; + class Land_Panelak2 : Default + { + shelfPos[] = {{{4.4043,-1.56323,-3.65},91}}; + fridgePos[] = {{{1.9834,2.03857,0.499998},272}}; + bedPos[] = {{{-4.88916,-3.16589,5.89},0},{{5.43604,-5.94202,3.18999},181},{{5.45801,-5.94385,8.59001},181},{{-5.46143,-5.94287,0.489996},1.99997}}; + couchPos[] = {{{-5.00977,-3.07544,0.480007},1.99997},{{5.09668,-3.39209,0.479996},90}}; + wardrobePos[] = {{{4.59766,-0.0115967,0.479996},356},{{-5.25439,0.0623779,5.89},0}}; + cookerPos[] = {{{4.62402,2.86633,0.499998},1.99997},{{-4.70605,2.86169,8.59001},0.999969}}; + chairPos[] = {{{2.31104,2.58813,8.62001},305},{{7.03857,2.58655,8.62001},55},{{5.39697,-5.3064,0.479996},315}}; + filingPos[] = {{{-1.15771,-4.87915,-3.64},274},{{1.87988,-5.90552,8.62001},272},{{-7.38721,2.91736,0.499998},274},{{7.45752,-6.97949,8.62001},174}}; + pelicanPos[] = {{{-5.44238,-6.4325,8.55001},111}}; + tablePos[] = {{{2.06348,-3.77393,-3.65},270},{{4.57178,2.84717,8.62001},0},{{3.30176,-7.8053,0.479996},181}}; + lockerPos[] = {{{-1.12158,2.33093,-3.64},270}}; + shoeboxPos[] = {{{1.17773,-4.98572,0.479996},311}}; + freezerPos[] = {{{-2.15332,2.48828,8.59001},89}}; + cabinetPos[] = {{{2.7334,3.25964,-2.25},89},{{-7.58789,0.991089,9.79001},0}}; + }; + class Land_Panelak : Default + { + shelfPos[] = {{{-1.18066,4.3916,-1.39282},269.731}}; + fridgePos[] = {{{2.1582,3.72363,0.0450439},274.269},{{2.12598,3.95801,2.74509},269.888}}; + bedPos[] = {{{-6.67578,-0.548828,2.745},187.481}}; + couchPos[] = {{{6.28906,-0.512695,0.0449829},2.62378}}; + wardrobePos[] = {{{4.10449,-4.86182,2.74927},89.2451},{{-7.1543,-1.32568,0.0450439},273.001}}; + cookerPos[] = {{{7.18164,4.19922,0.0445557},91.3201},{{7.18164,4.20068,2.7446},90.3307}}; + chairPos[] = {{{-2.27051,3.78564,0.0449829},56.0406},{{-4.54883,-0.710938,0.0562744},107.616},{{4.48535,-1.09717,2.74661},248.12}}; + filingPos[] = {{{4.16895,-3.5332,0.045105},7.97333},{{-5.07324,-6.33447,0.0450745},89.5886}}; + pelicanPos[] = {{{-6.6582,3.63037,5.59943},286.286}}; + tablePos[] = {{{-3.85254,-5.19385,2.745},265.362},{{7.02734,-0.689453,2.745},87.3795}}; + lockerPos[] = {{{-3.9502,-5.51221,0.0449829},268.107}}; + shoeboxPos[] = {{{-1.06641,-6.35303,0.0449829},206.957},{{0.953125,-6.38086,0.0449829},141.218}}; + palletPos[] = {{{0.506836,-0.0400391,-1.26782},89},{{4.21777,-3.08203,5.59943},25.7308}}; + freezerPos[] = {{{4.03906,-6.05371,0.0449829},90}}; + }; + class Land_Hangar_2 : Default + { + limit = 5; + lootType = "mil"; + shelfPos[] = {{{1.82813,-9.84717,-2.58939},181.468},{{5.83984,11.563,-2.58939},358.914},{{14.6816,-1.41748,-2.59756},90.4656},{{-14.6836,1.73828,-2.58939},269.242}}; + fridgePos[] = {{{12.8926,11.2778,-2.59778},3.16315}}; + couchPos[] = {{{1.27832,10.2305,-2.58963},273.856}}; + filingPos[] = {{{0.000976563,1.3833,-2.58926},178.715}}; + lockerPos[] = {{{13.5166,-9.63965,-2.58951},180.232}}; + toolRackPos[] = {{{-2.47949,-10.0684,-2.58923},178.901},{{9.01953,11.8232,-2.58923},358.139}}; + shoeboxPos[] = {{{-14.5693,-9.69629,-2.58963},188.48}}; + palletPos[] = {{{-0.00195313,-3.16113,-2.5896},332.619},{{-8.97656,-4.14404,-2.5896},219.281},{{-12.9932,10.293,-2.5896},336.817}}; + freezerPos[] = {{{14.3408,9.39063,-2.58963},81.9611}}; + }; + class Land_rail_station_big : Default + { + shelfPos[] = {{{2.86035,3.51221,-5.07059},91.0331}}; + fridgePos[] = {{{1.66113,-3.65674,-5.0708},180.242}}; + couchPos[] = {{{-4.33789,-1.56836,-5.07083},178.466},{{8.63281,-5.13672,-5.07083},1.14301}}; + chairPos[] = {{{1.39844,-4.95752,-5.06161},4.04407},{{-4.96484,3.36914,-5.0708},284.166},{{-5.01758,-5.00488,-5.05701},344.841}}; + filingPos[] = {{{2.84961,4.2832,-5.07077},90.7927}}; + pelicanPos[] = {{{0.118164,-6.59912,-2.26553},21.0414}}; + tablePos[] = {{{-5.13184,1.67041,-5.07083},269.411}}; + lockerPos[] = {{{-1.66504,-3.61719,-5.07083},180.479},{{1.15527,5.48584,-5.07065},0.986969},{{-4.39453,5.34619,-5.07083},338.371}}; + toolRackPos[] = {{{6.75195,1.96289,-5.07056},271.441}}; + shoeboxPos[] = {{{2.43164,0.785156,-4.09598},58.5217}}; + palletPos[] = {{{8.96973,-2.03564,-5.02618},89},{{-9.24902,-4.90479,-5.02618},89}}; + }; + class Land_a_stationhouse : Default + { + lootType = "mil"; + shelfPos[] = {{{0.554688,-4.70068,-9.49698},272.253},{{-0.933594,-5.35596,4.38522},27.5935},{{-0.828125,-8.54004,-4.67508},110.344},{{-1.08203,-8.95215,4.38516},185.611},{{-4.35742,-8.55957,-0.0701904},262.53},{{6.66406,-7.6665,-9.49698},181.745},{{19.1992,-5.00488,-9.49698},88.5043}}; + fridgePos[] = {{{0.871094,-1.74805,-9.49701},271.521}}; + couchPos[] = {{{-10.5244,-3.94482,-0.534332},278.335}}; + chairPos[] = {{{-13.3145,-3.94189,-0.534332},334.169}}; + filingPos[] = {{{-0.786133,-5.13428,-9.49701},78.6633}}; + pelicanPos[] = {{{7.44531,0.904785,-4.53433},267.207},{{-4.35156,-7.64502,8.46567},268.821}}; + lockerPos[] = {{{0.811523,-3.3418,-9.49701},269.999},{{19.0117,0.613281,-9.49701},90.2636},{{18.9961,-1.15674,-9.49704},89.3234},{{19.042,-2.92578,-9.49701},87.0602}}; + toolRackPos[] = {{{7.23633,3.84961,-9.4968},359.928}}; + shoeboxPos[] = {{{-0.743164,-8.33643,-0.0702209},110.554},{{19.1836,-7.53174,-9.49701},105.566}}; + palletPos[] = {{{2.03418,1.7915,-9.49701},289.015},{{-6.86621,3.25586,-0.534332},"3.05176e-005"},{{13.0293,-7.22363,-9.49701},90},{{15.542,-4.56006,-4.53433},"6.10352e-005"}}; + freezerPos[] = {{{-4.1084,-7.31787,-9.49701},268.732}}; + }; + class Land_Mil_ControlTower : Default + { + limit = 5; + lootType = "mil"; + shelfPos[] = {{{1.49512,2.23389,-1.09485},268.083},{{9.91406,3.22559,-9.65488},179.209}}; + fridgePos[] = {{{9.67773,5.91309,-9.65503},83.7454}}; + chairPos[] = {{{7.19434,-1.62061,2.92548},262.144}}; + filingPos[] = {{{2.79297,3.34814,-5.49008},190.556},{{3.33105,3.35791,-5.49011},179.417},{{6.89648,-1.87549,-1.09503},164.743},{{7.53906,-1.85107,-1.09503},187.813}}; + pelicanPos[] = {{{2.01172,-0.6875,-1.09509},259.256},{{9.32324,4.80322,-1.08328},41.8877}}; + lockerPos[] = {{{0.925781,3.41895,-9.65512},179.859},{{3.19531,6.13867,-5.49011},0.121094}}; + toolRackPos[] = {{{4.21484,6.64795,-9.65485},359.603}}; + shoeboxPos[] = {{{4.94727,-1.88574,-1.09512},209.993},{{7.66211,3.85303,-9.65512},210.035}}; + }; + class Land_Ind_Workshop01_01 : Default + { + lootType = "workshop"; + shelfPos[] = {{{0.558594,-3.47168,-1.3168},176.163}}; + fridgePos[] = {{{2.12305,-1.83838,-1.315},94.8075}}; + filingPos[] = {{{-1.55566,-0.881836,-1.3237},271.559}}; + lockerPos[] = {{{2.12109,-0.290039,-1.31625},91.8605}}; + toolRackPos[] = {{{2.43848,1.60547,-1.31653},88.4978}}; + shoeboxPos[] = {{{-0.980469,0.617188,-1.32367},120.007}}; + palletPos[] = {{{0.501953,0.146484,-1.27002},251}}; + }; + class Land_Shed_Ind02 : Default + { + lootType = "industrial"; + shelfPos[] = {{{-0.442383,-9.33105,-4.6525},178.364}}; + fridgePos[] = {{{4.19824,10.2627,-4.6524},7.46219}}; + bedPos[] = {{{2.77148,2.2832,-4.6524},95.4069}}; + couchPos[] = {{{2.4043,0.115234,-4.6524},273.531}}; + cookerPos[] = {{{4.43066,7.04907,-4.6528},90.7597}}; + chairPos[] = {{{3.70605,-2.95898,-4.65234},134.818}}; + filingPos[] = {{{-4.03906,12.3835,-1.30353},1.1741}}; + pelicanPos[] = {{{-0.52832,11.6462,-1.30273},62.2241}}; + tablePos[] = {{{1.62695,-1.86011,-4.6524},178.21}}; + lockerPos[] = {{{-2.87305,12.2234,-1.30331},2.62267}}; + toolRackPos[] = {{{2.56738,10.6775,-4.65201},0.953941}}; + shoeboxPos[] = {{{-1.70313,-9.60083,-4.65237},10.367}}; + palletPos[] = {{{-0.0283203,5.60742,-4.6524},317.381},{{4.12695,-5.37256,-4.64841},251}}; + }; + class Land_Mil_Barracks_i : Default + { + limit = 5; + lootType = "mil"; + shelfPos[] = {{{0.902344,-2.39502,-1.12442},238.007},{{0.548828,2.81006,-1.12292},1.08441},{{-9.37012,2.427,-1.12442},268.201}}; + filingPos[] = {{{6.55566,2.81738,-1.12451},92.1856}}; + pelicanPos[] = {{{-2.24316,-1.36963,-1.12463},263.64},{{4.36621,-1.57617,-0.137878},258.932},{{-5.0752,-2.4939,-1.12466},183.946},{{-8.75977,-0.048584,-1.12463},327.595}}; + lockerPos[] = {{{-5.60156,-1.32373,-1.12164},269.99}}; + shoeboxPos[] = {{{-0.0751953,-1.9834,-0.699829},251},{{-3.13574,0.466797,0.760162},360},{{3.02734,-1.34937,0.0901794},251},{{3.02441,-1.40112,-1.12466},302.031},{{-6.55371,-2.66333,-1.09982},360}}; + }; + class Land_Ss_hangar : Default + { + limit = 5; + lootType = "mil"; + shelfPos[] = {{{14.2314,-8.46289,-5.89868},173.905},{{14.3447,19.8936,-5.8782},357.293},{{13.5869,-20.874,-5.89853},180.148}}; + fridgePos[] = {{{14.1895,12.5049,-5.96277},147.17}}; + bedPos[] = {{{14.1436,21.6729,-5.89896},7.74948}}; + couchPos[] = {{{9.54492,21.0107,-5.89896},181.695}}; + cookerPos[] = {{{14.5332,15.3887,-5.92621},89.5229}}; + chairPos[] = {{{12.9268,19.6445,-5.89896},132.385}}; + filingPos[] = {{{14.2803,-9.54688,-5.89865},14.8827},{{-14.4658,-20.7148,-5.89896},255.86}}; + pelicanPos[] = {{{-14.79,12.7246,-5.89896},273.845},{{14.877,-20.2988,-5.89896},89.7007}}; + tablePos[] = {{{11.3418,23.2334,-5.89896},0.0492706}}; + lockerPos[] = {{{6.78076,23.332,-5.89896},0.014267}}; + toolRackPos[] = {{{2.44531,23.7109,-5.89871},0.000427246}}; + shoeboxPos[] = {{{-14.8848,23.3271,-5.89899},279.193}}; + palletPos[] = {{{-8.33643,-6.57617,-5.89896},135.758},{{6.4082,10.2188,-5.89896},115.033},{{14.167,10.5293,-5.89896},0},{{-13.6675,22.0801,-5.89896},325.134}}; + }; + class Land_Ind_IlluminantTower : Default + { + lootType = "mil"; + pelicanPos[] = {{{-0.791992,-0.320313,10.3249},212.76}}; + palletPos[] = {{{-0.012207,0.503906,-9.74222},360}}; + }; + class Land_Vez : Default + { + lootType = "mil"; + shoeboxPos[] = {{{0.286133,0.867188,1.36356},1.99998}}; + }; + class Land_Hlidac_budka : Default + { + lootType = "mil"; + shelfPos[] = {{{0.84668,0.125977,-0.809265},172.613}}; + filingPos[] = {{{0.0673828,2.31836,-0.809967},357.487},{{2.76709,2.25684,-0.809967},4.6116}}; + tablePos[] = {{{-2.32129,1.41016,-0.810028},279.786}}; + toolRackPos[] = {{{3.00098,0.819336,-0.809723},90.0308}}; + shoeboxPos[] = {{{1.62109,2.32031,-0.810089},349.179}}; + }; + class Land_A_GeneralStore_01a : Default + { + lootType = "market"; + shelfPos[] = {{{-2.68848,-5.06152,-1.22772},178.035},{{-8.81641,1.98926,-1.22772},270.025},{{9.85986,1.51953,-1.22772},179.333},{{-5.52783,9.13184,-1.22772},1.40732}}; + fridgePos[] = {{{-5.12402,-0.585938,-1.20645},180},{{-6.17725,-0.568359,-1.20645},180},{{5.68555,-4.8418,-1.20645},188}}; + cookerPos[] = {{{7.99414,-0.348633,-1.22836},89.6747}}; + filingPos[] = {{{9.23584,-1.02637,-1.22794},275.138},{{8.26953,-4.60156,-1.22794},92.7205}}; + pelicanPos[] = {{{14.3594,0.392578,-1.22797},91.3482}}; + tablePos[] = {{{14.1704,-3.93848,-1.22797},103.927}}; + lockerPos[] = {{{-7.1709,-1.75488,-1.20645},1.99997}}; + toolRackPos[] = {{{6.76514,-1.17969,-1.22775},0.137085}}; + shoeboxPos[] = {{{-4.61426,4.45996,-1.228},198.535},{{12.5962,0.78418,-1.228},358.034},{{12.3564,3.56055,-0.333557},265.418}}; + palletPos[] = {{{9.37988,5.22168,-1.22797},156.892}}; + freezerPos[] = {{{-1.78906,0.975586,-1.228},180.781}}; + }; + class Land_A_GeneralStore_01 : Default + { + lootType = "market"; + shelfPos[] = {{{6.03076,-5.04883,-1.22775},359.162},{{12.563,5.48535,-1.22772},0.496719},{{13.5098,-7.02734,-1.22775},88.7328}}; + fridgePos[] = {{{-9.77979,-1.54102,-1.22797},269.735},{{-9.80176,-4.10938,-1.22797},269.049},{{8.25488,-9.58496,-1.23712},0.202225}}; + couchPos[] = {{{-0.619629,-10.2949,-1.23727},270.908}}; + cookerPos[] = {{{6.6792,-4.2373,-1.22833},91.644}}; + chairPos[] = {{{-2.94092,-9.89746,-1.23715},42.039},{{-8.54541,6.65723,-1.23798},184.459}}; + filingPos[] = {{{13.4648,-2.1582,-1.22797},116.635}}; + tablePos[] = {{{-9.23096,5.1709,-1.228},357.131}}; + lockerPos[] = {{{7.98193,-5.34863,-1.22797},269.751}}; + toolRackPos[] = {{{-10.2231,-7.87598,-1.22778},270.182}}; + shoeboxPos[] = {{{4.97266,-2.66504,-0.632507},196.652},{{-9.93848,-6.0293,-1.228},2.52339}}; + palletPos[] = {{{-5.75488,-1.74707,-1.228},46.8216},{{-1.28467,7.54199,-1.23798},116.447},{{4.78857,8.44824,-1.23798},46.8216}}; + freezerPos[] = {{{8.1875,-1.88184,-1.228},186.869},{{-7.14307,5.19238,-1.228},0.0339508}}; + }; + class Land_A_Office01 : Default + { + lootType = "mil"; + shelfPos[] = {{{4.0542,2.89648,-4.55417},178.477},{{-1.47119,4.86328,0.44574},0.16153},{{10.6284,-3.50879,-2.0542},92.1019},{{11.4131,-4.21387,-4.5542},270.255}}; + fridgePos[] = {{{-0.907715,5.50684,-2.05441},272.559}}; + couchPos[] = {{{-7.35449,4.9502,-4.55441},189.687}}; + cookerPos[] = {{{-8.35449,3.17188,-2.05484},179.618}}; + chairPos[] = {{{-3.1958,-1.04395,-4.55441},275.876}}; + filingPos[] = {{{-3.70752,2.91797,0.445648},267.617},{{-0.938965,7.15039,-4.55438},269.465},{{-11.54,0.328125,-2.05438},178.477},{{10.4766,6.3418,-4.55438},91.5126},{{15.6548,-1.88672,-4.55438},83.8964}}; + pelicanPos[] = {{{2.34717,-1.2002,6.6937},215.707}}; + tablePos[] = {{{-3.19434,-2.84082,-4.55441},267.186},{{5.38916,5.21582,-2.05441},89.0818},{{14.9824,3.75391,-2.05441},181.475}}; + lockerPos[] = {{{-4.50391,3.8418,-4.55444},91.5282}}; + toolRackPos[] = {{{1.45557,2.6543,-2.05414},178.943}}; + shoeboxPos[] = {{{5.2876,-1.88086,-4.53268},180},{{3.9707,-5.65234,-2.03021},305.956},{{11.6138,6.93262,-2.05444},292.589}}; + palletPos[] = {{{-0.465332,4.62598,-4.53268},180},{{14.7656,-3.98438,-4.53268},176}}; + }; + class Land_A_Pub_01 : Default + { + shelfPos[] = {{{3.4812,3.81738,-5.77243},179.635},{{2.49878,-4.70703,-1.78745},180.503},{{-7.37402,1.03516,-1.78741},328.603}}; + fridgePos[] = {{{-3.38892,-4.0459,-5.76288},90}}; + bedPos[] = {{{-4.10889,-0.928711,-1.78766},8.16519},{{3.50171,2.69043,-1.78766},94.542}}; + couchPos[] = {{{0.366699,5.18652,-1.78766},189.226},{{-5.29517,0.333984,-5.77267},4.48228}}; + wardrobePos[] = {{{4.41479,7.93848,-1.78766},2.10324}}; + cookerPos[] = {{{-3.19385,-1.17285,-5.77298},270.462}}; + chairPos[] = {{{2.81494,0.904297,-5.76315},61.6914},{{-7.10742,-5.75293,-1.78763},350.056}}; + filingPos[] = {{{-0.388672,-1.30469,-5.77255},181.526},{{4.94727,1.18066,-1.78763},42.2747}}; + pelicanPos[] = {{{4.75977,5.4834,-1.78757},88.4654},{{6.82202,-3.58984,-5.77252},82.7529}}; + tablePos[] = {{{-7.43481,-3.70313,-1.78766},273.649},{{-7.42432,-4.37988,-5.77267},273.367}}; + toolRackPos[] = {{{-0.121582,-5.72266,-5.7724},89.0577}}; + shoeboxPos[] = {{{-0.593018,2.19141,-5.77267},255.46},{{4.81665,-2.40332,-1.78766},105.138},{{1.49854,-6.26074,-5.01288},176},{{0.81665,7.73535,-5.76288},176},{{6.86157,5.98242,-1.76291},268}}; + freezerPos[] = {{{0.44751,-0.999023,-1.76291},268}}; + }; + class Land_Barn_W_01 : Default + { + lootType = "industrial"; + shelfPos[] = {{{6.55371,-5.96289,-2.65878},88.4798},{{-6.56934,-7.53516,-2.65848},265.499},{{-4.05664,19.6274,-2.66928},0.626892}}; + couchPos[] = {{{5.04297,-17.8179,-2.65564},48.1573}}; + chairPos[] = {{{6.02441,-15.0469,-2.65741},70.2096},{{2.39844,-19.5591,-2.65125},198.607}}; + tablePos[] = {{{3.33691,-16.0547,-2.65723},300.369}}; + toolRackPos[] = {{{-6.80078,2.37402,-2.66006},268.437},{{6.71387,4.32422,-2.66052},89.4215},{{-4.89844,-19.9951,-2.65622},180.001}}; + shoeboxPos[] = {{{-6.57617,7.07227,-2.66177},270.003}}; + palletPos[] = {{{5.37402,-1.0918,-2.65982},38.9155},{{-5.49023,-1.3877,-2.65979},41.5356},{{-0.188477,-10.4546,-2.54559},268},{{-2.21777,10.7607,-2.54559},268},{{2.44043,14.0454,-2.54559},268}}; + freezerPos[] = {{{-6.14258,14.0566,-2.66248},279.4}}; + }; + class Land_Church_03 : Default + { + lootType = "church"; + GroundSpawnChance = 80; + shelfPos[] = {{{-8.8877,4.48535,-14.3282},270.093}}; + wardrobePos[] = {{{-3.39648,7.18848,-14.3284},272.593}}; + chairPos[] = {{{-8.41113,-4.42725,-14.3249},235.951}}; + filingPos[] = {{{6.03809,8.75146,-14.2857},360},{{6.50879,8.73438,-14.2857},1.99998}}; + pelicanPos[] = {{{4.48633,-8.17334,-14.3448},228.938}}; + tablePos[] = {{{-8.48633,-0.0556641,-14.3285},269.825}}; + shoeboxPos[] = {{{6.20117,1.86279,-14.3285},261.718}}; + }; + class Land_Stodola_open : Default + { + lootType = "industrial"; + shelfPos[] = {{{2.08691,-3.11719,-4.14142},89.2592}}; + fridgePos[] = {{{1.88672,-6.01465,-4.13022},119.538}}; + couchPos[] = {{{-3.63477,-0.27832,-4.13867},190.732}}; + pelicanPos[] = {{{-1.71191,-5.06445,0.297943},33.203}}; + tablePos[] = {{{-3.62988,6.59473,-4.12482},357.638}}; + toolRackPos[] = {{{-0.110352,7.2373,-3.92352},357.513}}; + shoeboxPos[] = {{{-4.24609,-6.01855,-3.31656},2.337}}; + palletPos[] = {{{1.70313,3.39844,-4.13934},92.8326},{{-3.4292,3.97168,-4.14297},255.32}}; + }; + class Land_Stodola_old_open : Default + { + lootType = "industrial"; + shelfPos[] = {{{4.81055,2.76367,-5.10672},359.199},{{-3.54004,7.10645,-1.01971},270.013}}; + bedPos[] = {{{-2.76221,8.75,-5.10696},179.304}}; + couchPos[] = {{{0.687988,-8.36133,-5.10693},4.33433}}; + chairPos[] = {{{-1.06543,-5.28418,-1.04489},195.228}}; + filingPos[] = {{{5.25879,-8.9043,-5.1069},9.83752}}; + pelicanPos[] = {{{-1.12891,-10.7266,2.93811},260.837}}; + tablePos[] = {{{-2.98828,10.5127,-1.0199},281.235}}; + toolRackPos[] = {{{5.54102,6.0625,-5.10693},90.7204},{{-1.74854,-11.5723,-5.10672},178.397}}; + shoeboxPos[] = {{{5.70313,11.2139,0.829681},91}}; + palletPos[] = {{{2.06445,3.54102,-5.10696},337.003},{{-2.80469,5.27539,-1.01993},264.974},{{2.44336,10.6328,2.93802},86.0969},{{4.44727,10.3809,-5.07031},91}}; + freezerPos[] = {{{-3.05957,-4.44141,-5.10699},359.822}}; + }; + class Land_Farm_Cowshed_a : Default + { + lootType = "industrial"; + shelfPos[] = {{{9.65234,4.23633,-3.1138},359.83}}; + bedPos[] = {{{7.85938,-5.01221,-3.11404},274.383}}; + wardrobePos[] = {{{10.21,-4.81543,-3.11401},71.5758}}; + filingPos[] = {{{-2.51855,-6.98389,-3.08054},202}}; + tablePos[] = {{{0.553711,-6.81055,-3.11404},179.415}}; + toolRackPos[] = {{{3.21973,-3.75781,-3.11374},182.361}}; + shoeboxPos[] = {{{-3.04883,-0.802246,-3.11407},198.771}}; + palletPos[] = {{{-2.58008,3.32617,-3.11404},6.63828},{{-6.11816,-2.65527,-3.11404},314.264}}; + freezerPos[] = {{{10.4248,-2.19531,-3.11407},92.3688}}; + }; + class Land_Farm_Cowshed_b : Default + { + lootType = "industrial"; + shelfPos[] = {{{-9.05615,-3.76465,-3.12729},178.703}}; + couchPos[] = {{{-9.82813,2.41113,-3.1275},296.045}}; + chairPos[] = {{{8.15674,-3.28955,-3.1275},182.81}}; + toolRackPos[] = {{{3.27734,-3.9209,-3.12726},178.757}}; + palletPos[] = {{{-4.85059,-2.72949,-3.12753},360},{{5.6416,-2.8208,-3.12753},0.0419464}}; + }; + class Land_Farm_Cowshed_c : Default + { + lootType = "industrial"; + shelfPos[] = {{{-2.79785,3.14209,-3.15216},295.449}}; + filingPos[] = {{{-2.97998,-4.05469,-3.15222},179.983}}; + palletPos[] = {{{2.44531,2.57227,-3.14557},0.00511169}}; + }; + class Land_Barn_Metal : Default + { + lootType = "industrial"; + shelfPos[] = {{{0.265625,-14.7627,-5.46832},89.0258}}; + fridgePos[] = {{{10.749,-15.9448,-5.46857},39.8741}}; + bedPos[] = {{{-9.12109,21.7661,-5.46857},175.889}}; + couchPos[] = {{{0.614746,-24.1509,-5.46857},96.7518}}; + cookerPos[] = {{{10.8979,-14.4751,-5.46899},90.5039}}; + chairPos[] = {{{10.4609,17.1284,-5.46857},39.8881}}; + filingPos[] = {{{-9.91895,-9.12695,-5.46854},268.516}}; + pelicanPos[] = {{{10.5273,22.7065,5.56143},37.3798}}; + tablePos[] = {{{10.7944,13.7324,-5.46857},87.4971}}; + lockerPos[] = {{{11.0068,6.05371,-5.46857},89.1326}}; + toolRackPos[] = {{{-10.2012,9.57422,-5.46823},272.816}}; + shoeboxPos[] = {{{-9.87012,-20.9902,-5.4425},298.809}}; + palletPos[] = {{{3.24316,2.2959,-5.44501},135.351},{{-4.39014,-9.8374,-5.44501},141.049},{{4.74316,12.5591,-5.44501},199},{{-8.59766,15.3638,-5.44501},335.835}}; + freezerPos[] = {{{10.8242,-10.4863,-5.44501},87.998}}; + }; + class Land_A_TVTower_Base : Default + { + lootType = "mil"; + shelfPos[] = {{{-0.569824,-2.05078,-2.25824},91.0596}}; + filingPos[] = {{{-2.6377,-4.59082,-2.26028},188.775}}; + pelicanPos[] = {{{4.38086,-0.0766602,1.15182},274.734}}; + toolRackPos[] = {{{-0.304199,2.37402,-2.25836},85.8353}}; + shoeboxPos[] = {{{-1.10449,6.4873,-2.25751},134.996}}; + }; + class Land_Mil_Guardhouse : Default + { + lootType = "mil"; + shelfPos[] = {{{-2.07324,2.70703,-1.69559},89.8322}}; + pelicanPos[] = {{{-2.46729,0.0585938,-1.69565},113.271}}; + shoeboxPos[] = {{{5.75781,1.48828,-10},202}}; + }; + class Land_Mil_House : Default + { + lootType = "mil"; + shelfPos[] = {{{12.2617,0.839355,-5.67438},181.266}}; + fridgePos[] = {{{15.2783,4.78369,-5.67462},52.5764}}; + pelicanPos[] = {{{-1.56152,6.73584,-1.87274},179.391}}; + lockerPos[] = {{{10.856,4.21094,-5.67462},268.532}}; + toolRackPos[] = {{{10.5098,1.98584,-5.67413},270.325}}; + shoeboxPos[] = {{{5.61719,6.21191,-5.24442},152.873}}; + palletPos[] = {{{13.2031,2.67773,-5.67609},202}}; + }; + class Land_houseV_2T2 : Default + { + chairPos[] = {{{-3.60352,1.40381,-4.05566},60.0702}}; + pelicanPos[] = {{{2.81348,-4.28516,-1.45676},39.1084}}; + shoeboxPos[] = {{{-3.23193,0.272461,-4.06165},128.845}}; + }; + class Land_Mil_hangar_EP1 : Default + { + limit = 5; + lootType = "mil"; + shelfPos[] = {{{13.5302,-21.2354,-5.37346},179},{{-14.126,-21.2681,-5.37346},179}}; + bedPos[] = {{{14.0624,22.0742,-5.3957},7}}; + couchPos[] = {{{11.0576,22.5513,-5.3945},277}}; + filingPos[] = {{{14.5165,19.8945,-5.39077},90}}; + pelicanPos[] = {{{-14.7921,12.4834,-5.37346},270}}; + tablePos[] = {{{10.9473,20.2598,-5.38906},200}}; + lockerPos[] = {{{5.74603,23.2769,-5.38878},1.99997}}; + toolRackPos[] = {{{-1.2074,23.3823,-5.38821},360}}; + palletPos[] = {{{-13.4512,-7.20068,-5.37346},270},{{-13.5587,9.13232,-5.37346},270},{{14.1083,-11.3062,-5.37346},270},{{14.1229,12.8296,-5.37681},270}}; + freezerPos[] = {{{7.4668,23.3433,-5.39095},1.99997}}; + }; + class Land_Mil_ControlTower_EP1 : Default + { + limit = 5; + lootType = "mil"; + shelfPos[] = {{{3.03467,2.64453,-1.16014},0},{{3.44043,3.19238,-5.52014},180},{{10.312,5.80469,-9.65014},90.8}}; + chairPos[] = {{{7.3042,-1.58887,2.98985},270}}; + filingPos[] = {{{1.48389,2.47754,-1.08014},350},{{2.1123,2.47852,-1.08014},0},{{4.2417,3.28027,-5.52014},180},{{-0.137207,6.33496,-9.65014},270.8}}; + pelicanPos[] = {{{3.23828,0.329102,2.73985},270},{{6.84424,-1.66113,-1.08014},180},{{6.38379,5.06836,-1.11015},180}}; + tablePos[] = {{{7.49512,0.382813,-1.16014},90}}; + lockerPos[] = {{{4.08936,6.23438,-9.65014},360}}; + shoeboxPos[] = {{{6.70996,3.96582,-1.08014},180}}; + palletPos[] = {{{8.53418,4.22461,-9.65014},90.8}}; + }; + class Land_House_K_1_EP1 : Default + { + fridgePos[] = {{{1.96729,5.96875,1.53209},360}}; + bedPos[] = {{{-3.29297,2.14844,1.53209},187}}; + cookerPos[] = {{{4.28125,4.49707,1.53209},90}}; + chairPos[] = {{{1.74805,1.2832,1.45209},7.99997}}; + tablePos[] = {{{1.18652,2.95605,1.54209},179}}; + shoeboxPos[] = {{{-3.5874,5.99609,1.93209},265}}; + }; + class Land_House_K_7_EP1 : Default + { + shelfPos[] = {{{-4.74609,2.42871,3.25069},0}}; + bedPos[] = {{{-2.32715,3.7876,3.23069},273}}; + couchPos[] = {{{-7.00684,2.23486,6.33068},180}}; + cookerPos[] = {{{-3.0957,4.38916,-0.309311},0}}; + chairPos[] = {{{-5.16113,0.416992,3.25069},220}}; + filingPos[] = {{{-6.82422,0.91748,-0.279312},180}}; + pelicanPos[] = {{{-3.28223,-1.62939,3.13068},180}}; + toolRackPos[] = {{{-7.16309,3.74512,-0.27932},0.600037}}; + shoeboxPos[] = {{{0.185547,2.03467,-0.26931},90}}; + palletPos[] = {{{0.12793,3.51074,6.31068},180},{{-6.24219,-1.57227,-0.479317},0.600037}}; + freezerPos[] = {{{-4.16406,4.40723,-0.309311},0}}; + }; + class Land_House_K_8_EP1 : Default + { + shelfPos[] = {{{-2.79102,-1.12793,0.246132},180},{{3.0918,-1.73926,0.246132},180}}; + fridgePos[] = {{{0.333008,3.72217,3.35612},90}}; + bedPos[] = {{{-2.45508,-0.746582,-2.63387},183.6}}; + couchPos[] = {{{0.733398,-0.199707,0.246132},90}}; + wardrobePos[] = {{{2.45313,-3.42871,-2.63387},178.6}}; + cookerPos[] = {{{-2.93066,-0.961914,3.35612},270.9}}; + chairPos[] = {{{0.383789,-3.7002,-2.70387},14.6}}; + filingPos[] = {{{-3.12109,2.6582,0.246132},270}}; + pelicanPos[] = {{{-4.36133,1.78027,0.0861282},89.9}}; + tablePos[] = {{{0.0976563,3.64941,0.246132},0}}; + shoeboxPos[] = {{{3.11035,-0.191406,-1.81387},90},{{-2.76172,4.86816,0.276131},90}}; + palletPos[] = {{{-0.880859,2.4375,5.95612},90},{{2.48926,-3.10742,0.336128},90}}; + freezerPos[] = {{{2.14258,1.05176,-2.62387},90},{{-2.89063,0.299316,3.35612},270.9}}; + }; + class Land_House_K_3_EP1 : Default + { + shelfPos[] = {{{-6.08594,-1.3042,-0.833199},270}}; + fridgePos[] = {{{2.39648,3.49902,-0.523193},93}}; + bedPos[] = {{{-0.318359,4.32129,2.7168},180}}; + couchPos[] = {{{1.73438,-0.850586,-0.833199},0}}; + cookerPos[] = {{{-2.74316,5.83447,-0.523193},270}}; + filingPos[] = {{{-0.918945,4.41162,-0.5532},273}}; + shoeboxPos[] = {{{1.85449,-3.16846,0.0268021},90}}; + palletPos[] = {{{-1.43359,-2.14697,3.0168},180}}; + }; + class Land_House_K_5_EP1 : Default + { + bedPos[] = {{{3.78613,0.527832,2.3232},184}}; + cookerPos[] = {{{-2.3457,1.2207,1.5132},188}}; + chairPos[] = {{{5.12695,3.30615,2.3232},64}}; + filingPos[] = {{{-7.18164,-0.956055,0.493202},198}}; + tablePos[] = {{{0.817383,1.22754,1.5232},181}}; + toolRackPos[] = {{{-7.52832,1.88867,0.5532},271}}; + shoeboxPos[] = {{{-5.31934,2.41211,0.823196},47}}; + }; + class Land_House_K_6_EP1 : Default + { + shelfPos[] = {{{-0.28418,5.72656,1.47783},0},{{5.16602,-2.67188,4.40265},98}}; + fridgePos[] = {{{-0.412109,5.45508,-1.62217},0}}; + bedPos[] = {{{0.00683594,0.544434,1.47783},186},{{0.00390625,0.682617,-1.62217},181},{{1.93848,-2.26953,4.40265},98},{{0.609375,4.77393,4.40783},276}}; + couchPos[] = {{{-2.81738,0.666504,1.47783},0},{{-4.17773,5.6582,-1.63217},95}}; + wardrobePos[] = {{{3.08594,3.81934,-1.63217},91}}; + cookerPos[] = {{{0.499023,5.37695,-1.62217},0}}; + chairPos[] = {{{-2.29883,3.50537,4.40265},48}}; + filingPos[] = {{{4.90918,5.43604,4.40265},48}}; + tablePos[] = {{{2.20313,-2.98926,-1.62217},180},{{-4.65527,0.294922,1.49783},276}}; + shoeboxPos[] = {{{2.70117,2.21973,1.47783},180}}; + palletPos[] = {{{-2.96582,-2.4082,-1.60735},48}}; + freezerPos[] = {{{1.55273,5.40479,-1.62217},0}}; + }; + class Land_A_Mosque_small_1_EP1 : Default + { + lootType = "church"; + GroundSpawnChance = 80; + couchPos[] = {{{6.44385,2.74609,-2.0341},2}}; + chairPos[] = {{{1.59668,-1.55762,-1.7141},357},{{3.95605,-1.53418,-1.7141},2}}; + pelicanPos[] = {{{1.90137,4.70996,-1.2041},357}}; + toolRackPos[] = {{{-0.34375,-1.05762,-1.7041},357}}; + shoeboxPos[] = {{{2.07715,0.0810547,-1.1841},180}}; + }; + class Land_A_Mosque_small_2_EP1 : Default + { + lootType = "church"; + GroundSpawnChance = 80; + tablePos[] = {{{-0.952637,2.83398,-2.48343},"1.52588e-005"}}; + toolRackPos[] = {{{-0.880371,-3.7002,-2.37343},"1.52588e-005"}}; + shoeboxPos[] = {{{0.770508,-3.40137,-1.69343},"1.52588e-005"},{{-2.49805,-3.33887,-1.69343},"1.52588e-005"}}; + }; + class Land_House_L_1_EP1 : Default + { + cookerPos[] = {{{0.925293,0.850586,-0.629326},355}}; + tablePos[] = {{{0.134766,-1.86328,-0.629326},185}}; + shoeboxPos[] = {{{2.03125,-1.08301,-0.689323},180}}; + }; + class Land_House_L_3_EP1 : Default + { + couchPos[] = {{{-4.16162,1.71777,2.56979},278}}; + pelicanPos[] = {{{-5.42822,0.783203,-0.190216},296}}; + tablePos[] = {{{-3.4624,2.94727,-0.27021},0}}; + shoeboxPos[] = {{{-0.625488,3.21289,0.559784},323}}; + palletPos[] = {{{0.00488281,0.0605469,-0.27021},267},{{2.24951,2.31934,-0.27021},323}}; + }; + class Land_Misc_Well_L_EP1 : Default + { + shoeboxPos[] = {{{0.611328,-0.0751953,0.135979},278}}; + }; + class Land_House_L_4_EP1 : Default + { + shelfPos[] = {{{-6.77441,-0.744141,-1.33775},270}}; + fridgePos[] = {{{4.71045,-0.0517578,-1.10775},180}}; + bedPos[] = {{{0.240723,2.24023,-1.33775},0}}; + cookerPos[] = {{{6.61816,1.50781,-1.10775},90}}; + chairPos[] = {{{0.864258,-0.628906,-1.27775},120}}; + tablePos[] = {{{-3.76367,1.76953,-1.33775},0}}; + shoeboxPos[] = {{{4.05518,3.79492,-0.687752},180}}; + palletPos[] = {{{-4.59863,0.929688,1.72225},0},{{4.38574,2.06152,1.44225},0}}; + freezerPos[] = {{{2.82861,2.85352,-1.03775},270}}; + }; + class Land_House_L_8_EP1 : Default + { + fridgePos[] = {{{-1.23047,0.239258,-1.10685},173}}; + couchPos[] = {{{4.48242,0.755859,1.59315},270}}; + cookerPos[] = {{{1.48291,5.91797,-1.10685},90}}; + chairPos[] = {{{1.6333,3.23535,1.59315},109}}; + pelicanPos[] = {{{5.0166,3.38574,1.79315},170}}; + tablePos[] = {{{-3.3335,2.53906,-1.10685},267}}; + toolRackPos[] = {{{3.69043,1.83301,-1.10685},357}}; + shoeboxPos[] = {{{4.80859,4.89551,-0.726845},180}}; + palletPos[] = {{{-2.80469,3.25488,1.59315},109},{{-2.77539,-3.80273,1.29315},109}}; + freezerPos[] = {{{1.80957,2.24609,-1.10685},83}}; + }; + class Land_House_L_6_EP1 : Default + { + shelfPos[] = {{{7.42285,2.09961,1.28293},90}}; + fridgePos[] = {{{1.31592,-2.31445,-1.50707},180}}; + bedPos[] = {{{6.03418,1.56738,-1.54707},274}}; + couchPos[] = {{{-3.1333,-1.29785,-1.54707},184}}; + wardrobePos[] = {{{3.08252,0.0664063,-1.54707},274}}; + chairPos[] = {{{-3.73486,2.18555,-1.54707},330}}; + filingPos[] = {{{7.31006,1.4082,1.28293},90}}; + lockerPos[] = {{{7.1626,0.398438,1.28293},90}}; + shoeboxPos[] = {{{1.97461,1.40332,-0.347069},79}}; + palletPos[] = {{{0.405762,1.2666,1.18293},90},{{-3.02832,-1.68848,1.18293},90}}; + }; + class Land_House_L_7_EP1 : Default + { + shelfPos[] = {{{-2.28809,-2.28809,-0.939278},87.8875}}; + fridgePos[] = {{{-5.4751,3.71777,-0.639275},"1.52588e-005"}}; + bedPos[] = {{{3.79248,2.42188,-0.269272},270}}; + wardrobePos[] = {{{5.65527,0.724609,-0.269272},90}}; + cookerPos[] = {{{-4.51172,3.5752,-0.609276},"1.52588e-005"}}; + chairPos[] = {{{-0.388672,3.22656,-0.269272},290}}; + filingPos[] = {{{-5.10986,-2.08984,-0.939278},350}}; + tablePos[] = {{{1.99707,-1.52637,-0.239273},180}}; + shoeboxPos[] = {{{-5.84033,-7.11621,0.0807266},180}}; + palletPos[] = {{{-0.26416,-6.77637,-1.06927},180}}; + freezerPos[] = {{{-2.71533,-6.71777,-0.909271},180}}; + }; + class Land_House_C_1_EP1 : Default + { + lootType = "market"; + shelfPos[] = {{{-4.81006,1.55078,-0.937073},0}}; + fridgePos[] = {{{-8.3042,-0.625977,-0.937073},270}}; + cookerPos[] = {{{-8.23047,0.216797,-0.937073},270}}; + chairPos[] = {{{-2.89355,-0.30957,-0.937073},80}}; + filingPos[] = {{{-5.55566,1.49609,-0.937073},0},{{-6.02295,1.42188,-0.937073},350}}; + pelicanPos[] = {{{4.00537,-1.68848,3.61293},90}}; + tablePos[] = {{{8.03906,-0.804688,-0.937073},90}}; + lockerPos[] = {{{-1.39746,-0.689453,-1.01707},270}}; + toolRackPos[] = {{{5.82568,1.81348,-0.937073},0}}; + shoeboxPos[] = {{{7.98096,-4.17969,-0.247078},0}}; + palletPos[] = {{{1.82275,-3.33984,3.51293},90},{{-6.08203,0.685547,3.61293},90},{{6.38721,0.277344,-0.947075},90}}; + }; + class Land_A_Minaret_Porto_EP1 : Default + { + lootType = "mil"; + chairPos[] = {{{1.95752,0.271484,9.38245},349}}; + pelicanPos[] = {{{2.31885,1.9375,6.58245},229},{{3.31494,-0.510742,-3.39755},113}}; + shoeboxPos[] = {{{2.27197,-2.94531,9.39245},349}}; + palletPos[] = {{{1.25195,0.685547,-20.5975},100}}; + }; + class Land_House_C_2_EP1 : Default + { + shelfPos[] = {{{-4.66211,-0.90918,-2.31334},266.8}}; + bedPos[] = {{{1.67383,-0.817383,0.763084},90},{{-3.94336,1.43262,0.603081},180}}; + couchPos[] = {{{3.84131,-3.79883,0.786659},271.8}}; + wardrobePos[] = {{{5.73877,2.78125,0.786659},90}}; + chairPos[] = {{{-2.6167,-1.23535,0.603081},170},{{-4.00146,-1.05664,0.603081},220}}; + filingPos[] = {{{5.95459,-0.53418,-2.31334},104},{{6.07373,2.55176,-2.31334},80}}; + tablePos[] = {{{2.34131,2.0918,0.763084},"1.52588e-005"}}; + lockerPos[] = {{{-1.74707,2.39355,-2.31334},89.8}}; + toolRackPos[] = {{{-1.31445,0.375,-2.31334},89.8}}; + shoeboxPos[] = {{{-0.350098,2.94238,-2.28334},180},{{5.8457,-1.50684,1.57308},180}}; + palletPos[] = {{{-2.55518,-0.786133,-2.31334},110.8},{{-3.98584,1.06055,-2.31334},89.8}}; + freezerPos[] = {{{2.02002,0.932617,-2.31334},270}}; + }; + class Land_Misc_Well_C_EP1 : Default + { + shoeboxPos[] = {{{0.225098,0.355469,0.0676193},170}}; + }; + class Land_House_C_1_v2_EP1 : Default + { + lootType = "market"; + fridgePos[] = {{{-8.29102,0.782227,-1.35837},270}}; + couchPos[] = {{{4.57666,-1.00195,3.16163},270},{{-5.02783,2.07422,-1.38837},270}}; + cookerPos[] = {{{-2.74414,1.1748,-1.38837},90}}; + chairPos[] = {{{1.5708,-1.56641,3.16163},320},{{3.31299,-1.47852,-1.35837},40},{{6.86572,-0.859375,3.16163},30}}; + filingPos[] = {{{6.08252,2.9502,-1.35837},"1.52588e-005"}}; + tablePos[] = {{{4.56787,-2.96875,3.16163},180},{{7.90332,1.12305,-1.35837},90}}; + shoeboxPos[] = {{{-8.38037,-0.833008,-0.93837},270}}; + freezerPos[] = {{{5.20557,2.90332,-1.35837},"1.52588e-005"}}; + }; + class Land_House_C_5_V1_EP1 : Default + { + bedPos[] = {{{-1.40234,-0.685547,-1.48295},0}}; + couchPos[] = {{{-3.50098,-0.208008,-1.48295},180}}; + wardrobePos[] = {{{0.958984,1.01758,1.42705},180}}; + chairPos[] = {{{-2.87109,3.71875,-1.48295},0},{{2.50684,4.94287,-1.48295},0}}; + filingPos[] = {{{3.30664,1.04639,-1.48295},180}}; + tablePos[] = {{{-2.96191,-4.95508,-1.48295},180}}; + palletPos[] = {{{-3.12891,0.384277,1.15705},250},{{-1.73926,-4.29883,1.15705},180}}; + }; + class Land_House_C_3_EP1 : Default + { + shelfPos[] = {{{-2.11621,-1.87402,1.91428},265}}; + fridgePos[] = {{{5.75879,3.84033,-3.87573},0}}; + bedPos[] = {{{-7.35449,-1.97705,0.514275},178}}; + couchPos[] = {{{4.89453,-0.709961,-0.485725},178},{{4.43359,-2.51904,4.04428},178}}; + wardrobePos[] = {{{-8.02637,1.10938,0.514275},268}}; + cookerPos[] = {{{4.0166,-1.12305,-3.87573},270}}; + chairPos[] = {{{-4.25684,3.56934,0.514275},40},{{6.07715,0.655273,-3.88573},339}}; + filingPos[] = {{{8.17969,-2.87256,-3.87573},130}}; + pelicanPos[] = {{{2.22266,-1.98633,4.91428},88}}; + tablePos[] = {{{-4.11621,-1.11475,0.514275},90},{{4.09082,1.39307,-3.87573},270}}; + lockerPos[] = {{{-8.1543,2.12549,-3.81573},269}}; + toolRackPos[] = {{{-8.44434,0.203125,-3.81573},269}}; + shoeboxPos[] = {{{-3.90039,-3.58984,-3.83573},270},{{-8.08105,3.58545,1.58427},0}}; + palletPos[] = {{{6.55469,-1.37988,4.11428},178},{{-6.69141,2.4873,4.31428},178}}; + freezerPos[] = {{{4.03809,-2.17529,-3.87573},270}}; + }; + class Land_House_C_12_EP1 : Default + { + shelfPos[] = {{{3.25391,-5.70898,0.10778},91},{{7.60742,2.00098,-3.52222},90}}; + fridgePos[] = {{{-3.77637,-8.55176,0.137779},271}}; + couchPos[] = {{{3.50244,-2.55566,0.137779},110},{{-0.932129,-7.9502,-3.52222},90}}; + cookerPos[] = {{{3.01709,-8.48047,-3.52222},91}}; + chairPos[] = {{{2.45898,-8.51855,0.10778},141},{{-3.55371,-8.52734,-3.52222},221}}; + filingPos[] = {{{4.61963,-4.02148,-3.52222},180}}; + pelicanPos[] = {{{-4.01465,-5.48633,3.38778},269}}; + lockerPos[] = {{{-0.582031,-3.9248,-3.52222},180}}; + toolRackPos[] = {{{1.37695,-4.39941,-3.52222},180},{{3.40576,-4.42773,-3.52222},180}}; + shoeboxPos[] = {{{1.32813,0.0283203,-3.52222},88}}; + palletPos[] = {{{-1.87988,1.13379,0.137779},230},{{-2.9873,0.550781,-3.48222},88},{{5.65186,0.637695,0.137779},110}}; + freezerPos[] = {{{3.05566,-5.78223,-3.50222},88}}; + }; + class Land_House_C_5_V3_EP1 : Default + { + shelfPos[] = {{{0.881836,0.848633,1.42705},180}}; + fridgePos[] = {{{2.83398,5.10059,-1.48295},0.999985}}; + bedPos[] = {{{-1.33838,-0.811523,-1.48295},0.999985}}; + wardrobePos[] = {{{4.41846,1.59082,1.42705},90},{{-2.9209,3.87598,-1.48295},"1.00179e-005"}}; + chairPos[] = {{{-3.97998,1.91797,-1.48295},289},{{-1.0791,-4.83398,1.12706},130}}; + filingPos[] = {{{-4.45752,-5.25781,-1.49295},269}}; + shoeboxPos[] = {{{4.48828,1.01172,-1.40295},"1.00179e-005"},{{0.500977,4.9834,-0.672951},30}}; + palletPos[] = {{{-1.72168,-1.9375,1.17705},"1.00179e-005"}}; + }; + class Land_House_C_5_V2_EP1 : Default + { + shelfPos[] = {{{0.882813,0.848145,1.42705},180}}; + fridgePos[] = {{{2.83398,5.1001,-1.48295},1}}; + bedPos[] = {{{-1.33789,-0.811523,-1.48295},1}}; + wardrobePos[] = {{{-2.85547,3.81055,-1.38295},360}}; + chairPos[] = {{{-3.86914,1.87793,-1.39295},320},{{-1.0752,-4.77148,1.32706},130}}; + filingPos[] = {{{-4.45703,-5.25781,-1.49295},269}}; + shoeboxPos[] = {{{4.48828,1.01172,-1.40295},0},{{0.507813,5.10352,-0.572945},130}}; + palletPos[] = {{{-1.72168,-1.9375,1.17705},0}}; + }; + class Land_Mil_Guardhouse_EP1 : Default + { + lootType = "mil"; + shelfPos[] = {{{-2.9021,-0.569336,-1.69236},180}}; + shoeboxPos[] = {{{-2.94189,3.83496,-1.69236},180}}; + }; + class Land_Mil_House_EP1 : Default + { + lootType = "mil"; + toolRackPos[] = {{{10.4844,2.79492,-5.67967},270}}; + palletPos[] = {{{12.9678,2.14258,-5.67967},180},{{13.7964,4.08594,-5.67967},220}}; + }; + class Land_Mil_Repair_center_EP1 : Default + { + lootType = "mil"; + toolRackPos[] = {{{3.14893,3.31836,-2.52654},270}}; + palletPos[] = {{{-2.75195,0.446289,-1.52654},180},{{-2.63037,3.28516,-1.52654},270}}; + }; + class Land_Misc_Cargo1Ao_EP1 : Default + { + lootType = "workshop"; + palletPos[] = {{{0.109863,-0.517578,-1.05425},180},{{0.0776367,2.01465,-1.05425},180}}; + }; + class Land_Mil_Barracks_i_EP1 : Default + { + limit = 5; + lootType = "mil"; + pelicanPos[] = {{{-0.560303,-1.47656,0.0566254},88},{{2.65845,-1.47168,-0.743378},108},{{-3.68701,-1.2627,0.0566254},100},{{-7.04419,-1.5918,-0.743378},100}}; + lockerPos[] = {{{0.652588,-1.77637,-1.10338},270},{{-5.80908,-1.9834,-1.10338},270},{{-9.33643,-2.05957,-1.10338},270}}; + toolRackPos[] = {{{-9.41846,2.02148,-1.10338},270}}; + shoeboxPos[] = {{{-3.3457,-0.0791016,-1.11338},108},{{2.53003,-2.44336,-1.08338},108},{{4.00269,-1.91797,-0.083374},290},{{-10.4619,1.45313,0.296623},90}}; + cabinetPos[] = {{{5.90869,0.634277,0.216881},90}}; + }; + class Land_Ind_Oil_Pump_EP1 : Default + { + shoeboxPos[] = {{{1.8894,-2.20605,2.53654},90}}; + }; + class Land_Ind_Oil_Tower_EP1 : Default + { + lootType = "industrial"; + couchPos[] = {{{3.39233,-5.47461,3.74753},270}}; + pelicanPos[] = {{{3.07495,-2.38086,16.4475},270}}; + toolRackPos[] = {{{-1.66919,0.807617,-13.0425},270}}; + palletPos[] = {{{3.64136,0.131836,-8.04248},30},{{-1.99316,-6.2207,-13.0225},270},{{4.45459,-5.50098,-12.9225},270},{{5.33862,-6.28711,-8.04248},30}}; + }; + class Land_House_L_9_EP1 : Default + { + bedPos[] = {{{1.09448,1.40039,-0.611443},275}}; + }; + class Land_fortified_nest_big_EP1 : Default + { + lootType = "mil"; + shelfPos[] = {{{-0.359375,-0.337891,-0.721558},95}}; + couchPos[] = {{{1.25781,-0.414063,-0.721558},185}}; + pelicanPos[] = {{{-1.12036,0.962891,-0.721558},85}}; + }; + class Land_A_Mosque_big_wall_EP1 : Default + { + shelfPos[] = {{{4.53857,4.61914,-2.04966},350}}; + couchPos[] = {{{0.288574,3.51367,-2.04966},270}}; + }; + class Land_A_Mosque_big_wall_corner_EP1 : Default + { + couchPos[] = {{{-1.2417,3.2666,-2.03097},270}}; + chairPos[] = {{{1.03223,3.80176,-2.03097},20}}; + palletPos[] = {{{3.88086,-2.67383,-2.03097},20}}; + }; + class Land_A_Mosque_big_minaret_1_EP1 : Default + { + pelicanPos[] = {{{-0.907227,-1.69336,7.16152},280}}; + shoeboxPos[] = {{{0.124023,-0.527344,7.16152},4.89996}}; + }; + class Land_A_Mosque_big_addon_EP1 : Default + { + tablePos[] = {{{5.93506,-2.10156,-6.46501},90},{{5.84326,2.80566,-6.46501},90}}; + shoeboxPos[] = {{{2.78027,-5.18164,-5.965},360},{{2.78857,5.36914,-5.965},360}}; + }; + class Land_A_Mosque_big_hq_EP1 : Default + { + couchPos[] = {{{5.84619,-2.89648,-9.35999},41},{{8.43701,8.60352,0.520004},150}}; + chairPos[] = {{{-6.1582,-2.72852,-9.33999},249},{{-5.3042,-4.38379,-9.33999},239},{{9.77832,-7.29395,0.520004},320},{{8.51709,-9.12793,0.520004},300},{{9.05273,-10.5879,-4.05999},340}}; + pelicanPos[] = {{{2.45459,9.20313,0.520004},340}}; + tablePos[] = {{{5.96045,3.45703,-9.36999},49}}; + shoeboxPos[] = {{{-9.6084,-10.9482,-4.05999},41}}; + palletPos[] = {{{-5.69385,-8.7002,0.520004},320},{{-8.27783,7.9248,0.520004},70}}; + }; + class Land_A_Mosque_big_minaret_2_EP1 : Default + { + pelicanPos[] = {{{-1.92383,-1.92188,3.61214},80}}; + shoeboxPos[] = {{{-0.0258789,-0.837891,3.60214},9.99997}}; + }; + class Land_House_C_11_EP1 : Default + { + shelfPos[] = {{{4.04883,-0.507813,-2.07991},180}}; + couchPos[] = {{{0.967773,-3.72266,-2.07991},89.9999},{{5.21924,-3.53809,0.940094},93}}; + wardrobePos[] = {{{3.57471,2.49023,1.04009},265.8}}; + cookerPos[] = {{{4.06836,-1.44141,-2.07991},0}}; + chairPos[] = {{{7.38379,-1.58594,0.940094},43}}; + filingPos[] = {{{2.47314,-4.53809,0.940094},179},{{2.99756,-4.46582,0.940094},173}}; + toolRackPos[] = {{{6.90332,-0.748047,-2.07991},180}}; + palletPos[] = {{{0.493652,-1.9248,0.960091},179},{{1.26855,4.18555,-2.45991},185.8}}; + freezerPos[] = {{{-1.55713,-2.66016,-2.07991},272}}; + }; + class Land_House_C_9_EP1 : Default + { + shelfPos[] = {{{0.668945,-4.66406,-3.85899},180}}; + fridgePos[] = {{{3.50098,2.56934,-3.82899},356}}; + bedPos[] = {{{1.76123,4.54102,-0.278992},92.1}}; + couchPos[] = {{{1.69629,-4.80762,-0.278992},90}}; + cookerPos[] = {{{2.63574,2.44336,-3.82899},356}}; + chairPos[] = {{{-4.98926,0.46582,-0.278992},262.1}}; + filingPos[] = {{{5.79541,-5.37012,-0.278992},94},{{5.7334,-5.89941,-0.278992},100}}; + pelicanPos[] = {{{-5.09424,-1.93359,-0.278992},94}}; + lockerPos[] = {{{2.80615,2.62598,-0.278992},0}}; + toolRackPos[] = {{{1.40625,6.66602,-3.85899},0}}; + shoeboxPos[] = {{{-2.22803,0.438477,-2.99899},360}}; + palletPos[] = {{{0.508301,-2.66895,2.53101},144},{{-3.3208,1.07031,2.53101},144},{{-1.89307,4.89941,2.53101},94}}; + freezerPos[] = {{{5.66406,0.332031,-3.83899},89}}; + }; + class Land_Fort_Watchtower_EP1 : Default + { + lootType = "mil"; + pelicanPos[] = {{{-0.390137,0.0634766,0.56675},144}}; + shoeboxPos[] = {{{-1.28271,2.67969,-2.21325},360}}; + palletPos[] = {{{-0.77832,-2.00293,-2.20325},144}}; + }; + class Land_Misc_Cargo1Bo_EP1 : Default + { + lootType = "workshop"; + palletPos[] = {{{0.0737305,-0.0507813,-1.06068},184},{{0.0981445,-1.95898,-1.06068},184},{{-0.0107422,1.99707,-1.06068},184}}; + }; + class Land_A_Minaret_EP1 : Default + { + lootType = "church"; + GroundSpawnChance = 80; + pelicanPos[] = {{{-1.50244,-0.742188,5.06781},123.5}}; + }; + class Land_bo_HouseV2_04_Interier : Land_HouseV2_04_interier {}; + class Land_bo_HouseV2_02_Interier : Land_HouseV2_02_Interier {}; + class Land_bo_HouseV_1I4 : Land_HouseV_1I4 {}; + class Land_bo_Panelak2 : Land_Panelak2 {}; + class Land_bo_Panelak : Land_Panelak {}; + class Land_bo_Shed_Ind02 : Land_Shed_Ind02 {}; + class Land_bo_Hlidac_budka : Land_Hlidac_budka {}; + class Land_bo_A_GeneralStore_01 : Land_A_GeneralStore_01 {}; + class Land_bo_A_Office01 : Land_A_Office01 {}; + class Land_bo_Barn_W_01 : Land_Barn_W_01 {}; + class Land_bo_stodola_open : Land_Stodola_open {}; + class Land_bo_stodola_old_open : Land_Stodola_old_open {}; + class Land_bo_Farm_Cowshed_a : Land_Farm_Cowshed_a {}; + class Land_bo_Farm_Cowshed_b : Land_Farm_Cowshed_b {}; + class Land_bo_Farm_Cowshed_c : Land_Farm_Cowshed_c {}; + class Land_bo_A_TVTower_Base : Land_A_TVTower_Base {}; + class Land_bo_HouseV_2T2 : Land_houseV_2T2 {}; + class Land_bo_HouseB_Tenement : Land_HouseB_Tenement {}; + class Land_bo_HouseV2_01A : Land_HouseV2_01A {}; + class Land_bo_Barn_W_02 : Land_Barn_W_02 {}; + class Land_bo_Shed_W01 : Land_Shed_W01 {}; + class Land_bo_A_Castle_Bergfrit : Land_A_Castle_Bergfrit {}; + class Land_bo_Shed_wooden : Land_Shed_wooden {}; + class Land_bo_HouseV_1L2 : Land_HouseV_1L2 {}; + class Land_bo_HouseV_1I1 : Land_HouseV_1I1 {}; + class Land_bo_HouseV_1L1 : Land_HouseV_1L1 {}; + class Land_bo_misc_deerstand : Land_Misc_deerstand {}; + class Land_bo_HouseBlock_A1_1 : Land_HouseBlock_A1_1 {}; + class Land_bo_HouseBlock_A3 : Land_HouseBlock_A3 {}; + class Land_bo_hut06 : Land_Hut06 {}; + class Land_bo_dum_rasovna : Default + { + shelfPos[] = {{{-1.56299,-4.67383,-2.69722},185},{{3.88159,-3.92139,-2.69722},90}}; + fridgePos[] = {{{-1.78345,1.78662,-2.70722},275.214}}; + bedPos[] = {{{2.92578,2.73438,-2.70722},1.99997}}; + wardrobePos[] = {{{0.281494,-0.0371094,0.232777},261}}; + cookerPos[] = {{{-1.76978,-1.74072,-2.69722},356}}; + chairPos[] = {{{3.47705,-0.510742,-2.69722},101}}; + filingPos[] = {{{0.485352,-1.99902,0.232777},0},{{-0.095459,-2.09375,0.232777},354}}; + pelicanPos[] = {{{-0.732422,3.80762,0.202777},329}}; + tablePos[] = {{{0.746094,4.27881,-2.67722},360}}; + toolRackPos[] = {{{-0.824707,-1.08301,-2.69722},182}}; + shoeboxPos[] = {{{-1.76807,-4.44385,0.232777},44}}; + freezerPos[] = {{{0.0822754,-1.64063,-2.69722},0.999985}}; + }; + class Land_bo_Nasypka : Default + { + shoeboxPos[] = {{{-1.81689,-0.786621,6.56536},213}}; + }; + class Land_TTowerBig_2_F : Default + { + lootType = "mil"; + pelicanPos[] = {{{1.03027,1.00903,0.757229},41}}; + }; + class Land_bo_Sara_domek_sedy : Default + { + fridgePos[] = {{{0.498047,1.38989,-2.14814},270}}; + bedPos[] = {{{-1.31494,0.212891,-2.13814},4},{{-5.03027,3.2019,-2.14814},183}}; + couchPos[] = {{{4.9209,1.72778,-2.12814},5}}; + wardrobePos[] = {{{-4.1416,-0.853271,-2.14814},182}}; + cookerPos[] = {{{1.86279,4.21411,-2.13814},0}}; + chairPos[] = {{{-2.82324,-0.666504,-2.13814},170},{{-5.49121,-0.572998,-2.13814},200}}; + filingPos[] = {{{6.03662,-1.00024,-2.13814},97}}; + tablePos[] = {{{-3.23926,4.17554,-2.11814},0}}; + shoeboxPos[] = {{{0.770508,-0.9021,-2.14814},161}}; + freezerPos[] = {{{0.799805,4.23804,-2.11814},0}}; + }; + class Land_bo_Ind_SawMill : Default + { + toolRackPos[] = {{{9.0686,5.12646,-5.83683},270}}; + palletPos[] = {{{-7.46265,-5.69971,-5.83683},142},{{7.71216,-10.9746,-5.83683},290},{{-3.50049,16.1409,-5.83683},142},{{5.49878,16.4333,-5.83683},40}}; + }; + class Land_bo_Dum_mesto2 : Default + { + shelfPos[] = {{{-0.732422,3.7876,-4.33935},179},{{3.63647,-6.50879,-4.34044},91},{{2.20728,-8.04883,-4.34044},175}}; + fridgePos[] = {{{-3.60547,6.22559,-4.34935},269}}; + bedPos[] = {{{-2.60498,-1.65088,-0.949348},270},{{-2.51392,-7.01904,-0.970444},90},{{-2.25952,7.11084,-0.949348},272}}; + couchPos[] = {{{-2.60498,-2.21436,-4.33935},187},{{-0.407959,-6.73047,-4.35044},94}}; + wardrobePos[] = {{{0.216064,3.9668,-0.949348},180}}; + cookerPos[] = {{{-3.6228,7.73877,-4.34935},269}}; + chairPos[] = {{{3.14673,4.25439,-4.33935},119},{{3.18701,7.4751,-0.970444},20},{{3.13452,7.49902,-4.33935},60},{{3.17065,-7.49072,-0.970444},119},{{-3.35864,-7.4707,-4.34044},220}}; + filingPos[] = {{{3.42749,-7.72949,-4.34044},121}}; + tablePos[] = {{{-0.68042,-0.654297,-4.35044},0},{{-3.53101,-3.4668,-0.970444},270},{{-3.49878,-5.11523,-4.34044},271},{{-0.356445,7.76953,-4.33935},359}}; + toolRackPos[] = {{{-2.99243,0.0361328,-4.34044},181}}; + shoeboxPos[] = {{{1.50415,-0.472656,-4.35044},207},{{-3.74072,0.48584,-4.34935},90}}; + freezerPos[] = {{{-2.49731,0.472168,-4.34935},178}}; + }; + class Land_bo_HouseV_3I4 : Default + { + shoeboxPos[] = {{{5.35449,3.04028,-2.60763},280}}; + }; + class Land_bo_Dum_mesto3 : Default + { + palletPos[] = {{{5.67578,-0.140137,-5.89724},250}}; + }; + class Land_bo_HouseV_1T : Default + { + shoeboxPos[] = {{{-4.95142,6.46045,-3.09068},130}}; + }; + class Land_bo_Ind_Stack_Big : Default + { + shelfPos[] = {{{0.137939,0.352539,-28.5862},270}}; + pelicanPos[] = {{{-2.85278,0.0292969,-23.3062},290}}; + shoeboxPos[] = {{{-1.56006,-2.29297,-28.5862},260}}; + }; + class Land_bo_Deutshe_mini : Default + { + shelfPos[] = {{{3.57666,-1.0437,-2.74453},0}}; + fridgePos[] = {{{-0.42334,-0.501709,-2.75453},90}}; + bedPos[] = {{{-3.61914,2.44849,-2.74453},89}}; + couchPos[] = {{{3.54443,0.63208,-2.75453},90}}; + wardrobePos[] = {{{-0.290039,2.47217,-2.74453},89}}; + chairPos[] = {{{0.885254,2.83154,-2.75453},310}}; + filingPos[] = {{{0.569336,-3.05029,-2.74453},259}}; + shoeboxPos[] = {{{-3.51465,-1.95581,-1.98453},209}}; + freezerPos[] = {{{-4.28613,0.733887,-2.74453},359}}; + }; + class Land_u_House_Small_01_V1_F : Default + { + fridgePos[] = {{{0.867188,4.2207,-0.931187},81.6768}}; + shelfPos[] = {{{1.16602,-1.34766,-0.929543},86.5322},{{-2.17383,1.22656,-0.930841},1.30102}}; + wardrobePos[] = {{{0.298828,-3.75586,-0.929366},164.186}}; + bedPos[] = {{{-3.52344,-2.83594,-0.931075},183.389}}; + couchPos[] = {{{2.90234,-1.70313,-0.929456},179.44}}; + cookerPos[] = {{{-1.41602,2.18359,-0.931049},180.625}}; + chairPos[] = {{{2.46484,1.8125,-0.930511},270.894},{{-4.09766,-0.542969,-0.925941},270.019},{{2.42383,3.95703,-0.931158},329.895}}; + toiletPos[] = {{{1.06445,2.18457,-0.93071},131.635}}; + }; + class Land_TTowerBig_1_F : Default + { + lootType = "mil"; + pelicanPos[] = {{{0.920898,0.00317383,2.89364},270}}; + }; + class Land_u_Addon_01_V1_F : Default + { + lootType = "workshop"; + shoeboxPos[] = {{{5.52515,0.521484,-0.014668},270}}; + palletPos[] = {{{-0.227783,0.866699,-0.0246677},270}}; + toiletPos[] = {{{5.40527,3.62695,-0.0114021},45.604}}; + }; + class Land_SlideCastle_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + shoeboxPos[] = {{{0.0908203,2.18799,-1.94149},193}}; + palletPos[] = {{{-0.841309,-3.05469,-10},193}}; + }; + class Land_Shed_Big_F : Default + { + lootType = "industrial"; + palletPos[] = {{{6.66553,4.03369,-10},177},{{-7.18652,-10.4651,-10},177},{{-5.99561,11.2573,-10},177}}; + }; + class Land_Radar_F : Default + { + lootType = "mil"; + pelicanPos[] = {{{9.36694,4.97949,-4.86368},247}}; + shoeboxPos[] = {{{-9.92847,-8.72461,-4.86368},44}}; + }; + class Land_ReservoirTower_F : Default + { + lootType = "industrial"; + pelicanPos[] = {{{-1.41553,1.15063,-1.81942},130}}; + shoeboxPos[] = {{{-3.8374,1.81421,-1.81942},320}}; + palletPos[] = {{{0.737793,-3.30981,-1.80942},250}}; + toiletPos[] = {{{-0.339844,1.56738,-10.1091},165.64}}; + }; + class Land_i_Stone_Shed_V2_dam_F : Default + { + tablePos[] = {{{3.07764,2.17139,0.0703425},11}}; + shoeboxPos[] = {{{-2.41211,0.305664,0.660343},11}}; + }; + class Land_Cargo_HQ_V1_ruins_F : Default + { + lootType = "mil"; + filingPos[] = {{{0.798828,-3.87012,-1.28783},250}}; + pelicanPos[] = {{{-4.96582,-4.61182,1.13217},250}}; + lockerPos[] = {{{-5.49561,-3.40796,-1.28783},270}}; + }; + class Land_Cargo_HQ_V3_derelict_F : Land_Cargo_HQ_V1_ruins_F {}; + class Land_cmp_Tower_F : Default + { + lootType = "industrial"; + palletPos[] = {{{0.0551758,1.01294,-7.64906},250}}; + toiletPos[] = {{{-2.81934,1.84961,-8.20222},89.4642}}; + }; + class Land_Crane_F : Default + { + lootType = "construction"; + pelicanPos[] = {{{-7.11475,-1.31665,5.74081},90}}; + shoeboxPos[] = {{{-6.86523,1.83765,5.74081},230}}; + }; + class Land_WIP_ruins_F : Default + { + lootType = "construction"; + shelfPos[] = {{{2.08887,-10.4897,-1.32377},180.2},{{-17.3643,-11.3889,2.47623},2}}; + pelicanPos[] = {{{16.8608,-8.03442,0.106226},266}}; + shoeboxPos[] = {{{3.64453,7.38965,0.126227},350}}; + palletPos[] = {{{15.3921,8.71045,2.38622},350},{{-21.7849,11.9456,2.45622},350}}; + }; + class Land_i_Stone_HouseBig_V2_dam_F : Default + { + lootType = "civ"; + fridgePos[] = {{{-3.23608,-3.12744,-1.70506},220}}; + bedPos[] = {{{-2.40332,0.169434,1.17494},180}}; + wardrobePos[] = {{{2.80518,-3.146,1.17494},170}}; + shoeboxPos[] = {{{-0.989014,1.07861,-0.595063},20}}; + freezerPos[] = {{{2.25952,0.718262,-1.63506},20}}; + }; + class Land_u_House_Big_02_V1_dam_F : Default + { + lootType = "civ"; + shelfPos[] = {{{3.21387,-1.56421,-2.44914},90}}; + fridgePos[] = {{{-3.24658,-3.44507,-2.44914},260}}; + couchPos[] = {{{3.49512,0.929443,-2.44234},90.0046}}; + cookerPos[] = {{{-3.28662,-1.65698,-2.44914},273}}; + chairPos[] = {{{4.87988,4.62207,-2.43914},66}}; + filingPos[] = {{{-3.41895,-0.0644531,0.940861},260},{{-3.42285,0.570068,0.940861},270}}; + pelicanPos[] = {{{4.70313,4.34985,0.870861},55}}; + tablePos[] = {{{-3.23535,2.41211,-2.43914},270},{{-3.29639,2.79614,0.940861},270}}; + lockerPos[] = {{{2.81396,0.00561523,0.940861},181}}; + toolRackPos[] = {{{-3.71387,2.81152,0.940861},270}}; + shoeboxPos[] = {{{5.19873,-0.0888672,0.940861},160}}; + }; + class Land_Cargo_HQ_V2_ruins_F : Default + { + lootType = "mil"; + shelfPos[] = {{{-5.3606,-5.2832,-1.15784},270}}; + pelicanPos[] = {{{3.18213,-3.80811,-1.30784},160}}; + }; + class Land_i_Stone_HouseSmall_V1_dam_F : Default + { + lootType = "civ"; + couchPos[] = {{{-6.25098,1.86572,-0.594842},270}}; + filingPos[] = {{{8.93213,-2.67773,-0.594842},176}}; + pelicanPos[] = {{{-8.89941,-2.2583,-0.644842},260}}; + tablePos[] = {{{-3.21045,-2.5564,-0.594842},180}}; + shoeboxPos[] = {{{1.99609,2.25684,-0.274842},320}}; + }; + class Land_i_Stone_HouseSmall_V2_dam_F : Land_i_Stone_HouseSmall_V1_dam_F {}; + class Land_i_Stone_HouseSmall_V3_dam_F : Land_i_Stone_HouseSmall_V1_dam_F {}; + class Land_cmp_Shed_dam_F : Default + { + lootType = "workshop"; + palletPos[] = {{{0.482422,-2.13721,-3.10882},329},{{-3.94287,1.30518,-3.10882},260}}; + }; + class Land_Cargo_Tower_V1_ruins_F : Default + { + lootType = "mil"; + pelicanPos[] = {{{3.30298,3.41357,-1.80046},329}}; + }; + class Land_Cargo_Tower_V3_derelict_F : Land_Cargo_Tower_V1_ruins_F {}; + class Land_dp_mainFactory_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{12.6934,-1.76367,-4.24943},359.454},{{13.9473,5.0918,-4.24943},88.7339},{{19.9414,1.03125,-7.43432},269.954},{{19.9355,-2.62891,-7.43443},271.718}}; + pelicanPos[] = {{{-2.5332,1.13477,1.24025},333.827},{{-11.8926,-2.99023,-4.39045},104.689},{{7.52734,-16.5059,-0.257848},243.576}}; + toolRackPos[] = {{{14.1328,0.527344,-4.33314},90.5367}}; + toiletPos[] = {{{12.2051,-5.15283,-4.2206},-179.019},{{12.2148,2.43311,-4.28336},-145.55}}; + }; + class Land_i_Windmill01_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + pelicanPos[] = {{{-0.910156,1.28125,-3.54742},289.979}}; + tablePos[] = {{{0.111328,-1.23047,-3.50127},181.768}}; + toiletPos[] = {{{1.53125,2.11719,-3.56387},-305.513}}; + }; + class Land_d_House_Big_01_V1_F : Default + { + lootType = "civ"; + fridgePos[] = {{{-5.62891,6.35156,-2.19721},269.825}}; + shelfPos[] = {{{-0.492188,1.82031,1.22279},163.832},{{0.046875,5.28125,-2.19721},359.157},{{2.66797,8.1875,-2.19721},122.214}}; + pelicanPos[] = {{{0.826172,0.384766,4.54293},312.651}}; + wardrobePos[] = {{{-4.50781,7.97852,1.22285},181.679}}; + bedPos[] = {{{1.57227,8.62891,1.22277},96.399}}; + couchPos[] = {{{-5.1582,3.05859,-2.28722},352.256},{{-4.88086,4.26758,1.2291},179.049},{{-4.02344,10.252,-2.19723},254.622}}; + cookerPos[] = {{{-1.58008,6.79102,-2.19759},3.80292}}; + chairPos[] = {{{-0.201172,0.566406,1.23667},21.1155},{{-5.29688,8.16406,-2.19722},259.465},{{2.27734,11.0098,1.22278},48.7725},{{-5.27539,10.9121,1.22279},288.988}}; + tablePos[] = {{{-0.554688,11.1719,-2.19723},0.0478998},{{-1.80469,11.25,1.22271},358.754}}; + toiletPos[] = {{{2.82813,0.109375,1.18097},87.8771}}; + }; + class Land_Sara_hasic_zbroj : Default + { + lootType = "workshop"; + fridgePos[] = {{{2.29688,-2.56055,-2.67931},181.134}}; + shelfPos[] = {{{-3.21436,2.60376,-2.67923},3.40094}}; + couchPos[] = {{{0.914063,1.76172,-2.67932},266.479}}; + chairPos[] = {{{6.72656,1.56543,-2.67931},88.7719}}; + filingPos[] = {{{7.02832,2.61157,-2.67928},59.8147}}; + tablePos[] = {{{6.98535,-0.0251465,-2.67932},92.6988}}; + toolRackPos[] = {{{7.46631,-1.93945,-2.67892},89.8589}}; + shoeboxPos[] = {{{-3.5083,-2.67578,-2.67946},263.378}}; + palletPos[] = {{{3.6665,-0.135742,-2.67929},42.8049}}; + freezerPos[] = {{{1.00684,-2.44629,-2.67932},171.556}}; + }; + class Land_Sara_domek_zluty : Default + { + lootType = "civ"; + fridgePos[] = {{{2.29858,3.92969,-2.46014},0.136902}}; + shelfPos[] = {{{7.44385,1.58789,-2.45992},97.2181}}; + wardrobePos[] = {{{-2.31445,-3.1958,-2.4576},90.1546}}; + bedPos[] = {{{-5.8606,-2.66113,-2.46011},272.354}}; + couchPos[] = {{{-6.51392,1.26953,-2.45143},180.056}}; + cookerPos[] = {{{4.7998,3.88477,-2.46054},0.147873}}; + chairPos[] = {{{6.95801,-0.59668,-2.45824},129.461}}; + filingPos[] = {{{-1.29907,4.00537,-2.45987},359.897}}; + tablePos[] = {{{-2.49561,3.39307,-2.45992},90.2344}}; + toolRackPos[] = {{{0.131104,4.27246,-2.45967},2.38939}}; + shoeboxPos[] = {{{4.66724,-0.834961,-2.46021},90.2617}}; + freezerPos[] = {{{2.16602,1.70801,-2.44791},269.45}}; + }; + class Land_Misc_PowerStation : Default + { + lootType = "construction"; + shelfPos[] = {{{3.3877,-0.776367,-1.29452},268.884}}; + lockerPos[] = {{{3.64697,-4.25073,-1.29468},270.752}}; + toolRackPos[] = {{{3.20557,5.78613,-1.33632},269.596}}; + shoeboxPos[] = {{{-5.59229,1.92871,-0.186357},90.4582}}; + }; + class Land_A_CraneCon : Default + { + lootType = "construction"; + pelicanPos[] = {{{-7.55273,1.50537,5.76163},28.6669}}; + }; + class Land_A_BuildingWIP : Default + { + lootType = "construction"; + limit = 6; + fridgePos[] = {{{2.03711,11.1831,-6.49124},305.356},{{-3.37573,12.2183,1.48757},305.492},{{-24.4121,7.55957,-2.55824},228.742}}; + shelfPos[] = {{{-5.80249,-5.0332,-2.55812},356.037},{{12.1133,-4.3042,-6.54318},179.13},{{-21.0371,1.47168,-6.46016},178.598}}; + pelicanPos[] = {{{-7.40625,-9.28955,-6.50476},210.36},{{-20.8247,-11.5005,5.44375},191.623},{{-24.6577,11.9438,1.45556},293.971}}; + bedPos[] = {{{-13.3503,2.34912,1.47256},91.8744}}; + couchPos[] = {{{-4.99951,-3.28564,-6.43938},90.7108},{{0.594727,9.11768,5.4154},148.196},{{7.01099,10.9351,-6.42719},225.517}}; + cookerPos[] = {{{3.14282,-10.0327,1.45506},208.035},{{-3.64502,12.6104,-2.55869},359.938}}; + chairPos[] = {{{2.41162,6.28955,5.44231},221.29},{{3.62207,-9.91504,-2.56085},177.773},{{-0.971924,11.6572,5.4412},260.795}}; + filingPos[] = {{{-10.2527,-10.1606,-6.51096},127.045},{{-16.0825,-6.36279,-6.53292},282.391},{{-19.718,-6.7124,-6.54208},87.3864}}; + tablePos[] = {{{1.70239,-3.92871,-6.48336},180.567},{{3.09351,9.49219,5.38227},48.7191},{{22.1931,1.64893,-6.55645},90.8045}}; + lockerPos[] = {{{13.3423,-1.85791,-6.54581},268.445},{{18.0183,-1.11426,-6.55955},89.6342},{{-20.8777,0.597656,-6.46828},359.864}}; + toolRackPos[] = {{{-9.04224,6.72314,-6.52912},357.538},{{-15.5667,-10.561,-2.5611},180.234},{{-15.666,-14.3716,1.45426},179.938}}; + shoeboxPos[] = {{{3.03394,7.42188,-2.55826},176.357},{{-7.98242,-10.2471,-2.56173},129.945},{{-16.2637,-5.07031,-6.53438},305.636}}; + palletPos[] = {{{5.09961,0.015625,-6.47375},270.66},{{-10.7837,-0.00585938,5.26227},0.0174896},{{-14.4409,11.9912,-6.45401},359.986},{{-24.2383,-9.16699,-2.55823},359.993}}; + freezerPos[] = {{{-15.1563,-5.16211,-2.55844},359.99},{{-24.2168,12.3633,-6.50327},0.00699433}}; + }; + class Land_A_MunicipalOffice : Default + { + lootType = "civ"; + pelicanPos[] = {{{3.55029,-5.18726,-0.195372},283.895}}; + chairPos[] = {{{4.35693,-5.59839,-18.4382},65.3313},{{-4.6333,-5.60132,-18.4559},295.001}}; + tablePos[] = {{{-3.02002,-7.53784,-18.4554},177.998}}; + shoeboxPos[] = {{{4.2832,-8.80542,-18.4554},136.305},{{6.69727,-9.01831,-3.18546},279.196}}; + }; + class Land_Ind_Pec_01 : Default + { + lootType = "industrial"; + fridgePos[] = {{{-2.46875,-0.492676,-3.98998},359.611}}; + shelfPos[] = {{{2.24902,-2.04834,-17.6013},177.989},{{-7.08789,-0.345215,-3.98975},359.84},{{5.65918,-7.55225,-17.6013},271.929},{{-7.43311,-7.98193,6.06143},181.606},{{-4.87256,-11.603,-17.6013},87.6155}}; + pelicanPos[] = {{{-4.57373,-7.05566,15.777},275.886}}; + couchPos[] = {{{-0.665527,-7.01172,-22.6032},319.689},{{5.09033,-8.23584,1.00238},267.37}}; + chairPos[] = {{{-0.938965,-1.05859,6.05994},148.592}}; + filingPos[] = {{{-1.88159,-15.1143,6.06143},274.02}}; + lockerPos[] = {{{-1.07202,-15.2251,-17.6016},178.66},{{2.56372,-15.189,-4.00633},179.789}}; + toolRackPos[] = {{{-4.23755,-9.12012,-22.6029},181.414},{{0.57666,-15.625,1.00255},179.995}}; + shoeboxPos[] = {{{-4.63867,-7.03174,10.4987},320.834},{{0.787842,-9.5957,-14.8937},85.2537}}; + }; + class Land_Ind_SiloVelke_01 : Default + { + lootType = "industrial"; + shelfPos[] = {{{0.950195,-2.19312,-5.47868},269.46},{{1.01416,5.71167,11.865},268.444},{{-11.5195,2.36597,11.865},357.551}}; + pelicanPos[] = {{{1.54297,-3.29761,24.2848},69.2792}}; + filingPos[] = {{{0.224121,-0.709229,11.8648},98.1473}}; + lockerPos[] = {{{-5.82715,3.93359,11.8648},359.3}}; + toolRackPos[] = {{{0.811523,5.54248,-5.47879},272.599}}; + shoeboxPos[] = {{{-5.8335,9.96069,21.9903},115.472}}; + }; + class Land_Ind_Expedice_1 : Default + { + lootType = "industrial"; + shelfPos[] = {{{1.92285,-0.303223,-5.71009},178.232},{{0.276855,12.5483,-3.51293},203.944}}; + pelicanPos[] = {{{-0.432617,10.3877,9.68375},299.993},{{5.82813,-18.415,-5.78366},292.046}}; + chairPos[] = {{{9.70801,-12.1228,-5.78367},325.934}}; + filingPos[] = {{{5.53857,-16.9548,-5.78365},270.844}}; + tablePos[] = {{{13.5181,-12.0178,-5.78368},4.86572}}; + lockerPos[] = {{{3.24707,-0.168457,-12.9662},180.509}}; + toolRackPos[] = {{{-2.06592,-0.598389,-12.9654},180.956}}; + shoeboxPos[] = {{{-8.35303,-7.32837,-3.51317},29.0581}}; + palletPos[] = {{{2.58789,-6.03125,-3.51315},"1.43912e-005"},{{0.29248,-18.708,-3.51315},"1.43571e-005"}}; + }; + class Land_Repair_center : Default + { + lootType = "workshop"; + shelfPos[] = {{{-2.13965,2.55408,-1.55488},88.8949}}; + }; + class Land_Church_01 : Default + { + lootType = "church"; + GroundSpawnChance = 80; + chairPos[] = {{{-6.88208,0.851563,-4.24353},6.01111}}; + }; + class Land_NAV_Lighthouse2 : Default + { + lootType = "civ"; + shoeboxPos[] = {{{-0.019043,1.00098,2.39268},0.452068}}; + }; + class Land_A_Castle_Gate : Default + { + lootType = "civ"; + fridgePos[] = {{{7.84082,4.31982,-2.93036},21.3658}}; + bedPos[] = {{{7.11719,0.841797,-2.94727},93.608}}; + cookerPos[] = {{{4.0166,4.29834,-2.97534},0.0874265}}; + chairPos[] = {{{4.8916,-3.36182,-2.96021},149.004}}; + filingPos[] = {{{3.54395,-3.67285,-2.97525},177.859}}; + tablePos[] = {{{5.6875,4.36865,-2.9592},0}}; + toolRackPos[] = {{{3.1123,0.0239258,-2.97498},273.35}}; + }; + class Land_A_Castle_Donjon : Default + { + lootType = "civ"; + pelicanPos[] = {{{2.69727,-2.01953,12.4763},148.853}}; + tablePos[] = {{{-1.54395,5.67383,12.4445},0.407131}}; + }; + class Land_A_Castle_Stairs_A : Default + { + lootType = "civ"; + shelfPos[] = {{{6.63232,2.28223,0.998962},356.642}}; + }; + class Land_Ind_Quarry : Default + { + lootType = "construction"; + fridgePos[] = {{{-3.92188,-16.6865,-7.50379},222.564}}; + shelfPos[] = {{{-5.69775,-2.96875,-7.5061},89.9894},{{-0.436035,-9.52051,-7.50609},358.647},{{-4.89355,-8.41016,5.26832},178.014}}; + pelicanPos[] = {{{-5.05762,-3.05859,5.26825},270.152}}; + bedPos[] = {{{1.77393,-13.1133,-7.49595},252.259}}; + couchPos[] = {{{1.89893,-10.4531,-7.45486},270.008}}; + cookerPos[] = {{{-1.72217,-16.9697,-7.50663},173.088}}; + chairPos[] = {{{-6.30176,-7.69727,-7.50632},152.678}}; + filingPos[] = {{{-3.79004,-8.23633,5.26811},173.701}}; + tablePos[] = {{{-3.25244,-9.7373,-7.48993},0.00806808}}; + lockerPos[] = {{{-6.44287,11.9883,-7.50632},358.505}}; + toolRackPos[] = {{{-5.43994,-4.68066,-7.50566},88.4867}}; + shoeboxPos[] = {{{-3.70996,15.8828,5.26807},106.559}}; + }; + class Land_Barrack2 : Default + { + lootType = "mil"; + shelfPos[] = {{{-1.14063,5.67578,-0.714874},359.937}}; + pelicanPos[] = {{{0.917969,1.40234,0.507111},62.1253}}; + chairPos[] = {{{1.83398,-2.77344,-0.720093},121.012}}; + filingPos[] = {{{-0.944336,-3.10254,-0.720245},197.347}}; + shoeboxPos[] = {{{0.393555,5.52734,-0.71524},0.0174853}}; + freezerPos[] = {{{-2.02344,-3.13086,-0.720337},181.294}}; + }; + class Land_Ind_Mlyn_01 : Default + { + lootType = "industrial"; + shelfPos[] = {{{-1.02686,8.37012,-7.73514},84.5525}}; + pelicanPos[] = {{{-6.94873,2.21094,9.19446},187.886}}; + couchPos[] = {{{-7.31543,7.59277,-20.8141},0}}; + lockerPos[] = {{{-8.98828,1.93848,-2.84921},179.976}}; + toolRackPos[] = {{{-9.06104,1.60645,-8.90338},180.213}}; + shoeboxPos[] = {{{-1.24268,7.89355,0.201904},123.572}}; + palletPos[] = {{{-9.00732,8.61621,-20.8141},23.6484}}; + }; + class Land_wagon_box : Default + { + lootType = "construction"; + palletPos[] = {{{0.342285,-0.0380859,-0.80304},0},{{0.271973,2.38574,-0.80304},354.097},{{0.399414,-2.41504,-0.803101},0}}; + }; + class CampEast_EP1 : Default + { + lootType = "mil"; + shelfPos[] = {{{-1.97852,2.84473,-1.35312},308.338},{{-1.98438,-3.44043,-1.35312},205.956}}; + pelicanPos[] = {{{-2.32422,0.889648,-1.35324},274.054}}; + bedPos[] = {{{1.50342,1.74512,-1.35336},6.52914},{{1.42969,-2.29004,-1.35336},0.577024}}; + shoeboxPos[] = {{{2.55762,-0.0185547,-1.35336},78.3071}}; + }; + class Land_Barrack2_EP1 : Default + { + lootType = "mil"; + fridgePos[] = {{{1.29102,-3.15332,-0.720306},178.283}}; + shelfPos[] = {{{-0.526855,5.5127,-0.714996},357.779}}; + pelicanPos[] = {{{1.26465,3.2002,-0.319916},355.705}}; + chairPos[] = {{{-2.10107,-2.88477,-0.720154},187.124}}; + filingPos[] = {{{-1.48193,5.50488,-0.715179},359.955}}; + tablePos[] = {{{-2.27539,3.22363,-0.716583},274.247}}; + shoeboxPos[] = {{{2.25586,0.362305,-0.0941467},29.4483}}; + }; + class Land_Hlidac_Budka_EP1 : Default + { + lootType = "mil"; + shelfPos[] = {{{1.20264,0.0732422,-0.809814},179.636}}; + filingPos[] = {{{2.69629,2.27246,-0.809937},21.4708}}; + tablePos[] = {{{-2.5376,1.29883,-0.810028},271.096}}; + toolRackPos[] = {{{2.77783,0.842773,-0.799316},82.7987}}; + shoeboxPos[] = {{{1.61768,2.3584,-0.810059},356.431}}; + }; + class Land_HouseV_2L : Default + { + lootType = "civ"; + shelfPos[] = {{{4.29199,2.60913,-3.95322},7.9453}}; + filingPos[] = {{{4.08594,1.27734,-3.9534},243.743}}; + shoeboxPos[] = {{{-3.90137,-3.46313,-4.01404},65.2182}}; + freezerPos[] = {{{-5.02051,-0.899658,-4.10532},87.6906}}; + }; + class Land_Shed_M02 : Default + { + lootType = "civ"; + shoeboxPos[] = {{{1.05371,0.0397949,-1.03354},83.8544}}; + palletPos[] = {{{-0.0595703,-2.57153,-10},122.62}}; + }; + class ferrisWheel_EPOCH : Default + { + lootType = "civ"; + palletPos[] = {{{2,2,-10},322.16},{{-2,-2,-10},232.16}}; + shoeboxPos[] = {{{-3.33862,-0.988281,-10},312.382}}; + pelicanPos[] = {{{-0.840332,1.09473,-10},269.861}}; + }; + class Carnival_Tent : Default + { + lootType = "mil"; + limit = 1; + shelfPos[] = {{{-1,-1,-10},178.014}}; + chairPos[] = {{{1,1,-10},152.678}}; + filingPos[] = {{{-1,0,-10},173.701}}; + tablePos[] = {{{0,0,-10},120.893}}; + shoeboxPos[] = {{{0,1,-10},106.559}}; + palletPos[] = {{{1,0,-10},322.16}}; + }; + class Land_Majak_v_celku : Default + { + lootType = "market"; + pelicanPos[] = {{{0.640625,-5.32837,3.73342},87}}; + shoeboxPos[] = {{{0.935059,-6.73767,-6.0666},168}}; + }; + class Land_Kamenolom_budova : Default + { + lootType = "industrial"; + lockerPos[] = {{{5.28259,8.6792,-7.4996},270}}; + toolRackPos[] = {{{4.55896,5.77637,-7.4996},270}}; + shoeboxPos[] = {{{-5.70508,11.5742,-7.4996},294}}; + palletPos[] = {{{-7.30725,-6.28027,-7.4996},294},{{-0.434082,-13.2734,-7.5096},294}}; + }; + class Land_pila : Default + { + lootType = "construction"; + palletPos[] = {{{4.11987,-10.7354,-10},358}}; + }; + class Land_vez_ropa : Default + { + lootType = "industrial"; + shoeboxPos[] = {{{1.22119,-3.17627,-2.08988},40}}; + }; + class Land_Telek1 : Default + { + lootType = "mil"; + pelicanPos[] = {{{-1.76807,0.981689,-7.46783},294}}; + }; + class Land_Hut02 : Default + { + lootType = "civ"; + couchPos[] = {{{-0.0549316,2.4751,-0.375967},269}}; + chairPos[] = {{{-0.932617,-1.18945,-0.375967},224}}; + shoeboxPos[] = {{{1.15332,0.0302734,1.73403},224}}; + }; + class Land_Hotel : Default + { + lootType = "market"; + shelfPos[] = {{{1.78857,13.251,-7.75587},270},{{1.77783,15.3574,-7.75587},270},{{-10.7646,-15.3672,-0.742306},90}}; + fridgePos[] = {{{5.14795,18.9282,-7.75587},0}}; + bedPos[] = {{{2.94043,-11.6416,-4.28587},270},{{-11.6963,-3.02222,2.7677},0},{{12.1147,2.66748,2.7377},92},{{-12.1445,-2.65576,-0.742306},273},{{-17.7935,-2.72681,-4.28587},270},{{11.6216,17.6189,-0.742306},183},{{18.0103,-11.6978,2.7677},272}}; + couchPos[] = {{{6.25146,12.9585,-7.75587},0},{{-14.5313,-9.24268,2.7377},92},{{-3.47803,17.551,-0.742306},303},{{11.7266,-14.7947,-4.28587},180},{{5.41016,-18.1577,2.7377},92},{{15.5991,11.7637,2.7377},92},{{-18.0391,17.2517,-4.28587},180}}; + wardrobePos[] = {{{-12.8257,-10.0503,-0.742306},183},{{-18.6489,-2.33789,2.7377},282},{{-11.0015,16.1484,-4.28587},90},{{11.1978,18.6038,-4.28587},290}}; + cookerPos[] = {{{3.78174,18.8879,-7.75587},0}}; + chairPos[] = {{{-11.2607,-14.3667,2.7677},73},{{9.86719,-16.175,-4.28587},91},{{11.1006,16.4072,-4.28587},270},{{8.30811,18.6084,-7.75587},300},{{-9.76025,18.7568,-7.75587},360},{{-11.2051,-18.6255,2.7677},120},{{-18.4653,18.6245,-0.742306},303},{{18.6274,-18.6675,2.7377},120},{{-18.6543,-18.6777,-7.75587},202}}; + filingPos[] = {{{1.1377,0.964355,-4.26587},9.99995},{{0.185059,7.87598,-7.75587},185},{{1.1377,7.90283,-7.75587},180},{{-10.9829,-10.9436,2.7677},87},{{-11.0068,-18.8669,-0.742306},100}}; + pelicanPos[] = {{{-20.3799,-2.55322,2.7677},57}}; + tablePos[] = {{{-4.00488,-1.45679,-0.76231},90},{{2.76025,-11.2229,2.7377},350},{{14.6807,-11.0496,-4.28587},0.999985},{{18.7944,2.63403,-0.742306},91},{{-11.0342,-16.4497,2.7677},90},{{-7.66748,18.8062,-7.75587},360},{{-15.6953,-18.8101,-7.75587},180},{{-18.2217,-18.6624,-0.742306},190}}; + lockerPos[] = {{{1.95264,6.45093,6.23771},270},{{7.01807,6.5083,6.23771},90}}; + toolRackPos[] = {{{1.55713,3.32617,6.23771},270}}; + shoeboxPos[] = {{{10.9087,-10.8728,-4.26587},0.999985},{{-11.0386,-11.0518,-0.742306},100}}; + palletPos[] = {{{2.59766,0.134766,-7.75587},180},{{1.56494,8.67944,6.23771},268},{{0.20459,-9.94043,6.23771},294},{{-16.0659,-13.0327,6.23771},224}}; + freezerPos[] = {{{2.11768,6.72607,-7.75587},270}}; + cabinetPos[] = {{{7.31738,1.42627,-6.15587},180},{{4.14453,7.32031,0.657692},90}}; + }; + class Land_Hut01 : Default + { + lootType = "civ"; + bedPos[] = {{{-0.136719,1.94006,-0.456257},184}}; + tablePos[] = {{{-0.213867,-1.56018,-0.456257},180}}; + }; + class Land_Hut04 : Default + { + lootType = "civ"; + chairPos[] = {{{-1.01709,-1.63196,-0.44096},190}}; + toolRackPos[] = {{{1.63916,0.498535,-1.33096},270}}; + shoeboxPos[] = {{{1.31445,3.20374,-0.44096},30}}; + palletPos[] = {{{-3.30371,-1.28149,-10},180}}; + freezerPos[] = {{{-0.919922,2.90234,-0.44096},350}}; + }; + class Land_Kostel_mexico : Default + { + lootType = "church"; + GroundSpawnChance = 80; + chairPos[] = {{{-6.86377,-7.20459,-2.7923},200}}; + pelicanPos[] = {{{6.55908,-4.72803,-2.7923},9.99996}}; + tablePos[] = {{{-6.50439,-4.60132,-2.7923},359}}; + shoeboxPos[] = {{{4.07666,-7.46338,-2.7923},9.99996}}; + }; + class Land_Watertower1 : Default + { + lootType = "construction"; + shoeboxPos[] = {{{-7.45605,1.86682,5.2103},101.7}}; + }; + class Land_Army_hut3_long : Default + { + lootType = "mil"; + shelfPos[] = {{{-3.35315,-4.39209,-1.27432},271}}; + filingPos[] = {{{1.96436,-3.27832,-1.27432},34}}; + pelicanPos[] = {{{0.996826,4.99609,-0.914318},9.99997}}; + lockerPos[] = {{{1.09717,-2.47021,-1.27432},181}}; + toolRackPos[] = {{{0.157471,1.62988,-1.61432},4}}; + shoeboxPos[] = {{{-3.00354,-1.61279,-0.0743189},260}}; + }; + class Land_Garaz_s_tankem : Default + { + lootType = "mil"; + pelicanPos[] = {{{3.15186,4.26843,-1.70066},329}}; + toolRackPos[] = {{{6.14355,5.57983,-2.70066},359}}; + palletPos[] = {{{-3.16113,4.19702,-2.50066},181},{{5.40088,1.94946,-2.50066},181},{{-6.79199,3.48682,-2.50066},181}}; + cabinetPos[] = {{{2.14697,2.5321,-1.47066},360}}; + }; + class Land_Ammostore2 : Default + { + lootType = "mil"; + shelfPos[] = {{{2.84912,1.64783,-2.42861},90}}; + palletPos[] = {{{-1.95752,1.25012,-2.42861},359}}; + }; + class Land_Vysilac_budova : Default + { + lootType = "market"; + shelfPos[] = {{{-2.104,-4.41748,-6.5729},270},{{5.21436,-5.04321,0.417093},182},{{-8.69434,8.19604,-6.5929},359},{{-1.92578,15.3926,-6.58291},0},{{9.07471,-13.5862,-3.0929},180}}; + fridgePos[] = {{{-11.7583,-8.78931,-3.09291},268}}; + bedPos[] = {{{-0.967285,-6.52271,0.427094},272},{{-7.28223,-12.6365,-3.0929},100}}; + couchPos[] = {{{-0.827637,-3.43579,-3.09291},169},{{-1.39453,-6.76685,-3.09291},280},{{-8.00391,-11.429,0.427094},182}}; + wardrobePos[] = {{{0.20459,-12.4326,-3.09291},89}}; + cookerPos[] = {{{-11.6777,-6.63428,-3.09292},272}}; + chairPos[] = {{{-1.50977,0.173096,0.417093},302},{{-1.59326,-4.58447,0.427094},232},{{-5.96924,-8.75244,-6.5729},170},{{-9.95166,-8.39478,-6.5729},220},{{13.5186,-13.0178,-3.09292},120},{{15.2505,-13.1157,-6.58291},240}}; + filingPos[] = {{{-0.894043,0.622803,-6.5729},0},{{1.16455,-11.3594,0.417093},282},{{1.06055,-13.498,0.417093},262}}; + pelicanPos[] = {{{13.4917,14.0208,3.93709},100}}; + tablePos[] = {{{-1.76367,-2.21191,0.417093},272},{{6.23633,3.8894,-6.5729},90},{{6.21191,6.96362,-3.09291},90},{{-10.2241,-5.08301,-6.5729},270},{{-5.21729,-13.3079,0.427094},182}}; + lockerPos[] = {{{7.87207,15.2065,-6.58291},0}}; + toolRackPos[] = {{{1.13232,11.9448,-6.5929},270}}; + shoeboxPos[] = {{{-1.19873,1.65063,-3.45291},150},{{-0.467773,-2.51709,-5.9529},107},{{-7.01758,-5.84106,-2.4929},340}}; + palletPos[] = {{{8.2959,-3.53076,-6.58291},350},{{-7.6123,-12.1265,3.93709},70},{{-7.8208,14.1892,3.93709},70}}; + freezerPos[] = {{{5.76318,10.9131,-6.58291},170}}; + cabinetPos[] = {{{-4.88965,9.68774,-4.9529},0},{{12.0303,13.3145,-1.58291},270}}; + }; + class Land_Army_hut_int : Default + { + lootType = "mil"; + filingPos[] = {{{-2.10864,-4.15771,-1.32744},0}}; + pelicanPos[] = {{{2.05151,-1.40674,-0.157444},14.2}}; + lockerPos[] = {{{3.01929,-5.78467,-1.32744},90}}; + shoeboxPos[] = {{{-1.70337,0.552734,-1.32744},320}}; + cabinetPos[] = {{{3.38306,-2.79785,0.0725565},180}}; + }; + class Land_Ss_hangard : Default + { + lootType = "mil"; + shelfPos[] = {{{7.96484,23.6194,-5.85834},360},{{13.9126,-21.1853,-5.86834},180}}; + lockerPos[] = {{{-9.27832,23.4492,-5.85834},360}}; + palletPos[] = {{{12.5146,-0.696777,-5.85834},270},{{-13.4209,10.2603,-5.85834},90}}; + cabinetPos[] = {{{-13.562,-21.281,-4.40834},270}}; + }; + class Land_Army_hut2 : Default + { + lootType = "mil"; + couchPos[] = {{{-0.26416,-4.94482,-1.32744},270}}; + filingPos[] = {{{3.11523,-6.30835,-1.32744},180}}; + pelicanPos[] = {{{-1.24707,0.845947,-0.147443},340}}; + toolRackPos[] = {{{3.4707,-2.63574,-1.32744},90}}; + }; + class Land_Letistni_hala : Default + { + lootType = "mil"; + pelicanPos[] = {{{-0.218994,-0.153809,-1.67213},130}}; + shoeboxPos[] = {{{1.33838,-4.40283,-8.27213},290}}; + palletPos[] = {{{4.95361,6.68408,-8.27213},270}}; + }; + class Land_Army_hut3_long_int : Default + { + lootType = "mil"; + shelfPos[] = {{{-0.243164,-2.62061,-1.23305},180},{{-3.44531,-4.89258,-1.23305},270}}; + filingPos[] = {{{0.609375,-3.22754,-1.23305},0.0999832},{{1.30493,-3.27246,-1.23305},20.1}}; + pelicanPos[] = {{{-0.883057,0.716797,-0.303053},356}}; + shoeboxPos[] = {{{1.74292,5.30566,-0.823053},20}}; + cabinetPos[] = {{{-3.54565,3.79199,0.066947},0}}; + }; + class Land_Vysilac_FM : Default + { + lootType = "mil"; + pelicanPos[] = {{{0.807861,-0.467285,8.35913},290}}; + }; + class Land_Dum_mesto_in : Default + { + lootType = "civ"; + shelfPos[] = {{{-3.18652,2.92676,-4.26343},180}}; + bedPos[] = {{{5.36743,-1.99609,-4.27343},6.00002},{{4.38062,4.47559,-4.27343},182}}; + couchPos[] = {{{1.6665,-2.45313,-1.27343},90},{{-4.39233,4.57129,-1.27343},270}}; + wardrobePos[] = {{{6.20532,1.30859,-4.27343},90}}; + chairPos[] = {{{-3.18335,-1.9375,-1.27343},160}}; + filingPos[] = {{{-1.00171,1.78223,-1.27343},90},{{-6.19067,0.304688,-4.27343},270}}; + tablePos[] = {{{6.05176,1.23438,-1.27343},90}}; + shoeboxPos[] = {{{-5.2439,5.36328,-4.13343},340}}; + }; + class Land_Hospital : Default + { + lootType = "mil"; + palletPos[] = {{{-2.96191,5.99878,-10},180}}; + cabinetPos[] = {{{-6.74365,5.39355,-0.194811},90}}; + }; + class Land_Army_hut2_int : Default + { + lootType = "mil"; + shelfPos[] = {{{3.22949,0.0185547,-0.945215},90}}; + filingPos[] = {{{3.07861,-1.13037,-0.945215},79},{{3.13208,-1.79688,-0.945215},89}}; + pelicanPos[] = {{{-1.51001,0.575684,-0.00521517},270}}; + cabinetPos[] = {{{-0.0717773,-0.947266,0.064785},90}}; + }; + class Land_Army_hut_storrage : Default + { + lootType = "construction"; + palletPos[] = {{{0.295654,-4.19238,-10},119}}; + }; + class Land_House_y : Default + { + lootType = "civ"; + bedPos[] = {{{-1.7063,-2.56055,-1.40579},273}}; + couchPos[] = {{{2.24292,3.52246,-1.40579},273}}; + wardrobePos[] = {{{-4.69897,-3.54785,-1.40579},210}}; + chairPos[] = {{{-4.76099,-4.80371,-1.40579},354}}; + shoeboxPos[] = {{{-2.03223,4.33154,0.00421143},50}}; + freezerPos[] = {{{-2.14355,2.76807,-1.40579},89}}; + }; + class Land_Dum_istan4_big : Default + { + lootType = "civ"; + chairPos[] = {{{6.23877,4.94141,-10.3016},180}}; + shoeboxPos[] = {{{2.96289,-2.02026,-7.35158},40}}; + }; + class Land_Afbarabizna : Default + { + lootType = "civ"; + bedPos[] = {{{5.90576,1.92358,-4.24116},280}}; + couchPos[] = {{{-2.80127,-3.64136,-4.24116},90}}; + wardrobePos[] = {{{-2.44092,2.52905,-4.24116},90}}; + filingPos[] = {{{7.34521,6.50342,-4.24116},80}}; + shoeboxPos[] = {{{5.61133,-4.43726,-0.171157},160}}; + palletPos[] = {{{-2.4292,-1.48706,-0.171157},160}}; + }; + class Land_Dum_istan2b : Default + { + lootType = "civ"; + shelfPos[] = {{{-4.30664,2.29395,-2.33272},270}}; + toolRackPos[] = {{{-0.512695,-1.37354,0.50728},0}}; + palletPos[] = {{{-2.64063,-4.08057,3.80728},210},{{-5.76074,2.11768,3.80728},175}}; + }; + class Land_Garaz_bez_tanku : Default + { + lootType = "mil"; + palletPos[] = {{{0.391602,1.3457,3.43286},319}}; + }; + class Land_Dum_istan4_detaily1 : Default + { + lootType = "civ"; + chairPos[] = {{{6.41577,4.99414,-7.29889},190}}; + }; + class Land_Dum_istan3 : Default + { + lootType = "civ"; + chairPos[] = {{{3.82861,-0.674072,0.592234},360}}; + tablePos[] = {{{-2.27588,-0.626587,0.592234},360}}; + palletPos[] = {{{9.90527,0.953369,0.592234},190}}; + }; + class Land_ZalChata : Default + { + lootType = "market"; + couchPos[] = {{{-1.87109,-2.04102,-0.545453},270}}; + tablePos[] = {{{2.46045,-1.78198,-0.545453},90}}; + }; + class Land_Hlaska : Default + { + lootType = "mil"; + pelicanPos[] = {{{-0.694336,0.777344,3.79217},310}}; + }; + class Land_Budova4 : Default + { + lootType = "mil"; + shelfPos[] = {{{-7.06836,0.593262,-1.89329},360}}; + cookerPos[] = {{{-2.40625,-1.25439,-1.89329},271}}; + chairPos[] = {{{4.11328,0.133789,-1.89329},30},{{-7.25757,1.59717,-1.89329},248}}; + filingPos[] = {{{-6.28442,0.480469,-1.89329},360}}; + tablePos[] = {{{6.11206,-2.82471,-1.89329},180}}; + }; + class Land_Sara_domek_hospoda : Default + { + lootType = "civ"; + lockerPos[] = {{{-3.9082,-2.99487,-2.75601},360}}; + palletPos[] = {{{5.21143,-4.41309,-2.75601},360}}; + }; + class Land_Dum_istan3_hromada : Default + { + lootType = "civ"; + shelfPos[] = {{{0.774414,-1.74438,-3.2448},90}}; + toolRackPos[] = {{{-0.35791,-4.48926,-3.44481},180}}; + }; + class Land_Vysilac_FM2 : Default + { + lootType = "mil"; + pelicanPos[] = {{{-0.713379,2.47485,8.35913},280}}; + }; + class Land_Dum_istan3_pumpa : Default + { + lootType = "civ"; + chairPos[] = {{{3.86157,-0.495605,1.48562},130}}; + shoeboxPos[] = {{{-2.74524,3.34277,-1.86439},280}}; + palletPos[] = {{{-1.52124,2.41992,1.48562},170}}; + freezerPos[] = {{{0.296875,1.25,1.48562},270}}; + cabinetPos[] = {{{2.3623,-1.12598,2.68562},270}}; + }; + class Land_Dum_istan2 : Default + { + lootType = "civ"; + lockerPos[] = {{{-0.614258,-1.77734,0.807278},0}}; + palletPos[] = {{{6.19629,-1.01221,0.807278},280},{{-6.34631,2.2417,3.80728},280}}; + }; + class Land_Budova5 : Default + { + lootType = "civ"; + shelfPos[] = {{{-1.78809,0.231201,-1.98003},90}}; + shoeboxPos[] = {{{-1.9873,4.33667,-1.70003},40}}; + }; + class Land_Strazni_vez : Default + { + lootType = "mil"; + filingPos[] = {{{0.351074,0.225098,1.41236},90}}; + pelicanPos[] = {{{1.96533,0.918213,-0.617641},90}}; + shoeboxPos[] = {{{-1.87012,-1.2937,2.00236},240}}; + }; + class Land_Hut_old02 : Default + { + lootType = "workshop"; + toolRackPos[] = {{{-4.69629,-3.26221,-3.04598},270}}; + shoeboxPos[] = {{{-3.69946,1.27148,-2.07598},200}}; + palletPos[] = {{{5.62891,-1.17334,-10},70},{{4.64526,-7.61523,-10},70},{{-7.48999,8.30762,-10},70}}; + }; + class Land_Cihlovej_Dum_mini : Default + { + lootType = "civ"; + chairPos[] = {{{-1.37402,2.89819,-2.87115},60}}; + filingPos[] = {{{3.11719,0.488281,-2.87115},90}}; + shoeboxPos[] = {{{2.89404,-1.75195,-1.92115},110}}; + freezerPos[] = {{{0.0629883,1.17529,-2.87115},360}}; + }; + class Land_Panelak3 : Default + { + lootType = "civ"; + limit = 6; + shelfPos[] = {{{-3.97217,-0.323242,1.84827},90},{{4.33447,-2.9873,12.6483},92.1},{{4.81592,3.16943,7.24828},180},{{-4.30518,-3.88232,-6.24173},269},{{4.30908,-4.78418,4.54827},90}}; + fridgePos[] = {{{1.94727,4.65381,-6.24173},269},{{-4.23584,3.40967,-3.55173},189},{{4.93555,3.34619,4.54827},180},{{-7.32764,4.82227,1.84827},270}}; + bedPos[] = {{{4.81494,-0.334473,1.84827},180},{{-4.84375,-0.621094,-6.24173},4},{{-4.87549,-0.545898,9.94828},3}}; + couchPos[] = {{{4.92432,-0.48584,4.54827},181},{{4.97803,-0.483398,-6.24173},179},{{-5.09277,-0.104492,-0.851727},9.99994},{{-5.12061,-0.157715,-3.55173},9.99994},{{5.17725,-0.495117,12.6483},172.1}}; + wardrobePos[] = {{{-2.27539,-3.82617,-3.55173},140}}; + cookerPos[] = {{{2.06689,5.27588,-3.55173},280},{{4.73193,3.36768,12.6483},182.1},{{-4.80322,5.31201,-0.851727},0},{{-7.2251,5.09326,9.94828},280},{{7.25342,5.28369,-6.24173},90}}; + chairPos[] = {{{4.30273,0.440918,7.24828},271},{{4.49268,-1.24609,-0.851727},250},{{-4.40381,2.28662,12.6483},72.1},{{5.6582,-1.521,7.24828},181},{{5.49365,-2.74902,-3.55173},320},{{5.65137,-2.60791,1.84827},0},{{3.94434,5.19043,-10.4017},49}}; + filingPos[] = {{{1.38623,-3.95361,1.84827},251},{{-1.54346,-3.9082,12.6483},113.1},{{-1.28711,-4.09277,-0.851727},100}}; + tablePos[] = {{{-4.31836,-0.929688,12.6483},92.1},{{4.16553,3.33887,-10.4017},89},{{-5.17139,-3.00879,1.84827},90},{{7.25635,0.77832,-0.851727},90},{{7.2876,0.630859,7.24828},90}}; + shoeboxPos[] = {{{1.24561,-2.60889,-6.24173},290},{{0.272949,-4.82959,-10.3117},159},{{5.2124,-5.4165,-0.851727},290},{{-5.24365,-5.56543,7.24828},100}}; + freezerPos[] = {{{-2.20654,5.12402,12.6483},82.1},{{4.68408,3.4917,9.94828},180},{{4.78662,3.48291,-6.24173},180},{{-5.64893,3.48193,4.54827},180},{{4.78369,5.229,-0.851727},4}}; + cabinetPos[] = {{{0.809082,-3.06104,13.8483},182.1}}; + }; + class Land_Hruzdum : Default + { + lootType = "civ"; + shelfPos[] = {{{3.03223,1.95996,1.60511},90}}; + fridgePos[] = {{{-2.85986,2.07886,-4.7049},270}}; + bedPos[] = {{{2.19727,3.07666,-1.1649},0}}; + couchPos[] = {{{1.74805,2.823,-4.7049},350}}; + tablePos[] = {{{-0.489746,-1.57056,-1.1649},180}}; + shoeboxPos[] = {{{-2.89551,0.536621,2.35511},250}}; + palletPos[] = {{{-2.15186,3.05298,1.60511},321.1}}; + }; + class Land_Dum_istan3_hromada2 : Default + { + lootType = "civ"; + shelfPos[] = {{{1.12891,-2.01318,-1.28126},91}}; + filingPos[] = {{{-0.769043,5.94043,-1.28126},0.999985}}; + toolRackPos[] = {{{6.09668,0.60791,1.98874},180}}; + shoeboxPos[] = {{{0.32666,2.89502,-4.63126},280}}; + palletPos[] = {{{-1.53711,4.94043,2.08874},158}}; + cabinetPos[] = {{{7.51807,3.43701,3.40874},178}}; + }; + class Land_Sara_Domek_sedy : Default + { + lootType = "civ"; + couchPos[] = {{{1.28503,1.28613,-2.13815},180}}; + tablePos[] = {{{-3.38293,1.57959,-2.13815},180}}; + shoeboxPos[] = {{{-4.06616,0.482422,-1.61815},80}}; + freezerPos[] = {{{4.05981,4.21094,-2.13815},360}}; + }; + class Land_Sara_domek_podhradi_1 : Default + { + lootType = "civ"; + palletPos[] = {{{6,-3.56006,-2.76341},180}}; + }; + class Land_Posed : Default + { + lootType = "mil"; + shoeboxPos[] = {{{0.740234,-0.162109,0.828706},90}}; + }; + class Land_Sara_stodola : Default + { + lootType = "workshop"; + chairPos[] = {{{-5.00146,4.23291,-2.23894},300}}; + toolRackPos[] = {{{-2.65381,-2.55664,-2.63894},180}}; + palletPos[] = {{{4.77759,3.48389,-2.23894},275}}; + }; + class Land_Benzina_schnell : Default + { + lootType = "market"; + shelfPos[] = {{{0.369141,2.5376,-2.15264},0.0300293}}; + shoeboxPos[] = {{{-1.08154,-3.79395,-2.15264},206}}; + }; + class Land_Budova3 : Default + { + lootType = "mil"; + shelfPos[] = {{{-1.59082,3.19653,-1.89183},0}}; + filingPos[] = {{{-3.70996,2.74585,-1.89183},270}}; + pelicanPos[] = {{{-1.58691,0.295898,-1.20183},265}}; + shoeboxPos[] = {{{-3.41602,-0.77124,-0.0418296},286}}; + freezerPos[] = {{{2.71191,-2.69849,-1.89183},100}}; + }; + class Land_Zastavka_jih : Default + { + lootType = "civ"; + shoeboxPos[] = {{{0.58252,1.18994,-1.22299},20}}; + }; + class Land_Dulni_bs : Default + { + lootType = "civ"; + filingPos[] = {{{3.20361,-0.208252,-1.70513},20}}; + tablePos[] = {{{-0.914063,-2.57251,-1.70513},260}}; + toolRackPos[] = {{{3.61035,1.94409,-1.70513},89.9999}}; + }; + class Land_Dum_zboreny : Default + { + lootType = "civ"; + shelfPos[] = {{{-5.97119,-5.16162,1.35662},185}}; + couchPos[] = {{{-1.97168,-3.46924,-2.32337},170}}; + chairPos[] = {{{0.477539,4.96338,-2.32337},50}}; + filingPos[] = {{{0.786621,5.375,1.35662},80}}; + toolRackPos[] = {{{2.04199,0.413086,-2.32337},0}}; + shoeboxPos[] = {{{3.07764,0.120605,1.35662},195}}; + }; + class Land_Kostelik : Default + { + lootType = "church"; + GroundSpawnChance = 80; + shoeboxPos[] = {{{0.538574,-4.71631,-5.03529},30}}; + }; + class Land_Garaz : Default + { + lootType = "workshop"; + palletPos[] = {{{-5.4248,5.82739,-10},180}}; + cabinetPos[] = {{{-7.83203,0.581055,0.0568509},180}}; + }; + class Land_Helfenburk : Default + { + lootType = "civ"; + shelfPos[] = {{{1.08789,1.6875,4.33816},0}}; + bedPos[] = {{{-3.31738,-4.37256,0.278163},180}}; + couchPos[] = {{{1.61719,-0.11084,-3.00184},350}}; + wardrobePos[] = {{{-3.83105,0.911621,-3.00184},290}}; + chairPos[] = {{{2.64014,0.952637,4.33816},60}}; + pelicanPos[] = {{{2.8418,1.2041,12.2182},50}}; + tablePos[] = {{{-4.09424,-5.14111,8.69816},266}}; + shoeboxPos[] = {{{0.806641,-5.85889,8.66816},130}}; + }; + class Land_Sara_stodola2 : Default + { + lootType = "workshop"; + toolRackPos[] = {{{-2.20386,-3.52246,-2.11083},180}}; + palletPos[] = {{{-3.30347,2.7832,-2.11083},80}}; + }; + class Land_Leseni4x : Default + { + lootType = "construction"; + shoeboxPos[] = {{{-1.26904,0.478027,2.78},340}}; + }; + class Land_Sara_zluty_statek_in : Default + { + lootType = "civ"; + fridgePos[] = {{{5.948,6.13428,-2.88701},360}}; + bedPos[] = {{{0.041748,1.02148,-2.86701},3.09999},{{-9.00073,0.931641,-2.88701},177}}; + couchPos[] = {{{-3.89038,4.39063,-2.86701},183.1}}; + cookerPos[] = {{{6.91528,6.12646,-2.88701},360}}; + chairPos[] = {{{-6.11011,5.91943,-2.88701},20}}; + tablePos[] = {{{3.51318,6.11914,-2.86701},0.0999813}}; + shoeboxPos[] = {{{8.97974,2.79785,-1.88701},130.1},{{-7.7229,6.08301,-0.837012},340}}; + }; + class Land_Dum_rasovna : Default + { + lootType = "civ"; + fridgePos[] = {{{-1.79639,-2.43652,-2.66723},267}}; + couchPos[] = {{{2.77344,3.13867,-2.72723},0}}; + wardrobePos[] = {{{0.265625,0.027832,0.232774},261}}; + cookerPos[] = {{{1.44336,-1.67871,-2.66723},360}}; + tablePos[] = {{{3.09619,-0.466797,-2.67723},170}}; + shoeboxPos[] = {{{-0.978027,-3.15723,0.942773},251}}; + }; + class Land_Deutshe_mini : Default + { + lootType = "civ"; + fridgePos[] = {{{-0.330566,-0.274902,-2.75343},90}}; + couchPos[] = {{{3.67529,1.58252,-2.75343},0}}; + cookerPos[] = {{{-4.53369,-2.98145,-2.75343},180}}; + chairPos[] = {{{0.890625,-0.0283203,-2.75343},210}}; + tablePos[] = {{{4.49951,-2.03418,-2.75343},90}}; + shoeboxPos[] = {{{-3.5293,1.8125,-2.75343},250}}; + }; + class Land_Dum_mesto2 : Default + { + lootType = "civ"; + shelfPos[] = {{{-2.41553,0.267822,-4.34935},178}}; + bedPos[] = {{{-2.0835,-1.28027,-0.949347},277}}; + couchPos[] = {{{-2.37158,-1.62183,-4.34935},260},{{1.73291,-7.04468,-0.949347},90}}; + wardrobePos[] = {{{-1.59863,-7.84033,-4.34935},180}}; + chairPos[] = {{{-3.41748,4.18042,-0.949347},230},{{-3.46094,-6.20142,-0.949347},260},{{-3.33984,-7.43237,-4.34935},210}}; + tablePos[] = {{{3.37646,-4.96851,-0.949347},90}}; + toolRackPos[] = {{{0.539063,3.61646,-4.34935},178}}; + shoeboxPos[] = {{{0.294922,3.79419,0.970652},260}}; + }; + class Land_Hospoda_mesto : Default + { + lootType = "civ"; + fridgePos[] = {{{0.446289,-6.14355,-5.18829},270}}; + shoeboxPos[] = {{{4.28125,-1.48926,-4.19829},70}}; + }; + class Land_Kulna : Default + { + lootType = "workshop"; + toolRackPos[] = {{{-1.10547,0.367188,-1.41632},270}}; + }; + class Land_Bouda2_vnitrek : Default + { + lootType = "workshop"; + shelfPos[] = {{{2.62158,-2.62305,-0.623022},180}}; + lockerPos[] = {{{-3.52686,-1.87842,-0.623022},270}}; + toolRackPos[] = {{{-2.71094,2.9502,-0.623022},360}}; + palletPos[] = {{{0.724854,0.678711,-0.623022},0}}; + }; + class Land_Ind_SawMillPen : Default + { + lootType = "construction"; + palletPos[] = {{{3.70117,2.6554,-10},270.892},{{-3.36426,-7.48914,-10},270.892},{{-3.96729,7.4613,-10},270.892}}; + }; + class Land_Shed_W4 : Default + { + lootType = "workshop"; + toolRackPos[] = {{{-1.92188,-4.54932,-1.41301},0.999992}}; + palletPos[] = {{{2.05127,-5.70166,-10},0.999992}}; + }; + class Land_HouseV_1T : Default + { + lootType = "civ"; + chairPos[] = {{{2.17749,-2.29297,-10},310}}; + shoeboxPos[] = {{{3.49792,-1.50391,-3.08958},15}}; + }; + class Land_HouseV_3I4 : Default + { + lootType = "civ"; + shoeboxPos[] = {{{5.41113,2.55908,-2.58653},243}}; + freezerPos[] = {{{-3.21484,4.77051,-10},180}}; + }; + class Land_HouseV_2I : Default + { + lootType = "civ"; + shelfPos[] = {{{-5.50256,2.2085,-3.05727},90}}; + lockerPos[] = {{{-5.73291,-4.91406,-3.05727},90}}; + shoeboxPos[] = {{{6.59167,2.9624,-10},40}}; + }; + class Land_HouseV2_03 : Default + { + lootType = "industrial"; + shelfPos[] = {{{-17.604,2.24219,-5.86916},89},{{18.0801,-0.203613,-5.48916},270}}; + chairPos[] = {{{1.61133,-8.67456,-5.57916},89}}; + toolRackPos[] = {{{-17.3164,0.101318,-6.01916},90}}; + shoeboxPos[] = {{{5.21484,10.8247,-4.66916},182}}; + palletPos[] = {{{9.96875,11.6602,-10},100}}; + freezerPos[] = {{{1.76563,9.06519,-10},89}}; + cabinetPos[] = {{{8.80811,-9.03174,-3.96916},90.2}}; + }; + class Land_Dum_olezlina : Default + { + lootType = "civ"; + couchPos[] = {{{1.20703,-5.45386,-10},272.2}}; + chairPos[] = {{{2.76367,4.53845,-10},173.2}}; + tablePos[] = {{{-1.27197,4.57642,-10},183.2}}; + }; + class Land_Ind_Expedice_2 : Default + { + lootType = "industrial"; + palletPos[] = {{{2.56006,0.650269,-10},302.2},{{-8.99365,0.00256348,-10},302.2}}; + }; + class Land_IndPipe2_bigBuild2_L : Default + { + lootType = "industrial"; + shoeboxPos[] = {{{4.82397,-1.97314,2.59579},277.3}}; + palletPos[] = {{{6.57422,2.44775,-10},335.2}}; + cabinetPos[] = {{{5.01245,1.12354,3.51578},271.2}}; + }; + class Land_IndPipe2_big_18ladder : Default + { + lootType = "industrial"; + shoeboxPos[] = {{{0.830566,-3,2.61729},278.5}}; + palletPos[] = {{{0.762207,7.46484,-10},328.5}}; + }; + class Land_Ind_Expedice_3 : Default + { + lootType = "industrial"; + shelfPos[] = {{{0.996826,-17.7642,2.20826},90}}; + toolRackPos[] = {{{6.52441,5.72363,-4.44174},91}}; + shoeboxPos[] = {{{2.94495,-5.69189,2.10826},249}}; + palletPos[] = {{{0.98584,5.7417,-10},91},{{0.0772705,-16.8579,-10},249}}; + cabinetPos[] = {{{1.297,3.94189,3.15826},271}}; + }; + class Land_houseV_2T1 : Default + { + lootType = "civ"; + chairPos[] = {{{5.18408,3.88074,-10},200}}; + tablePos[] = {{{6.86133,3.73376,-10},180}}; + freezerPos[] = {{{5.07959,-3.24548,-10},270}}; + }; + class Land_IndPipe2_bigBuild1_R : Default + { + lootType = "industrial"; + shoeboxPos[] = {{{-0.633301,3.0249,-3.68421},290}}; + }; + class Land_Misc_Cargo1Bo : Default + { + lootType = "construction"; + palletPos[] = {{{0.352051,0.725342,-1.09068},266}}; + }; + class Land_Ind_MalyKomin : Default + { + lootType = "industrial"; + pelicanPos[] = {{{-0.880371,-0.432007,-7.73271},82}}; + shoeboxPos[] = {{{1.27539,-3.78528,-16.5427},113}}; + palletPos[] = {{{0.413574,-2.14258,-20},185}}; + }; + class Land_Misc_Cargo1Ao : Default + { + lootType = "construction"; + shelfPos[] = {{{0.100098,2.87891,-1.07068},360}}; + palletPos[] = {{{-0.231934,-0.652344,-1.07068},360}}; + }; + class Land_Misc_GContainer_Big : Default + { + lootType = "construction"; + palletPos[] = {{{-2.28296,-0.679688,0.504925},21}}; + }; + class Land_HouseV_3I1 : Default + { + lootType = "civ"; + chairPos[] = {{{1.64844,-2.47266,-10},330}}; + tablePos[] = {{{3.09497,-1.99512,-10},0}}; + shoeboxPos[] = {{{5.26025,-1.45947,-2.08637},340}}; + }; + class Land_Ind_Stack_Big : Default + { + lootType = "industrial"; + pelicanPos[] = {{{-3.30188,4.6333,-6.00286},100}}; + shoeboxPos[] = {{{-3.06494,0.469727,-23.2595},320},{{2.18286,-3.10352,-28.5202},190.1}}; + palletPos[] = {{{-1.29297,-0.548828,-23.2395},177.1},{{-3.23267,-1.17725,-28.5751},360},{{3.37927,-5.10156,-28.5051},360}}; + cabinetPos[] = {{{-0.0136719,0.143066,-26.8373},360}}; + }; + class Land_Dum_mesto3 : Default + { + lootType = "civ"; + palletPos[] = {{{-5.93799,1.10693,-10},177.1}}; + }; + class Land_Sara_domek_vilka : Default + { + lootType = "civ"; + fridgePos[] = {{{-4.55078,-1.19714,-4.15991},74.1}}; + cookerPos[] = {{{-0.371094,8.04688,-4.15991},324.1}}; + chairPos[] = {{{2.96777,4.70288,-4.15991},198.1},{{4.87744,4.50684,-4.15991},168.1}}; + tablePos[] = {{{0.891113,5.02478,-4.15991},174.1}}; + }; + class Land_MBG_Killhouse_4 : Default + { + lootType = "civ"; + limit = 5; + shelfPos[] = {{{-1.86426,0.823242,-3.84317},0}}; + fridgePos[] = {{{-1.54175,2.74219,-3.84317},75}}; + bedPos[] = {{{6.84692,-0.231934,-0.543174},0},{{6.94922,2.63965,-0.543174},360}}; + couchPos[] = {{{4.47852,-1.93262,-3.84317},267},{{-4.66406,3.55176,-0.543174},70}}; + wardrobePos[] = {{{-1.86768,-0.383301,-0.543174},80}}; + cookerPos[] = {{{-1.57666,4.14941,-3.84317},107}}; + chairPos[] = {{{-6.35059,0.23584,-3.84317},320}}; + filingPos[] = {{{-6.53564,-4.59375,-3.84317},200},{{7.66919,-4.5625,-3.84317},150}}; + tablePos[] = {{{4.02075,-1.20996,-0.543174},0}}; + lockerPos[] = {{{3.56226,3.51709,-0.543174},180}}; + shoeboxPos[] = {{{-1.49121,7.00928,-0.543174},90},{{2.58643,6.9541,-3.84317},310}}; + palletPos[] = {{{4.28125,0.388672,-3.84317},310}}; + freezerPos[] = {{{-6.44043,2.08789,-3.84317},258}}; + cabinetPos[] = {{{0.553955,7.24219,0.756824},90}}; + }; + class Land_MBG_Warehouse : Default + { + lootType = "civ"; + limit = 5; + shelfPos[] = {{{-11.0225,19.5303,-6.14345},0},{{22.1719,4.58838,-6.14345},90},{{11.9806,19.5259,-6.14345},0}}; + fridgePos[] = {{{17.2281,-11.791,-2.84345},260},{{21.8842,-9.31396,-6.14345},86}}; + bedPos[] = {{{17.5864,-2.7666,-2.84345},186}}; + wardrobePos[] = {{{17.3668,-5.14063,-2.84345},276}}; + cookerPos[] = {{{17.2073,-9.18555,-2.84345},280}}; + chairPos[] = {{{17.5955,2.49854,-2.84345},350}}; + filingPos[] = {{{-19.9967,16.5771,-2.84345},190}}; + lockerPos[] = {{{15.5438,-14.3867,-6.14345},180},{{17.2855,-14.4209,-6.14345},180}}; + toolRackPos[] = {{{16.4038,-10.4146,-2.84345},90}}; + shoeboxPos[] = {{{-18.0066,19.3594,0.456551},20}}; + palletPos[] = {{{-16.0422,-5.82861,-6.14345},9.99995},{{-15.5228,-13.1655,5.15655},340},{{10.5311,18.2065,5.15655},21},{{20.4318,-12.2983,5.15655},340},{{21.3284,18.4785,-6.14345},20}}; + freezerPos[] = {{{21.8379,-9.62256,-2.84345},90}}; + cabinetPos[] = {{{14.483,-11.6313,-4.74345},360},{{-17.218,18.3833,6.65655},0}}; + }; + class Land_Nav_Boathouse : Default + { + lootType = "workshop"; + shelfPos[] = {{{-6.1333,-0.567383,3.73588},270},{{6.16504,7.45251,3.73588},90}}; + pelicanPos[] = {{{4.60059,7.36157,6.27056},20}}; + toolRackPos[] = {{{-3.38867,7.96362,3.54426},0}}; + shoeboxPos[] = {{{0.371582,4.45294,3.60588},220}}; + palletPos[] = {{{5.3042,-1.49329,3.73056},170}}; + }; + class Land_aif_tovarna1 : Default + { + lootType = "civ"; + shelfPos[] = {{{-1.34839,4.19336,-6.33},360},{{4.6626,1.58105,2.39782},91},{{4.83521,6.05713,-6.33},89.9999},{{-7.95361,4.19141,2.39782},0},{{-11.9773,-9.18115,2.39782},180}}; + chairPos[] = {{{-12.5784,6.91992,-6.33},290}}; + filingPos[] = {{{4.43481,-6.05469,2.39782},71},{{-1.50903,9.71191,-6.33},20},{{-12.8018,5.06689,-6.33},260}}; + tablePos[] = {{{3.92725,-8.85156,2.39782},180}}; + lockerPos[] = {{{-3.67261,5.09277,-6.33},180},{{-0.410156,-6.84814,2.39782},270}}; + toolRackPos[] = {{{-6.06519,-9.40869,-6.33},180}}; + shoeboxPos[] = {{{4.46411,-8.99365,-0.352262},121}}; + palletPos[] = {{{3.73242,3.20605,-6.33},71},{{-4.52393,-2.72266,5.31266},20},{{-11.7466,-5.30273,-6.33},121}}; + cabinetPos[] = {{{-3.06567,-3.39111,6.71274},0.999969}}; + }; + class Land_Ind_Workshop01_02 : Default + { + lootType = "workshop"; + shelfPos[] = {{{-0.240723,-1.29358,-1.42703},170}}; + filingPos[] = {{{1.89063,1.82556,-1.42703},90}}; + toolRackPos[] = {{{2.23242,-0.662842,-1.42837},90}}; + }; + class Land_Dum_mesto2l : Default + { + lootType = "civ"; + couchPos[] = {{{0.45459,-6.61829,-10},275}}; + freezerPos[] = {{{-5.65674,3.06665,-10},70}}; + }; + class Land_HouseV2_03B : Default + { + lootType = "civ"; + fridgePos[] = {{{0.340332,11.325,-10},149}}; + chairPos[] = {{{-0.225586,-8.89624,-5.52124},350}}; + filingPos[] = {{{-7.57422,3.46326,-5.52124},19}}; + shoeboxPos[] = {{{7.53613,1.05103,-5.52124},289}}; + }; + class Land_Ind_SawMill : Default + { + lootType = "construction"; + shelfPos[] = {{{10.2842,6.57764,-10},353}}; + toolRackPos[] = {{{-1.59766,-9.85474,-5.83539},0}}; + palletPos[] = {{{0.612305,-14.6431,-10},289},{{4.40283,16.1758,-10},259}}; + }; + class Land_MBG_Killhouse_3 : Default + { + lootType = "civ"; + shelfPos[] = {{{3.38831,-2.70947,-2.84856},180},{{-3.40912,-2.7085,-2.84856},180},{{13.5056,3.15479,0.45144},90}}; + fridgePos[] = {{{-0.447632,1.98047,-2.84856},90}}; + bedPos[] = {{{-5.17578,0.581543,0.45144},275}}; + couchPos[] = {{{3.04779,2.23096,-2.84856},90},{{4.33679,0.126953,0.45144},275}}; + cookerPos[] = {{{0.578552,-2.52734,-2.84856},260},{{-0.621399,3.98877,-2.84856},80}}; + filingPos[] = {{{-13.3195,2.1875,0.45144},260}}; + lockerPos[] = {{{13.3513,2.88525,-2.84856},89},{{-13.324,3.43848,-2.84856},270}}; + freezerPos[] = {{{5.96869,0.0795898,-2.84856},190},{{-5.85046,1.62793,-2.84856},190}}; + }; + class Land_MBG_Killhouse_2 : Default + { + lootType = "civ"; + shelfPos[] = {{{-3.25293,5.17078,0.501439},90},{{7.54932,3.19135,-2.79856},90}}; + fridgePos[] = {{{-1.98389,5.94983,-2.79856},357}}; + bedPos[] = {{{-1.12451,0.444519,-2.79856},277}}; + couchPos[] = {{{3.45459,-3.5127,0.501439},270}}; + wardrobePos[] = {{{-6.92627,-3.1778,0.501439},300}}; + chairPos[] = {{{7.12402,-3.12592,0.501439},30},{{7.06738,-5.75885,-2.79856},147}}; + filingPos[] = {{{-2.39795,-1.65131,0.501439},257},{{-3.39746,-1.62518,0.501439},100}}; + tablePos[] = {{{3.47314,-5.97021,-2.79856},177}}; + lockerPos[] = {{{-3.39404,1.32129,-2.79856},90}}; + palletPos[] = {{{-6.78174,0.646118,3.80144},260},{{6.25244,-5.08411,3.80144},260}}; + cabinetPos[] = {{{6.45557,6.23236,-1.39856},90}}; + }; + class Land_A_Castle_Wall2_30 : Default + { + lootType = "civ"; + shoeboxPos[] = {{{-0.252197,-0.444336,-4.59615},348}}; + }; + class Land_water_tank : Default + { + lootType = "market"; + shoeboxPos[] = {{{-1.70618,0.626465,-4.34336},160}}; + }; + class Land_aif_zluty_statek_in : Default + { + lootType = "civ"; + fridgePos[] = {{{6.42834,-0.214355,-2.88675},180}}; + bedPos[] = {{{0.214722,0.946289,-2.88675},7},{{-6.51392,5.06982,-2.88675},11}}; + couchPos[] = {{{-0.917725,5.39258,-2.88675},277}}; + wardrobePos[] = {{{-4.86975,4.14941,-2.88675},270}}; + cookerPos[] = {{{8.84656,-0.175293,-2.88675},180}}; + chairPos[] = {{{1.76379,-1.62109,-2.91676},330},{{6.92566,-1.49756,-2.88675},16},{{-9.55481,5.81348,-2.88675},339}}; + tablePos[] = {{{-9.10645,0.0273438,-2.88675},190}}; + shoeboxPos[] = {{{9.18103,2.82959,-1.88413},100}}; + freezerPos[] = {{{5.97412,5.8623,-2.88675},277}}; + }; + class land_mbg_brickhouse_01 : Default + { + lootType = "civ"; + fridgePos[] = {{{-1.50415,-2.7251,-3.35652},180}}; + bedPos[] = {{{4.7439,3.46289,-0.0515051},274}}; + couchPos[] = {{{-6.37341,-1.02637,-0.0515051},184}}; + wardrobePos[] = {{{5.36328,-0.435059,-0.0915051},104}}; + cookerPos[] = {{{-7.15747,-2.6709,-3.35652},180}}; + chairPos[] = {{{-6.94897,3.78711,-3.35652},310}}; + filingPos[] = {{{5.61206,-0.827637,-3.35652},100},{{5.67896,-0.322266,-3.35652},90}}; + tablePos[] = {{{-0.47644,3.92578,-0.0915051},3.99999}}; + lockerPos[] = {{{5.66077,3.6084,-3.35652},90}}; + freezerPos[] = {{{-3.35693,-2.59912,-3.35652},180}}; + }; + class Land_aif_hotel : Default + { + lootType = "civ"; + limit = 6; + shelfPos[] = {{{-2.01904,1.21753,2.74082},0},{{3.21387,-0.964844,-7.74672},180}}; + fridgePos[] = {{{2.17969,18.8186,-7.74672},350}}; + bedPos[] = {{{11.6714,3.27307,2.74082},180},{{-3.21094,11.7581,-4.25943},91},{{12.0625,2.7439,-0.759061},100},{{-17.356,11.8335,2.74082},90},{{-11.8418,-17.6592,-0.759061},9.99997}}; + couchPos[] = {{{-4.00293,11.7383,2.74082},90},{{-11.8945,-4.96594,-4.25943},358},{{2.81006,-14.7112,-4.25943},185},{{2.86279,-17.212,-0.759061},178},{{-16.9624,11.7709,-0.759061},91}}; + wardrobePos[] = {{{-11.0469,-2.44031,-0.759061},80},{{-11.0381,16.1029,-4.25943},80},{{17.4365,-11.1133,-0.759061},7.99997},{{17.4834,-11.1036,-4.25943},5},{{-15.5957,-18.9556,2.74082},190}}; + cookerPos[] = {{{3.77051,18.8491,-7.74672},0}}; + chairPos[] = {{{11.1953,2.22632,-4.25943},220},{{-18.7305,8.91199,-7.74672},270},{{11.2974,18.5051,-0.759061},290},{{11.2983,18.6306,2.74082},290},{{-11.2705,-18.6755,-4.25943},128},{{18.4297,18.5151,-7.74672},40}}; + filingPos[] = {{{-0.364258,7.89087,-7.74672},174},{{0.473145,7.89111,-7.74672},186},{{1.08936,7.90747,-7.74672},180}}; + tablePos[] = {{{-3.5752,18.6013,-0.759061},9.99997},{{15.4873,18.7865,-4.25943},0}}; + lockerPos[] = {{{2.02588,6.43848,-7.74672},270}}; + toolRackPos[] = {{{1.55762,2.55664,-7.74672},270}}; + palletPos[] = {{{-4.90234,-1.63953,6.25485},100},{{18.0205,-18.1344,6.25485},70},{{-18.3311,18.3323,6.25485},100}}; + freezerPos[] = {{{6.55957,-6.79932,-7.74672},160},{{2.08154,11.8032,-7.74672},270},{{2.0874,14.9369,-7.74672},270}}; + cabinetPos[] = {{{1.33398,0.0466309,0.840941},180},{{-3.30273,-2.18274,-6.24672},0},{{4.12891,7.32385,7.74485},90}}; + }; + class Land_Shed_M03 : Default + { + lootType = "workshop"; + palletPos[] = {{{2.21582,-0.074707,-10},70}}; + }; + class Land_Cihlovej_Dum_in : Default + { + lootType = "civ"; + bedPos[] = {{{-2.44727,-1.3855,-1.81472},183}}; + chairPos[] = {{{2.34375,2.92859,-5.27588},72}}; + filingPos[] = {{{2.63818,-2.45959,-5.27588},102}}; + tablePos[] = {{{-0.111816,1.10876,-5.27588},1},{{-0.0874023,-2.35754,-1.81472},180}}; + shoeboxPos[] = {{{2.66357,-2.33398,-0.65472},131}}; + }; + class Land_HouseV_3I3 : Default + { + lootType = "civ"; + chairPos[] = {{{4.33728,2.4126,-1.88408},165}}; + shoeboxPos[] = {{{0.844849,2.4624,-1.58408},165}}; + }; + class Land_MBG_Killhouse_1 : Default + { + lootType = "civ"; + shelfPos[] = {{{-3.85999,6.52588,-2.04856},360}}; + bedPos[] = {{{1.46289,1.53906,-2.04856},180}}; + couchPos[] = {{{-2.58972,-1.76123,-2.04856},270}}; + cookerPos[] = {{{-0.44812,0.109375,-2.04856},180}}; + filingPos[] = {{{4.38635,-0.983398,-2.04856},9.99995}}; + palletPos[] = {{{-3.6377,5.88232,1.25144},266}}; + freezerPos[] = {{{-4.15564,0.404297,-2.04856},270}}; + }; + class Land_HouseV_3I2 : Default + { + lootType = "civ"; + filingPos[] = {{{3.73364,2.27148,-1.9779},191}}; + }; + class Land_Misc_Scaffolding : Default + { + lootType = "construction"; + shoeboxPos[] = {{{-0.0925293,3.95947,0.467445},250}}; + palletPos[] = {{{0.372559,6.46924,3.4257},281}}; + }; + class Land_Sara_domek_ruina : Default + { + lootType = "civ"; + shelfPos[] = {{{3.26025,-2.89648,-1.60027},357}}; + }; + class Land_HouseBlock_C4 : Default + { + lootType = "civ"; + fridgePos[] = {{{-1.29639,5.63232,-10},173}}; + }; + class Land_HouseBlock_C5 : Default + { + lootType = "civ"; + couchPos[] = {{{1.61163,6.7124,-10},92}}; + }; + class Land_HouseBlock_B5 : Default + { + lootType = "civ"; + couchPos[] = {{{-0.353027,-7.00562,-10},272}}; + }; + class Land_House_C_4_EP1 : Default + { + lootType = "civ"; + limit = 5; + shelfPos[] = {{{-0.529297,2.29675,-0.350365},270},{{-4.1626,2.0033,-0.278609},180},{{-5.98877,0.867432,-3.48355},270}}; + bedPos[] = {{{0.202148,-5.34204,-0.278609},90}}; + couchPos[] = {{{1.88232,2.29468,-3.48355},272}}; + wardrobePos[] = {{{5.82422,1.3457,-0.350365},90}}; + chairPos[] = {{{5.37939,-4.71289,-0.239202},90}}; + filingPos[] = {{{4.87109,-3.54858,-3.48355},180},{{-5.81592,2.02771,2.79157},260},{{-5.90283,4.74585,-3.48355},350}}; + toolRackPos[] = {{{6.13086,0.193848,-3.48355},92}}; + shoeboxPos[] = {{{-2.78906,1.00488,0.419636},310}}; + palletPos[] = {{{-2.0874,-0.406494,2.80405},260}}; + freezerPos[] = {{{5.63037,-0.726318,-3.48355},92}}; + }; + class Land_HouseBlock_B3 : Default + { + lootType = "civ"; + shelfPos[] = {{{0.977112,5.03223,-6.95459},176}}; + couchPos[] = {{{-2.69189,-5.72021,-10},256}}; + }; + class Land_HouseBlock_B2 : Default + { + lootType = "civ"; + wardrobePos[] = {{{-1.12988,4.83972,-7.27931},179}}; + chairPos[] = {{{-0.0283203,-5.26733,-10},9.99996}}; + }; + class Land_HouseBlock_B6 : Default + { + lootType = "civ"; + shelfPos[] = {{{3.57837,-4.77539,-7.30174},354.38}}; + palletPos[] = {{{-4.55292,0.697754,-10},354.38}}; + }; + class Land_HouseV2_01B : Default + { + lootType = "civ"; + fridgePos[] = {{{-4.15396,-2.19238,-5.19199},354.38}}; + chairPos[] = {{{-3.01724,-2.3877,-5.19199},20}}; + shoeboxPos[] = {{{6.00101,6.36084,-5.77199},356}}; + }; + class Land_HouseBlock_C1 : Default + { + lootType = "civ"; + fridgePos[] = {{{8.41409,-7.08496,-15},342}}; + couchPos[] = {{{-2.88599,-8.50488,-15},256}}; + cookerPos[] = {{{7.3176,-7.18994,-15},9.99996}}; + }; + class Land_HouseBlock_B1 : Default + { + lootType = "civ"; + chairPos[] = {{{-5.48889,-5.64307,-10},0}}; + filingPos[] = {{{2.84558,-4.92969,-7.23419},291}}; + shoeboxPos[] = {{{-3.95349,4.85449,-7.26419},349}}; + freezerPos[] = {{{-5.5448,5.07227,-7.29419},187}}; + }; + class Land_HouseBlock_A1 : Default + { + lootType = "civ"; + shelfPos[] = {{{-5.13318,2.14697,-8.80562},270}}; + filingPos[] = {{{-2.80725,3.32373,-8.80562},20},{{-2.76782,4.09473,-8.80562},170}}; + toolRackPos[] = {{{-5.45435,-2.15137,-8.81038},272}}; + shoeboxPos[] = {{{-0.786621,4.65771,-8.68037},222}}; + palletPos[] = {{{-3.48804,0.281738,-8.81038},180}}; + freezerPos[] = {{{0.656982,5.07178,-8.73375},180}}; + }; + class Land_HouseBlock_D1 : Default + { + lootType = "civ"; + fridgePos[] = {{{-10.333,7.138,-15},70}}; + couchPos[] = {{{6.07764,2.52066,-15},100}}; + }; + class Land_MBG_GER_HUS_4 : Default + { + lootType = "civ"; + shelfPos[] = {{{2.47705,-5.36951,-3.11289},270}}; + fridgePos[] = {{{2.51025,7.40857,-3.11289},0}}; + bedPos[] = {{{-4.52637,6.51978,-0.112886},267},{{-5.04541,-6.17224,-3.11289},178},{{4.93701,-6.63196,-0.112886},90}}; + couchPos[] = {{{2.28418,2.92419,-0.112885},90},{{-3.98047,-2.4386,-0.112886},263},{{-4.67432,5.6051,-3.11289},189}}; + wardrobePos[] = {{{1.72754,-2.28699,-3.11289},91},{{2.77881,-2.23779,-0.112886},280}}; + cookerPos[] = {{{5.81836,7.35693,-3.11289},90}}; + chairPos[] = {{{1.37549,-1.72131,-0.112886},60},{{5.59082,2.48022,-0.112886},127},{{-1.70117,-7.02722,-0.112886},173}}; + filingPos[] = {{{-5.77734,-7.23535,-0.112886},183}}; + tablePos[] = {{{1.65918,-4.46375,-0.112886},90},{{-5.53223,-2.07556,-3.11289},272}}; + shoeboxPos[] = {{{2.73828,4.16235,-2.30289},330},{{1.729,-7.07275,-2.16289},251}}; + freezerPos[] = {{{3.92627,2.27722,-3.19763},180}}; + }; + class Land_HouseBlock_C3 : Default + { + lootType = "civ"; + couchPos[] = {{{8.56396,-6.36353,-10},260}}; + chairPos[] = {{{-2.9165,-5.31055,-10},30}}; + filingPos[] = {{{7.23682,-4.99268,-10},320}}; + }; + class Land_HouseBlock_A2 : Default + { + lootType = "civ"; + wardrobePos[] = {{{6.57715,-5.71594,-10},130}}; + freezerPos[] = {{{-1.35742,5.68097,-10},180}}; + }; + class Land_HouseBlock_D2 : Default + { + lootType = "civ"; + couchPos[] = {{{6.18115,2.78662,-10},100}}; + chairPos[] = {{{-10.6704,6.06445,-10},100}}; + }; + class Land_House_C_10_EP1 : Default + { + lootType = "civ"; + shelfPos[] = {{{-3.12988,-4.56921,-4.19121},180},{{3.58984,6.86169,-4.19121},90}}; + fridgePos[] = {{{-3.30225,-0.637085,-0.868872},328}}; + bedPos[] = {{{-0.0175781,4.55432,-0.868872},281.2}}; + cookerPos[] = {{{0.98877,-3.07898,-0.868872},90}}; + filingPos[] = {{{0.0551758,4.95447,-4.19121},190}}; + toolRackPos[] = {{{-1.61572,-9.6991,-4.19121},180}}; + shoeboxPos[] = {{{-3.71143,4.13989,0.0812254},281.2},{{0.360352,9.08423,-2.7312},189}}; + palletPos[] = {{{-0.626953,-1.12146,-4.16681},184},{{3.71631,2.50854,2.47196},100},{{-3.01758,6.6189,-4.16681},184}}; + freezerPos[] = {{{1.6958,7.0896,-0.868777},271}}; + cabinetPos[] = {{{3.30127,5.61597,3.77196},181}}; + }; + class Land_kolotoc : Default + { + lootType = "church"; + GroundSpawnChance = 80; + shoeboxPos[] = {{{0.141174,1.16504,-0.410941},9.99998}}; + }; + class Land_HouseBlock_C2 : Default + { + lootType = "civ"; + fridgePos[] = {{{4.46484,-5.28906,-10},30}}; + couchPos[] = {{{4.70374,5.6416,-10},266}}; + }; + class land_mbg_apartments_big_04 : Default + { + lootType = "civ"; + limit = 4; + shelfPos[] = {{{-2.9585,-0.955566,-3.19898},173},{{3.57837,-1.02734,-0.150979},180},{{3.9978,-0.992188,2.89702},180}}; + bedPos[] = {{{-9.82959,-0.0673828,-3.19898},100},{{-10.2119,0.567383,-0.177418},180}}; + couchPos[] = {{{9.37891,-0.0561523,-3.19898},93}}; + chairPos[] = {{{10.4485,-2.22705,2.89702},30},{{-10.8423,-2.11572,-3.19898},300}}; + filingPos[] = {{{-2.5603,-1.9375,-0.150979},20}}; + pelicanPos[] = {{{-3.14404,-0.0629883,2.89702},160}}; + tablePos[] = {{{6.96753,-6.00146,-0.150979},180}}; + lockerPos[] = {{{-3.50195,-1.771,2.89702},360},{{10.6287,-0.843262,-0.150979},180}}; + toolRackPos[] = {{{-3.57251,-1.24658,-0.150979},180}}; + palletPos[] = {{{-4.54199,1.99609,5.94502},30},{{10.3547,-2.42041,-3.19898},260},{{-10.3638,-2.49805,-0.150979},260}}; + freezerPos[] = {{{2.85815,0.479492,-3.19898},260}}; + cabinetPos[] = {{{1.17749,2.53955,7.44502},270}}; + }; + class Land_Misc_WaterStation : Default + { + lootType = "workshop"; + shelfPos[] = {{{0.0671387,1.83984,-10},173}}; + }; + class Land_MBG_GER_RHUS_5 : Default + { + lootType = "civ"; + fridgePos[] = {{{1.31772,0.522949,-3.36569},0}}; + bedPos[] = {{{2.74927,-3.38574,-0.46569},9.99997}}; + chairPos[] = {{{3.08368,1.9248,-0.46569},139},{{-0.0794067,-3.91016,-0.46569},140}}; + filingPos[] = {{{-2.63046,-2.81641,-0.46569},360},{{-3.14331,-2.83398,-0.46569},349}}; + tablePos[] = {{{-2.57611,1.50049,-0.46569},180}}; + shoeboxPos[] = {{{1.17273,-4.04834,-2.38569},14},{{-3.2825,3.55225,-2.43569},300}}; + palletPos[] = {{{-2.56592,0.0541992,-3.36569},89}}; + freezerPos[] = {{{3.36533,-3.0752,-3.36569},89}}; + }; + class Land_HouseV2_05 : Default + { + lootType = "civ"; + shoeboxPos[] = {{{5.45065,6.88379,-2.57005},208}}; + }; + class land_mbg_apartments_big_01 : Default + { + lootType = "civ"; + palletPos[] = {{{-3.00781,8.74561,-10},158},{{-11.1992,-8.0249,-10},158}}; + freezerPos[] = {{{10.4133,-5.31006,-10},278}}; + }; + class Land_BoatSmall_1 : Default + { + lootType = "market"; + shoeboxPos[] = {{{-1.17236,0.257324,-0.19216},278}}; + }; + class Land_Dum_zboreny_total : Default + { + lootType = "civ"; + shelfPos[] = {{{-4.31104,-3.87012,-2.10433},183}}; + fridgePos[] = {{{-6.14893,3.69727,-2.30266},291}}; + pelicanPos[] = {{{-5.89111,-1.60559,-2.22433},320}}; + shoeboxPos[] = {{{2.08301,-1.51489,-2.24266},141}}; + palletPos[] = {{{4.1582,2.13916,-2.28269},278}}; + }; + class Land_Kostel : Default + { + lootType = "church"; + GroundSpawnChance = 80; + chairPos[] = {{{0.496826,11.0215,-10},160},{{-3.49121,10.9878,-10},200}}; + pelicanPos[] = {{{2.78882,-4.64307,-0.905101},291}}; + tablePos[] = {{{5.80811,-5.58105,-7.39957},90}}; + shoeboxPos[] = {{{5.18164,-7.02002,-0.905101},141}}; + freezerPos[] = {{{-1.60376,-10.5679,-10},9.99995}}; + }; + class Land_A_Villa_EP1 : Default + { + lootType = "market"; + shelfPos[] = {{{6.8761,-2.54785,-5.06721},317},{{6.68848,-4.10059,-1.4844},225},{{-9.68689,13.8384,-1.4844},270}}; + fridgePos[] = {{{-10.4589,14.2017,-5.06718},89.9999}}; + bedPos[] = {{{-12.4541,15.0962,-1.4844},263}}; + couchPos[] = {{{-4.10706,8.29297,-1.4844},130},{{-2.86975,15.1118,-5.06721},270}}; + cookerPos[] = {{{-10.5978,15.7573,-5.06718},79.9999}}; + chairPos[] = {{{-2.91296,5.19727,-5.06721},270},{{9.38831,1.37012,-1.4844},91},{{10.135,-15.3501,-5.06721},227}}; + filingPos[] = {{{-0.554321,13.4141,-1.4844},161},{{-1.16296,13.4106,-1.4844},201}}; + pelicanPos[] = {{{0.350342,14.21,-1.4844},110}}; + tablePos[] = {{{3.46777,-2.78711,-5.06721},180}}; + toolRackPos[] = {{{11.8175,1.33936,-1.4844},0.999969}}; + shoeboxPos[] = {{{-10.5308,13.4287,-1.0444},223},{{15.6235,-12.9404,-4.57721},314.8}}; + palletPos[] = {{{7.97327,9.56689,-5.06721},3},{{2.33533,16.896,1.97029},9.99994},{{-8.78284,15.0264,-5.06721},71},{{8.40686,-15.8076,1.97029},9.99994}}; + freezerPos[] = {{{-14.0616,9.89014,-5.06721},184.8}}; + cabinetPos[] = {{{-2.94519,6.63867,0.0159225},223}}; + }; + class Land_Budova4_in : Default + { + lootType = "mil"; + shelfPos[] = {{{5.09131,-2.0423,-1.88723},271}}; + lockerPos[] = {{{3.58789,0.436401,-1.88723},0},{{-7.48047,-0.331573,-1.88723},270}}; + freezerPos[] = {{{-2.17871,-1.00378,-1.88723},270}}; + cabinetPos[] = {{{-6.87256,1.08209,-0.387228},270}}; + }; + class Land_IndPipe2_bigL_L : Default + { + lootType = "industrial"; + shoeboxPos[] = {{{2.09375,0.110107,2.35397},291}}; + palletPos[] = {{{1.0293,1.03619,-10},271}}; + }; + class Land_Ind_Pec_03 : Default + { + lootType = "industrial"; + palletPos[] = {{{6.75684,8.00562,5.76025},241},{{-0.73877,-14.9221,5.76025},241},{{-0.92041,28.9746,-10},241},{{2.30664,28.96,-10},291}}; + }; + class Land_Ind_Coltan_Main_EP1 : Default + { + lootType = "industrial"; + shelfPos[] = {{{-5.92969,5.66821,-6.33167},269},{{3.69141,-9.02808,2.36833},360}}; + fridgePos[] = {{{-1.7417,4.53882,-6.33167},159},{{1.76172,16.2727,-6.38044},269}}; + bedPos[] = {{{-8.33154,14.0818,-6.33167},279}}; + tablePos[] = {{{-10.4438,12.7136,-6.33167},269}}; + toolRackPos[] = {{{-3.88867,3.57227,-6.33167},179}}; + shoeboxPos[] = {{{-3.84863,-9.09937,2.36833},20},{{6.32129,15.4998,-3.05167},219}}; + palletPos[] = {{{-3.35986,16.3518,-6.38044},269},{{3.80371,16.7449,-6.38044},269}}; + }; + class Land_Ind_Coltan_Hopper_EP1 : Default + { + lootType = "industrial"; + palletPos[] = {{{-6.04028,2.71875,-10},20},{{-7.45544,-2.55322,-10},20}}; + }; + class Land_MBG_GER_ESTATE_2 : Default + { + lootType = "civ"; + shelfPos[] = {{{-8.05347,-1.2915,-2.13187},0},{{-7.92065,7.40771,-2.13187},0}}; + bedPos[] = {{{6.95532,2.45801,-2.13187},91}}; + wardrobePos[] = {{{8.39294,6.43848,-2.13187},91}}; + chairPos[] = {{{1.41895,6.94043,-2.13187},323},{{-3.30359,6.72803,-2.13187},330}}; + filingPos[] = {{{-0.209351,-6.71045,-2.13187},100},{{-7.52686,-6.62891,-2.13187},180}}; + tablePos[] = {{{1.20996,5.06152,-2.13187},270}}; + palletPos[] = {{{-4.97937,6.51611,-2.13187},0}}; + freezerPos[] = {{{8.04224,-2.58496,-2.13187},20}}; + cabinetPos[] = {{{3.86597,-1.06348,-0.531867},357},{{-4.22375,3.55176,-0.731866},180}}; + }; + class Land_MBG_GER_PUB_2 : Default + { + lootType = "civ"; + shelfPos[] = {{{-4.05316,-3.28418,-3.53085},360},{{6.86914,1.62793,-0.63085},92}}; + fridgePos[] = {{{1.51306,-5.58105,-0.63085},260.9},{{-4.91891,-5.62695,-3.53085},260}}; + bedPos[] = {{{0.0693359,-4.604,-0.63085},4.99999},{{-6.31366,-4.5,-0.63085},180.9}}; + wardrobePos[] = {{{-0.290039,2.05029,-0.63085},4.99999}}; + cookerPos[] = {{{1.70532,-3.36816,-0.63085},270.9},{{-0.688995,-5.6626,-3.53085},180}}; + chairPos[] = {{{-6.72855,1.85498,-0.63085},310}}; + tablePos[] = {{{-3.21643,-5.57324,-0.63085},180}}; + shoeboxPos[] = {{{1.87195,-3.60791,-2.38085},331},{{6.57855,-3.37354,0.0491495},260.9}}; + palletPos[] = {{{4.49176,4.00928,-0.63085},92}}; + freezerPos[] = {{{-2.01865,-3.68066,-3.53085},9.99996},{{6.52481,-1.96338,-0.63085},92}}; + cabinetPos[] = {{{-5.44608,-4.21289,-2.23085},180}}; + }; + class Land_Ind_Workshop01_03 : Default + { + lootType = "workshop"; + couchPos[] = {{{-4.22607,5.11304,-10},9.99994}}; + toolRackPos[] = {{{2.14209,5.14417,-10},270}}; + palletPos[] = {{{2.76123,2.96393,-10},92}}; + }; + class Land_Misc_CargoMarket1a_EP1 : Default + { + lootType = "construction"; + palletPos[] = {{{-0.335938,0.247559,-1.09225},0.999969}}; + }; + class Land_MBG_Shoothouse_1 : Default + { + lootType = "civ"; + shelfPos[] = {{{3.51654,-4.01367,-10},91},{{-6.10056,-6.15576,-10},91},{{-6.10904,8.58838,-10},91},{{2.50723,-11.3667,-10},89.9999}}; + lockerPos[] = {{{-1.94846,-3.58203,-10},270},{{4.3497,-5.66357,-10},270}}; + toolRackPos[] = {{{2.98065,-12.1196,-10},270}}; + palletPos[] = {{{2.35532,0.623047,-10},0.999969},{{7.68576,9.99707,-10},0.999969}}; + cabinetPos[] = {{{-6.87985,11.0254,0.616995},91}}; + }; + class Land_Leseni2x : Default + { + lootType = "construction"; + palletPos[] = {{{1.20996,-0.502167,2.53943},90}}; + }; + class Land_Dum_m2 : Default + { + lootType = "civ"; + couchPos[] = {{{5.08594,-1.34013,-10},187}}; + }; + class Land_HouseBlock_A1_2 : Default + { + lootType = "civ"; + tablePos[] = {{{1.74243,-5.99609,-10},358.7}}; + freezerPos[] = {{{-3.3717,4.82324,-10},178.7}}; + }; + class Land_NAV_Lighthouse : Default + { + lootType = "civ"; + pelicanPos[] = {{{0.00567627,0.585449,2.41912},358.7}}; + shoeboxPos[] = {{{-0.940475,0.0913086,2.41912},119}}; + cabinetPos[] = {{{1.13704,0.220215,3.71912},169}}; + }; + class Land_Shed_M01 : Default + { + lootType = "workshop"; + palletPos[] = {{{0.0229492,-2.33105,-10},79}}; + }; + class Land_Shed_W02 : Default + { + lootType = "workshop"; + shoeboxPos[] = {{{0.397461,1.90643,-10},27.9}}; + palletPos[] = {{{-2.88184,-1.12543,-10},78.9}}; + }; + class Land_Church_05R : Default + { + lootType = "church"; + GroundSpawnChance = 80; + shoeboxPos[] = {{{5.39331,-2.63574,-7.79367},29.2}}; + palletPos[] = {{{2.36743,1.75586,-10},29.2},{{-5.8103,-3.146,-10},29.2}}; + }; + class Land_ruin_01_PMC : Default + { + lootType = "civ"; + shelfPos[] = {{{-2.24683,-1.05225,-10},90}}; + shoeboxPos[] = {{{1.12671,-1.27295,-1.66045},211}}; + palletPos[] = {{{-2.88745,3.02246,-10},350}}; + }; + class Land_HouseBlock_A2_1 : Default + { + lootType = "civ"; + fridgePos[] = {{{6.68213,-7.26056,-10},350}}; + couchPos[] = {{{-5.15771,-8.06102,-10},280}}; + chairPos[] = {{{-3.80029,5.38539,-10},180}}; + }; + class Land_Domek_rosa : Default + { + lootType = "civ"; + shoeboxPos[] = {{{-0.412292,-0.805176,-0.559804},338}}; + palletPos[] = {{{3.70493,-1.59424,-2.9398},268}}; + }; + class Land_Bouda1 : Default + { + lootType = "civ"; + couchPos[] = {{{-0.012207,-4.4745,-10},298}}; + }; + class land_mbg_brickhouse_03 : Default + { + lootType = "civ"; + shelfPos[] = {{{-0.250488,4.27344,-3.35652},0},{{-3.31836,-2.92065,-0.0515051},180}}; + fridgePos[] = {{{-2.45117,-2.75293,-3.35652},179}}; + bedPos[] = {{{4.44482,3.44922,-0.0515051},270},{{-6.09619,3.35376,-0.0515051},275}}; + couchPos[] = {{{4.68896,1.67407,-3.35652},0}}; + wardrobePos[] = {{{5.64404,0.141113,-0.0515051},90},{{-7.18945,0.348877,-0.0515051},270}}; + cookerPos[] = {{{-1.44434,-2.646,-3.35652},170}}; + chairPos[] = {{{-6.87988,3.79102,-3.35652},320}}; + shoeboxPos[] = {{{-6.36719,-2.87378,-3.35652},120}}; + palletPos[] = {{{0.480957,-2.46802,-10},120}}; + }; + class Land_Bouda_plech : Default + { + lootType = "workshop"; + palletPos[] = {{{-2.23486,-1.0083,-10},80}}; + }; + class Land_MBG_GER_RHUS_2 : Default + { + lootType = "civ"; + shelfPos[] = {{{-2.44727,1.24646,-0.46569},180}}; + bedPos[] = {{{2.875,-3.38776,-0.46569},5}}; + wardrobePos[] = {{{-3.15674,-3.58008,-0.46569},270}}; + chairPos[] = {{{3.10596,1.67682,-3.36569},120},{{3.1084,1.76831,-0.46569},145}}; + shoeboxPos[] = {{{-3.22705,1.58398,-2.44569},110},{{1.2583,-4.16156,-2.38569},240}}; + freezerPos[] = {{{1.43359,0.449463,-3.36569},0}}; + cabinetPos[] = {{{-3.49658,-3.91425,-1.7248},0}}; + }; + class Land_MBG_GER_RHUS_1 : Default + { + lootType = "civ"; + shelfPos[] = {{{-3.42041,-4.16129,-0.46569},270}}; + bedPos[] = {{{1.7832,-3.45392,-0.46569},180}}; + couchPos[] = {{{0.847656,3.81868,-3.36569},270}}; + chairPos[] = {{{3.08789,1.7139,-0.46569},170}}; + filingPos[] = {{{-3.32471,-2.77325,-0.46569},274},{{-3.28613,-3.38286,-0.46569},267}}; + tablePos[] = {{{-2.34277,1.48091,-0.46569},180}}; + shoeboxPos[] = {{{1.2168,-4.32765,-2.37569},220}}; + palletPos[] = {{{-2.64111,-0.36882,-3.36569},270}}; + freezerPos[] = {{{1.47607,0.336472,-3.36569},360}}; + cabinetPos[] = {{{-3.50635,-3.9218,-1.76569},360}}; + }; + class Land_MBG_Garage_Single_B : Default + { + lootType = "civ"; + shelfPos[] = {{{1.33057,2.46407,-1.03965},93}}; + toolRackPos[] = {{{-0.0200195,4.94061,-1.03965},0}}; + palletPos[] = {{{0.687012,-0.168655,-1.03965},0}}; + freezerPos[] = {{{-1.0166,3.0186,-1.03965},270}}; + }; + class Land_HouseV_1I2 : Default + { + lootType = "civ"; + shoeboxPos[] = {{{0.898926,-4.11658,-2.13146},173.3}}; + palletPos[] = {{{-3.77148,2.52997,-10},93}}; + }; + class Land_aif_watertower1 : Default + { + lootType = "civ"; + shoeboxPos[] = {{{1.72733,-6.55859,5.73532},173.3}}; + palletPos[] = {{{0.909271,-3.15381,-15},173.3},{{-3.96057,2.70068,-15},133.3}}; + }; + class Land_Statek_hl_bud : Default + { + lootType = "civ"; + palletPos[] = {{{4.10547,-1.79297,-10},83.3}}; + }; + class Land_Bouda3 : Default + { + lootType = "workshop"; + toolRackPos[] = {{{-2.41064,5.97437,-1.45074},179.3}}; + palletPos[] = {{{1.45117,7.1987,-10},83.3}}; + }; + class Land_A_statue01 : Default + { + lootType = "church"; + GroundSpawnChance = 80; + shoeboxPos[] = {{{3.37878,-1.41357,-3.63275},229.3}}; + }; + class Land_Sara_domek_kovarna : Default + { + lootType = "civ"; + palletPos[] = {{{-0.236816,-2.17114,-10},229.3}}; + }; + class Land_Deutshe : Default + { + lootType = "civ"; + couchPos[] = {{{1.84131,-4.97192,-10},278.3}}; + palletPos[] = {{{3.19287,4.59619,-10},278.3}}; + }; + class Land_Mil_Barracks_L : Default + { + lootType = "mil"; + shelfPos[] = {{{4.73779,-3.8208,-10},360}}; + palletPos[] = {{{-0.483887,-5.11853,-10},278.3}}; + cabinetPos[] = {{{-5.58984,-6.97742,-0.713811},90}}; + }; + class Land_aif_strazni_vez : Default + { + lootType = "civ"; + shelfPos[] = {{{-2.6069,2.20605,1.36157},360}}; + filingPos[] = {{{0.636078,0.397461,1.37157},88}}; + pelicanPos[] = {{{-2.29019,-1.51074,2.17157},188}}; + lockerPos[] = {{{0.569702,-1.39697,1.37157},90}}; + shoeboxPos[] = {{{0.11142,2.1543,1.37157},70}}; + }; + class Land_Kostel3 : Default + { + lootType = "church"; + GroundSpawnChance = 80; + chairPos[] = {{{1.94531,-18.4124,-20},0},{{-1.82422,-18.4531,-20},0}}; + palletPos[] = {{{0.0703125,-18.7371,-20},326}}; + }; + class Land_MBG_ATC_Tower : Default + { + lootType = "civ"; + shelfPos[] = {{{3.8811,-2.78125,-16.4103},180}}; + pelicanPos[] = {{{-0.196533,-0.67041,-16.4003},155}}; + lockerPos[] = {{{-1.41992,2.0293,-16.4103},270}}; + shoeboxPos[] = {{{0.596436,0.588867,-13.8103},86}}; + }; + class Land_MBG_ATC_Base : Default + { + limit = 6; + lootType = "civ"; + shelfPos[] = {{{-4.58923,-6.30957,-1.21875},270},{{8.33435,7.93652,-1.21875},360}}; + fridgePos[] = {{{5.06311,7.65332,-1.21875},360}}; + bedPos[] = {{{-6.13977,2.90088,-1.21875},93},{{-6.40222,6.91113,-1.21875},269},{{-10.0922,2.88623,-1.21875},93},{{-10.1464,6.9502,-1.21875},272}}; + couchPos[] = {{{10.2352,0.407227,-1.21875},77},{{11.2258,-5.13721,-1.21875},360}}; + cookerPos[] = {{{1.49463,7.36963,-1.21875},299}}; + filingPos[] = {{{1.15051,-0.969238,-1.21875},260},{{0.491089,-1.79736,-1.21875},350}}; + pelicanPos[] = {{{11.3586,-2.33789,-1.21875},20}}; + tablePos[] = {{{9.22473,-5.43213,-1.21875},270}}; + lockerPos[] = {{{0.250488,5.05762,-1.21875},90},{{5.83618,-1.88135,-1.21875},360},{{7.67834,-1.85449,-1.21875},360}}; + shoeboxPos[] = {{{-11.0359,-1.89795,-1.21875},220}}; + palletPos[] = {{{-3.21484,-2.8125,-1.21875},220}}; + freezerPos[] = {{{1.43848,3.16943,-1.21875},262}}; + cabinetPos[] = {{{-8.68103,-3.24951,0.291247},180},{{-8.71667,-4.33545,0.291247},180}}; + }; + class Land_aif_hlaska : Default + { + lootType = "civ"; + pelicanPos[] = {{{0.518555,0.951172,3.77092},20}}; + shoeboxPos[] = {{{-1.21997,1.3916,3.77092},330}}; + }; + class Land_aif_kasarna_prujezd : Default + { + lootType = "civ"; + fridgePos[] = {{{-1.87207,-5.42041,-10},203}}; + couchPos[] = {{{-1.28711,0.697754,-10},180}}; + chairPos[] = {{{1.7793,-2.47705,-10},80}}; + palletPos[] = {{{1.36865,5.35986,-10},330}}; + freezerPos[] = {{{1.70557,-4.07178,-10},110}}; + }; + class Land_aif_kasarna : Default + { + lootType = "civ"; + fridgePos[] = {{{6.28735,6.86768,-10},283}}; + chairPos[] = {{{-5.68335,7.20654,-10},150}}; + }; + class Land_Mil_Barracks : Default + { + lootType = "mil"; + shelfPos[] = {{{7.75757,0.689941,-10},255}}; + lockerPos[] = {{{7.98438,-3.22949,-10},270}}; + }; + class Land_aif_heavyf : Default + { + lootType = "civ"; + shelfPos[] = {{{-2.21436,-3.38354,-10},90}}; + toolRackPos[] = {{{2.01367,-3.74207,-2.59567},270}}; + palletPos[] = {{{6.42236,-2.81116,-10},255},{{-6.47559,-3.13904,-10},255}}; + }; + class Land_aif_hotel_bio : Default + { + lootType = "civ"; + limit = 8; + shelfPos[] = {{{-0.945801,1.20837,-0.835111},360},{{-1.18018,1.21466,-4.68552},360},{{5.24561,7.17981,6.86919},359},{{1.38525,10.7076,-8.52153},92}}; + fridgePos[] = {{{2.31836,18.8252,-8.52153},360}}; + bedPos[] = {{{12.6826,3.35031,3.01475},180},{{13.3818,2.73929,-4.71196},90},{{-12.5474,15.3073,-0.835111},359},{{-12.8242,-17.3519,3.01475},0},{{-17.9902,-18.0305,-4.58552},104}}; + couchPos[] = {{{-12.8022,-5.06979,3.01475},0},{{-13.5107,-3.81348,-4.58552},350},{{17.7178,5.68661,-0.835111},150},{{17.5371,-11.7187,3.01475},270},{{18.4819,-11.9742,-4.71196},280}}; + wardrobePos[] = {{{2.34521,-12.0099,3.01475},270},{{7.23096,-14.54,-4.71196},250},{{-11.0054,15.7628,-0.835111},260},{{-20.6724,14.425,-4.58552},260},{{-17.2163,-18.4806,-0.835111},177},{{-20.6782,16.8473,3.01475},290}}; + cookerPos[] = {{{2.24365,6.91315,-8.52153},360}}; + chairPos[] = {{{2.64453,-11.3692,-0.835111},320},{{-2.65967,18.4782,3.01475},150},{{-2.66357,18.5018,-4.58552},151},{{-20.5776,-2.35571,-0.835111},320}}; + filingPos[] = {{{0.719238,7.94528,-8.52153},189},{{1.28516,7.99628,-8.52153},180}}; + tablePos[] = {{{12.3247,17.9744,-0.835111},280},{{15.5308,18.838,3.01475},0},{{17.0977,18.6219,-4.58552},9.99996}}; + lockerPos[] = {{{7.22607,18.7531,-8.52153},360}}; + toolRackPos[] = {{{4.89502,19.3153,-8.52153},0}}; + shoeboxPos[] = {{{20.4595,-21.2204,-0.80511},150}}; + palletPos[] = {{{6.34033,-3.30972,-8.52153},250},{{-2.55664,9.07071,6.86919},230},{{-18.3716,-17.1836,6.86919},230}}; + freezerPos[] = {{{4.08838,6.87418,-8.52153},360}}; + cabinetPos[] = {{{1.83887,2.11636,8.46919},359}}; + }; + class Land_HouseV2_04_interier_dam : Default + { + lootType = "civ"; + shelfPos[] = {{{-1.0961,7.00293,-5.73945},80}}; + fridgePos[] = {{{-5.70474,7.09326,-5.73945},0}}; + chairPos[] = {{{7.43518,-1.67822,-5.74071},140.1}}; + filingPos[] = {{{2.59167,2.65674,-5.73945},186},{{3.54984,2.72461,-5.73945},171}}; + tablePos[] = {{{3.34094,6.4834,-5.73945},90}}; + shoeboxPos[] = {{{4.63278,2.66064,-5.07944},210.1}}; + freezerPos[] = {{{-1.35391,3.05615,-5.73945},100}}; + }; + class Land_HouseV_2L_dam : Default + { + lootType = "civ"; + palletPos[] = {{{-4.81445,-3.99951,-10},140.1}}; + freezerPos[] = {{{4.23047,1.68066,-3.73519},275.1}}; + }; + class Land_Fort_Watchtower : Default + { + lootType = "mil"; + pelicanPos[] = {{{-0.750977,-2.12439,0.569636},272.1}}; + shoeboxPos[] = {{{1.39111,-0.204773,0.569636},40}}; + cabinetPos[] = {{{-1.53955,-3.06702,-0.911802},310}}; + }; + class Land_HouseV2_03B_dam : Default + { + lootType = "industrial"; + shoeboxPos[] = {{{7.83521,1.49268,-5.49836},300}}; + palletPos[] = {{{-9.08447,5.85425,-10},310},{{-0.0769043,11.9158,-10},300}}; + freezerPos[] = {{{-0.0297852,-8.93701,-5.49836},330}}; + }; + class Land_HouseV2_01B_dam : Default + { + lootType = "civ"; + fridgePos[] = {{{-2.76465,-3.13916,-5.18055},307}}; + shoeboxPos[] = {{{10.9111,1.31543,-5.05055},354}}; + palletPos[] = {{{-5.00537,-5.25879,-10},300}}; + }; + class Land_HouseV2_01A_dam : Default + { + lootType = "civ"; + shelfPos[] = {{{-3.57343,-3.66699,-5.61922},280}}; + fridgePos[] = {{{-2.3588,-3.0498,-5.67922},310}}; + shoeboxPos[] = {{{-0.700592,-4.10352,-5.61922},110}}; + }; + class Land_HouseV2_03_dam : Default + { + lootType = "industrial"; + fridgePos[] = {{{17.887,1.09375,-5.46772},240}}; + chairPos[] = {{{9.93018,-8.91309,-5.52772},340}}; + filingPos[] = {{{1.70801,-8.61255,-5.52772},100}}; + palletPos[] = {{{10.1631,11.6067,-10},190},{{-18.6709,1.47656,-10},100}}; + freezerPos[] = {{{0.776367,8.13965,-5.81772},190}}; + }; + class Land_Ind_Pec_02 : Default + { + lootType = "industrial"; + shelfPos[] = {{{5.99683,22.4492,-10},178}}; + palletPos[] = {{{2.5166,23.4175,-10},190},{{-3.7019,23.6973,-10},190}}; + }; + class Land_Dam_ConcP_20 : Default + { + lootType = "industrial"; + palletPos[] = {{{-0.468918,5.73633,2.20513},148}}; + }; + class Land_Kostel_trosky : Default + { + lootType = "church"; + GroundSpawnChance = 80; + tablePos[] = {{{-2.23486,11.4375,-10},288}}; + shoeboxPos[] = {{{-5.37256,0.178711,-10},238}}; + palletPos[] = {{{1.39673,11.1606,-10},148}}; + }; + class Land_HouseV_1I3 : Default + { + lootType = "civ"; + shoeboxPos[] = {{{2.06543,-0.958252,-2.29444},238}}; + palletPos[] = {{{2.80225,0.54541,-10},287}}; + }; + class Land_Slum_01_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{5.25391,1.71436,0.658049},84.7501}}; + fridgePos[] = {{{5.03906,-1.99072,0.658049},176.525}}; + bedPos[] = {{{1.07031,1.3623,0.658049},269.404}}; + couchPos[] = {{{1.93359,-1.15479,0.658049},89.0329}}; + cookerPos[] = {{{3.92383,-1.99268,0.658049},181.256}}; + chairPos[] = {{{5.05859,0.463379,0.658049},90.9162}}; + filingPos[] = {{{-0.882813,-0.362793,0.658049},267.887}}; + }; + class Land_Shed_03_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{-2.01563,-0.980957,-0.751299},269.311}}; + toolRackPos[] = {{{2.14844,2.00049,-0.751299},0.999977}}; + shoeboxPos[] = {{{0.509766,1.26611,0.0687008},45.1}}; + palletPos[] = {{{1.64063,0.697266,-0.731299},95.1}}; + }; + class Land_Slum_02_F : Default + { + lootType = "civ"; + bedPos[] = {{{1.22852,-3.61572,0.172568},90.4497}}; + couchPos[] = {{{1.55273,3.08984,0.172568},357.823}}; + chairPos[] = {{{-2.19727,4.18018,0.172568},330.547}}; + tablePos[] = {{{-2.22461,-2.31494,0.172568},270.659}}; + freezerPos[] = {{{-1.76563,-4.21729,0.172568},178.06}}; + }; + class Land_House_Native_02_F : Default + { + lootType = "civ"; + bedPos[] = {{{0.9375,1.75684,-2.37989},272.018},{{-3.10547,-1.17676,-2.39065},181.605}}; + couchPos[] = {{{-0.34375,-0.958984,-9.34442},88.1513},{{-0.556641,-1.53369,-2.39481},93.8058}}; + chairPos[] = {{{1.99609,-2.19531,-2.40153},124.93}}; + tablePos[] = {{{-2.42383,2.229,-2.38727},3.42621}}; + }; + class Land_House_Small_03_F : Default + { + lootType = "civ"; + shelfPos[] = {{{-1.22559,4.9668,-1.32402},0}}; + fridgePos[] = {{{-3.01465,-1.84375,-1.32402},173}}; + bedPos[] = {{{-3.58789,3.50586,-1.32402},360}}; + couchPos[] = {{{1.82227,1.22754,-1.33284},0}}; + wardrobePos[] = {{{-5.9375,1.37109,-1.32402},270}}; + cookerPos[] = {{{-4.34082,-1.72656,-1.32402},178}}; + chairPos[] = {{{2.62207,-1.78809,-1.33284},128}}; + filingPos[] = {{{2.71094,4.85059,-1.32402},80}}; + shoeboxPos[] = {{{-0.546875,-1.90332,-1.32402},220}}; + }; + class Land_House_Native_01_F : Default + { + lootType = "civ"; + shelfPos[] = {{{-0.728516,-2.77393,-3.09498},179.287}}; + bedPos[] = {{{0.015625,2.1377,-3.09498},267.599}}; + couchPos[] = {{{2.50391,-1.8877,-3.09498},89.2346}}; + chairPos[] = {{{-4.26367,2.45264,-3.09498},314.553},{{-4.18945,-2.64697,-3.09498},230.264}}; + tablePos[] = {{{4.14258,2.20703,-3.09498},86.9606}}; + }; + class Land_Shed_05_F : Default + { + lootType = "civ"; + shelfPos[] = {{{0.584961,-2.53516,-0.917485},179},{{2.10938,-2.5376,-0.885151},180}}; + toolRackPos[] = {{{-2.91504,0.525391,-1.18515},271}}; + shoeboxPos[] = {{{2.6543,1.2959,-0.917485},179}}; + palletPos[] = {{{-2.04883,0.546875,-0.917485},239}}; + }; + class Land_Shed_04_F : Default + { + lootType = "medical"; + shoeboxPos[] = {{{-0.276367,0.746094,-0.730756},20}}; + }; + class Land_Addon_05_F : Default + { + lootType = "workshop"; + shoeboxPos[] = {{{-2.1875,-8.24023,-1.5455},20}}; + palletPos[] = {{{3.5293,-9.71973,-10},350}}; + cabinetPos[] = {{{0.197266,8.04199,-0.245499},270}}; + }; + class Land_Shed_06_F : Default + { + lootType = "construction"; + palletPos[] = {{{0.900391,-3.4082,-10},150},{{3.21875,3.33691,-10},240}}; + }; + class Land_House_Small_04_F : Default + { + lootType = "civ"; + fridgePos[] = {{{0.599609,3.83398,-0.817202},88}}; + couchPos[] = {{{-1.0459,-3.00391,-0.879978},170}}; + wardrobePos[] = {{{2.64111,-0.519531,-0.879978},349}}; + cookerPos[] = {{{0.489746,2.70313,-0.817202},88}}; + chairPos[] = {{{-3.22803,3.57813,-0.879978},93},{{-1.81592,-5.86133,-0.879978},350}}; + filingPos[] = {{{3.86328,-0.421875,-0.817202},4.99998}}; + freezerPos[] = {{{0.489746,1.13086,-0.979978},83}}; + }; + class Land_House_Small_01_F : Default + { + lootType = "civ"; + fridgePos[] = {{{1.35645,1.26563,-0.711113},270}}; + bedPos[] = {{{-0.301758,2.41602,-0.711113},0},{{-5.28613,2.12988,-0.711113},181}}; + couchPos[] = {{{5.02441,-1.78613,-0.711113},3}}; + wardrobePos[] = {{{-3.15137,3.43164,-0.711113},0}}; + cookerPos[] = {{{1.47168,2.39844,-0.711113},274}}; + chairPos[] = {{{-5.77539,-3.21094,-0.711113},230}}; + filingPos[] = {{{1.37012,-3.65039,-0.711113},260}}; + tablePos[] = {{{-2.49512,-3.42383,-0.711113},180}}; + lockerPos[] = {{{1.37012,-2.08496,-0.711113},269}}; + shoeboxPos[] = {{{5.11621,3.51172,-0.711113},330}}; + freezerPos[] = {{{2.83594,3.32129,-0.711113},0}}; + }; + class Land_Shop_Town_04_F : Default + { + lootType = "market"; + filingPos[] = {{{-2.57227,7.74902,-2.47962},160}}; + tablePos[] = {{{-0.00585938,-5.6123,-2.43639},7.00001}}; + shoeboxPos[] = {{{3.9082,-5.51563,-2.43639},30}}; + }; + class Land_Shop_Town_01_F : Default + { + lootType = "market"; + shelfPos[] = {{{-0.230469,3.29053,-3.27726},90}}; + fridgePos[] = {{{-4.0918,5.69189,-3.27726},0}}; + couchPos[] = {{{-3.29492,-2.98584,-3.27726},180}}; + chairPos[] = {{{4.00586,-1.50049,-3.27726},60}}; + filingPos[] = {{{1.95313,-1.27393,-3.27726},340},{{2.74023,-1.27441,-3.27726},9.99994}}; + tablePos[] = {{{2.83008,-3.90283,-3.27726},180}}; + palletPos[] = {{{-3.70313,1.3208,-3.27726},190}}; + freezerPos[] = {{{-2.94531,5.59961,-3.27726},0}}; + }; + class Land_House_Small_05_F : Default + { + lootType = "civ"; + bedPos[] = {{{-2.17871,4.17773,-1.08628},270}}; + couchPos[] = {{{-2.03711,-0.123047,-1.08628},90}}; + wardrobePos[] = {{{1.28809,2.62012,-1.08628},96}}; + chairPos[] = {{{-3.27539,-2.1377,-1.08628},340}}; + }; + class Land_Slum_05_F : Default + { + lootType = "civ"; + shoeboxPos[] = {{{-0.156738,-4.78711,0.0666714},340}}; + }; + class Land_WaterTower_01_F : Default + { + lootType = "civ"; + shoeboxPos[] = {{{0.326172,0.492188,3.83657},343}}; + }; + class Land_Shed_02_F : Default + { + lootType = "market"; + shelfPos[] = {{{-1.08301,-0.931641,-0.853716},184}}; + shoeboxPos[] = {{{1.39258,-0.668945,-0.853716},134}}; + palletPos[] = {{{0.96582,1.17871,-0.853716},360}}; + freezerPos[] = {{{-1.03418,2.05859,-0.853716},360}}; + }; + class Land_House_Small_06_F : Default + { + lootType = "civ"; + shelfPos[] = {{{-1.25879,-5.12598,-1.00433},180}}; + bedPos[] = {{{1.31641,-3.91016,-1.00433},0.999985}}; + couchPos[] = {{{-2.30176,0.980469,-1.00433},270}}; + chairPos[] = {{{-0.439453,3.0625,-1.00503},170},{{-3.89941,3.2666,-1.00503},190}}; + filingPos[] = {{{-4.15234,1.86719,-1.00503},360}}; + tablePos[] = {{{-4.20703,-3.69238,-1.00433},270}}; + shoeboxPos[] = {{{1.64063,1.83301,-1.00433},310}}; + }; + class Land_Shop_Town_02_F : Default + { + lootType = "market"; + shoeboxPos[] = {{{-5.40625,6.30664,-2.15892},100}}; + palletPos[] = {{{-2.86523,-4.47754,-2.14134},100}}; + freezerPos[] = {{{1.40332,-3.96875,-2.14405},7}}; + }; + class Land_House_Small_02_F : Default + { + lootType = "civ"; + fridgePos[] = {{{-3.88184,5.76367,-0.748837},359}}; + bedPos[] = {{{-0.28125,-4.79785,-0.748837},0},{{-3.46777,-4.79102,-0.748837},180}}; + couchPos[] = {{{-0.484375,2.29688,-0.748837},0}}; + wardrobePos[] = {{{-3.2041,0.615234,-0.748837},180}}; + cookerPos[] = {{{-2.75586,5.69043,-0.748837},359}}; + tablePos[] = {{{-3.56055,-0.798828,-0.748837},350}}; + shoeboxPos[] = {{{0.357422,-0.501953,-0.748837},350}}; + freezerPos[] = {{{-0.652344,5.69824,-0.748837},1.99997}}; + }; + class Land_Shed_01_F : Default + { + lootType = "civ"; + filingPos[] = {{{1.42285,1.47559,-0.931513},350}}; + freezerPos[] = {{{-1.77344,1.41309,-0.931513},9.99995}}; + cabinetPos[] = {{{0.115234,1.83984,0.21385},90}}; + }; + class Land_Shop_Town_03_F : Default + { + lootType = "market"; + shelfPos[] = {{{0.864258,0.563477,-3.12776},0},{{2.90137,0.589844,-3.12776},0},{{-6.33594,-2.21094,-3.12776},270},{{-6.39063,-4.15137,-3.12776},270}}; + fridgePos[] = {{{5.53223,7.76563,-3.12776},0}}; + couchPos[] = {{{0.0869141,-4.16504,-3.12776},180}}; + cookerPos[] = {{{4.52539,7.6748,-3.12776},0}}; + chairPos[] = {{{-5.86816,0.150391,-3.12776},310}}; + filingPos[] = {{{2.05469,1.57422,-3.12776},180},{{2.9375,1.5293,-3.12776},160},{{-3.66406,-6.05957,-3.12776},179}}; + tablePos[] = {{{-0.3125,7.65527,-3.12776},0}}; + lockerPos[] = {{{-6.18066,6.2627,-3.12776},270}}; + toolRackPos[] = {{{0.198242,4.85742,-3.12776},180}}; + shoeboxPos[] = {{{-0.901367,-0.350586,-3.12776},350}}; + palletPos[] = {{{-2.46289,-0.205078,-3.12776},0},{{5.70898,-5.57129,-3.12776},0}}; + freezerPos[] = {{{6.17578,0.0576172,-3.12776},90}}; + cabinetPos[] = {{{-5.32715,8.04883,-1.71284},90}}; + }; + class Land_Addon_03_F : Default + { + lootType = "market"; + palletPos[] = {{{-1.4248,-6.35352,-10},129}}; + }; + class Land_MetalShelter_01_F : Default + { + lootType = "construction"; + palletPos[] = {{{1.09033,-3.78711,-10},219},{{-0.870117,5.29102,-10},129}}; + }; + class Land_MetalShelter_02_F : Default + { + lootType = "construction"; + palletPos[] = {{{3.93555,-1.65918,-10},169},{{-0.0859375,7.17285,-10},169}}; + }; + class Land_Slum_03_F : Default + { + lootType = "civ"; + shelfPos[] = {{{0.338867,6.85938,-0.651794},87}}; + fridgePos[] = {{{-0.0244141,-1.3252,-0.651794},180}}; + bedPos[] = {{{-0.658203,3.54785,-0.651794},0}}; + couchPos[] = {{{2.02246,2.97363,-0.651794},179}}; + wardrobePos[] = {{{-4.66406,6.22168,-0.651794},250}}; + cookerPos[] = {{{0.0136719,1.4209,-0.651794},78}}; + chairPos[] = {{{-4.56445,2.78223,-0.651794},220},{{5.11914,7.11035,-0.651794},60}}; + filingPos[] = {{{1.20703,-1.32129,-0.451795},178}}; + tablePos[] = {{{5.24902,1.26953,-0.651794},90}}; + shoeboxPos[] = {{{-3.74512,-1.3291,-0.651794},50}}; + freezerPos[] = {{{-1.34277,-1.23926,-0.651794},180}}; + }; + class Land_Supermarket_01_F : Default + { + lootType = "market"; + limit = 6; + shelfPos[] = {{{7.64648,9.40625,-1.50003},90},{{-5.44336,11.3174,-1.50003},270}}; + fridgePos[] = {{{7.4541,8.25293,-1.50003},90}}; + filingPos[] = {{{7.33008,2.6748,-1.50003},90},{{-5.30859,7.14551,-1.50003},180}}; + lockerPos[] = {{{7.45508,11.6025,-1.50003},90}}; + shoeboxPos[] = {{{1.94336,-0.0195313,-0.604303},70},{{-2.12598,-0.510742,-0.249176},70},{{-1.76465,6.97363,-0.954569},0},{{-0.787109,-7.65137,-0.519948},70},{{6.39746,-8.38379,-0.604303},0},{{2.74609,13.0088,-0.964099},0}}; + palletPos[] = {{{-3.33301,12.2793,-1.50003},0}}; + freezerPos[] = {{{1.66504,-2.0127,-1.50003},270},{{-5.13867,-4.80469,-1.50003},270}}; + cabinetPos[] = {{{5.44238,3.73242,-0.411002},180}}; + }; + class Land_Shop_City_04_F : Default + { + lootType = "market"; + shoeboxPos[] = {{{-0.371094,-9.38672,-3.86604},340}}; + palletPos[] = {{{8.04004,2.60254,-10},360}}; + }; + class Land_Addon_04_F : Default + { + lootType = "market"; + shelfPos[] = {{{-0.568359,-1.52441,0.313654},180}}; + fridgePos[] = {{{-1.32617,-7.26465,0.295511},180}}; + couchPos[] = {{{-2.7666,0.267578,0.313654},180}}; + cookerPos[] = {{{-3.54883,-5.06836,0.315461},270}}; + chairPos[] = {{{4.83691,-1.95801,0.313654},260},{{3.29785,-7.03223,0.295511},160},{{-5.05273,-7.73633,0.315461},90}}; + tablePos[] = {{{1.59961,-7.15234,0.295511},180}}; + shoeboxPos[] = {{{1.36914,1.98438,0.313654},210}}; + freezerPos[] = {{{-0.391602,-2.87891,0.295511},90}}; + }; + class Land_House_Big_05_F : Default + { + lootType = "civ"; + chairPos[] = {{{-4.15723,4.97559,-1.51147},160},{{-9.0625,-5.37061,-1.51147},250}}; + filingPos[] = {{{4.51758,4.67822,-1.11731},260}}; + shoeboxPos[] = {{{2.64258,-4.01025,-1.51147},250},{{-2.81543,6.1792,-1.51147},260}}; + freezerPos[] = {{{4.5791,-4.1543,-1.11731},350}}; + }; + class Land_Shop_City_07_F : Default + { + lootType = "market"; + filingPos[] = {{{0.467773,1.75781,0.0203753},187}}; + pelicanPos[] = {{{3.10742,-6.49805,3.61298},110}}; + shoeboxPos[] = {{{-4.28418,3.27246,3.61298},110},{{-2.88184,-7.625,-2.9677},7.00001}}; + palletPos[] = {{{2.91406,5.62598,-3.31962},180}}; + }; + class Land_Addon_01_F : Default + { + lootType = "civ"; + chairPos[] = {{{-0.0292969,-2.26465,-1.18165},0}}; + shoeboxPos[] = {{{-0.220703,2,-1.18165},197}}; + }; + class Land_House_Big_03_F : Default + { + lootType = "civ"; + shelfPos[] = {{{3.06348,-0.749023,-3.17077},358}}; + fridgePos[] = {{{1.45996,3.63086,-3.18166},358}}; + bedPos[] = {{{3.14551,3.02051,-0.0877934},268}}; + couchPos[] = {{{9.25977,1.07813,-3.18166},90}}; + cookerPos[] = {{{2.42676,3.52832,-3.18166},358}}; + chairPos[] = {{{2.37793,-2.84863,-0.0877924},250},{{1.91211,6.02051,-0.130716},308},{{10.9111,4.89844,-3.22091},170}}; + filingPos[] = {{{2.0166,-0.995117,-3.17077},353}}; + tablePos[] = {{{7.98242,-2.47754,-0.0877924},134},{{9.17285,3.52832,-3.18166},359}}; + toolRackPos[] = {{{1.76855,-3.7998,-3.17077},269}}; + shoeboxPos[] = {{{-6.37891,-5.76563,-0.118968},128}}; + palletPos[] = {{{6.00977,-4.7666,-3.17077},269}}; + freezerPos[] = {{{5.45313,0.272461,-3.18166},179}}; + }; + class Land_House_Big_01_F : Default + { + lootType = "civ"; + fridgePos[] = {{{0.23584,5.61719,-1.02038},360}}; + couchPos[] = {{{0.98584,0.580078,-1.02038},180}}; + wardrobePos[] = {{{7.31494,2.14844,-1.02038},93}}; + cookerPos[] = {{{1.19141,5.53125,-1.02038},360}}; + chairPos[] = {{{7.07471,-0.691406,-1.02038},136},{{-6.84961,-2.28125,-1.02038},345.9}}; + filingPos[] = {{{7.33984,5.61914,-1.02038},3}}; + tablePos[] = {{{6.8042,-2.19336,-1.02038},1.99997}}; + freezerPos[] = {{{4.15479,5.52344,-1.02038},360}}; + }; + class Land_Hotel_02_F : Default + { + lootType = "civ"; + bedPos[] = {{{3.78418,-0.498047,0.221087},90},{{3.76855,2.49609,0.221087},270}}; + chairPos[] = {{{-8.21875,-1.00781,0.0842772},225},{{-9.95703,-1.77148,-3.41891},90},{{-1.83398,15.1475,-3.40639},360}}; + filingPos[] = {{{6.56641,-2.00391,-3.42002},181}}; + tablePos[] = {{{-8.43945,-0.506836,-3.40639},270},{{-8.44727,2.4834,0.0842772},270}}; + lockerPos[] = {{{-5.14746,-1.97754,-3.40639},181}}; + shoeboxPos[] = {{{4.52832,0.628906,-2.55951},130}}; + palletPos[] = {{{-1.97754,0.867188,-3.40639},348}}; + freezerPos[] = {{{7.91699,-1.58008,-3.4237},90}}; + cabinetPos[] = {{{-8.8584,3.79102,-2.28192},360}}; + }; + class Land_Slum_04_F : Default + { + lootType = "civ"; + shoeboxPos[] = {{{4.09277,2.27441,0.0612197},257}}; + }; + class Land_GarageShelter_01_F : Default + { + lootType = "civ"; + couchPos[] = {{{-1.33691,-0.69043,-1.26478},360}}; + tablePos[] = {{{-3.50391,3.37988,-1.26478},357}}; + toolRackPos[] = {{{-4.56738,0.189453,-1.26478},272}}; + shoeboxPos[] = {{{-4.22461,-2.53906,-1.26478},157}}; + palletPos[] = {{{3.78418,2.875,-1.26478},258}}; + freezerPos[] = {{{-4.10742,1.94824,-1.26478},270}}; + }; + class Land_Church_03_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + chairPos[] = {{{7.31055,-5.0791,-7.20663},282}}; + shoeboxPos[] = {{{7.10645,-6.07715,-7.20654},220}}; + }; + class Land_Shed_07_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{-4.88574,1.10059,-10},267}}; + lockerPos[] = {{{-4.56445,-1.59277,-10},265}}; + toolRackPos[] = {{{-1.2002,-2.32715,-10},175}}; + palletPos[] = {{{0.436523,1.31348,-10},190},{{3.9668,-1.38477,-10},140}}; + }; + class Land_School_01_F : Default + { + lootType = "civ"; + shelfPos[] = {{{4.15234,-0.0341797,-1.27842},90},{{14.5557,3.80078,-1.27842},90}}; + fridgePos[] = {{{-3.97363,-0.359375,-1.27842},270}}; + bedPos[] = {{{5.70605,-1.58789,-1.27842},177}}; + couchPos[] = {{{13.4473,-1.30078,-1.27842},359},{{-13.4824,-1.14453,-1.27842},180}}; + wardrobePos[] = {{{-5.03516,-0.242188,-1.27842},90}}; + cookerPos[] = {{{-3.83594,4.10742,-1.27842},274}}; + chairPos[] = {{{8.8584,3.96484,-1.27842},359},{{-14.0371,3.93262,-1.27842},319}}; + filingPos[] = {{{4.07422,4.17285,-1.27842},9.99996},{{-4.93359,4.17871,-1.27842},9.99996}}; + tablePos[] = {{{7.83301,-2.52832,-1.27842},180},{{-14.2764,1.65723,-1.27842},270}}; + lockerPos[] = {{{-3.95215,-2.07324,-1.27842},270}}; + shoeboxPos[] = {{{2.13672,-2.58105,-1.27842},30}}; + freezerPos[] = {{{-3.87012,0.894531,-1.27842},270}}; + cabinetPos[] = {{{-1.21094,-2.92285,0.014966},270}}; + }; + class Land_Temple_Native_01_F : Default + { + lootType = "civ"; + shelfPos[] = {{{3.4541,0.648438,-5.94443},90}}; + couchPos[] = {{{2.37207,3.21094,-5.94443},0}}; + chairPos[] = {{{-3.0791,4.45801,-5.94443},310}}; + tablePos[] = {{{-0.0419922,4.62695,-5.94443},0}}; + shoeboxPos[] = {{{-3.23047,-0.166016,-5.94443},220}}; + }; + class Land_Shop_City_06_F : Default + { + lootType = "market"; + wardrobePos[] = {{{-6.61328,0.117188,-4.06814},259}}; + chairPos[] = {{{-5.58203,2.58203,-0.322272},230}}; + filingPos[] = {{{-6.78125,1.59766,-4.06819},280},{{8.04297,3.90674,-0.322294},90}}; + tablePos[] = {{{-5.76172,6.38916,-0.322268},270}}; + lockerPos[] = {{{-1.50195,2.33984,-0.322311},179}}; + toolRackPos[] = {{{0.0507813,3.70508,-4.39184},270}}; + shoeboxPos[] = {{{-7.73047,-1.41846,5.20514},220}}; + palletPos[] = {{{1.58789,6.33545,-4.302},250}}; + cabinetPos[] = {{{0.0820313,6.07031,-3.002},0}}; + }; + class Land_Shop_Town_05_F : Default + { + lootType = "market"; + shelfPos[] = {{{0.0429688,-5.08594,-2.70736},356}}; + chairPos[] = {{{-4.22852,-5.55566,-2.77661},40}}; + filingPos[] = {{{4.31934,-5.24805,-2.70736},310}}; + shoeboxPos[] = {{{4.31445,9.11523,-2.66736},160}}; + }; + class Land_Shop_City_03_F : Default + { + lootType = "market"; + shelfPos[] = {{{6.98975,-2.47461,-4.96662},90}}; + fridgePos[] = {{{0.209473,-2.37695,-4.6728},273}}; + couchPos[] = {{{3.53662,0.644531,-4.96672},0}}; + filingPos[] = {{{6.75244,-3.24805,-4.96664},91}}; + shoeboxPos[] = {{{4.67041,8.10352,-3.23532},92}}; + cabinetPos[] = {{{4.68262,7.24609,-3.82146},180}}; + }; + class Land_Church_01_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + chairPos[] = {{{-1.61426,15.6572,-10.5169},190}}; + shoeboxPos[] = {{{-7.59375,-1.33301,-9.98111},120}}; + freezerPos[] = {{{7.74609,1.15723,-9.98111},270}}; + }; + class Land_Warehouse_03_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{8.17676,1.42285,0.150167},90},{{6.45313,5.35156,-2.37297},0},{{-10.8906,-4.6582,-2.37297},270}}; + lockerPos[] = {{{6.87402,5.19043,0.150167},0}}; + toolRackPos[] = {{{5.27441,4.51074,-2.37297},89}}; + shoeboxPos[] = {{{6.95605,-5.28223,-2.37297},141}}; + palletPos[] = {{{4.35156,1.79883,-2.37297},160},{{-5.1748,4.30371,-2.37297},190}}; + freezerPos[] = {{{4.84082,-5.00684,-2.37297},90}}; + cabinetPos[] = {{{5.24707,-2.82715,-0.982677},180}}; + }; + class Land_House_Big_04_F : Default + { + lootType = "civ"; + bedPos[] = {{{-5.24219,1.9375,0.267768},91}}; + couchPos[] = {{{2.4834,2.03711,0.265382},89},{{3.07227,-2.52051,-3.00084},270}}; + wardrobePos[] = {{{-2.32129,1.14453,0.266175},181}}; + chairPos[] = {{{-5.89453,4.40234,0.270024},301}}; + filingPos[] = {{{-6.16699,-5.22168,-3.00084},255}}; + tablePos[] = {{{2.20801,-4.98145,-3.00084},180},{{3.58496,4.55859,0.267125},0}}; + shoeboxPos[] = {{{-4.35059,-1.54102,-2.95084},315.7}}; + }; + class Land_Shop_City_02_F : Default + { + lootType = "market"; + shelfPos[] = {{{0.958984,-2.36719,-4.38168},270},{{0.954102,-4.19531,-4.38123},270},{{8.28809,-5.41211,-4.37245},90}}; + fridgePos[] = {{{-10.2744,-2.09766,-4.34924},3}}; + couchPos[] = {{{2.97266,-7.19531,-4.37758},108}}; + wardrobePos[] = {{{4.74902,-4.83594,-4.37564},310}}; + cookerPos[] = {{{6.80273,-1.58203,-4.3743},360},{{7.94434,-1.58398,-4.37358},4.99999},{{-8.07227,-3.92969,-4.39757},90}}; + chairPos[] = {{{-0.245117,-8.36523,-4.38341},90},{{4.65723,7.82031,-4.38109},207},{{5.375,-8.06055,-4.37345},188}}; + filingPos[] = {{{1.33105,2.37891,-4.38319},360},{{2.0791,2.39453,-4.38221},360},{{-0.109375,-4.94531,-4.38316},0},{{4.41504,10.0195,-4.34025},360}}; + tablePos[] = {{{-2.09668,-5.21094,-4.38676},352}}; + toolRackPos[] = {{{-1.51758,-4.61328,-4.38571},360}}; + palletPos[] = {{{4.59668,0.285156,-4.378},0}}; + freezerPos[] = {{{2.84473,-1.625,-4.3795},0},{{-8.09082,-2.61133,-4.34924},89},{{7.62695,9.83398,-4.37802},180}}; + cabinetPos[] = {{{0.881836,0.953125,-3.09679},0}}; + }; + class Land_Shop_City_01_F : Default + { + lootType = "market"; + bedPos[] = {{{1.64746,3.81543,-4.95041},226}}; + couchPos[] = {{{5.36328,4.43457,-4.95041},270}}; + wardrobePos[] = {{{0.811523,-0.87207,-4.95041},0}}; + cookerPos[] = {{{2.68848,-1.00391,-4.9569},320}}; + shoeboxPos[] = {{{1.87305,6.26074,-5.00912},270}}; + palletPos[] = {{{0.708008,0.950195,-4.9469},270}}; + freezerPos[] = {{{7.10352,2.82227,-4.9469},280}}; + }; + class Land_Hotel_01_F : Default + { + lootType = "civ"; + limit = 6; + shelfPos[] = {{{-0.0751953,-0.589844,-1.57032},90}}; + bedPos[] = {{{3.67285,-2.13672,4.51435},270},{{-4.98633,-2.0625,4.51435},270}}; + wardrobePos[] = {{{-3.37695,-4.43359,4.51435},180}}; + chairPos[] = {{{0.660156,2.75,-5.30929},52},{{1.8125,-4.20605,4.51435},180},{{-5.70996,5.68945,-5.30929},320}}; + filingPos[] = {{{-0.948242,0.246094,1.67968},100},{{-6.01855,-2.06543,-5.3093},280},{{4.64453,-4.41895,4.51435},90},{{-6.00586,-2.71484,-5.3093},270}}; + tablePos[] = {{{2.76465,-4.37891,-5.3093},172}}; + lockerPos[] = {{{4.58594,3.08594,-5.30929},90},{{-6.0127,-0.396484,-5.3093},270}}; + shoeboxPos[] = {{{-2.58398,-2.90625,-4.2657},232},{{-5.65625,7.53809,4.51435},60}}; + cabinetPos[] = {{{-6.30371,-3.88086,-4.10929},360}}; + }; + class Land_FuelStation_01_shop_F : Default + { + lootType = "market"; + shelfPos[] = {{{-5.38574,2.01367,-2.01301},273},{{-5.38574,3.31836,-2.01301},269}}; + chairPos[] = {{{1.80371,-4.5957,-2.01301},122}}; + filingPos[] = {{{-5.16309,0.28125,-2.01301},275},{{-5.17676,4.62695,-2.01301},270}}; + tablePos[] = {{{-0.15918,-4.7832,-2.01301},182}}; + lockerPos[] = {{{2.07715,4.13086,-2.01301},95}}; + toolRackPos[] = {{{-2.93164,5.10742,-2.01301},360}}; + shoeboxPos[] = {{{-5.19629,-1.38281,-0.972044},152}}; + palletPos[] = {{{1.53613,1.92383,-2.01301},182}}; + }; + class Land_FuelStation_01_workshop_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{-5.50488,2.46582,-2.35666},269},{{-5.50781,-2.78809,-2.35666},269}}; + filingPos[] = {{{-5.28809,3.89063,-2.35666},269}}; + lockerPos[] = {{{2.71387,4.0293,-2.35666},359}}; + toolRackPos[] = {{{-5.63086,-0.30957,-2.35666},270}}; + shoeboxPos[] = {{{5.57715,-5.3418,-2.35666},270}}; + palletPos[] = {{{-1.60742,-4.74414,-2.35666},270},{{-4.48926,-4.70801,-2.35666},270}}; + cabinetPos[] = {{{5.38184,4.33203,-1.05667},90}}; + }; + class Land_FuelStation_02_workshop_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{-5.18164,7.65918,-1.2675},270}}; + chairPos[] = {{{4.39941,-1.01563,-1.2675},110},{{4.35449,4.03906,-1.2675},83}}; + filingPos[] = {{{4.56738,8.05664,-1.2675},0}}; + tablePos[] = {{{4.45215,1.9668,-1.2675},90}}; + lockerPos[] = {{{1.24707,8.13867,-1.2675},0}}; + toolRackPos[] = {{{-2.81348,8.49121,-1.08995},0}}; + palletPos[] = {{{-2.7793,3.2002,-1.08995},183}}; + cabinetPos[] = {{{-0.326172,-1.26367,0.0900497},180}}; + }; + class Land_Mausoleum_01_F : Default + { + lootType = "civ"; + shoeboxPos[] = {{{-1.93823,-1.89551,-1.9543},114.315}}; + palletPos[] = {{{-0.547119,1.19141,-1.9543},114.315}}; + }; + class Land_Barracks_01_grey_F : Default + { + lootType = "mil"; + limit = 6; + shelfPos[] = {{{-2.03589,-3.18555,0.518449},0},{{1.44531,3.97949,0.518449},90},{{2.10278,-3.72656,0.518448},270},{{-7.10156,-1.87695,0.518449},89.4737},{{-7.10596,2.8125,0.518449},90},{{8.07251,3.89014,3.85143},92},{{8.72681,3.58398,0.518449},270},{{8.74683,-3.81934,0.518448},270}}; + fridgePos[] = {{{-13.2495,-3.90918,0.518448},267},{{-13.2495,-4.00391,3.85143},268}}; + bedPos[] = {{{3.47974,2.33691,0.518449},90},{{10.0161,-2.19824,0.518448},272},{{-12.1023,2.34717,0.518449},89.4737}}; + couchPos[] = {{{4.35059,-3.25342,3.85143},94}}; + cookerPos[] = {{{-10.3127,-4.0293,3.85143},184},{{-13.1499,-2.58691,0.518449},271},{{14.1487,4.17773,0.518449},88}}; + chairPos[] = {{{-3.70532,-5.94531,3.85143},180},{{7.47803,-1.68994,3.85143},24},{{14.0408,4.00049,3.85143},40}}; + filingPos[] = {{{1.06055,1.62598,0.518449},170},{{-7.30127,4.28271,0.518449},81.4737},{{7.87549,-4.22852,3.85143},94},{{8.95898,1.65479,3.85143},194},{{8.93774,-4.21045,3.85143},258}}; + pelicanPos[] = {{{13.9045,2.07129,3.85143},120},{{-12.968,5.62793,3.85143},325.474}}; + tablePos[] = {{{6.77832,-3.88818,0.518448},180},{{-5.36353,-5.91406,3.85143},190},{{9.72827,-1.60449,3.85143},358}}; + lockerPos[] = {{{-5.56592,1.63184,3.85143},180},{{-5.60791,1.63428,0.518449},181},{{7.23291,-1.49609,0.518448},0},{{-12.5654,1.63623,3.85143},180},{{14.2329,-3.45313,3.85143},90}}; + toolRackPos[] = {{{4.19165,1.28271,3.85143},180}}; + shoeboxPos[] = {{{0.542969,1.71289,3.85143},210}}; + palletPos[] = {{{0.747803,3.71387,3.85143},180},{{7.26978,3.72852,0.518449},90},{{-7.85474,3.74756,3.85143},270}}; + freezerPos[] = {{{-13.1458,-1.80273,3.85143},270},{{13.8433,1.73633,0.518449},180}}; + cabinetPos[] = {{{7.58691,1.3418,1.75143},267}}; + }; + class Land_Barracks_01_camo_F : Land_Barracks_01_grey_F {}; + class Land_Church_02_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + chairPos[] = {{{0.820313,-15.8745,-3.31618},360},{{-0.789795,-15.8867,-3.31618},360}}; + shoeboxPos[] = {{{3.60547,-15.7925,-2.38721},330},{{-3.66235,18.7886,-3.1444},162}}; + palletPos[] = {{{-5.76733,-11.1523,-10},162}}; + }; + class Land_SCF_01_warehouse_F : Default + { + lootType = "construction"; + shelfPos[] = {{{-8.89941,17.1563,-4.61258},90}}; + shoeboxPos[] = {{{0.47168,-6.45068,3.87006},349},{{15.7676,15.7952,-4.58326},240}}; + palletPos[] = {{{4.05469,-12.293,-4.57731},360},{{9.12354,-12.5586,-4.57731},40},{{-10.6152,15.0613,-4.61258},40}}; + cabinetPos[] = {{{2.73633,-11.3958,-3.37731},92}}; + }; + class Land_Shed_Small_F : Default + { + lootType = "construction"; + palletPos[] = {{{-2.91113,-10.7017,-10},81},{{4.06006,10.9492,-10},349}}; + }; + class Land_GuardHouse_01_F : Default + { + lootType = "mil"; + shelfPos[] = {{{-2.41455,-2.44482,-1.02058},270}}; + bedPos[] = {{{0.998047,-3.93896,-1.02058},90}}; + pelicanPos[] = {{{1.69629,0.259277,0.00792408},9.99997}}; + lockerPos[] = {{{-2.2334,-4.14111,-1.02058},270}}; + shoeboxPos[] = {{{-2.28906,0.447266,0.00792408},320}}; + cabinetPos[] = {{{-0.0507813,0.614258,-0.547749},90}}; + }; + class Land_Airport_01_controlTower_F : Default + { + lootType = "mil"; + filingPos[] = {{{-1.57251,2.68604,4.65874},350}}; + pelicanPos[] = {{{0.608643,0.954102,8.11717},111}}; + shoeboxPos[] = {{{-0.823242,-0.911133,5.58527},220}}; + cabinetPos[] = {{{-2.06567,0.0991211,5.35874},0}}; + }; + class Land_Airport_01_terminal_F : Default + { + lootType = "mil"; + shelfPos[] = {{{-8.92432,3.9043,-4.02355},180}}; + tablePos[] = {{{6.97095,8.64941,-4.05115},360},{{-15.301,1.44824,-4.03527},270}}; + lockerPos[] = {{{-3.4248,2.5918,-4.02355},270}}; + toolRackPos[] = {{{-10.52,2.11914,-4.17527},90}}; + shoeboxPos[] = {{{-1.11304,-2.05566,-4.17527},120},{{8.36523,4.32715,-4.05115},211}}; + palletPos[] = {{{-4.90723,6.66016,-4.02355},180},{{-8.74316,8.28613,-4.02355},180}}; + freezerPos[] = {{{-7.42358,4.20898,-4.02355},181}}; + cabinetPos[] = {{{3.85596,0.212891,-2.82126},180}}; + }; + class Land_dp_smallTank_F : Default + { + lootType = "industrial"; + shoeboxPos[] = {{{-2.18872,0.745605,5.52527},360}}; + }; + class Land_House_Big_02_F : Default + { + lootType = "civ"; + shelfPos[] = {{{-6.26172,7.39502,-1.45192},271.405}}; + fridgePos[] = {{{-4.95996,-0.250977,-1.45192},92.4045}}; + couchPos[] = {{{-4.02734,8.32373,-1.45192},266}}; + wardrobePos[] = {{{-7.33887,-0.602051,-1.45192},200}}; + cookerPos[] = {{{-10.1758,2.96045,-1.45192},262.405}}; + chairPos[] = {{{9.18945,-5.94482,-1.45192},210}}; + filingPos[] = {{{5.15137,3.5791,-1.45192},80.4045}}; + tablePos[] = {{{2.33398,3.50146,-1.45192},360}}; + toolRackPos[] = {{{-2.30566,4.39014,-1.45192},178.405}}; + shoeboxPos[] = {{{5.00391,1.60986,-1.45192},33.4045}}; + palletPos[] = {{{-0.859375,8.72803,-1.45192},178.405}}; + freezerPos[] = {{{-10.1797,1.22607,-1.45192},271.405}}; + }; + class Land_DPP_01_waterCooler_F : Default + { + lootType = "industrial"; + shoeboxPos[] = {{{3.26855,1.49414,-1.96692},200}}; + palletPos[] = {{{0.692383,1.22388,-10},200},{{-1.78516,-2.64307,-10},200}}; + }; + class Land_DPP_01_smallFactory_F : Default + { + lootType = "construction"; + shelfPos[] = {{{0.342773,4.88306,-10},180}}; + shoeboxPos[] = {{{-10.8447,1.93359,3.08963},320}}; + palletPos[] = {{{-1.5752,5.64551,-10},190}}; + }; + class Land_GantryCrane_01_F : Default + { + lootType = "construction"; + pelicanPos[] = {{{-0.723633,1.46777,9.01571},120}}; + shoeboxPos[] = {{{1.89746,-0.496094,9.39161},220}}; + }; + class Land_MobileCrane_01_F : Default + { + lootType = "construction"; + shelfPos[] = {{{10.7402,-2.49805,-19.0618},91}}; + lockerPos[] = {{{10.5547,2.62158,-19.065},90}}; + shoeboxPos[] = {{{7.84961,-3.33984,-8.30899},300}}; + palletPos[] = {{{14.0488,-2.7959,-14.0393},270},{{15.6523,1.0332,-12.8083},250}}; + }; + class Land_MobileCrane_01_hook_F : Land_MobileCrane_01_F {}; + class Land_SCF_01_shed_F : Default + { + lootType = "construction"; + palletPos[] = {{{9.55371,0.875,-10},270},{{-9.4187,-14.084,-10},270}}; + }; + class Land_Shop_City_05_F : Default + { + lootType = "market"; + couchPos[] = {{{-0.138672,-10.7393,-7.28326},274}}; + shoeboxPos[] = {{{1.63086,13.9697,-7.02897},190.8}}; + palletPos[] = {{{-9.44238,15.4424,-10},190.8}}; + }; + class Land_MultistoryBuilding_01_F : Default + { + lootType = "market"; + shelfPos[] = {{{15.0352,5.12891,-21.0171},360}}; + lockerPos[] = {{{10.4814,-13.9253,-21.0171},179.8}}; + toolRackPos[] = {{{9.27246,-3.62622,-21.0171},269}}; + shoeboxPos[] = {{{21.5146,4.90503,-21.0171},30}}; + palletPos[] = {{{10.1982,4.39917,-21.0171},182.8},{{12.5723,-8.16211,-21.0171},182.8}}; + cabinetPos[] = {{{19.5664,5.21143,-19.7702},88.8}}; + }; + class Land_MultistoryBuilding_03_F : Default + { + lootType = "market"; + shelfPos[] = {{{-1.05566,4.97437,-26},100}}; + chairPos[] = {{{-6.9209,-1.37549,-24.2517},100}}; + filingPos[] = {{{-1.14063,4.07007,-26},100}}; + toolRackPos[] = {{{-2.94629,8.3147,-25.7446},3}}; + shoeboxPos[] = {{{-1.65137,-12.4939,-26},100}}; + palletPos[] = {{{-5.52832,4.54736,-26},0}}; + cabinetPos[] = {{{-0.852539,6.11084,-24.5986},180}}; + }; + class Land_MultistoryBuilding_04_F : Default + { + lootType = "civ"; + shelfPos[] = {{{-8.16956,9.50293,-36.322},100}}; + chairPos[] = {{{3.35938,-9.11426,-36.322},340},{{-8.71216,-6.77441,-36.322},110}}; + filingPos[] = {{{-8.41406,-4.76172,-36.322},160}}; + shoeboxPos[] = {{{11.5045,-8.82324,-36.322},100}}; + palletPos[] = {{{1.19971,-13.2129,-36.322},100},{{-3.46057,13.7285,-36.322},100},{{6.96362,13.7822,-36.322},70}}; + cabinetPos[] = {{{12.7135,6.69727,-35.3042},0}}; + }; + class Land_Cathedral_01_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + chairPos[] = {{{-7.57324,-0.583008,-9.39412},43}}; + tablePos[] = {{{0.451172,-12.4187,-7.82105},13}}; + shoeboxPos[] = {{{-9.78125,-9.85229,-9.39412},43}}; + palletPos[] = {{{7.71191,-0.686768,-9.39412},360}}; + }; + class Land_Airport_01_hangar_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{14.9707,4.25635,-3},81},{{-3.5625,15.9639,-3},1},{{-8.81055,15.979,-3},1}}; + toolRackPos[] = {{{12.5303,-10.4146,-2.62908},181}}; + palletPos[] = {{{-13.75,-8.90918,-3},191},{{-14.0654,14.2466,-3},84}}; + }; + class Land_Airport_02_controlTower_F : Default + { + lootType = "mil"; + shelfPos[] = {{{-0.619141,0.914063,-10.799},359}}; + filingPos[] = {{{0.871582,2.76172,2.18546},183},{{-0.985352,2.78906,2.18546},181}}; + pelicanPos[] = {{{1.77051,5.9082,3.09551},53}}; + shoeboxPos[] = {{{-2.04199,5.11133,3.09551},53}}; + palletPos[] = {{{-0.614746,-1.76758,-10.7145},90}}; + cabinetPos[] = {{{0.940918,1.02539,0.285469},90}}; + }; + class Land_Airport_02_terminal_F : Default + { + lootType = "civ"; + chairPos[] = {{{10.875,-2.83594,-1.4043},90}}; + tablePos[] = {{{10.9907,-0.375,-1.4043},90}}; + lockerPos[] = {{{4.18457,2.45215,-1.40867},270},{{4.19165,4.24609,-1.40868},270}}; + shoeboxPos[] = {{{7.94824,2.00195,-0.939405},60}}; + palletPos[] = {{{4.65234,-0.265625,-1.40867},90}}; + cabinetPos[] = {{{10.6372,5.38281,-0.141179},90}}; + }; + class Land_Airport_02_hangar_right_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{5.99121,9.65039,-7.25818},90},{{6.23975,-14.0654,-7.72174},90},{{9.82324,-12.6621,-7.71869},179}}; + lockerPos[] = {{{6.06519,-17.5381,-7.72373},90}}; + toolRackPos[] = {{{12.8186,-7.41309,-7.25818},90}}; + shoeboxPos[] = {{{6.60205,-19.917,-1.86625},230}}; + cabinetPos[] = {{{6.375,-21.5215,-6.16557},179}}; + }; + class Land_Airport_02_hangar_left_F : Default + { + lootType = "construction"; + shelfPos[] = {{{-12.5098,-8.36523,-7.24053},272},{{6.09326,20.5518,-7.25266},0},{{-5.78027,-23.7773,-1.23606},272}}; + shoeboxPos[] = {{{-4.53125,20.251,-1.24107},144}}; + }; + class Land_DPP_01_mainFactory_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{12.4868,5.71582,-4.25747},360}}; + toolRackPos[] = {{{11.915,-0.972656,-10.5492},272}}; + shoeboxPos[] = {{{12.3447,6.52246,-5.56747},50}}; + palletPos[] = {{{-5.20117,11.5381,-9.74186},84},{{-9.70508,11.4258,-9.73776},84},{{20.9487,-3.17871,-7.43347},50}}; + }; + class Land_CombineHarvester_01_wreck_F : Default + { + lootType = "industrial"; + shoeboxPos[] = {{{1.24243,-1.62891,0.0273294},272}}; + palletPos[] = {{{2.77905,1.94629,-1.88333},272}}; + }; + class Land_SCF_01_generalBuilding_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{1.65527,-13.3105,-4.84338},360},{{-5.47607,-13.2764,-0.342323},360},{{-1.80737,-22.2637,-4.84338},170}}; + toolRackPos[] = {{{-4.11987,-13.1016,-4.84338},1.99998}}; + shoeboxPos[] = {{{-2.5481,-22.7988,9.69048},122}}; + palletPos[] = {{{2.17529,-16.9023,-0.342323},1.99998},{{-2.24731,-18.9658,-0.342323},1.99998},{{-0.242432,-21.7676,-4.84338},340}}; + }; + class Land_SCF_01_washer_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{5.99902,1.37305,2.18735},180},{{-3.38672,6.87158,-1.80765},180}}; + shoeboxPos[] = {{{-1.32813,2.7832,2.18735},159}}; + palletPos[] = {{{-0.738281,4.4375,3.22431},180},{{3.9248,7.34766,-1.76456},360}}; + }; + class Land_SCF_01_shredder_F : Default + { + lootType = "industrial"; + shoeboxPos[] = {{{1.08203,-6.02979,-1.39866},229}}; + palletPos[] = {{{-0.345703,-5.55029,-1.39866},159}}; + }; + class Land_SCF_01_clarifier_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{4.23633,-5.50244,-2.00547},270}}; + shoeboxPos[] = {{{-1.63477,1.06299,8.53659},215}}; + palletPos[] = {{{3.67383,-3.10547,-10},240},{{-5.26855,-2.09424,-10},240}}; + }; + class Land_SCF_01_feeder_F : Default + { + lootType = "industrial"; + shoeboxPos[] = {{{-0.84668,8.46875,-3.38788},240}}; + palletPos[] = {{{-2.33984,15.1572,-2.61678},240}}; + }; + class Land_SCF_01_chimney_F : Default + { + lootType = "industrial"; + pelicanPos[] = {{{-2.99512,-3.04297,24.3271},200}}; + shoeboxPos[] = {{{0.0537109,1.75391,24.3271},200}}; + }; + class Land_SCF_01_boilerBuilding_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{22.2256,1.09546,-8.65179},90},{{22.4199,2.60059,-17.6125},270},{{-1.29102,23.6138,-13.1725},90}}; + toolRackPos[] = {{{14.8506,-0.107178,-17.8281},180}}; + shoeboxPos[] = {{{10.8652,14.1597,-17.8272},350}}; + palletPos[] = {{{16.4326,1.20996,-13.1888},358},{{15.5107,13.283,-13.177},358},{{11.7666,-17.9785,-17.695},190},{{-23.1025,15.8513,-17.6078},190}}; + cabinetPos[] = {{{10.6318,3.73242,-11.8678},358}}; + }; + class Land_SCF_01_crystallizer_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{5.98633,5.46533,-0.536706},360},{{-8.78906,-0.0581055,-0.536711},180}}; + shoeboxPos[] = {{{8.37891,5.93506,-2.93731},230}}; + palletPos[] = {{{1.06738,0.640137,-0.536709},360},{{-3.97168,0.850098,4.92104},350}}; + }; + class Land_SCF_01_crystallizerTowers_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{1.4541,-0.650879,-7.24714},360}}; + shoeboxPos[] = {{{-4.73145,1.5752,12.2733},140}}; + palletPos[] = {{{-0.708008,-0.354492,-7.24714},270}}; + }; + class Land_Radar_Small_F : Default + { + lootType = "mil"; + shelfPos[] = {{{0.581055,3.92749,-10},200}}; + palletPos[] = {{{-4.85449,-0.675781,-10},169}}; + }; + class Land_MiningShovel_01_abandoned_F : Default + { + lootType = "construction"; + shelfPos[] = {{{3.3916,-2.8252,-0.647353},70}}; + shoeboxPos[] = {{{-0.786133,-7.95947,3.74709},139}}; + palletPos[] = {{{-2.4502,-4.36426,-0.484981},179},{{-0.444336,-9.64648,-0.484981},149}}; + }; + class Land_SM_01_reservoirTower_F : Default + { + lootType = "construction"; + shelfPos[] = {{{-0.0371094,1.45996,-1.95632},180}}; + shoeboxPos[] = {{{-3.44531,-2.54688,-1.98985},211}}; + palletPos[] = {{{0.893555,-3.41504,-1.98556},251}}; + }; + class Land_HaulTruck_01_abandoned_F : Default + { + lootType = "construction"; + shoeboxPos[] = {{{-0.0493164,-3.35742,1.27724},151}}; + palletPos[] = {{{-1.08545,-5.21582,1.27749},181}}; + }; + class Land_Warehouse_01_F : Default + { + lootType = "workshop"; + shelfPos[] = {{{5.69727,-20.2239,-10},360}}; + palletPos[] = {{{2.49023,-21.2285,-10},161},{{-1.92578,21.6052,-10},161}}; + }; + class Land_Warehouse_02_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{8.18945,-11.0618,-3.96959},360}}; + palletPos[] = {{{-1.94727,-11.8555,-3.96959},360},{{11.3662,-11.8032,-3.96959},360}}; + }; + class Land_SM_01_shelter_narrow_F : Default + { + lootType = "construction"; + palletPos[] = {{{-2.53125,11.0098,-10},360},{{4.07813,-10.8501,-10},360}}; + }; + class Land_SM_01_shelter_wide_F : Default + { + lootType = "construction"; + palletPos[] = {{{-7.67676,5.47681,-10},360},{{7.57324,-6.09155,-10},360}}; + }; + class Land_SM_01_shed_unfinished_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{-3.42773,8.58179,-1.648},350}}; + filingPos[] = {{{-4.98242,-1.33374,-1.648},100}}; + shoeboxPos[] = {{{-4.00879,1.89185,-1.648},80}}; + palletPos[] = {{{1.77051,2.32544,-1.648},360}}; + }; + class Land_SY_01_reclaimer_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{-14.377,5.68848,-2.27833},360}}; + shoeboxPos[] = {{{-11.6846,1.34912,-2.27688},220}}; + palletPos[] = {{{-15.2012,-1.79639,-10},220}}; + }; + class Land_SM_01_shed_F : Default + { + lootType = "industrial"; + shelfPos[] = {{{-5.92969,-1.72266,-1.60012},180},{{9.05469,-1.71729,-1.60012},180},{{8.64551,8.68945,-1.60012},0}}; + toolRackPos[] = {{{-1.58496,8.8877,-1.60012},0}}; + shoeboxPos[] = {{{-6.93652,2.11621,-1.60012},140}}; + palletPos[] = {{{-3.1377,-0.233398,-1.60012},170}}; + freezerPos[] = {{{-5.04785,1.56201,-1.60012},90}}; + cabinetPos[] = {{{-8.79102,-1.59473,-0.300119},0}}; + }; + class Land_i_House_Small_03_V1_dam_F : Default + { + lootType = "civ"; + tablePos[] = {{{3.97192,-5.14429,-0.399977},184.648}}; + shoeboxPos[] = {{{1.03833,1.97803,-0.399977},359.648}}; + KitchenSinkPos[] = {{{-4.81128,2.74316,-0.399977},269.648}}; + toiletPos[] = {{{1.43848,5.02466,-0.399977},359.648}}; + }; + class Land_u_House_Small_02_V1_dam_F : Default + { + lootType = "civ"; + chairPos[] = {{{2.06104,-0.303467,-1.07093},273.648}}; + tablePos[] = {{{6.60864,-2.21667,-1.07093},179.648}}; + }; + class Land_i_House_Small_02_V3_dam_F : Default + { + lootType = "civ"; + couchPos[] = {{{6.16943,-1.03198,-0.925534},4.99999}}; + }; + class Land_i_House_Small_02_V2_dam_F : Default + { + lootType = "civ"; + bedPos[] = {{{6.95679,-0.921143,-0.999897},358}}; + toolRackPos[] = {{{0.935547,0.244019,-1.04277},88}}; + }; + class Land_i_House_Small_02_V1_dam_F : Default + { + lootType = "civ"; + shoeboxPos[] = {{{2.6355,-2.07544,-0.927456},88}}; + freezerPos[] = {{{7.27197,-1.90771,-0.927456},88}}; + KitchenSinkPos[] = {{{7.29883,1.40063,-0.927456},90}}; + }; + class Land_i_Barracks_V1_dam_F : Default + { + limit = 6; + lootType = "mil"; + GroundSpawnChance = 80; + MinGroundContainers = 4; + MaxGroundContainers = 8; + shelfPos[] = {{{-13.2607,1.86938,3.88759},264}}; + chairPos[] = {{{7.35889,-3.00977,0.487596},88},{{-7.59131,3.71997,0.487596},88}}; + filingPos[] = {{{-7.45801,-2.66504,0.487596},88},{{-6.35718,-5.19971,3.85143},264},{{-13.4155,-3.57056,3.85143},264}}; + pelicanPos[] = {{{-5.95459,2.20557,3.88759},264}}; + lockerPos[] = {{{13.9585,2.92456,0.487596},88}}; + shoeboxPos[] = {{{9.35645,-3.33105,0.487596},88}}; + }; + class Land_i_Barracks_V2_dam_F : Land_i_Barracks_V1_dam_F{}; + + class Land_TentHangar_V1_F : Default + { + lootType = "mil"; + couchPos[] = { {{8.67236,-3.95703,-4.10237},356}}; + lockerPos[] = { {{-9.604,1.47412,-4.10237},264}}; + palletPos[] = {{{-7.19678,-5.23047,-4.10237},356},{{8.93481,6.54126,-4.0674},356}}; + }; + class Land_TentHangar_V1_dam_F : Land_TentHangar_V1_F {}; + + class Land_Dome_Big_F : Default + { + lootType = "mil"; + chairPos[] = {{{16.2844,15.4109,-10.1997},356},{{-13.9492,-19.0752,-10.1997},216}}; + pelicanPos[] = {{{21.5835,-2.73999,-10.1997},356}}; + palletPos[] = {{{-5.73926,-1.4939,-10.1997},356},{{3.42236,10.5425,-10.1997},356},{{-8.70752,20.2468,-10.1997},356}}; + }; + class Land_Dome_Small_F : Default + { + lootType = "mil"; + chairPos[] = {{{2.98877,12.7253,-6.98321},329},{{-4.11328,-12.5012,-6.98321},216}}; + palletPos[] = {{{-1.65088,1.33276,-6.98321},329},{{10.731,-0.450806,-6.94824},329}}; + }; + class Land_GH_MainBuilding_entry_F : Default + { + lootType = "market"; + palletPos[] = {{{-2.0636,-18.1663,-0.128474},329}}; + }; + + class Land_i_House_Big_01_V1_dam_F : Land_i_House_Big_01_V1_F {}; + class Land_i_House_Big_01_V2_dam_F : Land_i_House_Big_01_V1_F {}; + class Land_i_House_Big_01_V3_dam_F : Land_i_House_Big_01_V1_F {}; + class Land_u_House_Big_01_V1_dam_F : Land_i_House_Big_01_V1_F {}; + class Land_i_House_Big_02_V2_dam_F : Land_i_House_Big_02_V1_F {}; + class Land_i_Shop_01_V1_dam_F : Land_i_Shop_01_V1_F {}; + class Land_i_Shop_01_V2_dam_F : Land_i_Shop_01_V1_F {}; + class Land_i_Shop_01_V3_dam_F : Land_i_Shop_01_V1_F {}; + class Land_u_Shop_01_V1_dam_F : Land_i_Shop_01_V1_F {}; + class Land_i_Shop_02_V1_dam_F : Land_i_Shop_02_V1_F {}; + class Land_i_Shop_02_V2_dam_F : Land_i_Shop_02_V1_F {}; + class Land_i_Shop_02_V3_dam_F : Land_i_Shop_02_V1_F {}; + class Land_u_Shop_02_V1_dam_F : Land_i_Shop_02_V1_F {}; + class Land_i_House_Small_01_V1_dam_F : Land_i_House_Small_01_V1_F {}; + class Land_i_House_Small_01_V2_dam_F : Land_i_House_Small_01_V1_F {}; + class Land_i_House_Small_01_V3_dam_F : Land_i_House_Small_01_V1_F {}; + class Land_u_House_Small_01_V1_dam_F : Land_i_House_Small_01_V1_F {}; + + class Land_spp_Transformer_F : Default { + lootType = "workshop"; + palletPos[] = { + { {-2.33301,-1.54736,-10}, 126.752 } + }; + }; + + class Land_Pier_addon : Default { + lootType = "construction"; + shoeboxPos[] = { + { {-3.15479,-1.13086,-0.577168}, 303.465 } + }; + palletPos[] = { + { {5.02979,-0.545898,-0.582138}, 175.465 } + }; + }; + class Land_Barn_01_grey_F : Default { + lootType = "workshop"; + shelfPos[] = { + { {-8.36279,2.08594,-0.802982}, 270 }, + { {8.39307,2.12988,-0.796082}, 89 }, + { {8.38916,-2.67285,-0.794535}, 91.752 } + }; + couchPos[] = { + { {-2.93018,-2.88867,-0.802755}, 94.752 } + }; + tablePos[] = { + { {-8.08936,-2.2793,-0.802982}, 269.752 } + }; + toolRackPos[] = { + { {-5.1792,2.32813,-0.802982}, 271 } + }; + shoeboxPos[] = { + { {-7.04297,-3.72949,0.0970173}, 341.552 } + }; + palletPos[] = { + { {1.13916,2.80273,-0.801611}, 274 }, + { {4.77686,-3.38477,-0.796951}, 273 } + }; + }; + class Land_Barn_01_brown_F : Land_Barn_01_grey_F {}; + + class Land_Metal_Shed_F : Default { + lootType = "workshop"; + toolRackPos[] = { + { {-2.18555,-3.85742,-1.23042}, 179 } + }; + shoeboxPos[] = { + { {-4.51074,0.143066,-10}, 110 } + }; + palletPos[] = { + { {-0.787109,-0.699707,-10}, 193 }, + { {1.30273,-0.723145,-10}, 153 } + }; + }; + class Land_Shed_08_brown_F : Default { + lootType = "civ"; + bedPos[] = { + { {-2.29199,-1.36182,-1.00694}, 9.99997 } + }; + wardrobePos[] = { + { {-4.81738,-1.14258,-0.94993}, 268 } + }; + chairPos[] = { + { {-1.73926,2.5293,-0.988781}, 20 } + }; + tablePos[] = { + { {0.0458984,-1.74316,-1.00677}, 270 } + }; + shoeboxPos[] = { + { {-3.67969,3.28027,-0.187668}, 180 } + }; + palletPos[] = { + { {4.63672,1.23193,-0.994326}, 250 } + }; + }; + class Land_Shed_08_grey_F : Land_Shed_08_brown_F {}; + + class Land_Stone_Shed_V1_ruins_F : Default { + lootType = "civ"; + shoeboxPos[] = { + { {3.69434,2.58398,1.25675}, 190 } + }; + palletPos[] = { + { {0.112305,0.968262,1.08651}, 239 } + }; + }; + class Land_Grave_rocks_F : Default { + lootType = "civ"; + shoeboxPos[] = { + { {0.675781,-0.0419922,0.158855}, 182.9 } + }; + }; + class Land_TBox_F : Default { + lootType = "civ"; + shoeboxPos[] = { + { {-0.991211,1.70605,-10}, 0.999985 } + }; + palletPos[] = { + { {-0.726563,-1.90234,-10}, 13 } + }; + }; + class Land_Supermarket_01_malden_F : Default { + lootType = "market"; + shelfPos[] = { + { {-2.60059,10.2754,-1.50662}, 89.154 }, + { {7.64258,11.6714,-1.50955}, 89.154 } + }; + fridgePos[] = { + { {7.49316,9.19189,-1.48759}, 89.5859 } + }; + cookerPos[] = { + { {-5.12695,2.104,-1.50335}, 282.154 } + }; + filingPos[] = { + { {-5.38574,7.01904,-1.50443}, 179.154 } + }; + lockerPos[] = { + { {-5.2334,10.0562,-1.47596}, 270.996 } + }; + shoeboxPos[] = { + { {5.75977,2.52051,-1.50255}, 290 }, + { {-0.841797,-7.60205,-0.514952}, 310 }, + { {2.91797,-7.49902,-0.51544}, 330 } + }; + palletPos[] = { + { {1.44336,-2.16846,-1.49765}, 350.154 }, + { {1.14258,-8.13672,-1.47687}, 263.154 } + }; + freezerPos[] = { + { {-5.20117,-2.84277,-1.50252}, 268.154 }, + { {7.40625,7.4043,-1.47617}, 92 } + }; + cabinetPos[] = { + { {6.16016,6.85205,-0.205524}, 268.154 } + }; + toiletPos[] = { + { {-5.33301,11.7261,-1.50726}, 350.154 } + }; + }; + class Land_fs_roof_F : Default { + lootType = "market"; + shoeboxPos[] = { + { {-2.50488,0.224609,-2.1651}, 313 } + }; + }; + class Land_Bunker_01_big_F : Default { + lootType = "mil"; + shelfPos[] = { + { {-0.57666,2.49512,-0.0691071}, 0.451775 } + }; + bedPos[] = { + { {-3.55566,1.28809,-0.0723591}, 95 } + }; + pelicanPos[] = { + { {0.932129,-3.37988,-0.0662937}, 233.452 }, + { {-1.23535,-5.16211,-0.057478}, 0.451786 } + }; + lockerPos[] = { + { {-0.548828,-2.99414,-0.0700665}, 90.4518 } + }; + shoeboxPos[] = { + { {-4.65869,-0.330078,0.008358}, 110.452 } + }; + cabinetPos[] = { + { {-2.31494,-4.04199,1.11855}, 270.452 } + }; + }; + class Land_Bunker_01_small_F : Default { + lootType = "mil"; + pelicanPos[] = { + { {0.750977,1.12305,0.148882}, 9.99997 } + }; + shoeboxPos[] = { + { {-1.03125,1.42383,0.293089}, 153 } + }; + cabinetPos[] = { + { {-0.260742,1.55176,1.10681}, 90.9999 } + }; + }; + class Land_i_Garage_V1_dam_F : Default { + lootType = "workshop"; + shelfPos[] = { + { {-3.66797,-3.03369,-0.145458}, 192 } + }; + toolRackPos[] = { + { {2.46387,-3.35156,-0.160837}, 182 } + }; + palletPos[] = { + { {1.53613,0.891113,-0.160868}, 182 } + }; + freezerPos[] = { + { {4.55469,-2.6377,-0.166363}, 99.4322 } + }; + }; + class Land_Stone_HouseBig_V1_ruins_F : Default { + lootType = "civ"; + shoeboxPos[] = { + { {2.78027,1.70898,0.916737}, 210 } + }; + palletPos[] = { + { {-0.262695,1.80664,1.84048}, 356 } + }; + }; + class Land_Stone_HouseSmall_V1_ruins_F : Default { + lootType = "civ"; + shelfPos[] = { + { {0.160156,-1.12891,0.57814}, 90 } + }; + palletPos[] = { + { {-4.82813,2.50977,0.975464}, 210 }, + { {6.55859,1.61523,0.799408}, 261.9 } + }; + }; + class Land_Bunker_01_HQ_F : Default { + lootType = "mil"; + shelfPos[] = { + { {-0.306641,-0.130371,-0.993013}, 92.7387 } + }; + pelicanPos[] = { + { {0.732422,0.122559,-1.05364}, 266.739 }, + { {4.08887,2.13428,-1.02561}, 7 } + }; + shoeboxPos[] = { + { {-2.08887,2.6709,-0.989424}, 106.739 } + }; + cabinetPos[] = { + { {-2.75488,0.821289,0.109707}, 359.739 } + }; + }; + class Land_Carousel_01_F : Default { + lootType = "church"; + GroundSpawnChance = 80; + shoeboxPos[] = { + { {0.105469,0.0498047,0.479246}, 93.2 } + }; + }; + class Land_Bunker_01_tall_F : Default { + lootType = "mil"; + shelfPos[] = { + { {-2.83789,1.38379,-3.42283}, 267.864 } + }; + pelicanPos[] = { + { {-1.03516,0.21875,1.37418}, 20 }, + { {-1.99414,-0.817383,-3.49438}, 237.358 } + }; + shoeboxPos[] = { + { {0.681641,0.616211,1.49148}, 213.2 }, + { {2.7002,1.9541,1.48981}, 143.2 } + }; + }; + class Land_ReservoirTank_01_military_F : Default { + lootType = "industrial"; + shelfPos[] = { + { {2.38135,-0.182617,-12.8069}, 269 } + }; + }; + class Land_Cargo_House_V3_derelict_F : Default { + lootType = "mil"; + shelfPos[] = { + { {-2.58203,-0.36377,-0.0428944}, 269 } + }; + filingPos[] = { + { {2.09277,-0.495605,-0.0437584}, 120 } + }; + pelicanPos[] = { + { {1.90625,0.526367,-0.0736256}, 69.1639 } + }; + }; + class Land_Cargo_Patrol_V2_ruins_F : Default { + lootType = "mil"; + pelicanPos[] = { + { {1.94385,1.6875,-0.575218}, 70.5285 } + }; + shoeboxPos[] = { + { {2.26416,0.265625,-0.515388}, 107.5 } + }; + }; + class Land_cmp_Shed_F : Default { + lootType = "workshop"; + palletPos[] = { + { {-5.33643,-0.695313,-10}, 107.5 }, + { {-4.94482,2.17676,-10}, 67.5 } + }; + }; + class Land_ReservoirTank_V1_F : Default { + lootType = "industrial"; + shelfPos[] = { + { {2.39355,-0.24707,-12.7961}, 259.5 } + }; + }; + class Land_Unfinished_Building_01_noLadder_F : Default { + lootType = "construction"; + shelfPos[] = { + { {-4.89355,5.66748,1.16652}, 271 }, + { {-4.18066,6.06885,-2.34162}, 359.5 } + }; + toolRackPos[] = { + { {-5.11914,3.43164,1.25501}, 270 } + }; + shoeboxPos[] = { + { {1.06934,0.99707,1.16328}, 280 } + }; + palletPos[] = { + { {-1.85254,-1.68066,1.17049}, 280 }, + { {0.128906,2.68799,1.17328}, 260 }, + { {-2.81738,-1.42041,-2.33168}, 253 }, + { {-1.02344,5.35107,-2.32672}, 360 } + }; + }; + class bunker_epoch : Default { + lootType = "civ"; + shelfPos[] = { + { {-6.09766,-2.83032,0.188561}, 269 } + }; + fridgePos[] = { + { {-2.79932,5.92554,0.188561}, 351.345 } + }; + cookerPos[] = { + { {-4.37891,5.896,0.188561}, 0.345061 } + }; + chairPos[] = { + { {3.87744,-5.82983,0.198561}, 180.345 } + }; + filingPos[] = { + { {4.23975,6.01489,0.188561}, 3.34506 }, + { {-6.06055,-5.35571,0.188561}, 273.345 }, + { {-6.01172,-6.05786,0.188561}, 263 } + }; + pelicanPos[] = { + { {5.80322,4.59717,0.118561}, 89.6452 } + }; + tablePos[] = { + { {2.11572,-5.91846,0.218561}, 358 } + }; + lockerPos[] = { + { {2.0498,5.92432,0.188561}, 2.34507 }, + { {5.54297,-5.95679,0.188561}, 179.772 } + }; + shoeboxPos[] = { + { {6.08057,6.03345,0.188561}, 209 } + }; + freezerPos[] = { + { {-5.7334,5.8186,0.188561}, 355.754 } + }; + }; + class bunker_epoch_01 : Default + { + lootType = "civ"; + bedPos[] = {{{-5.6062,-4.66162,0.198561},0}}; + wardrobePos[] = {{{-4.96973,-1.5188,0.198561},0}}; + cookerPos[] = {{{-2.53882,3.17383,0.198561},0.999984}}; + chairPos[] = {{{5.60205,5.53516,0.198561},57}}; + filingPos[] = {{{1.39258,-4.93213,0.198561},270}}; + pelicanPos[] = {{{3.43359,-0.368652,0.198561},179}}; + lockerPos[] = {{{-2.90576,-5.85986,0.198561},180}}; + toolRackPos[] = {{{-0.807129,0.849365,0.198561},0.999984}}; + }; + class bunker_epoch_02 : Default + { + lootType = "civ"; + filingPos[] = {{{-4.68335,6.02905,0.198561}, 0 }}; + pelicanPos[] = {{{3.39038,4.75586,0.998561},106},{{3.44043,-5.27368,1.09856},187}}; + tablePos[] = {{{-5.69214,-5.26318,0.198561},270}}; + shoeboxPos[] = {{{-0.34082,-0.652588,0.198561},0}}; + }; + class bunker_epoch_03 : Default + { + lootType = "civ"; + palletPos[] = {{{5.12939,-4.6543,0.198561},280},{{-5.00098,4.79419,0.198561},280},{{-4.95093,-4.89502,0.198561},280},{{4.92627,5.02051,0.198561},280}}; + freezerPos[] = {{{0.429932,-0.184326,0.198561},280}}; + }; + class bunker_epoch_04 : Default + { + lootType = "civ"; + shelfPos[] = {{{5.03784,6.09985,0.198561},358}}; + couchPos[] = {{{5.24194,-4.54272,0.198561},358}}; + toolRackPos[] = {{{-6.33521,-2.39136,0.198561},269}}; + palletPos[] = {{{-4.91284,5.15063,0.198561},358}}; + }; + class bunker_epoch_05 : Default + { + lootType = "civ"; + toolRackPos[] = {{{-6.34375,-4.08228,0.198561},269 },{{4.22607,6.44775,0.198561},358}}; + }; + class bunker_epoch_06 : Default + { + lootType = "civ"; + bedPos[] = {{{0.781494,-0.343262,0.398561},357}}; + couchPos[] = {{{4.94385,-4.66699,0.398561},0.999985}}; + chairPos[] = {{{5.50708,5.47949,0.198561},40}}; + palletPos[] = {{{-4.90674,-4.79785,0.398561},0.999985}}; + freezerPos[] = {{{-4.82007,5.51099,0.398561},0.999985}}; + }; + class bunker_epoch_07 : Default + { + lootType = "civ"; + fridgePos[] = {{{-5.98901,5.21826,0.198561},271}}; + couchPos[] = {{{4.22314,4.99194,0.198561},271}}; + pelicanPos[] = {{{-1.77954,-0.48291,0.0985613},71}}; + tablePos[] = {{{5.75464,-2.42407,0.198561},91}}; + lockerPos[] = {{{3.51074,-5.99731,-0.00143862},181}}; + }; + class bunker_epoch_08 : Default + { + lootType = "civ"; + pelicanPos[] = {{{5.34814,-5.12524,0.0985613},157}}; + tablePos[] = {{{5.72852,4.86255,0.0985613},90}}; + palletPos[] = {{{-1.03052,-1.6283,0.0985613},90},{{-5.45703,5.45093,0.0985613},90}}; + }; + class bunker_epoch_09 : Default + { + lootType = "civ"; + filingPos[] = {{{-0.427002,-3.22974,0.198561},270}}; + lockerPos[] = {{{3.94238,3.28931,0.198561},0}}; + toolRackPos[] = {{{-4.68579,2.68604,0.198561},90}}; + cabinetPos[] = {{{-2.53271,-5.63306,1.59856},0}}; + }; + class bunker_epoch_10 : Default + { + lootType = "civ"; + filingPos[] = {{{5.95313,-5.95898,0.198561},93}}; + pelicanPos[] = {{{1.65479,0.0246582,0.198561},93}}; + shoeboxPos[] = {{{-3.18604,-5.94482,0.198561},360}}; + palletPos[] = {{{1.10596,2.43481,0.198561},360}}; + freezerPos[] = {{{2.24316,-2.00635,0.198561},90}}; + }; + class bunker_epoch_11 : Default + { + lootType = "civ"; + palletPos[] = {{{-0.422363,-0.419922,0.198561},90},{{1.23438,-3.04443,0.198561},90},{{2.97192,1.48828,0.198561},90},{{-1.42578,3.52393,0.198561},90},{{-4.94702,-1.37012,0.198561},90}}; + }; + class bunker_epoch_12 : Default + { + lootType = "civ"; + cookerPos[] = {{{-0.17749,3.62891,0.198561},0}}; + chairPos[] = {{{-2.82349,3.24341,0.198561},319}}; + tablePos[] = {{{-3.12524,-0.625488,0.198561},270}}; + lockerPos[] = {{{3.52197,0.408203,0.198561},90}}; + palletPos[] = {{{2.68945,-2.72729,0.198561},90}}; + }; + class bunker_epoch_13 : Default + { + lootType = "civ"; + wardrobePos[] = {{{-5.40405,3.79126,0.0153623},180}}; + cookerPos[] = {{{3.54663,4.09839,0.215362},180}}; + chairPos[] = {{{0.483887,-1.7981,0.215362},276}}; + filingPos[] = {{{-1.15649,3.83398,0.0153623},89}}; + pelicanPos[] = {{{-3.9458,-3.77197,0.115362},53}}; + }; + class bunker_epoch_14 : Default + { + lootType = "civ"; + fridgePos[] = {{{3.50195,-3.10852,0.232163},93}}; + cookerPos[] = {{{5.59717,5.83398,0.232163},359}}; + filingPos[] = {{{-5.47656,2.58411,0.232163},359}}; + tablePos[] = {{{-3.96191,-3.97363,0.232163},90}}; + }; + class bunker_epoch_15 : Default + { + lootType = "civ"; + fridgePos[] = {{{5.34229,-1.59033,0.198561},180}}; + chairPos[] = {{{2.95605,2.72632,0.198561},313}}; + filingPos[] = {{{-4.2688,3.32031,0.198561},313}}; + lockerPos[] = {{{1.14282,-1.66333,0.198561},1.99997}}; + }; + class 4_way_bunker_p3d : bunker_epoch {}; + class bunker_epoch_01_p3d : bunker_epoch_01 {}; + class bunker_epoch_02_p3d : bunker_epoch_02 {}; + class bunker_epoch_03_p3d : bunker_epoch_03 {}; + class bunker_epoch_04_p3d : bunker_epoch_04 {}; + class bunker_epoch_05_p3d : bunker_epoch_05 {}; + class bunker_epoch_06_p3d : bunker_epoch_06 {}; + class bunker_epoch_07_p3d : bunker_epoch_07 {}; + class bunker_epoch_08_p3d : bunker_epoch_08 {}; + class bunker_epoch_09_p3d : bunker_epoch_09 {}; + class bunker_epoch_10_p3d : bunker_epoch_10 {}; + class bunker_epoch_11_p3d : bunker_epoch_11 {}; + class bunker_epoch_12_p3d : bunker_epoch_12 {}; + class bunker_epoch_13_p3d : bunker_epoch_13 {}; + class bunker_epoch_14_p3d : bunker_epoch_14 {}; + class bunker_epoch_15_p3d : bunker_epoch_15 {}; + + class Land_d_HouseV_3I3 : Default + { + lootType = "civ"; + shelfPos[] = {{{-4.81348,0.700195,-1.52695},0.296967}}; + couchPos[] = {{{-0.298828,-2.36719,-1.52693},90.0049}}; + fridgePos[] = {{{-3.82813,0.592773,-1.52695},0.29689}}; + chairPos[] = {{{-3.66211,-2.86328,-1.52695},185.797}}; + }; + class Land_SZ_Mil_Barracks_L : Default + { + lootType = "mil"; + kitchenSinkPos[] = {{{-5.2334,6.62598,-1.96698},0.02771}}; + fridgePos[] = {{{-5.72266,1.19824,-1.96698},-179.973}}; + cabinetPos[] = {{{-2.0166,-4.04932,-0.667297},-177.973}}; + lockerPos[] = {{{-1.33887,5.82373,-1.96814},-89.9719}}; + tablePos[] = {{{4.17188,4.5874,-1.96921},90.0277}}; + pelicanPos[] = {{{6.02441,3.68262,-1.97244},-35.4722}}; + couchPos[] = {{{-0.398438,-1.81543,-1.96698},-268.472}}; + }; + class Land_Shed_sz_W4 : Default + { + lootType = "civ"; + toolRackPos[] = {{{-2.70313,0.858398,-1.63881},269.83}}; + lockerPos[] = {{{1.5752,4.73633,-1.27228},-0.442887}}; + tablePos[] = {{{2.68164,3.15527,-1.27229},91.3292}}; + palletPos[] = {{{-0.487305,0.932617,-1.27228},-6.1706}}; + }; + class Land_cm_HouseV_1I3 : Default + { + lootType = "civ"; + tablePos[] = {{{-2.76855,7.29004,-2.10747},-89.934}}; + fridgePos[] = {{{1.14063,0.15918,-2.10748},90.0472}}; + filingPos[] = {{{1.16699,6.16602,-2.10747},89.9739}}; + chairPos[] = {{{-2.47754,1.34863,-2.10748},-61.9694}}; + }; + class Land_Smokestack_01_F : Default + { + lootType = "industrial"; + pelicanPos[] = {{{-3.85254,0.112305,-23.2495},-53.7602}}; + shoeboxPos[] = {{{-3.94434,-1.8418,-23.2495},45.7387}}; + cabinetPos[] = {{{-0.857422,0.136719,-27.5659},-0.260666}}; + palletPos[] = {{{2.43555,-5.02832,-28.526},-91.26}}; + filingPos[] = {{{-0.540039,-1.84082,-28.5581},229.24}}; + }; + class Land_Smokestack_01_factory_F : Land_Smokestack_01_F {}; + class Land_Church_04_damaged_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + cabinetPos[] = {{{4.91113,-7.05615,-12.5271},0.14975}}; + toolRackPos[] = {{{-7.78784,3.01611,-13.862},90.0666}}; + shelfPos[] = {{{-7.83765,0.891602,-13.6092},89.0666}}; + }; + class Land_Church_04_yellow_damaged_F : Land_Church_04_damaged_F {}; + class Land_Church_04_small_yellow_damaged_F : Land_Church_04_damaged_F {}; + class Land_Church_04_small_white_damaged_F : Land_Church_04_damaged_F {}; + class Land_Shed_09_F : Default + { + lootType = "workshop"; + toiletPos[] = {{{2.00146,2.98535,-1.41129},-315.669}}; + pelicanPos[] = {{{0.23877,2.59375,-1.46129},-46.1707}}; + toolRackPos[] = {{{-0.552734,2.35107,-1.91927},-269.67}}; + }; + class Land_House_1B01_F : Default + { + lootType = "market"; + couchPos[] = {{{0.86499,0.695801,-2.80663},-90.0494}}; + tablePos[] = {{{0.953125,-5.54199,-2.80664},-180.519}}; + chairPos[] = {{{7.30835,-5.22607,-2.80663},-225.032},{{4.34155,10.2681,-2.80675},-47.0484}}; + bedPos[] = {{{1.98657,10.2769,-2.8064},92.9529}}; + wardrobePos[] = {{{-2.64233,8.43506,-2.80664},-90.5564}}; + filingPos[] = {{{-2.64355,10.7119,-2.80666},-44.0572}}; + pelicanPos[] = {{{7.20337,10.2881,-2.80673},45.8273}}; + lockerPos[] = {{{7.0481,6.85059,-2.80664},-179.597}}; + shoeboxPos[] = {{{-2.31958,5.80664,-2.80663},-221.547}}; + cookerPos[] = {{{4.74585,-1.78613,-2.80766},0.403931}}; + freezerPos[] = {{{5.80786,-1.73584,-2.80663},-0.0349731}}; + kitchenSinkPos[] = {{{7.68921,-3.7417,-2.80663},90.47}}; + }; + class Land_Chapel_02_yellow_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + cabinetPos[] = {{{-1.06836,-0.708008,-1.4879},89.4143}}; + pelicanPos[] = {{{-0.199219,1.28516,-2.51678},316.913}}; + filingPos[] = {{{1.03906,2.28174,-2.5547},-0.0845299}}; + shoeboxPos[] = {{{0.789551,0.824219,-2.48792},212.416}}; + toolRackPos[] = {{{1.8606,1.22266,-2.95108},270.933}}; + }; + class Land_Chapel_02_white_F : Land_Chapel_02_yellow_F {}; + class Land_Chapel_02_yellow_damaged_F : Land_Chapel_02_yellow_F {}; + class Land_FuelStation_03_shop_F : Default + { + lootType = "market"; + lockerPos[] = {{{-1.84961,1.02539,-1.57671},1.28944}}; + tablePos[] = {{{2.25464,-0.902344,-1.57668},90.2886}}; + freezerPos[] = {{{-1.82568,-1.51758,-1.57671},-180.212}}; + cabinetPos[] = {{{2.33936,1.36133,-0.276505},89.7886}}; + }; + class Land_GarageRow_01_large_F : Default + { + lootType = "workshop"; + pelicanPos[] = {{{-12.7754,0.143066,3.69107},-91.3877}}; + tablePos[] = {{{-6.89807,5.85205,-3.32645},-0.386032}}; + lockerPos[] = {{{12.168,1.73682,-3.32645},89.6139}}; + chairPos[] = {{{8.08386,5.69434,-3.32645},1.61395}}; + couchPos[] = {{{1.4563,5.13135,-3.32645},-89.8876}}; + toolRackPos[] = {{{-12.5472,-2.13721,-3.47641},-89.8878}}; + filingPos[] = {{{-12.2186,1.09277,-3.32645},-90.3878}}; + cabinetPos[] = {{{-6.18091,-5.33691,-2.02676},-91.3877}}; + palletPos[] = {{{-2.6864,3.99707,-3.32645},-245.386}}; + kitchenSinkPos[] = {{{12.1683,-1.36621,-3.32645},89.6139}}; + }; + class Land_Shed_12_F : Default + { + lootType = "workshop"; + cabinetPos[] = {{{-0.875488,-0.69458,0.298676},89.7889}}; + toolRackPos[] = {{{-1.06445,1.06958,-0.944687},-90.2117}}; + }; + class Land_House_1W10_F : Default + { + lootType = "civ"; + kitchenSinkPos[] = {{{-4.35547,-0.287109,-1.4537},-0.159882}}; + freezerPos[] = {{{-4.93384,-1.95313,-1.45369},270.683}}; + cookerPos[] = {{{-4.9751,-3.41748,-1.45689},269.683}}; + bedPos[] = {{{1.10498,-3.30615,-1.45255},90.8387}}; + wardrobePos[] = {{{-1.23364,-3.78418,-1.4857},180.183}}; + tablePos[] = {{{-0.847412,-0.310547,-1.4537},-0.159828}}; + shoeboxPos[] = {{{-3.9314,-3.80371,-1.45369},47.682}}; + pelicanPos[] = {{{-2.71704,-3.77441,-1.45369},180.183}}; + cabinetPos[] = {{{2.38623,-1.4541,-0.153625},180.34}}; + }; + class Land_Rail_Station_Big_F : Default + { + lootType = "market"; + palletPos[] = {{{8.69043,-5.82666,-5.02811},-163.207},{{-8.27905,-5.1748,-5.02811},-163.207}}; + filingPos[] = {{{1.75342,-3.58057,-4.96406},126.792}}; + tablePos[] = {{{-4.32031,5.62744,-4.96406},0.294312}}; + shelfPos[] = {{{-5.42163,-2.83496,-4.96406},-89.2075}}; + couchPos[] = {{{-4.43823,0.895996,-4.96406},180.793}}; + cabinetPos[] = {{{2.37891,-2.43262,-3.61406},-89.7075}}; + toolRackPos[] = {{{6.77271,0.475098,-5.17811},-89.2076}}; + lockerPos[] = {{{-1.8772,-4.78174,-5.11692},0.794418}}; + }; + class Land_WaterStation_01_F : Default + { + lootType = "workshop"; + filingPos[] = {{{-0.799805,-3.80859,-1.02364},-180.988}}; + shoeboxPos[] = {{{0.854004,-1.7085,-0.956985},-275.487}}; + pelicanPos[] = {{{-0.958984,-1.96631,-1.03856},-90.0663}}; + cabinetPos[] = {{{1.19824,-0.435547,0.261826},-90.1751}}; + palletPos[] = {{{2.79736,-1.07813,-1.05971},-275.487}}; + }; + class Land_Workshop_04_grey_F : Default + { + lootType = "workshop"; + palletPos[] = {{{3.71191,2.05664,-1.3481},-129.82}}; + shoeboxPos[] = {{{-1.58203,-3.60181,-1.21138},126.18}}; + toolRackPos[] = {{{-2.19922,-6.13208,-1.49811},-89.3201}}; + toiletPos[] = {{{1.7793,-3.14331,-1.20331},44.6818}}; + tablePos[] = {{{-1.74365,4.18774,-1.14809},-89.8201}}; + freezerPos[] = {{{0.625977,4.88916,-1.20992},0.178787}}; + }; + class Land_Workshop_04_F : Land_Workshop_04_grey_F {}; + class Land_VillageStore_01_F : Default + { + lootType = "market"; + freezerPos[] = {{{6.79028,4.87305,-1.84027},-0.881443}}; + fridgePos[] = {{{5.4541,4.91992,-1.84027},-0.38583}}; + tablePos[] = {{{6.73389,-1.2334,-1.84027},180.117}}; + cabinetPos[] = {{{3.29614,-1.67822,-0.590195},270.116}}; + kitchenSinkPos[] = {{{7.22266,7.97119,-1.91063},90.6016}}; + lockerPos[] = {{{5.92017,5.95361,-1.84027},180.604}}; + palletPos[] = {{{4.69922,1.54736,-1.84027},-44.3842}}; + shoeboxPos[] = {{{1.88989,-1.07227,-1.84027},-44.3842}}; + pelicanPos[] = {{{7.26782,1.74072,-1.84027},90.113}}; + filingPos[] = {{{4.18018,5.854,-1.80515},180.602}}; + couchPos[] = {{{2.31177,2.08447,-1.84027},180.617}}; + }; + class Land_CementWorks_01_brick_F : Default + { + lootType = "industrial"; + toiletPos[] = {{{-8.85742,-15.9517,-4.53337},-49.5696}}; + pelicanPos[] = {{{-8.37256,-17.896,-4.53339},-151.569},{{0.511719,9.00122,5.6887},-72.0694}}; + toolRackPos[] = {{{-3.27832,-25.6899,-4.7834},-90.0692},{{17.1133,-25.3362,-4.7834},89.9313}}; + lockerPos[] = {{{16.6748,-18.9382,-4.53339},89.9312}}; + palletPos[] = {{{9.10303,-13.8306,-4.53339},-151.569},{{6.85547,-3.6106,-4.53339},-151.569},{{7.67383,6.50708,-4.53339},-151.569},{{13.9785,8.10156,5.6887},-151.569}}; + tablePos[] = {{{17.2324,5.23047,-4.53338},89.9312},{{-2.77539,8.87427,-4.53338},-92.5692}}; + couchPos[] = {{{-2.11914,-1.54199,-4.53339},177.931}}; + shoeboxPos[] = {{{6.38623,-20.0698,5.6887},-151.569}}; + cabinetPos[] = {{{6.37207,1.15723,-3.1333},181.931}}; + freezerPos[] = {{{-0.0229492,19.4111,-4.5337},-90.5692}}; + chairPos[] = {{{7.8335,19.8928,-4.53381},42.4292}}; + }; + class Land_Church_04_red_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + pelicanPos[] = {{{-0.180664,7.99805,2.77977},-0.163963},{{-2.75879,7.98389,2.77977},-0.163849}}; + shelfPos[] = {{{0.730469,3.70898,-9.92351},90.834}}; + cabinetPos[] = {{{-2.37109,7.37305,-12.3228},-2.16383}}; + palletPos[] = {{{-0.655273,5.38525,-13.7358},-91.6633}}; + shoeboxPos[] = {{{-1.94336,5.31299,-9.92351},-91.6633}}; + }; + class Land_Church_04_small_F : Land_Church_04_red_F {}; + class Land_Church_04_yellow_F : Land_Church_04_red_F {}; + class Land_Church_04_white_red_F : Land_Church_04_red_F {}; + class Land_Church_04_small_white_F : Land_Church_04_red_F {}; + class Land_GuardBox_01_brown_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + toiletPos[] = {{{0.520508,-1.46533,-0.867691},134.262}}; + pelicanPos[] = {{{-0.458252,-0.527344,-0.916962},270.183}}; + shoeboxPos[] = {{{0.724121,-0.551758,-0.817841},269.683}}; + }; + class Land_GuardBox_01_smooth_F : Land_GuardBox_01_brown_F {}; + class Land_GuardHouse_02_grey_F : Default + { + lootType = "mil"; + toiletPos[] = {{{0.530762,1.94946,-1.55855},180.265}}; + lockerPos[] = {{{4.25732,-0.460938,-1.55855},180.265}}; + shelfPos[] = {{{4.80078,3.34204,-1.55855},88.7647}}; + couchPos[] = {{{3.96338,-2.50537,-1.55855},0.265289}}; + tablePos[] = {{{-2.32422,-2.70117,-1.55855},-90.2348}}; + filingPos[] = {{{2.31396,-3.53906,-1.55855},180.265}}; + shoeboxPos[] = {{{0.577637,-3.58545,-1.55855},-129.235}}; + cabinetPos[] = {{{-2.30127,-0.740967,-0.25264},-91.2348}}; + }; + class Land_Sawmill_01_F : Default + { + lootType = "construction"; + palletPos[] = {{{-1.31445,12.4966,-5.05673},-323.324}}; + shoeboxPos[] = {{{-1.49316,0.804199,-5.00999},-323.324}}; + toolRackPos[] = {{{7.6875,2.58228,-5.19531},-268.324}}; + tablePos[] = {{{11.2813,12.8384,-5.63091},-270.825}}; + pelicanPos[] = {{{-2.37695,16.2117,-5.06169},-50.8244}}; + filingPos[] = {{{7.40234,8.24512,-5.01089},-269.325}}; + chairPos[] = {{{6.75537,16.1868,-5.06514},-314.824}}; + lockerPos[] = {{{7.30859,-6.07617,-5.04123},-269.325}}; + }; + class Land_Church_05_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + pelicanPos[] = {{{-4.74219,-2.08838,-4.05009},90.6838}}; + couchPos[] = {{{-3.06445,-1.69189,-6.08238},179.184}}; + filingPos[] = {{{-3.86523,1.11963,-6.08408},-54.3171}}; + cabinetPos[] = {{{2.87988,-2.92236,-4.68581},-88.8166}}; + shoeboxPos[] = {{{2.78906,5.44019,-6.08701},142.184}}; + tablePos[] = {{{7.08838,-0.0402832,-5.78513},89.1831}}; + palletPos[] = {{{1.09863,-0.217041,-6.09041},-144.816}}; + }; + class Land_House_2W04_F : Default + { + lootType = "civ"; + bedPos[] = {{{4.89355,2.66895,-0.82222},-179.858}}; + wardrobePos[] = {{{7.17432,6.73779,-0.823486},0.725708}}; + couchPos[] = {{{0.817383,2.31836,-0.823502},-179.302}}; + tablePos[] = {{{3.50977,2.2998,-0.823517},89.642}}; + filingPos[] = {{{0.0368652,-0.246094,-0.823502},-132.746},{{-4.89526,4.19385,-5.14581},-37.2732}}; + cookerPos[] = {{{3.58398,4.43457,-0.823578},-0.267136}}; + fridgePos[] = {{{2.55493,4.47363,-0.823502},0.233124}}; + shoeboxPos[] = {{{-5.00391,5.0498,-0.823502},139.746}}; + toolRackPos[] = {{{8.47168,6.36328,-5.90211},-90.2751}}; + }; + class Land_MobileRadar_01_radar_F : Default + { + lootType = "mil"; + pelicanPos[] = {{{0.191406,-7.94824,-0.746536},180.498}}; + shoeboxPos[] = {{{-2.61279,-6.15039,-0.746536},0}}; + palletPos[] = {{{2.73291,-7.55664,-6.71332},41.9999}}; + }; + class Land_House_1W08_F : Default + { + lootType = "civ"; + freezerPos[] = {{{-4.72461,3.90063,-1.89905},-0.362625}}; + couchPos[] = {{{-0.335449,-0.528564,-1.87782},90.1365}}; + tablePos[] = {{{-0.118652,3.87354,-1.87782},-0.864044}}; + wardrobePos[] = {{{4.14941,3.45117,-1.87782},90.6361}}; + filingPos[] = {{{4.22461,1.05811,-1.87782},90.6367}}; + chairPos[] = {{{6.19043,3.6438,-1.86476},27.1356}}; + cabinetPos[] = {{{-3.3877,1.12085,-0.527756},2.13582}}; + }; + class Land_Workshop_05_F : Default + { + lootType = "workshop"; + palletPos[] = {{{4.70068,-2.08936,-1.24338},-44.7541}}; + toolRackPos[] = {{{2.02686,1.84668,-1.6434},269.746}}; + tablePos[] = {{{-2.20142,5.646,-1.35411},269.746}}; + filingPos[] = {{{1.42456,6.33154,-1.39339},90.2453}}; + shelfPos[] = {{{2.13135,0.059082,-1.24338},0.245869}}; + kitchenSinkPos[] = {{{4.12231,-3.72803,-1.24069},180.246}}; + }; + class Land_Workshop_05_grey_F : Land_Workshop_05_F {}; + class Land_Cowshed_01_B_F : Default + { + lootType = "construction"; + palletPos[] = {{{-10.5615,-1.86426,-3.09298},-235.172},{{10.3689,1.96289,-3.09298},-235.172}}; + couchPos[] = {{{29.9736,-5.90723,-3.09307},0.828293}}; + pelicanPos[] = {{{18.376,-6.79785,-3.0808},-141.672}}; + shelfPos[] = {{{8.03052,-3.71777,-3.09298},-178.172}}; + fridgePos[] = {{{30.1987,-3.58789,-3.09307},-179.172}}; + kitchenSinkPos[] = {{{28.1211,-3.57129,-3.09307},-179.672}}; + freezerPos[] = {{{24.8489,-3.57031,-3.09307},-180.172}}; + cookerPos[] = {{{26.3438,-3.53711,-3.09307},-179.672}}; + toolRackPos[] = {{{-18.4255,2.52051,-3.19304},-90.6732}}; + lockerPos[] = {{{-12.3315,3.71973,-3.09303},0.328125}}; + shoeboxPos[] = {{{-4.4939,3.13379,-3.04298},-235.172}}; + toiletPos[] = {{{17.6943,4.80371,-3.09307},-123.672}}; + cabinetPos[] = {{{20.4338,6.75977,-1.74299},88.828}}; + }; + class Land_GuardBox_01_green_F : Default + { + lootType = "civ"; + pelicanPos[] = {{{-0.584961,-0.571533,-0.90152},-89.3778}}; + shoeboxPos[] = {{{0.584473,-1.52368,-0.842361},-28.3778},{{-0.115234,-1.4856,-0.846786},-327.878}}; + }; + class Land_HouseRuin_Small_01_F : Default + { + lootType = "civ"; + palletPos[] = {{{-1.03271,2.87109,-2.12854},-95.5178}}; + toiletPos[] = {{{-6.51465,-3.77393,-2.16118},226.482}}; + shoeboxPos[] = {{{-5.77783,3.84668,-1.94525},145.482}}; + }; + class Land_Barracks_04_F : Default + { + lootType = "mil"; + shelfPos[] = {{{-7.57324,8.41895,-1.96904},-0.0976563},{{1.44971,4.60962,-1.97171},-269.598}}; + shoeboxPos[] = {{{-5.31689,8.22046,-1.9678},-127.098},{{7.87256,2.1062,-1.97305},-53.597}}; + cabinetPos[] = {{{-8.13428,2.98169,-0.717667},-0.0976563},{{-5.1499,-4.36963,-0.620117},-90.6139}}; + bedPos[] = {{{-4.09229,6.87402,-1.97017},0.401611}}; + tablePos[] = {{{-4.37842,3.30981,-1.96783},-91.102}}; + lockerPos[] = {{{-1.13916,6.56982,-1.96992},-90.0991},{{-2.11768,7.19604,-1.96967},-270.099}}; + chairPos[] = {{{0.777832,7.71655,-1.96989},32.4025}}; + filingPos[] = {{{-1.19287,1.9834,-1.968},-141.098}}; + freezerPos[] = {{{2.21338,7.1853,-1.97078},-90.0974}}; + kitchenSinkPos[] = {{{2.23682,5.57031,-1.97212},-89.5974}}; + cookerPos[] = {{{2.25342,4.21289,-1.96783},-90.0971}}; + pelicanPos[] = {{{7.63428,7.73877,-1.97166},-322.097}}; + toolRackPos[] = {{{-8.14453,-1.62354,-2.12061},-90.5985}}; + palletPos[] = {{{-5.72217,-2.27588,-1.97034},37.8858}}; + couchPos[] = {{{-6.98438,5.25073,-1.96916},-179.098}}; + toiletPos[] = {{{5.55762,3.20435,-1.97597},-90.0963}}; + }; + class Land_Mine_01_warehouse_F : Default + { + lootType = "industrial"; + toolRackPos[] = {{{-6.64038,13.2808,-6.61807},90.9994}}; + lockerPos[] = {{{-7.87573,10.5029,-6.30167},180}}; + tablePos[] = {{{-8.86548,14.6792,-6.30167},-0.500267}}; + pelicanPos[] = {{{-10.0859,12.8818,-6.40167},-73.5},{{-1.75317,-12.6953,2.31833},-90},{{-2.44189,5.53564,3.78516},91.7993}}; + cabinetPos[] = {{{-10.8323,12.0835,-5.00159},0.49968}}; + freezerPos[] = {{{-5.74927,4.45654,-6.33167},-90}}; + palletPos[] = {{{-3.28442,5.87256,-6.33167},-90},{{-4.99316,-13.5034,2.31833},-90}}; + filingPos[] = {{{-2.0083,8.84717,-6.4406},-0.000190735}}; + shelfPos[] = {{{-3.34399,8.94434,-6.45025},-0.000183105}}; + shoeboxPos[] = {{{7.91479,15.5498,4.84833},152}}; + }; + class Land_CoalPlant_01_MainBuilding_F : Default + { + lootType = "industrial"; + shoeboxPos[] = {{{16.8926,-1.39087,-13.864},149.816}}; + pelicanPos[] = {{{6.9873,-2.71777,-1.87692},-147.685}}; + cabinetPos[] = {{{9.78027,0.779053,-0.476944},180.316},{{-3.48242,17.2822,-11.5774},181.316}}; + toiletPos[] = {{{-2.59766,18.2539,-12.9275},-90.6845}}; + lockerPos[] = {{{2.16406,16.3853,-12.8775},90.2633}}; + toolRackPos[] = {{{-13.9619,17.5903,-13.1275},-90.6832}}; + tablePos[] = {{{-3.66992,18.7744,-12.8775},90.8156}}; + fridgePos[] = {{{-13.3125,15.6213,-12.8775},179.816}}; + freezerPos[] = {{{-4.58594,15.4504,-12.8775},180.816}}; + }; + class Land_HealthCenter_01_F : Default + { + lootType = "medical"; + bedPos[] = {{{-12.2559,-2.20117,-2.86598},272.129}}; + kitchenSinkPos[] = {{{-10.875,-4.92285,-2.86598},181.629},{{-8.08643,-4.48096,-2.91599},270.629}}; + couchPos[] = {{{-7.2085,3.75684,-2.86598},0.629086},{{0.963379,3.25635,-2.866},181.129}}; + tablePos[] = {{{-8.70386,3.70947,-2.86598},269.629}}; + lockerPos[] = {{{-12.5215,2.16309,-2.86598},181.129}}; + cabinetPos[] = {{{-8.71777,1.8667,-1.61591},270.129},{{-10.8899,-1.47461,-1.5159},90.1284}}; + chairPos[] = {{{-12.8921,5.11182,-2.86598},299.129},{{4.979,4.99902,-2.86598},40.6289}}; + freezerPos[] = {{{-7.8728,-1.80957,-2.86598},0.128933}}; + fridgePos[] = {{{-6.64868,-1.76709,-2.86598},0.129078}}; + cookerPos[] = {{{-4.53369,-4.56445,-2.86598},91.1285}}; + toiletPos[] = {{{-4.96118,5.45459,-2.86598},0.129047}}; + pelicanPos[] = {{{-1.11987,-4.50293,-2.866},134.128}}; + filingPos[] = {{{-3.61841,-4.92822,-2.86598},207.129}}; + shelfPos[] = {{{2.96655,5.59766,-2.86598},0.629318}}; + }; + class Land_Radar_01_HQ_F : Default + { + lootType = "mil"; + palletPos[] = {{{-7.44141,-3.88794,3.82829},29.4453},{{-1.2666,-6.1958,-0.187286},-330.549},{{-3.03125,-5.88452,-4.20287},-330.549}}; + toolRackPos[] = {{{-0.270508,0.19458,-0.437302},-269.049},{{4.07715,-7.06421,-0.437302},0.951385},{{-6.01465,6.70605,-5.25632},-89.0484}}; + lockerPos[] = {{{-5.49707,2.48877,-0.187286},-90.0483},{{-6.9209,3.82495,-4.20287},0.451385}}; + tablePos[] = {{{-9.9248,3.7251,-0.187286},-0.0486145},{{5.7002,-5.1106,-0.187286},-270.049}}; + kitchenSinkPos[] = {{{-6.47949,0.129395,-0.187286},-270.549}}; + freezerPos[] = {{{-6.53613,2.00977,-0.187286},-271.049},{{5.38379,-7.42188,-4.20287},-0.0486145}}; + pelicanPos[] = {{{-10,-10.2607,-0.237289},-128.049},{{-10.001,-10.3684,-4.25286},-143.048},{{5.24609,-2.25024,-4.20287},-218.049},{{-4.04785,7.97729,-5.05773},0.951447}}; + filingPos[] = {{{-10.5771,-7.37476,-0.187286},-39.0486}}; + bedPos[] = {{{4.70605,-2.37061,-0.187286},-270.049}}; + wardrobePos[] = {{{0.43457,-0.38501,-0.187286},-90.0489}}; + couchPos[] = {{{1.19238,1.98486,-0.187286},-179.049},{{-9.67188,0.241699,-4.20287},-180.046}}; + shelfPos[] = {{{5.62109,3.76318,-0.187286},-324.549},{{-3.14551,3.63696,-4.20287},-318.549}}; + cabinetPos[] = {{{-6.46582,-3.06201,-2.90279},-89.5546},{{-6.13965,-7.30566,-2.75278},-1.05576}}; + chairPos[] = {{{-1.64258,3.32031,-4.20287},-42.5486}}; + fridgePos[] = {{{1.81543,3.86523,-4.20287},-0.0486145}}; + shoeboxPos[] = {{{5.51172,-10.5527,-4.20287},-51.5489}}; + }; + class Land_House_1W05_F : Default + { + lootType = "civ"; + bedPos[] = {{{-1.50488,0.31543,-0.827423},0.236744}}; + tablePos[] = {{{0.0864258,0.803711,-0.827652},89.2363}}; + kitchenSinkPos[] = {{{4.15747,-2.13184,-0.827652},180.236}}; + cookerPos[] = {{{2.83057,-2.11328,-0.827652},180.236}}; + couchPos[] = {{{1.87622,0.977539,-0.827652},180.737}}; + wardrobePos[] = {{{0.71167,-2.16699,-0.827652},180.237}}; + cabinetPos[] = {{{2.02026,3.85938,0.422424},89.7357}}; + shelfPos[] = {{{5.14429,-0.163086,-0.827652},89.7364}}; + toolRackPos[] = {{{4.21533,-4.25684,-3.41901},-0.763229}}; + }; + class Land_HouseRuin_Big_03_half_F : Default + { + lootType = "civ"; + filingPos[] = {{{-0.285156,1.41211,-1.82099},0.350769}}; + shoeboxPos[] = {{{2.94922,0.61084,-1.80632},-281.649}}; + palletPos[] = {{{2.82422,-1.65576,-1.80488},-281.649}}; + tablePos[] = {{{2.25146,-6.16553,-1.80585},0.134644}}; + toiletPos[] = {{{-1.61572,-8.20898,-1.77151},-180.151}}; + }; + class Land_GuardHouse_02_F : Default + { + lootType = "mil"; + toiletPos[] = {{{4.68799,3.46875,-1.55853},37.275}}; + shelfPos[] = {{{4.38721,-1.24805,-1.55853},-1.22449}}; + tablePos[] = {{{-2.36816,-2.60938,-1.55853},-90.2251}}; + pelicanPos[] = {{{4.13965,-2.97461,-1.60853},-236.725}}; + lockerPos[] = {{{3.27148,-0.418945,-1.55853},-180.225}}; + cabinetPos[] = {{{-2.88672,-0.74707,-0.33535},-89.7253}}; + toolRackPos[] = {{{-1.65918,2.50879,-1.83279},89.7752}}; + shoeboxPos[] = {{{0.638672,2.62109,-1.55853},-236.725}}; + }; + class Land_Workshop_02_grey_F : Default + { + lootType = "workshop"; + toolRackPos[] = {{{2.23291,-0.620605,-1.68878},90.0223}}; + tablePos[] = {{{1.38086,-1.07764,-1.38876},180.022}}; + lockerPos[] = {{{-1.76489,-0.750977,-1.38721},270.022}}; + shoeboxPos[] = {{{-0.117188,-0.0244141,-1.32866},-39.4778}}; + filingPos[] = {{{1.83643,1.72363,-1.32912},49.5219}}; + cabinetPos[] = {{{-1.18335,1.97168,-0.0212402},90.0218}}; + }; + class Land_Workshop_02_F : Land_Workshop_02_grey_F {}; + class Land_Camp_House_01_brown_F : Default + { + lootType = "civ"; + freezerPos[] = {{{-2.50635,1.896,-1.40231},-180.087}}; + shelfPos[] = {{{3.13232,2.21753,-1.40231},-270.055}}; + bedPos[] = {{{1.97119,6.09253,-1.40132},-270.055}}; + wardrobePos[] = {{{-2.19287,6.45654,-1.40231},0.892761}}; + tablePos[] = {{{-2.70166,4.24585,-1.40231},-90.107}}; + shoeboxPos[] = {{{-2.35498,0.133545,-1.40231},-312.587}}; + chairPos[] = {{{2.10889,0.353027,-1.4023},47.3957}}; + }; + class Land_HouseRuin_Small_02_F : Default + { + lootType = "civ"; + chairPos[] = {{{-2.37109,0.603027,-2.38702},45.1045}}; + filingPos[] = {{{-1.9292,-2.13525,-2.4726},93.1027},{{-5.92041,0.928711,1.2378},322.605}}; + tablePos[] = {{{0.0834961,4.98828,-2.47259},0.0993376}}; + shoeboxPos[] = {{{-0.238281,-4.47852,-2.4726},350.603}}; + lockerPos[] = {{{-1.99609,-2.05713,1.23779},90.1044}}; + palletPos[] = {{{3.75928,-1.27588,1.23781},325.104}}; + cabinetPos[] = {{{-1.0752,0.0302734,-1.0225},0.604628}}; + }; + class Land_DeerStand_02_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + shoeboxPos[] = {{{-0.896973,-2.44574,0.913559},40.3256}}; + tablePos[] = {{{0.841797,-1.71057,0.913559},90.8252}}; + cabinetPos[] = {{{-0.0998535,-2.72882,1.6136},270.326}}; + filingPos[] = {{{0.0373535,-0.813416,0.913574},8.38382}}; + }; + class Land_DPP_01_mainFactory_old_F : Land_DPP_01_mainFactory_F {}; + class Land_House_1W12_F : Default + { + lootType = "civ"; + bedPos[] = {{{3.93481,-5.5625,-2.51158},0.435066}}; + wardrobePos[] = {{{2.34229,-4.5293,-2.51157},-0.0650311}}; + couchPos[] = {{{0.430908,-7.41309,-2.51156},180.433}}; + tablePos[] = {{{3.11792,-8.34375,-2.51157},179.935},{{5.104,-3.47363,-2.51156},179.935}}; + kitchenSinkPos[] = {{{3.19604,-0.246094,-2.51156},0.434435}}; + cookerPos[] = {{{4.46753,-0.285156,-2.51159},-0.0655537}}; + fridgePos[] = {{{5.34595,-0.238281,-2.51156},-0.0655537}}; + shelfPos[] = {{{8.20947,-3.2002,-2.51156},89.9348}}; + filingPos[] = {{{5.52051,3.5625,-2.51156},317.935}}; + shoeboxPos[] = {{{5.57495,0.945313,-2.51156},43.9344}}; + cabinetPos[] = {{{2.48828,-1.38477,-1.11147},0.435066}}; + }; + class Land_Radar_01_kitchen_F : Default + { + lootType = "industrial"; + filingPos[] = {{{-7.39111,6.64453,-3.95175},266.547}}; + lockerPos[] = {{{7.86035,6.63672,-3.95175},89.5467}}; + tablePos[] = {{{3.77295,-1.2793,-3.95175},178.047}}; + toiletPos[] = {{{6.23438,-6.13379,-3.95175},270.54},{{5.3042,-7.45117,-3.95177},90.5453}}; + shelfPos[] = {{{-2.70459,-1.54688,-3.95175},179.047}}; + couchPos[] = {{{-6.53857,11.8789,-3.95175},181.547}}; + pelicanPos[] = {{{-3.88721,14.2256,-3.95175},34.547}}; + shoeboxPos[] = {{{5.25684,11.2539,-3.95175},-47.9528}}; + kitchenSinkPos[] = {{{-3.24121,-5.50098,-3.95175},89.546}}; + toolRackPos[] = {{{6.61963,12.1797,-4.05176},1.04707}}; + palletPos[] = {{{0.132324,3.66113,-3.95175},-47.9528}}; + cabinetPos[] = {{{-0.236816,12.0449,-2.70168},90.0467}}; + }; + class Land_House_1W03_F : Default + { + lootType = "civ"; + couchPos[] = {{{-0.76001,1.29492,-2.32535},-0.189102}}; + kitchenSinkPos[] = {{{-3.09741,4.31055,-2.32535},0.316422}}; + fridgePos[] = {{{-1.80664,4.30762,-2.32535},0.849014}}; + cabinetPos[] = {{{-0.857422,-2.00098,-1.12527},-90.1892}}; + tablePos[] = {{{-3.51611,0.738281,-2.32535},-90.1786}}; + bedPos[] = {{{1.50342,-3.87793,-2.32539},0.311554}}; + wardrobePos[] = {{{1.44336,-7.9873,-2.32535},-179.664}}; + chairPos[] = {{{-3.30371,-7.6543,-2.32533},-138.701}}; + filingPos[] = {{{-1.53369,-8.08496,-2.32535},-179.649}}; + shoeboxPos[] = {{{-0.870605,-5.82422,-2.32535},-57.6647}}; + shelfPos[] = {{{-3.83716,-5.22559,-2.32535},-90.1894}}; + }; + class Land_House_2B03_F : Default + { + lootType = "industrial"; + bedPos[] = {{{1.86328,-2.61621,-2.21303},1.59668}}; + wardrobePos[] = {{{-2.46484,-5.36987,-2.21303},-89.9033}}; + couchPos[] = {{{-0.20166,-6.50928,-2.21303},-269.904}}; + chairPos[] = {{{-2.07178,-1.86426,-2.21303},-46.9034}}; + shoeboxPos[] = {{{1.43701,-5.35718,-2.21303},-52.4033}}; + palletPos[] = {{{0.60791,3.18872,-2.21303},-329.903}}; + toolRackPos[] = {{{2.61963,6.29761,-5.66862},0.0966187}}; + lockerPos[] = {{{3.55908,0.46167,-5.46861},-269.403}}; + cabinetPos[] = {{{1.18604,6.97998,-4.2059},-178.904}}; + tablePos[] = {{{-3.60791,2.69702,-5.46861},-90.403}}; + pelicanPos[] = {{{0.276367,7.26123,-5.50598},-0.403381}}; + }; + class Land_Barracks_05_F : Default + { + lootType = "mil"; + filingPos[] = {{{-1.51025,-2.98779,-1.90714},-131.369},{{-5.12256,0.363281,-1.90713},47.1315}}; + pelicanPos[] = {{{1.67578,-2.33447,-1.90713},141.132}}; + tablePos[] = {{{2.4541,-0.556152,-1.90712},90.6328},{{-6.89355,-2.87793,-1.90713},-181.37}}; + toolRackPos[] = {{{-2.11328,-1.77979,-2.35715},89.6317}}; + lockerPos[] = {{{-9.21191,-2.37988,-1.90713},-89.8704}}; + shelfPos[] = {{{-4.79102,-2.03467,-1.90713},89.6299}}; + cabinetPos[] = {{{3.24902,-0.102051,-0.5811},0.132095}}; + freezerPos[] = {{{-3.40234,-2.90918,-1.90714},-179.368}}; + }; + class Land_HouseRuin_Big_01_half_F : Default + { + lootType = "civ"; + shelfPos[] = {{{-1.97949,-7.73999,-0.61953},180.202}}; + couchPos[] = {{{0.330078,-6.82983,-0.605919},89.7021}}; + palletPos[] = {{{0.654297,-0.979004,-0.61953},245.201}}; + shoeboxPos[] = {{{-2.52734,7.0188,-0.641991},124.18}}; + toolRackPos[] = {{{0.308594,3.39526,-1.11288},179.701}}; + tablePos[] = {{{-3.15137,-3.96606,-0.603508},-89.7984}}; + cabinetPos[] = {{{-1.35156,2.89185,0.830559},90.7011}}; + }; + class Land_IndustrialShed_01_F : Default + { + lootType = "workshop"; + pelicanPos[] = {{{-3.73022,-9.72266,-1.33955},-179.865}}; + palletPos[] = {{{0.201172,4.75293,-4.62936},-215.364},{{0.32959,-4.02051,-4.62936},-215.359}}; + couchPos[] = {{{2.97168,9.01367,-4.62936},-89.8639}}; + filingPos[] = {{{4.8252,3.73926,-4.62936},89.1364}}; + chairPos[] = {{{-3.42993,1.50098,-4.62936},-90.3639}}; + tablePos[] = {{{4.66479,-1.73584,-4.62936},90.1365}}; + shoeboxPos[] = {{{-3.23926,-7.21191,-4.62935},65.1365}}; + }; + class Land_Rail_Warehouse_Small_F : Default + { + lootType = "construction"; + toolRackPos[] = {{{0.867188,3.06445,-1.65653},-0.343735}}; + lockerPos[] = {{{7.3584,0.245361,-1.35654},89.656}}; + palletPos[] = {{{2.38965,0.318604,-1.35654},-156.844}}; + tablePos[] = {{{-0.176758,-2.16089,-1.35654},180.156}}; + shelfPos[] = {{{5.58984,-2.4458,-1.35654},179.156}}; + filingPos[] = {{{-1.60449,2.63892,-1.35654},-42.3443}}; + shoeboxPos[] = {{{6.16895,2.22461,-1.35654},-156.844}}; + }; + class Land_House_2W02_F : Default + { + lootType = "civ"; + lockerPos[] = {{{8.26245,-2.01172,-1.29372},-179.593}}; + chairPos[] = {{{5.63354,-1.72656,-1.29372},-149.096},{{0.497314,-3.39844,-4.04601},-94.0974}}; + bedPos[] = {{{2.25171,-1.78906,-1.29372},-178.097}}; + wardrobePos[] = {{{4.53442,-1.11328,-1.29372},89.9038}}; + tablePos[] = {{{8.59448,2.43457,-1.29372},89.9038},{{1.20142,-1.34473,-4.046},-90.594}}; + couchPos[] = {{{5.67554,-2.68945,-4.04601},-0.0961609}}; + kitchenSinkPos[] = {{{5.80127,1.92871,-4.04601},-0.0961609}}; + fridgePos[] = {{{4.52075,1.9541,-4.04601},-0.596161}}; + filingPos[] = {{{-0.488037,-1.9834,-4.046},-180.094}}; + shoeboxPos[] = {{{6.87524,3.76074,-1.29372},-144.596}}; + }; + class Land_Barn_03_large_F : Default + { + lootType = "construction"; + toolRackPos[] = {{{6.61719,-16.4053,-2.74434},-269.74},{{-6.8667,17.2676,-2.80023},-89.2434}}; + couchPos[] = {{{5.51953,-9.6123,-2.64548},0.256897}}; + shelfPos[] = {{{6.48975,-2.69922,-2.64665},-269.744}}; + filingPos[] = {{{6.37305,3.93848,-2.64786},-269.744}}; + tablePos[] = {{{6.11621,10.0693,-2.59874},-269.744}}; + palletPos[] = {{{-0.0932617,-7.35107,-2.64671},-333.744},{{1.1958,6.01904,-2.64749},-333.744},{{-4.70313,-16.9983,-2.64497},-333.742}}; + lockerPos[] = {{{-6.5083,10.1785,-2.64897},-90.2434}}; + chairPos[] = {{{-6.32617,3.60254,-2.64784},-89.2435}}; + pelicanPos[] = {{{0.800781,-1.2168,-2.64641},-333.744}}; + freezerPos[] = {{{-6.47705,-3.26514,-2.64664},-89.7435}}; + cabinetPos[] = {{{-6.87207,-7.88037,-1.39577},0.256409}}; + }; + class Land_Chapel_02_white_damaged_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + cabinetPos[] = {{{0.052002,2.60254,-0.223801},88.0755}}; + shoeboxPos[] = {{{-0.791992,1.43945,-1.7845},-236.925}}; + pelicanPos[] = {{{0.629883,1.46484,-1.83058},34.0754}}; + }; + class Land_Barn_04_F : Default + { + lootType = "construction"; + lockerPos[] = {{{9.65771,-6.89404,-5.42911},-269.83}}; + tablePos[] = {{{9.59326,-12.1714,-5.42911},-270.33}}; + freezerPos[] = {{{9.69189,-17.8008,-5.42911},-270.83}}; + couchPos[] = {{{7.27979,-24.9019,-5.42912},-269.83},{{6.70459,21.9866,-5.42911},-89.3298}}; + toolRackPos[] = {{{-2.85596,-26.1216,-5.67912},-179.325}}; + kitchenSinkPos[] = {{{-11.0654,-23.2974,-5.42912},-90.3378}}; + shelfPos[] = {{{-11.2788,-12.4233,-5.42909},-90.3299}}; + chairPos[] = {{{-10.897,9.86206,-5.42911},-90.3299}}; + filingPos[] = {{{-11.147,20.0383,-5.42911},-90.3299}}; + bedPos[] = {{{9.32568,9.59277,-5.42911},1.16998}}; + palletPos[] = {{{-0.682617,13.0063,-5.42911},-320.83},{{-0.995605,1.47925,-5.42911},-320.83},{{-0.950684,-10.4038,-5.42911},-320.83}}; + cabinetPos[] = {{{-0.469727,-3.85327,-4.02902},0.169983},{{-0.882324,7.05762,-4.02902},-180.33}}; + pelicanPos[] = {{{-1.21729,-6.91553,-5.42911},-320.83}}; + }; + class Land_HouseRuin_Big_03_F : Default + { + lootType = "civ"; + lockerPos[] = {{{-0.298828,1.43628,-0.563751},-1.6514}}; + tablePos[] = {{{2.71484,-7.93481,-0.528076},-181.152},{{-2.49902,-5.8208,-4.53437},-180.152}}; + cabinetPos[] = {{{-0.124023,-5.51294,0.739464},-89.651}}; + palletPos[] = {{{1.77832,-1.35889,-0.541603},-296.151}}; + pelicanPos[] = {{{2.84375,3.90625,-0.622795},-235.151}}; + freezerPos[] = {{{3.6123,-2.46631,-4.53437},-0.151398}}; + shoeboxPos[] = {{{0.601563,-3.89233,-4.53437},-296.151}}; + toolRackPos[] = {{{-0.152344,1.61084,-4.69476},-0.151398}}; + }; + class Land_House_2W05_F : Default + { + lootType = "civ"; + shelfPos[] = {{{-1.31348,-3.78125,-0.614944},90.1683}}; + tablePos[] = {{{-3.20996,-4.66699,-0.61496},180.169},{{-7.2373,-3.7417,-0.614944},269.19}}; + bedPos[] = {{{-5.18945,-3.71338,-0.615128},180.669}}; + wardrobePos[] = {{{-6.86035,0.986816,-0.614944},-0.331471}}; + palletPos[] = {{{-6.17773,3.14014,-3.39426},318.807}}; + chairPos[] = {{{-2.69922,4.47168,-3.39426},139.168}}; + kitchenSinkPos[] = {{{-6.83887,0.984375,-3.32794},0.168529}}; + cookerPos[] = {{{-5.56934,0.970703,-3.3284},0.168528}}; + freezerPos[] = {{{-1.58105,0.523438,-3.32794},89.6683}}; + lockerPos[] = {{{2.5,-4.72559,-3.32794},180.183}}; + shoeboxPos[] = {{{2.23535,-1.84131,-3.32794},227.669}}; + cabinetPos[] = {{{-4.52832,1.78467,-2.12309},269.169}}; + filingPos[] = {{{-7.31055,-4.76025,-3.32794},220.189}}; + couchPos[] = {{{-5.05664,-3.95459,-3.32794},89.6918}}; + }; + class Land_ServiceHangar_01_R_F : Default + { + lootType = "workshop"; + bedPos[] = {{{-8.82129,13.5615,0.101723},1.86125}}; + couchPos[] = {{{1.35547,13.8799,0.10144},-89.6406}}; + filingPos[] = {{{8.84619,14.7227,0.10144},-0.139984}}; + chairPos[] = {{{19.1294,5.94238,0.10144},57.3598}}; + palletPos[] = {{{-0.0253906,4.54102,0.10144},135.353}}; + freezerPos[] = {{{-9.18848,-21.7852,0.10144},-89.6406}}; + kitchenSinkPos[] = {{{-9.18311,-10.0264,0.10144},-90.1407}}; + toolRackPos[] = {{{20.3262,-10.2637,-0.198578},90.3598}}; + pelicanPos[] = {{{-8.63672,14.2441,3.2434},-37.1392}}; + }; + class Land_ServiceHangar_01_L_F : Default + { + lootType = "mil"; + tablePos[] = {{{19.8408,-0.854492,0.10144},89.8598},{{-3.48633,-6.07422,0.151443},89.8598}}; + toolRackPos[] = {{{16.2842,-14.498,0.00143433},-178.64}}; + lockerPos[] = {{{-4.4834,-2.72949,0.10144},-0.140579}}; + couchPos[] = {{{-8.46973,-5.95215,0.10144},-180.14}}; + cabinetPos[] = {{{-3.10645,-7.71289,1.25152},-180.14}}; + palletPos[] = {{{6.44043,-2.83496,0.10144},-224.64},{{1.59961,9.62305,0.10144},-224.64}}; + pelicanPos[] = {{{-4.42285,-7.98926,3.2434},-224.64}}; + freezerPos[] = {{{-3.47998,-3.26855,3.2434},89.3598}}; + kitchenSinkPos[] = {{{-6.60205,-2.74707,3.2434},-0.139893}}; + filingPos[] = {{{-9.30469,10.9053,0.10144},-90.1401}}; + shoeboxPos[] = {{{-6.11035,0.168945,0.10144},36.3598}}; + shelfPos[] = {{{-9.36572,0.804688,0.10144},-90.6408}}; + }; + class Land_House_1W09_F : Default + { + lootType = "civ"; + bedPos[] = {{{-5.75293,-3.6355,-1.95078},-89.992}}; + wardrobePos[] = {{{-0.455078,-2.76147,-1.95308},89.9418}}; + tablePos[] = {{{-5.05762,-0.39917,-1.95308},-0.0493622},{{-4.22949,0.766113,-1.95308},179.951}}; + couchPos[] = {{{-3.87598,3.30054,-1.95306},-88.5532}}; + kitchenSinkPos[] = {{{-1.0498,4.04663,-1.95308},0.0102386}}; + shelfPos[] = {{{-6.34277,0.527588,-1.95308},180.451}}; + fridgePos[] = {{{0.643555,4.08569,-1.95308},-1.03757}}; + cabinetPos[] = {{{-0.199219,1.18066,-0.653},179.991}}; + }; + class Land_i_Shed_Ind_old_F : Land_i_Shed_Ind_F {}; + class Land_House_1W11_F : Default + { + lootType = "civ"; + chairPos[] = {{{-6.56348,-4.94678,-2.82291},125.298}}; + kitchenSinkPos[] = {{{-4.26074,-1.10059,-2.63437},-90.2121}}; + cookerPos[] = {{{-4.23242,-2.32324,-2.63535},-89.7121}}; + fridgePos[] = {{{-4.26172,-3.20313,-2.63483},-90.7024}}; + couchPos[] = {{{1.51855,-1.4209,-2.63501},-89.7433}}; + tablePos[] = {{{1.86035,-5.79834,-2.63776},179.757}}; + filingPos[] = {{{-4.33887,-5.80518,-2.63535},-90.1906}}; + shelfPos[] = {{{-2.21582,-0.454834,-2.63448},-0.229721}}; + }; + class Land_Bunker_02_double_F : Default + { + lootType = "mil"; + pelicanPos[] = {{{0.244141,1.23438,-1.0304},0.391693}}; + shoeboxPos[] = {{{-1.68115,-0.110352,-1.003},-85.1081}}; + }; + class Land_ChurchRuin_01_F : Default + { + lootType = "civ"; + toolRackPos[] = {{{3.11914,9.71777,-4.80076},-270.589}}; + pelicanPos[] = {{{-1.94141,6.78662,3.36325},-124.089}}; + tablePos[] = {{{1.98047,13.0469,3.37797},-310.089}}; + shoeboxPos[] = {{{1.55762,10.1948,3.38235},-52.0876}}; + filingPos[] = {{{-2.36426,13.0542,-4.75348},-42.0814}}; + }; + class Land_Radar_01_antenna_base_F : Default + { + lootType = "mil"; + couchPos[] = {{{12.3984,-6.6084,-2.80344},91.4998}}; + tablePos[] = {{{11.5742,-0.556152,-2.80344},0},{{11.3271,2.91089,0.91214},270},{{-5.354,-5.59375,-2.80344},270}}; + cabinetPos[] = {{{15.04,2.47559,-1.60373},178.499}}; + kitchenSinkPos[] = {{{14.7104,7.146,-2.80344},89.4997},{{-1.38916,-7.43359,-2.80344},179.999}}; + freezerPos[] = {{{12.3062,4.57568,-2.80344},179.499},{{1.3374,-2.45532,-2.80344},0}}; + filingPos[] = {{{9.8374,9.08032,-2.80344},298.5},{{9.28223,8.64697,0.91214},270.5}}; + palletPos[] = {{{5.95947,-4.19141,-2.80344},0},{{-12.7056,0.493164,-3.58148},0}}; + chairPos[] = {{{4.47119,8.6228,-2.80344},0},{{14.4839,8.72168,0.91214},52.4999}}; + pelicanPos[] = {{{5.93896,7.9231,0.91214},0},{{-10.0767,-5.8999,0.91214},250.5}}; + bedPos[] = {{{13.6646,-4.34521,0.91214},91.4998}}; + wardrobePos[] = {{{9.38037,-5.86157,0.91214},270.5}}; + toiletPos[] = {{{14.5366,-2.77368,0.91214},129}}; + toolRackPos[] = {{{6.88965,-7.75659,0.412262},180.501}}; + shoeboxPos[] = {{{-7.0498,-5.88892,0.91214},0}}; + lockerPos[] = {{{2.16211,-5.36938,0.91214},89.9998}}; + }; + class Land_Barracks_02_F : Default + { + lootType = "mil"; + bedPos[] = {{{-7.14502,-2.94336,-1.69466},179.861},{{-3.91992,-3,-1.69458},180.361},{{-0.823242,-2.97656,-1.69458},179.861},{{2.42285,-3.00195,-1.69451},180.36}}; + lockerPos[] = {{{-5.61523,3.95898,-1.69442},-1.13996},{{0.778809,3.97168,-1.69442},-0.139748}}; + pelicanPos[] = {{{-2.67236,3.05078,-1.69442},-54.6392}}; + couchPos[] = {{{-8.85254,2.11719,-1.69441},180.36}}; + chairPos[] = {{{4.37158,3.60352,-1.69442},51.8602}}; + shoeboxPos[] = {{{-2.34229,-3.26074,-1.69442},-0.639492}}; + }; + class Land_House_1W07_F : Default + { + lootType = "civ"; + bedPos[] = {{{-4.49951,-4.56738,-3.0888},270.459}}; + wardrobePos[] = {{{0.74292,-6.35938,-3.0888},89.9583}}; + tablePos[] = {{{-2.31177,-7.79688,-3.0888},179.959},{{-7.02124,-0.893555,-3.0888},269.959}}; + chairPos[] = {{{-5.16357,-7.55566,-3.0888},218.959}}; + kitchenSinkPos[] = {{{1.74707,0.276367,-3.0888},269.959}}; + cookerPos[] = {{{1.76929,1.57324,-3.0888},269.959}}; + shelfPos[] = {{{1.61548,2.87207,-3.0888},270.459}}; + lockerPos[] = {{{5.55713,-3.02832,-3.0888},179.458}}; + couchPos[] = {{{-1.4563,0.137695,-3.0888},0.458786}}; + filingPos[] = {{{-6.63892,3.31152,-3.0888},0.958698}}; + }; + class Land_Caravan_01_rust_F : Default + { + lootType = "civ"; + filingPos[] = {{{-0.486816,4.37793,0.127487},-34.7552}}; + chairPos[] = {{{0.625244,4.11426,0.127472},32.2445}}; + shoeboxPos[] = {{{-0.400391,2.91211,0.127472},120.244}}; + pelicanPos[] = {{{0.701172,1.00879,0.127457},81.2444}}; + cabinetPos[] = {{{-0.584473,-2.14258,0.626373},87.7648}}; + }; + class Land_Caravan_01_green_F : Land_Caravan_01_rust_F {}; + class Land_Workshop_01_grey_F : Default + { + lootType = "workshop"; + toolRackPos[] = {{{3.61719,-5.99658,-1.32436},179.757}}; + lockerPos[] = {{{0.861328,-0.762451,-0.92437},270.257}}; + tablePos[] = {{{4.36963,-3.40991,-0.92437},90.2567}}; + palletPos[] = {{{1.94678,-3.24048,-0.92437},-81.2434}}; + filingPos[] = {{{0.710938,-5.68384,-0.924368},269.742}}; + freezerPos[] = {{{4.44385,-1.05884,-1.06803},89.757}}; + }; + class Land_Workshop_01_F : Land_Workshop_01_grey_F {}; + class Land_GuardTower_01_F : Default + { + lootType = "mil"; + pelicanPos[] = {{{-0.831787,-5.53809,5.15538},269.518}}; + shoeboxPos[] = {{{0.747803,-5.30566,5.15538},316.018}}; + }; + class Land_Shed_10_F : Default + { + lootType = "workshop"; + chairPos[] = {{{3.27002,-1.91553,-0.0551071},134.086}}; + shelfPos[] = {{{0.726074,1.1333,-0.0225372},0.0866686}}; + shoeboxPos[] = {{{3.38086,0.840332,-0.0225372},225.087}}; + }; + class Land_House_1W02_F : Default + { + lootType = "civ"; + bedPos[] = {{{3.77148,2.33789,-2.12524},1.68378}}; + wardrobePos[] = {{{5.02881,-0.820313,-2.12385},90.162}}; + kitchenSinkPos[] = {{{0.736572,2.91016,-2.12385},90.1843}}; + cookerPos[] = {{{0.704346,1.64551,-2.12462},90.207}}; + shelfPos[] = {{{-1.13184,1.79688,-2.1237},-90.2927}}; + chairPos[] = {{{-2.92407,-0.946289,-2.12376},114.694}}; + cabinetPos[] = {{{0.165283,-1.62695,-0.973625},-90.2936}}; + }; + class Land_House_1W01_F : Default + { + lootType = "civ"; + bedPos[] = {{{-3.89453,1.14844,-2.84573},181.144}}; + wardrobePos[] = {{{-1.96582,4.72363,-2.84727},90.1434}}; + couchPos[] = {{{1.53223,4.3623,-2.84727},270.65}}; + tablePos[] = {{{2.8772,0.212891,-2.84727},179.164}}; + cabinetPos[] = {{{-1.18311,1.69629,-1.5972},-0.856155}}; + lockerPos[] = {{{4.3623,4.71582,-2.89729},89.6738}}; + }; + class Land_ControlTower_02_F : Default + { + lootType = "mil"; + pelicanPos[] = {{{9.23242,4.7627,-9.63004},58.8888},{{9.84766,-5.00781,-1.10828},124.837}}; + lockerPos[] = {{{3.4043,2.37793,-5.51505},179.858}}; + tablePos[] = {{{1.63086,-2.09277,-1.07005},-90.1634}}; + palletPos[] = {{{5.34961,-0.560547,-1.07005},-134.663}}; + shelfPos[] = {{{7.81445,2.52246,-1.07005},90.3363}}; + shoeboxPos[] = {{{1.77539,1.2583,-1.07005},129.343}}; + toolRackPos[] = {{{4.60352,5.68457,-9.68005},-0.142899}}; + }; + class Land_Factory_02_F : Default + { + lootType = "industrial"; + pelicanPos[] = {{{4.77148,3.78674,-2.50323},-340.495},{{-5.40137,7.4989,-5.84854},-340.495}}; + lockerPos[] = {{{2.54004,1.96313,-2.50323},-89.4948},{{-3.91748,-4.43384,-5.84854},-179.996}}; + shelfPos[] = {{{2.33594,3.79004,-2.50323},-88.9948}}; + shoeboxPos[] = {{{11.2412,1.84375,-2.50323},19.4722},{{-12.6543,-4.28516,-5.84854},-340.495}}; + kitchenSinkPos[] = {{{16.3535,-2.60022,-5.62325},-270.995}}; + freezerPos[] = {{{12.3574,-7.1051,-5.62325},-179.996}}; + cookerPos[] = {{{16.2813,-1.02344,-5.6234},-270.995}}; + filingPos[] = {{{13.4897,-7.18726,-5.62325},-179.996},{{-11.5054,7.85706,-5.84854},1.00513}}; + chairPos[] = {{{16.0889,-6.85327,-5.62325},-217.995}}; + couchPos[] = {{{10.6484,9.73706,-5.62325},-89.4948}}; + tablePos[] = {{{9.77148,5.59167,-5.62325},-179.527},{{16.3013,9.93445,-5.62325},-269.495}}; + cabinetPos[] = {{{11.3755,5.16455,-4.37317},-90.5278},{{-0.737305,7.80701,-4.44846},-270.995}}; + wardrobePos[] = {{{2.51367,9.72485,-5.62325},-89.4948}}; + bedPos[] = {{{15.9473,6.50366,-5.62328},-179.495}}; + palletPos[] = {{{0.132813,-2.46411,-5.84854},-340.495},{{-7.88623,1.7937,-5.84854},-340.495}}; + toolRackPos[] = {{{-16.5967,8.18335,-6.04855},0.505127}}; + }; + class Land_Shed_11_F : Default + { + lootType = "workshop"; + toolRackPos[] = {{{-2.35547,2.03149,-1.29939},-88.997}}; + palletPos[] = {{{1.41113,2.03857,-0.849365},177.504}}; + freezerPos[] = {{{-1.27051,2.97754,-1.10617},0.00376892}}; + }; + class Land_Bunker_02_right_F : Default + { + lootType = "mil"; + pelicanPos[] = {{{0.1875,2.24805,-0.961281},19.4685}}; + shoeboxPos[] = {{{-1.62109,0.246094,-1.00896},35.9576}}; + cabinetPos[] = {{{-0.521973,-2.32422,-0.0083847},269.458}}; + }; + class Land_Shed_14_F : Default + { + lootType = "workshop"; + freezerPos[] = {{{1.66895,6.17188,-1.30997},0.157471}}; + palletPos[] = {{{0.0820313,2.45996,-1.11643},-266.36}}; + lockerPos[] = {{{-1.86865,6.15576,-1.30997},0.182068}}; + tablePos[] = {{{-2.42871,-0.796875,-1.30997},-89.861}}; + toolRackPos[] = {{{2.82031,-0.160645,-1.50999},89.6398}}; + }; + class Land_Barn_02_F : Default + { + lootType = "construction"; + palletPos[] = {{{-0.366211,3.23218,-4.10243},-288.175},{{0.453125,-2.06738,-4.0704},-288.156}}; + shelfPos[] = {{{3.25,3.354,-4.15953},-270.133}}; + couchPos[] = {{{-2.09375,5.99463,-4.08443},-90.183}}; + toolRackPos[] = {{{3.51563,-3.01416,-4.35194},-269.634}}; + cabinetPos[] = {{{-3.55957,-2.25562,-2.76266},-0.180115}}; + }; + class Land_HouseRuin_Big_01_F : Default + { + lootType = "civ"; + tablePos[] = {{{2.71362,-4.10742,0.330879},90.1419},{{-3.50098,-0.0878906,-3.11034},269.642}}; + palletPos[] = {{{-0.291016,-3.37793,0.322571},-26.8577}}; + shelfPos[] = {{{-3.76929,-4.45313,0.33387},270.142}}; + toiletPos[] = {{{2.7605,6.82324,-3.09427},55.6776}}; + couchPos[] = {{{1.27441,-5.17578,-3.11034},89.1424}}; + cabinetPos[] = {{{3.03735,-3.35254,-1.83951},180.643}}; + kitchenSinkPos[] = {{{2.77271,-0.563477,-3.11034},89.6463}}; + }; + class Land_Barracks_03_F : Default + { + lootType = "mil"; + toiletPos[] = {{{3.28223,-2.69019,-1.07727},-179.033}}; + pelicanPos[] = {{{2.74512,-1.82617,-1.17728},-91.0325},{{-3.02246,-2.50293,-1.09151},-179.534}}; + bedPos[] = {{{0.894531,-1.50366,-1.08547},-179.534},{{-5.55371,-1.57056,-1.06706},-179.534}}; + tablePos[] = {{{-0.942383,-1.93018,-1.08244},-90.533},{{-8.47754,-1.48267,-1.06882},-270.033}}; + lockerPos[] = {{{-1.95508,-1.48999,-1.09029},-269.533}}; + shelfPos[] = {{{-4.34668,-2.06982,-1.09193},-90.033},{{-4.35449,-0.899902,-1.0918},-89.0331},{{-7.62793,-0.998291,-1.09929},-89.5328}}; + filingPos[] = {{{-7.49707,-2.69092,-1.08459},-179.534}}; + couchPos[] = {{{-10.3174,-1.37451,-1.06348},-179.534}}; + cabinetPos[] = {{{-11.3691,2.3894,0.0229187},0.466827}}; + }; + class Land_Greenhouse_01_F : Default + { + lootType = "market"; + pelicanPos[] = {{{1.38184,-1.11597,-1.2021},-218.53}}; + shoeboxPos[] = {{{1.30762,0.99585,-1.10204},-143.558},{{-0.261719,-1.10986,-1.11098},-5.5575}}; + toiletPos[] = {{{-1.37012,-1.40601,-1.11688},-130.056}}; + filingPos[] = {{{-1.53809,1.37207,-1.1145},-0.0551453}}; + }; + class Land_House_1W13_F : Default + { + lootType = "civ"; + couchPos[] = {{{2.82178,-2.4292,-1.42491},-269.743}}; + tablePos[] = {{{2.9707,1.64551,-1.4249},0.230408}}; + kitchenSinkPos[] = {{{-1.66357,0.3125,-1.42491},-89.7654}}; + cookerPos[] = {{{-1.61719,1.59033,-1.42483},-88.7654}}; + shelfPos[] = {{{-1.82861,-2.85352,-1.42491},-89.2636}}; + wardrobePos[] = {{{-0.154297,-3.18994,-1.42491},-180.244}}; + }; + class Land_House_1W06_F : Default + { + lootType = "civ"; + couchPos[] = {{{3.8833,-0.937988,-0.617851},-0.210716}}; + tablePos[] = {{{0.94873,-1.02539,-0.617859},269.789}}; + kitchenSinkPos[] = {{{-0.55957,-1.58057,-0.617851},180.29}}; + cookerPos[] = {{{-1.84619,-1.5542,-0.617813},179.789}}; + wardrobePos[] = {{{3.22949,1.87061,-0.617844},-0.210715}}; + chairPos[] = {{{-1.83984,1.50195,-0.617859},304.789}}; + filingPos[] = {{{-2.29248,0.0263672,-0.617851},268.789}}; + }; + class Land_PoliceStation_01_F : Default + { + lootType = "mil"; + couchPos[] = {{{-3.15186,6.17236,-6.01849},-91.0753},{{-7.55225,-2.94141,-6.01849},-270.075}}; + lockerPos[] = {{{-3.40918,4.36377,-6.01849},-180.576},{{-8.02832,-0.467773,-6.01849},0.924713},{{3.29297,5.20459,-2.42599},-270.076},{{-8.46387,-0.496094,-2.42599},-0.0753479},{{-6.36084,2.92285,-2.42599},-269.575}}; + bedPos[] = {{{2.30127,-1.14917,-6.01851},-270.076}}; + toiletPos[] = {{{-1.31299,-3.15625,-6.01849},-91.0753}}; + shelfPos[] = {{{2.88525,-3.95435,-6.01849},-180.076}}; + pelicanPos[] = {{{-9.15967,-1.78271,-6.01849},-85.0756},{{0.751953,-3.70776,-6.01849},-176.576},{{2.42969,-2.9707,-2.42599},-245.576},{{-8.20068,-1.86377,-2.42599},-346.075},{{1.12793,-1.88696,1.29904},-346.075}}; + toolRackPos[] = {{{-3.11719,5.78394,-2.72601},-89.5753}}; + chairPos[] = {{{3.01465,0.766357,-2.42599},-212.576}}; + filingPos[] = {{{-3.97412,-3.84961,-2.42599},-179.576}}; + tablePos[] = {{{-7.64209,-3.63232,-2.42599},-180.576},{{-9.35938,2.35889,-2.42599},-90.0753}}; + cookerPos[] = {{{-4.23633,6.94287,-2.42599},-0.0753479}}; + kitchenSinkPos[] = {{{-5.62061,6.94238,-2.42599},0.424652}}; + freezerPos[] = {{{-4.18945,4.36499,-2.42599},-180.076}}; + cabinetPos[] = {{{-9.23975,4.09326,-1.32593},-89.0753},{{-5.31592,2.45313,-4.86842},-331.575}}; + palletPos[] = {{{-7.56445,-1.92358,1.3029},-346.075}}; + shoeboxPos[] = {{{-3.7876,2.24512,-6.01849},-139.075}}; + }; + class Land_GarageOffice_01_F : Default + { + lootType = "church"; + GroundSpawnChance = 80; + couchPos[] = {{{1.75049,-0.380859,-0.183746},0.519867}}; + shelfPos[] = {{{-3.05811,-2.5188,-0.171722},-89.9799}}; + cookerPos[] = {{{0.220703,4.89185,-0.174271},-269.98}}; + kitchenSinkPos[] = {{{0.211426,3.63257,-0.174583},-269.48}}; + tablePos[] = {{{0.149414,-0.473145,-0.18483},-89.9798}}; + pelicanPos[] = {{{-2.74268,-0.020752,-0.221611},-87.98}}; + cabinetPos[] = {{{0.175293,-0.500732,-2.15131},-270.48}}; + freezerPos[] = {{{-2.58643,7.76587,-3.30138},-0.480133}}; + lockerPos[] = {{{0.239258,2.6311,-3.30138},-269.98},{{0.235352,4.91821,-3.30138},-269.98}}; + toiletPos[] = {{{2.49316,5.94385,-3.30138},-180.481}}; + toolRackPos[] = {{{-3.31543,-1.90015,-3.5514},-89.4799}}; + }; + class Land_Highway_Pillar_01_garage_F : Default + { + lootType = "market"; + palletPos[] = {{{7.42529,-0.921875,-1.58904},-88.6555},{{-2.94067,-0.0556641,-1.58801},-88.6555}}; + toolRackPos[] = {{{1.18872,-4.0127,-1.88803},179.845}}; + lockerPos[] = {{{-10.0974,-3.58789,-1.58801},179.344}}; + tablePos[] = {{{-10.2996,3.47852,-1.58801},-0.655655}}; + couchPos[] = {{{1.57764,2.79834,-1.58801},-88.6555}}; + shelfPos[] = {{{9.07886,3.73779,-1.62517},0.344383}}; + filingPos[] = {{{8.94751,-3.68457,-1.59908},179.345}}; + chairPos[] = {{{11.4331,-3.27734,-1.6667},149.837}}; + cabinetPos[] = {{{-11.8745,-2.44385,-0.187927},-0.155655}}; + }; + class Land_CementWorks_01_grey_F : Default + { + lootType = "industrial"; + palletPos[] = {{{6.53955,-4.06738,-4.73653},-90.766},{{6.27124,-17.311,-4.73653},-90.766}}; + couchPos[] = {{{14.5706,-26.3574,-3.71281},89.2332},{{-7.74463,-19.7749,-4.534},91.2346}}; + filingPos[] = {{{16.564,-12.9858,-3.71281},90.2333}}; + shelfPos[] = {{{16.6221,-3.22168,-3.71281},89.7346}}; + toolRackPos[] = {{{11.0874,11.9121,-3.86282},0.233772}}; + kitchenSinkPos[] = {{{-3.12231,9.40479,-3.71281},-90.266}}; + lockerPos[] = {{{-3.03418,-0.790527,-3.71281},-90.266}}; + tablePos[] = {{{-3.05444,-23.9165,-3.71281},268.734}}; + pelicanPos[] = {{{-10.1396,-11.4214,-4.534},0.733795},{{-4.71704,-10.7114,-3.36369},4.23367}}; + fridgePos[] = {{{-11.3994,-19.9097,-4.534},268.734}}; + wardrobePos[] = {{{-6.7583,-15.8589,-4.534},0.233711}}; + cabinetPos[] = {{{-3.40845,-12.7163,-2.36272},-0.766167},{{6.46265,20.5615,-3.28393},89.7344}}; + chairPos[] = {{{0.242188,12.8872,-4.534},224.234}}; + }; + class Land_PowerStation_01_F : Default + { + lootType = "construction"; + lockerPos[] = {{{-0.839355,-4.53955,-1.7851},179.988}}; + tablePos[] = {{{1.64258,8.07861,-1.72589},269.988}}; + shelfPos[] = {{{1.42285,5.83203,-1.78592},270.988}}; + pelicanPos[] = {{{3.44092,8.71436,-1.72589},7.48788}}; + cabinetPos[] = {{{1.479,1.04297,-0.382019},90.9874}}; + toolRackPos[] = {{{-2.31665,-0.399902,-1.98593},269.988}}; + palletPos[] = {{{-0.500244,-0.503906,-1.78592},-61.512}}; + shoeboxPos[] = {{{3.85718,5.16602,-1.72589},254.988}}; + }; + class Land_Bunker_02_left_F : Default + { + lootType = "mil"; + pelicanPos[] = {{{1.44727,1.85986,-1.0587},62.3032}}; + shoeboxPos[] = {{{-0.818359,1.69824,-1.01776},128.246}}; + cabinetPos[] = {{{0.539063,-2.31299,0.184326},-89.7069}}; + filingPos[] = {{{0.489258,2.66113,-1.01313},0.745316}}; + }; + class Land_House_2B01_F : Default + { + lootType = "civ"; + bedPos[] = {{{-4.08936,1.82129,-1.02167},-179.566}}; + wardrobePos[] = {{{-1.89941,0.77832,-1.02174},-179.566}}; + couchPos[] = {{{-1.09766,3.85449,-1.02175},-90.5664},{{-4.21021,2.81738,-4.18092},-179.566}}; + tablePos[] = {{{2.10107,3.39844,-1.02175},90.4341}}; + chairPos[] = {{{2.24121,-4.33496,-4.18091},-228.066},{{2.21338,4.24219,-4.18091},44.9341}}; + kitchenSinkPos[] = {{{-1.57202,4.62207,-4.18092},-0.0657196}}; + cookerPos[] = {{{-0.276123,4.60547,-4.18089},-0.0657654}}; + lockerPos[] = {{{-0.854248,0.728516,-4.18091},-181.066}}; + }; + class Land_House_1W04_F : Default + { + lootType = "civ"; + couchPos[] = {{{-3.68579,-3.39844,-2.54919},180.234}}; + tablePos[] = {{{0.655273,-2.75391,-2.54329},89.7325}}; + lockerPos[] = {{{-2.10522,-5.10156,-2.53055},180.234}}; + kitchenSinkPos[] = {{{-2.29834,-0.980469,-2.54666},0.233856}}; + wardrobePos[] = {{{-1.41406,3.66699,-2.52145},269.72}}; + chairPos[] = {{{0.458252,4.24219,-2.52029},37.2206}}; + }; + class Land_Workshop_03_grey_F : Default + { + lootType = "workshop"; + toolRackPos[] = {{{0.0566406,-6.19873,-1.24748},-179.698}}; + tablePos[] = {{{-1.81299,-4.50195,-1.04747},-90.1982}}; + shelfPos[] = {{{2.11426,-4.84229,-1.04745},90.8183}}; + palletPos[] = {{{0.359375,-1.59277,-1.04746},161.822}}; + shoeboxPos[] = {{{1.74219,5.53906,-1.04746},-129.177}}; + lockerPos[] = {{{-1.90234,2.62451,-1.04746},-89.6777}}; + }; + class Land_Workshop_03_F : Land_Workshop_03_grey_F {}; + class Land_HouseRuin_Big_02_F : Default + { + lootType = "civ"; + shelfPos[] = {{{6.74023,0.929199,-4.42252},89.3896}}; + filingPos[] = {{{6.68115,-0.158691,-4.42761},89.3881},{{-4.74707,5.76611,-4.42098},-91.6118}}; + palletPos[] = {{{-1.38184,3.41406,-0.977882},259.388}}; + wardrobePos[] = {{{1.5293,-3.14648,-0.975777},-90.6115}}; + couchPos[] = {{{-0.475586,-2.24561,-0.98893},-0.11174}}; + bedPos[] = {{{-4.08887,5.01074,-0.975815},0.888222}}; + lockerPos[] = {{{-0.105469,-0.0297852,-0.972176},179.889}}; + shoeboxPos[] = {{{4.33008,-4.39453,-0.977615},-58.6115}}; + kitchenSinkPos[] = {{{1.3623,2.82178,-4.44192},89.8891}}; + cookerPos[] = {{{1.34424,4.17139,-4.44385},90.388}}; + chairPos[] = {{{-4.46191,-2.14355,-4.42997},-87.1115}}; + tablePos[] = {{{1.85254,-4.85205,-4.42535},179.389}}; + }; + class Land_GarageRow_01_small_F : Default + { + lootType = "workshop"; + toolRackPos[] = {{{4.92188,-5.86914,-1.74255},180.534}}; + lockerPos[] = {{{2.9043,-4.10034,-1.54256},-90.4661},{{-2.01855,-1.76538,-1.54256},-89.9661}}; + tablePos[] = {{{6.83984,-0.0495605,-1.54256},90.5342},{{1.87207,-1.37012,-1.54532},90.0342}}; + palletPos[] = {{{4.85205,-2.34839,-1.54256},-138.466},{{-0.117188,-2.44287,-1.50449},-138.466},{{-4.97803,-2.87158,-1.49532},-138.466}}; + filingPos[] = {{{2.83203,0.46167,-1.54256},-88.9661},{{-6.93848,-5.42432,-1.54256},-138.466}}; + chairPos[] = {{{-1.75,-5.23706,-1.54256},-138.466}}; + cabinetPos[] = {{{-2.45166,2.27979,-0.343201},-88.9661}}; + freezerPos[] = {{{-3.35107,-5.45679,-1.54256},180.034}}; + kitchenSinkPos[] = {{{-2.90088,-0.171631,-1.54256},90.0344}}; + wardrobePos[] = {{{-6.92773,-0.768066,-1.54256},-89.9661}}; + }; + class Land_House_2W01_F : Default + { + lootType = "civ"; + tablePos[] = {{{-1.06348,2.77466,0.105896},-0.076416},{{6.82813,-0.0712891,-3.14696},-270.577}}; + filingPos[] = {{{-4.18555,1.41528,0.0607452},-89.5763}}; + lockerPos[] = {{{0.275391,-2.5105,0.0251923},-270.075},{{3.59082,3.18433,-3.11324},-270.081}}; + chairPos[] = {{{5.06348,2.13989,-3.07117},-47.0773}}; + bedPos[] = {{{-6.26855,-2.04492,-3.18494},-179.577}}; + wardrobePos[] = {{{-5.93066,1.30469,-3.06514},-0.0764465}}; + kitchenSinkPos[] = {{{0.291016,3.85889,-3.06082},-0.0761719}}; + cookerPos[] = {{{1.54688,3.82617,-3.0894},-0.0761719}}; + }; + class Land_Barn_03_small_F : Default + { + lootType = "construction"; + palletPos[] = {{{-2.09692,3.25928,-2.16884},139.228},{{-2.43408,-1.32227,-2.16716},-220.715}}; + toolRackPos[] = {{{2.32593,7.7915,-2.31886},0.756821}}; + couchPos[] = {{{-6.76855,5.20361,-2.16875},-179.772}}; + shelfPos[] = {{{-7.729,-4.66602,-2.16466},-90.7158}}; + lockerPos[] = {{{3.61865,-4.36182,-2.1647},89.7846}}; + tablePos[] = {{{3.55518,-0.0561523,-2.16646},90.2799}}; + filingPos[] = {{{0.0568848,-6.67822,-2.16609},-180.197}}; + cabinetPos[] = {{{-4.8728,7.36865,-0.816971},89.2283}}; + freezerPos[] = {{{2.11328,-6.52881,-2.1655},-179.697}}; + chairPos[] = {{{-7.10986,2.56836,-2.1666},-64.716}}; + pelicanPos[] = {{{-6.79028,-0.341309,-2.16678},-90.2158}}; + shoeboxPos[] = {{{3.42236,6.23877,-2.16731},-118.744}}; + }; + class Land_Barracks_06_F : Default + { + lootType = "mil"; + bedPos[] = {{{-9.2019,-5.37305,-0.915131},90.029},{{-9.17188,-8.44336,-0.915131},90.529},{{-6.76636,2.75195,-4.98214},0.191055}}; + wardrobePos[] = {{{-13.2871,-4.95898,-0.911583},-0.807312}}; + couchPos[] = {{{-13.0933,-8.05762,-0.911575},90.1924},{{-9.14307,-5.74023,-4.9816},-90.3074}}; + tablePos[] = {{{-14.771,-6.38867,-0.911575},-89.8695},{{-9.14282,-8.80859,-4.98159},-179.971},{{-14.7239,-2.69336,-4.9816},-89.8696}}; + pelicanPos[] = {{{-8.34106,-6.92676,-0.911575},90.0289},{{-0.622803,-2.53613,-0.911583},90.6957},{{-8.23413,-7.15625,-4.9816},90.529},{{-7.2793,-1.5752,-4.9816},30.6963}}; + lockerPos[] = {{{-13.6138,-3.9707,-0.911575},-180.369},{{-1.70581,-3.97266,-0.911575},-179.804},{{-14.8486,-8.47949,-4.9816},-89.9526},{{-1.54492,-3.97949,-4.98159},-179.304}}; + shelfPos[] = {{{-1.76855,-1.01367,-0.911591},-0.303497},{{-3.92944,3.21094,-4.9816},90.1913}}; + shoeboxPos[] = {{{-14.7749,-1.26758,-0.911583},117.69}}; + kitchenSinkPos[] = {{{-14.324,-4.99023,-4.9816},0.131134}}; + cabinetPos[] = {{{-0.73584,3.77734,-3.63152},90.1905}}; + toiletPos[] = {{{-6.91187,-0.320313,-4.9816},-180.81}}; + }; + class Land_GuardHouse_03_F : Default + { + lootType = "mil"; + chairPos[] = {{{-2.26367,2.08008,-1.00266},91.1298},{{0.675781,2.01318,-1.00266},159.129}}; + pelicanPos[] = {{{-2.12305,-1.82617,-1.05267},89.6282}}; + filingPos[] = {{{-0.966309,2.94141,-1.00266},0.129105}}; + shelfPos[] = {{{2.97021,2.56445,-1.00266},89.6286}}; + tablePos[] = {{{-0.886719,-2.14648,-1.00266},-90.8717}}; + cabinetPos[] = {{{-1.2749,0.503906,0.197411},0.62912}}; + lockerPos[] = {{{2.81787,-0.0595703,-1.00266},90.1286}}; + kitchenSinkPos[] = {{{1.37207,-2.79297,-1.00266},-179.871}}; + }; + class Land_Rail_Station_Small_F : Default + { + lootType = "market"; + cabinetPos[] = {{{0.333984,2.12402,0.0295739},-89.8441}}; + palletPos[] = {{{3.33887,2.97656,-1.28266},-272.844}}; + chairPos[] = {{{-4.91016,2.77051,-1.28266},-145.345}}; + filingPos[] = {{{1.62109,2.32275,-1.28266},-180.345}}; + shelfPos[] = {{{-3.1543,2.2832,-1.28266},-179.845}}; + shoeboxPos[] = {{{-1.76172,2.46582,-1.28266},22.6561}}; + }; + class Land_House_2W03_F : Default + { + lootType = "civ"; + couchPos[] = {{{-7.39209,3.51855,-0.777275},-90.3317}}; + wardrobePos[] = {{{-9.03809,0.668945,-0.777275},-90.327}}; + tablePos[] = {{{-7.09033,-0.612305,-0.777275},-180.33},{{-3.05762,6.38477,-0.777275},-0.331787}}; + chairPos[] = {{{-2.03149,-0.393555,-0.777283},128.668},{{-4.70972,4.16602,-0.777275},-148.832}}; + lockerPos[] = {{{-1.72534,2.20996,-0.777275},89.6683}}; + shelfPos[] = {{{-3.37695,3.00098,-5.55786},-90.3314}}; + cabinetPos[] = {{{-1.11426,3.20996,-4.28495},-179.832}}; + shoeboxPos[] = {{{-4.31836,-0.355469,-0.777283},-198.332}}; + }; + class Land_House_2B04_F : Default + { + lootType = "civ"; + toolRackPos[] = {{{-7.58398,-1.81934,-6.42257},-179.951}}; + kitchenSinkPos[] = {{{7.85449,3.12354,-5.73982},-269.951}}; + cookerPos[] = {{{7.84473,1.86792,-5.74133},-270.451}}; + couchPos[] = {{{-4.1709,6.4082,-5.73988},-89.9508}}; + bedPos[] = {{{-4.64941,3.09619,-5.73837},-89.4508}}; + wardrobePos[] = {{{-0.875,3.03857,-5.73898},-269.951}}; + chairPos[] = {{{-1.27344,6.85327,-5.7393},42.5491}}; + filingPos[] = {{{0.189453,7.27612,-5.73981},0.0490723}}; + shelfPos[] = {{{3.0293,7.37451,-5.73965},0.0490723}}; + lockerPos[] = {{{3.0752,2.6687,-5.7383},-179.951}}; + tablePos[] = {{{0.99707,2.77051,-5.73849},-179.951},{{7.83789,0.147217,-5.73951},-270.951}}; + fridgePos[] = {{{7.43555,-2.16162,-5.7401},-179.951}}; + shoeboxPos[] = {{{7.43555,6.33887,-5.73995},-148.95}}; + }; + class Land_House_2B02_F : Default + { + lootType = "civ"; + tablePos[] = {{{-2.50684,1.43042,-5.53069},-270.129},{{8.7373,2.7605,-5.53069},-270.629},{{-1.06445,0.996826,-5.53069},-90.6284}}; + couchPos[] = {{{-7.95215,1.70117,-5.5307},-179.628}}; + wardrobePos[] = {{{-5.82324,-2.01099,-5.5307},-180.129},{{2.37549,6.13647,-5.53069},-89.6285},{{2.35889,1.37598,-5.53069},-90.1283}}; + filingPos[] = {{{-8.74463,6.9043,-5.53069},-44.6286}}; + chairPos[] = {{{-2.82568,6.55176,-5.53069},-316.129}}; + bedPos[] = {{{7.81738,-1.52417,-5.53069},-269.629},{{7.81348,6.4729,-5.53229},-270.129}}; + pelicanPos[] = {{{8.64063,0.549316,-5.53069},-270.129}}; + shoeboxPos[] = {{{8.45117,4.78198,-5.53069},-104.628}}; + fridgePos[] = {{{-6.1543,6.9729,-5.53069},-0.128632}}; + }; + class Land_ControlTower_01_F : Default + { + lootType = "mil"; + shelfPos[] = {{{2.6731,0.078125,-7.51663},-0.2612},{{-1.31934,1.95215,4.83337},-90.11}}; + lockerPos[] = {{{2.03345,-3.02637,-7.50383},-179.761},{{2.40063,-0.172852,-4.41663},-0.260986}}; + pelicanPos[] = {{{-0.978027,-2.66602,-7.56664},-147.889},{{2.57715,-2.46777,-1.36663},117.239},{{-2.66968,-4.14844,4.83339},-139.389},{{4.30811,4.20996,4.83339},45.2928}}; + chairPos[] = {{{0.895508,-2.10742,-4.41663},-1.7612}}; + filingPos[] = {{{3.07935,-0.104492,-1.31663},39.2737}}; + cabinetPos[] = {{{0.61792,-0.139648,-0.166565},89.7387}}; + tablePos[] = {{{0.177979,-2.9209,-1.32538},-179.889},{{-1.46436,-2.11621,1.78336},-90.261}}; + kitchenSinkPos[] = {{{-1.07788,-2.14258,4.83339},-90.2618}}; + wardrobePos[] = {{{2.29834,-0.0820313,1.78336},0.238892}}; + couchPos[] = {{{1.22559,-2.25684,1.78084},90.2387}}; + }; + class Land_MedicalTent_01_MTP_closed_F : Default { + lootType = "medical"; + cabinetPos[] = { + { {3.22852,-4.89453,-0.273125}, 90.4999 } + }; + palletPos[] = { + { {-1.8418,6.03711,-1.37312}, -180 } + }; + pelicanPos[] = { + { {3.63867,5.79297,-1.37312}, 151 } + }; + filingPos[] = { + { {-3.22852,5.39063,-1.37312},-177.5} + }; + shelfPos[] = { + { {1.72656,5.28125,-1.37312}, 177.5 } + }; + tablePos[] = { + { {1.95117,-5.4375,-1.37312}, 0.997818 } + }; + shoeboxPos[] = { + { {-3.79688,-5.55273,-1.37312}, 26.4985 } + }; + lockerPos[] = { + { {-1.98242,-5.46484,-1.37312}, -0.50238 } + }; + }; + class Land_MedicalTent_01_white_generic_closed_F : Land_MedicalTent_01_MTP_closed_F {}; + class Land_Destroyer_01_interior_03_F : Default { + lootType = "mil"; + pelicanPos[] = { + {{4.13281,5.0293,7.92066},221.501}, + {{-3.83008,10.5586,12.5327},140.998} + }; + shelfPos[] = { + {{5.23242,19.8281,7.92066},270}, + {{0.853516,3.68945,7.92063},0}, + {{-3.94336,18.082,7.92066},0} + }; + toolRackPos[] = { + {{13.4238,4.00586,7.92066},180.998}, + {{-0.09375,16.5313,12.5327},0}, + {{-1.74805,-20.9961,10.9124},270.5} + }; + lockerPos[] = { + {{2.18555,19.8027,7.92065},89.9993} + }; + cabinetPos[] = { + {{2.43555,12.3809,9.17067},89.4992}, + {{-1.46094,-6.10352,9.22061},269}, + {{-3.78906,18.1934,13.8826},90.4993} + }; + filingPos[] = { + {{6.38477,-20.7461,11.0124},90.4993} + }; + palletPos[] = { + {{-5.04102,5.96094,7.92066},311.5} + }; + }; + class Land_Destroyer_01_interior_04_F : default { + lootType = "mil"; + palletPos[] = { + {{-3.80469,-18.1543,9.45211},19.5} + }; + lockerPos[] = { + {{-9.33008,-3.1875,9.45211},269} + }; + cabinetPos[] = { + {{-12.3613,9,10.7877},181.502} + }; + couchPos[] = { + {{9.12109,-7.80273,9.45211},0} + }; + tablePos[] = { + {{-9.54688,2.30664,9.45211},271} + }; + pelicanPos[] = { + {{0.792969,-18.1191,9.45211},134.999} + }; + }; + class Land_Destroyer_01_hull_05_F : default { + lootType = "mil"; + pelicanPos[] = { + {{10.6133,-7.68359,9.41183},135.499} + }; + shelfPos[] = { + {{-14.0059,-12.582,9.41053},270} + }; + shoeboxPos[] = { + {{8.24609,7.9043,9.41428},0} + }; + palletPos[] = { + {{-8.55469,7.73438,9.41408},313.5} + }; + }; + class Land_Destroyer_01_hull_04_F : default { + lootType = "mil"; + palletPos[] = { + {{12.1348,16.5391,9.41681},298}, + {{-10.293,-18.6426,15.8783},0} + }; + cabinetPos[] = { + {{-11.7148,14.7813,11.1646},273} + }; + shoeboxPos[] = { + {{-13.3887,19.9199,9.42394},119.999} + }; + toolRackPos[] = { + {{10.5352,-21.9043,15.8851},180.498} + }; + pelicanPos[] = { + {{-12.2969,7.88672,15.8848},0} + }; + }; + class Land_Destroyer_01_hull_02_F : default { + lootType = "mil"; + pelicanPos[] = { + {{-8.58008,-0.689453,11.098},48.9998} + }; + palletPos[] = { + {{5.62695,-7.89258,11.1432},0} + }; + shoeboxPos[] = { + {{-5.11133,-7.58203,11.1409},0} + }; + }; + class Land_Destroyer_01_hull_01_F : default { + lootType = "mil"; + pelicanPos[] = { + {{0.193359,6.27539,12.6386},175.998} + }; + palletPos[] = { + {{0.373047,-3.39648,12.9917},0} + }; + }; + class Land_Destroyer_01_interior_02_F : default { + lootType = "mil"; + toolRackPos[] = { + {{3.2207,20.8301,11.0089},0} + }; + filingPos[] = { + {{-1.3125,15.375,11.0056},267.5} + }; + cabinetPos[] = { + {{-4.3457,6.91211,12.3288},86.9993} + }; + freezerPos[] = { + {{6.98242,5.68945,11.0288},42.9998} + }; + pelicanPos[] = { + {{-0.810547,20.3691,11.0063},0}, + {{-0.630859,1.68164,19.842},180.502} + }; + lockerPos[] = { + {{2.90234,14.2813,17.4492},178.002} + }; + couchPos[] = { + {{-0.902344,9.8418,19.842},270} + }; + shelfPos[] = { + {{-5.49414,10.8086,19.842},0} + }; + Bunk_EPOCH[] = { + {{2.26172,10.2285,19.842},268.5} + }; + cookerPos[] = { + {{-3.17578,10.4668,19.842},0} + }; + }; + class Land_Carrier_01_island_02_F : default { + lootType = "mil"; + cabinetPos[] = { + {{0.611328,3.0332,0.0348701},271}, + {{-3.81445,-0.130859,-0.215851},0} + }; + pelicanPos[] = { + {{-2.41406,1.12305,-1.41662},304.5} + }; + filingPos[] = { + {{5.75,7.49609,-1.3651},90.9992} + }; + palletPos[] = { + {{-1.94531,9.57031,-1.41511},340.5} + }; + shelfPos[] = { + {{2.99414,-3.69727,1.95266},0} + }; + lockerPos[] = { + {{-3.35547,8.1543,-1.41511},269.5} + }; + }; + class Land_Carrier_01_island_01_F : default { + lootType = "mil"; + palletPos[] = { + {{-5.11914,-11.9375,10.167},306}, + {{7.2832,2.30078,7.3132},360} + }; + pelicanPos[] = { + {{-6,-3.02344,10.1717},272}, + }; + shoeboxPos[] = { + {{6.56641,-2.1875,7.31347},88.9993}, + {{-6.40039,-4.75195,10.1776},33.9998} + }; + }; + class Land_Carrier_01_hull_06_2_F : default { + lootType = "mil"; + pelicanPos[] = { + {{-19.5,-13.6426,16.9168},233.999} + }; + shoeboxPos[] = { + {{-20.0527,-2.68164,16.9168},128.001} + }; + palletPos[] = { + {{-5.65625,-14.5137,18.5299},317.5}, + {{21.9355,19.0313,18.5299},0} + }; + toolRackPos[] = { + {{-17.7988,-11.9844,16.4168},89.9994} + }; + cabinetPos[] = { + {{-19.4395,-1.5957,17.7168},36.9997} + }; + }; + class Land_Carrier_01_hull_09_2_F : default { + lootType = "mil"; + palletPos[] = { + {{-12.6211,-18.5371,18.5435},0}, + {{-14.873,13.2324,14.9902},0} + }; + shoeboxPos[] = { + {{-16.6367,5.70508,18.5435},140.999}, + {{-7.92578,7.97656,14.9903},0} + }; + pelicanPos[] = { + {{-16.1504,7.82617,14.9402},201.002} + }; + cabinetPos[] = { + {{-5.81445,9.43555,16.1402},178.498} + }; + }; + class Land_Carrier_01_hull_09_1_F : default { + lootType = "mil"; + toolRackPos[] = { + {{-6.11133,-4.94336,14.4722},269.003} + }; + pelicanPos[] = { + {{10.1172,-6.33398,14.7225},145.999} + }; + palletPos[] = { + {{15.416,-19.0977,18.5144},0} + }; + toiletPos[] = { + {{-5.42773,-6.78516,14.7162},218.001} + }; + shoeboxPos[] = { + {{-5.67969,15.0645,14.7232},0}, + {{5.49414,9.64453,14.7231},0} + }; + }; + class Land_Carrier_01_hull_05_1_F : default { + lootType = "mil"; + toolRackPos[] = { + {{16.709,15.1426,14.5248},271} + }; + pelicanPos[] = { + {{19.7637,14.9316,14.4186},90.5004} + }; + lockerPos[] = { + {{17.8789,18.4805,11.5793},180.002} + }; + shoeboxPos[] = { + {{22.8203,17.6484,14.4248},268.5} + }; + cabinetPos[] = { + {{16.7988,10.0332,18.2292},0} + }; + palletPos[] = { + {{19.1387,-16.4199,18.5495},0} + }; + }; + class Land_Carrier_01_hull_03_2_F : default { + lootType = "mil"; + shelfPos[] = { + {{-6.72461,-4.2168,14.4014},85.4992} + }; + pelicanPos[] = { + {{-8.25195,-12.3477,13.1341},0} + }; + palletPos[] = { + {{-14.0117,3.96875,14.4014},0} + }; + shoeboxPos[] = { + {{-14.2852,-4.03516,14.4014},0}, + {{-12.832,18.7402,18.5309},0} + }; + cabinetPos[] = { + {{-8.32617,6.69336,18.2137},144.501} + }; + tablePos[] = { + {{-6.88086,-21.4336,16.9161},263.499} + }; + }; + class Land_Carrier_01_hull_03_1_F : default { + lootType = "mil"; + shoeboxPos[] = { + {{8.94727,7.35156,16.9285},0}, + {{4.54688,-19.4023,11.687},0} + }; + tablePos[] = { + {{7.26953,-19.5352,16.9288},94.9993} + }; + pelicanPos[] = { + {{5.69531,-8.48438,11.687},319.5} + }; + palletPos[] = { + {{9.51953,-10.3203,11.687},0} + }; + toolRackPos[] = { + {{5.93164,-5.24219,14.3667},274.5} + }; + }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgClientFunctions.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgClientFunctions.hpp new file mode 100644 index 0000000..c7fb794 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgClientFunctions.hpp @@ -0,0 +1,430 @@ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {"Raimonds Virtoss","Andrew Gregory"}; + @description = "Custom Epoch Client Only functions"; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgClientFunctions.hpp"; +*/ +class CfgClientFunctions +{ + version = 1; + class A3E + { + tag = "EPOCH"; + file = "epoch_code\compile"; + class generic + { + file = "epoch_code\compile"; + class localCleanup {}; + class unitSpawnIncrease { + customHeader = 1; + }; + class unitSpawnDecrease { + customHeader = 1; + }; + class QuickTakeAll {}; + class QuickTakeLoad {}; + class effectCrypto {}; + class handleServerMessage {}; + class updateLoadingScreen {}; + class EnterBuilding {}; + class lootTrash {}; + class interact {}; + class chopWood {}; + class fish {}; + class mineRocks {}; + class UnisexCheck {}; + class PutHandler {}; + class niteLight {}; + class LootIT {}; + class supportCopter {}; + class consumeItem {}; + class unitSpawn { + customHeader = 1; + }; + class onEachFrame {}; + class callSapperMigration {}; + class zombieSpawn {}; + class makeMarker {}; + class removeMarker {}; + class unit_onKilledEH {}; + class AutoRun_Check {}; + class AutoRun {}; + class DefibrillatorUse {}; + class CamUse {}; + class DefuseBomb {}; + class PlayerStatsDialog {}; + class ServerStatsDialog {}; + }; + class building + { + class maintainIT {}; + class lockCheck {}; + class countdown {}; + class fnc_SelectTargetBuild {}; + class isBuildAllowed {}; + class simulSwap { + customHeader = 1; + }; + class staticMove { + customHeader = 1; + }; + class upgradeBUILD {}; + class removeBUILD {}; + class changeWallState {}; + class checkBuild {}; + }; + class traders + { + class NpcTrade_return {}; + class startInteract {}; + class startInteractNPC {}; + class npcTraderAdd {}; + class npcTraderAdd2 {}; + class npcTraderAdd3 {}; + class startNPCTraderMenu {}; + class NPCTraderMenuFilter {}; + class startNpcTrade {}; + class takeCrypto {}; + class startBankTransfer {}; + class calcDamageCost {}; + }; + class interface_event_handlers + { + class KeyDown { + customHeader = 1; + }; + class KeyUp {}; + class onChar {}; + class handleUIActions {}; + }; + class event_handlers + { + class getInMan {}; + class getOutMan {}; + class HandleDamage {}; + class InventoryClosed {}; + class InventoryOpened {}; + }; + class setup + { + class masterLoop { + customHeader = 1; + }; + class clientInit {}; + class clientRespawn {}; + class clientRevive { + customHeader = 1; + }; + class client_rejectPlayer {}; + class clientKeyMap {}; + }; + class p2p_trading + { + class startTRADEREQ {}; + class startTrade {}; + class tradeRequest {}; + class TradeLoop {}; + class makep2pTrade {}; + }; + class functions + { + class worldObjectType {}; + class returnConfig {}; + class returnConfigV2 {}; + class colorRange {}; + class convertTemp {}; + class fnc_playerDeath { + customHeader = 1; + }; + class fnc_playerFired { + customHeader = 1; + }; + class fnc_isInsideBuilding {}; + class fnc_findSafePos {}; + class fnc_addItemOverflow {}; + class fnc_addMagazineOverflow {}; + class itemData {}; + class itemPicture {}; + class itemDisplayName {}; + class SortArrayByDistance {}; + class fnc_findRandomPosBehind {}; + class fnc_stringLeft {}; + class fnc_findSapperStalkLocation {}; + class fnc_dirToFuzzy {}; + class fnc_cursorTarget {}; + class fnc_returnHudVar { + customHeader = 1; + }; + class fnc_triggerAntagonist {}; + class fnc_playerDeathDetonate {}; + class fnc_playerDeathMorph {}; + class fnc_playerSetVariable {}; + class fnc_playerAttachToAntagonist {}; + class fnc_dynamicFSM {}; + class fnc_vectorDivide {}; + class giveAttributes { + customHeader = 1; + }; + class fnc_spawnEffects {}; + class fnc_arrayStringToBool {}; + class client_updatePlayerStat {}; + class fnc_getHitPointsDamageAverage {}; + class fnc_setVariableLimited {}; + class fnc_createLocalMarkerSet {}; + class fnc_deleteLocalMarkerSet {}; + class fnc_AnimateScheduled {}; + class fnc_SetFinalDir {}; + }; + class environment + { + class client_earthQuake {}; + class client_loadAnimalBrain {}; + class client_bitePlayer { + customHeader = 1; + }; + }; + class vehicles + { + class client_repairVehicle {}; + class client_lockVehicle {}; + class client_fillVehicle {}; + class client_gearVehicle {}; + class client_upgradeVehicle {}; + class client_upgradeVehicleCheck {}; + class client_VehicleMaintananceCheck {}; + class client_VehicleMaintananceDo {}; + class vehicle_checkTurretAmmo {}; + class vehicle_removeTurretAmmo {}; + class vehicle_ChangeLicensePlate {}; + class vehicle_Paintgarage {}; + }; + class missions + { + class mission_accept {}; + class mission_cage_sapper {}; + class mission_returnObj {}; + }; + class inventory + { + class selectInventoryItem {}; + class itemInteractClick {}; + class itemInteractDblClick {}; + class uniformArmorCalc {}; + class gearArmorCalc {}; + class factorArmor {}; + class maxArmorInit {}; + class initUI {}; + class refeshUI {}; + class equip { + customHeader = 1; + }; + class itemTypeSlot {}; + class usedItemRepack {}; + class CryptoButtons {}; + class SetUnitLoadout { + customHeader = 1; + }; + class ReloadLoadout { + customHeader = 1; + }; + }; + class servicepoint + { + class SP_Check {}; + class SP_Rearm {}; + class SP_Refuel {}; + class SP_Repair {}; + class SP_Start {}; + }; + class customs + { + file = "epoch_code\customs"; + class custom_EH_FiredMan {}; + class custom_EH_FiredNear {}; + class custom_EH_GetInMan {}; + class custom_EH_GetOutMan {}; + class custom_EH_HandleDamage {}; + class custom_EH_Hit {}; + class custom_EH_InventoryClosed {}; + class custom_EH_InventoryOpened {}; + class custom_EH_KeyDown {}; + class custom_EH_KeyUp {}; + class custom_EH_Killed {}; + class custom_EH_Put {}; + class custom_EH_SeatSwitchedMan {}; + class custom_EH_Take {}; + class custom_KeyMap {}; + class custom_OnEachFrame {}; + class custom_radioActions {}; + }; + class messaging + { + file = "epoch_code\gui\scripts\messaging"; + class message {}; + class message_stack {}; + class message_old1 {}; + class message_old2 {}; + }; + class gui + { + file = "epoch_code\gui\scripts"; + class onPause {}; + class showStats {}; + class 3DctrlPitchYaw {}; + class 3DctrlSpin {}; + class 3DctrlYaw {}; + class InterruptConfig {}; + class InterruptConfigActions {}; + class getIDC {}; + class guiObjHP {}; + class secureStorageHandler {}; + class genderSelection {}; + class getColorScheme {}; + class dragControl {}; + }; + class animations + { + file = "epoch_code\gui\scripts\animations"; + class 2DCtrlShake {}; + class 2DCtrlHeartbeat {}; + }; + class config + { + file = "epoch_code\gui\scripts\config"; + class config_keymap {}; + }; + class dynamenu + { + file = "epoch_code\gui\scripts\dynamenu"; + class dynamicMenu {}; + class dynamicMenuPopulate {}; + class dynamicMenuCleanup {}; + }; + class dynamicHUD + { + file = "epoch_code\gui\scripts\dynamicHUD"; + class dynamicHUD_adjust {}; + class dynamicHUD_loadSave {}; + class dynamicHUD_start {}; + class getHUDCtrl {}; + }; + class gui_craft + { + file = "epoch_code\gui\scripts\craftingv2"; + class crafting_animate {}; + class crafting_ctrl_collector {}; + class crafting_dev_toggle {}; + class crafting_getConfig {}; + class crafting_checkGear {}; + class crafting_checkNearby {}; + class crafting_checkResources {}; + class crafting_craft {}; + class crafting_progress {}; + class crafting_load {}; + class crafting_unload {}; + class crafting_LB_click {}; + class crafting_LB_defaults {}; + class crafting_LB_doubleClick {}; + class crafting_colorScheme {}; + }; + class e_pad + { + file = "epoch_code\gui\scripts\e_pad"; + class EPad_clearscreen {}; + class EPad_dialog {}; + class EPad_Reset {}; + class SaveVarsToProfile {}; + }; + class group + { + file = "epoch_code\gui\scripts\group"; + class Group_invitePlayer {}; + class Group_BtnMod {}; + class Group_BtnInvite {}; + class Group_onLoad {}; + class Group_List {}; + class Group_Combo {}; + class Group_BtnLeave {}; + class Group_BtnKick {}; + class cGroup_groupText {}; + class cGroup_onLoad {}; + class cGroup_BtnCreate {}; + class iGroup_acceptInvite {}; + class iGroup_onLoad {}; + class iGroup_refresh {}; + class Group_update {}; + }; + class groupTemp + { + file = "epoch_code\gui\scripts\groupTemp"; + class tempGroup_invitePlayer {}; + class tempGroup_BtnMod {}; + class tempGroup_BtnInvite {}; + class tempGroup_onLoad {}; + class tempGroup_List {}; + class tempGroup_Combo {}; + class tempGroup_BtnLeave {}; + class tempGroup_BtnKick {}; + class cTempGroup_onLoad {}; + class cTempGroup_BtnCreate {}; + class iTempGroup_acceptInvite {}; + class iTempGroup_onLoad {}; + class iTempGroup_refresh {}; + class tempGroup_update {}; + }; + class gui_inventory + { + file = "epoch_code\gui\scripts\inventory"; + class Inventory_Group {}; + class Inventory_iGroup {}; + class Inventory_tempGroup {}; + class Inventory_itempGroup {}; + }; + class gui_missions + { + file = "epoch_code\gui\scripts\missions"; + class mission_refresh {}; + class mission_description {}; + }; + class gui_postProcessing + { + file = "epoch_code\gui\scripts\post_process"; + class postprocessCreate {}; + class postprocessAdjust {}; + class postprocessDestroy {}; + class setDrunk {}; + class setRadiation {}; + }; + class worldToScreen + { + file = "epoch_code\gui\scripts\worldToScreen"; + class gui3DCooldown {}; + class gui3DCooldownEH {}; + class gui3DWorldPos {}; + class gui3DWorldPosEH {}; + class gui3DModelPos {}; + class gui3DModelPosEH {}; + }; + class favBar { + file = "epoch_code\gui\scripts\favBar"; + class favBar_draw {}; + class favBar_drawCurrent {}; + class favBar_refresh {}; + class favBar_action{}; + class favBar_getItemByIDC {}; + class favBar_inventory {}; + class favBar_getGearItem {}; + class favBar_modifier {}; + }; + class geiger { + file = "epoch_code\gui\scripts\geiger"; + class geiger_animate {}; + class geiger_show_hide {}; + class geiger_simulate {}; + }; + }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgCrafting.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgCrafting.hpp new file mode 100644 index 0000000..ca118a1 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgCrafting.hpp @@ -0,0 +1,1721 @@ +/* + USAGE: + nearby[] = + { + { + "Fire", //Name of field, anything + "", //image folder path (ie "\x\addons\a3_epoch_code\Data\UI\crafting\"), empty for Epoch default + "fire", //image prefix, suffix will be added by code. 2 possible suffixes: [_true.paa, _false.paa] + {1,{"ALL"}}, //ARRAY of p3D {0,{"filename.p3d","filename.p3d"}} or ARRAY of logic classes {1,{"AIR","LAND","className"}} or 2 WorldInteractions check {2,{"water"}} Integer to switch array mode + 3, //distance to check in meters + 1, //count + 1, //BOOL: object has to be on fire + 0 //BOOL: object has to be alive (not destroyed) + }; + }; + + //Can be multiple requirements like this, example requires both fire and water (unlimited, but requires mouse scroll if more than 8 elements): + nearby[] = + { + {"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}, + {"Water source","","water",{0,{"barrelwater_f.p3d", "water_source_f.p3d", "pumpa.p3d", "misc_wellpump.p3d"}},3,1,0,0}, + {{"Water source", "", "water", {2,{"water"}}, 3, 1, 0, 0}} + + }; + + WARNING: DO NOT inherit from existing items, create each item as unique entry, only inherit defaults such as part or kit! +*/ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {"Raimonds Virtoss"}; + @description = "Epoch Crafting v2 configs"; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/cfgCrafting.hpp"; +*/ +class CfgCrafting +{ + DeveloperMode = 0; + colorScheme[] = {"\x\addons\a3_epoch_code\Data\UI\crafting\cancel.paa","\x\addons\a3_epoch_code\Data\UI\crafting\craft.paa","\x\addons\a3_epoch_code\Data\UI\crafting\close.paa",{"Recipes",{0,0,0,0.8}},{"Ingredients",{0,0,0,0.8}},{"Preview",{0.76,0.5,0.07,0.8}},{"Resources",{0,0,0,0.8}},{"Description",{0,0,0,0.8}},{" -- Requires -- ",{0.99,0.53,0.03,1}},{" -- Used in -- ",{0.99,0.53,0.03,1}},{0,1,0,1},{0,1,0,1},{1,1,0,1},{1,0,0,1},{1,1,1,1},{0,0,0,0.1},{0,0,0,1},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0.76,0.5,0.07,0.8},{0,0,0,0.3},"#FFFFFF",{1,0.6,0.01,1}}; + /** --------- Don't edit --------- **/ + class Default //className, any object or item + { + craftTime = 1; //time it takes to craft + craftCount = 1; // number of crafted items + recipe[] = {}; //nested arrays, {{"item", 1}}; + nearby[] = {}; //nearby requirements - fire, water source, object + usedIn[] = {}; //item is an ingredient + recipeReturn[] = {}; // items to return after crafting is completed + + previewPosition[] = {0.8125,1,0.285}; //XzY + previewScale = 1; + previewVector = 0; //vector rotation multiplier + + priority = 0; //Recipe list priority, items with 0 are on top followed by order in config file. + type = 0; //After crafting, item is added: [0 - to inventory], [1 - in weapon holder], [2 - as vehicle] + descriptionFull = ""; //Structured text, added on new line after descriptionShort + + /** --------- Config Overrides --------- **/ + //displayName = ""; + //picture = ""; + //descriptionShort = ""; + //model = "\x\addons\a3_epoch_assets\models\logo.p3d"; + }; + + /** --------- Main templates --------- **/ + class WeaponHolder: Default //Placed inside weaponholder in front of player (?) + { + priority = 0; + type = 1; + offset[] = {0,1,0}; //local space + craftTime = 10; + descriptionFull = "Demo: Can be used if player's inventory space is an issue"; + }; + class Vehicle: Default //Spawned in front of player (?) + { + priority = 0; + type = 2; + offset[] = {0,5,0}; //local space + craftTime = 10; + descriptionFull = "Demo: Should be used for vehicles only"; + }; + class Kit: Default //base building kits gets higher priority on the list + { + priority = 1; + descriptionFull = "Base building material"; + craftTime = 4; + }; + class Item: Default //Goes into inventory + { + priority = 2; + craftTime = 2; + }; + class Part: Default //Looted part - an ingredient for other items, can't be crafted + { + priority = 3; + descriptionFull = "This item has no recipe, but is a part used for other recipes"; + }; + + /** --------- RECIPES BELOW --------- **/ + class ItemCoolerE : Part + { + usedIn[] = {"ItemCooler0","ItemCooler1","ItemCooler2","ItemCooler3","ItemCooler4","KitSnowman"}; + previewPosition[] = {0.795709,1,0.415296}; + previewScale = 0.8; + previewVector = 0; + }; + class ItemCooler0 : Item + { + recipe[] = {"ItemCoolerE",{"SnakeMeat_EPOCH",2},"sweetcorn_epoch"}; + previewPosition[] = {0.795709,1,0.415296}; + previewScale = 0.8; + previewVector = 0; + }; + class ItemCooler1 : Item + { + recipe[] = {"ItemCoolerE",{"CookedRabbit_EPOCH",2},"sweetcorn_epoch"}; + previewPosition[] = {0.795709,1,0.415296}; + previewScale = 0.8; + previewVector = 0; + }; + class ItemCooler2 : Item + { + recipe[] = {"ItemCoolerE","CookedChicken_EPOCH","sweetcorn_epoch"}; + previewPosition[] = {0.795709,1,0.415296}; + previewScale = 0.8; + previewVector = 0; + }; + class ItemCooler3 : Item + { + recipe[] = {"ItemCoolerE","CookedGoat_EPOCH","sweetcorn_epoch"}; + previewPosition[] = {0.795709,1,0.415296}; + previewScale = 0.8; + previewVector = 0; + }; + class ItemCooler4 : Item + { + recipe[] = {"ItemCoolerE","CookedSheep_EPOCH","sweetcorn_epoch"}; + previewPosition[] = {0.795709,1,0.415296}; + previewScale = 0.8; + previewVector = 0; + }; + class sweetcorn_epoch : Part + { + usedIn[] = {"ItemCooler0","ItemCooler1","ItemCooler2","ItemCooler3","ItemCooler4"}; + previewPosition[] = {0.799332,1,0.26}; + previewScale = 2.7; + previewVector = 0; + }; + class CircuitParts : Part + { + usedIn[] = {"EnergyPack","EnergyPackLg","KitPlotPole","ItemBattery","KitSolarGen","KitSolarCharger","KitSolarChargerXL","KitVehicleUpgradeI_200_EPOCH","KitVehicleUpgradeIV_200_EPOCH","BarrelBomb_EPOCH_Remote_Mag","BarrelBomb2_EPOCH_Remote_Mag","KitPortableLight_Single","KitPortableLight_Double","BaseCam","BaseCamTerminal"}; + previewPosition[] = {0.791044,1,0.256956}; + previewScale = 2; + previewVector = 2.3; + }; + class EnergyPack : Item + { + usedIn[] = {"EnergyPackLg"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0},{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + recipe[] = {{"CircuitParts",1},{"ItemCopperBar",1},{"clean_water_epoch",1}}; + previewPosition[] = {0.8,1,0.29}; + previewScale = 1.75; + previewVector = 2.8; + }; + class EnergyPackLg : Item + { + usedIn[] = {"ItemBattery"}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + recipe[] = {{"EnergyPack",3},{"ItemGoldBar",1},{"CircuitParts",1}}; + previewPosition[] = {0.8,1,0.29}; + previewScale = 1.75; + previewVector = 2.8; + }; + class ItemSodaEmpty : Part + { + usedIn[] = {"ItemAluminumBar"}; + previewPosition[] = {0.798771,1,0.238154}; + previewScale = 4; + previewVector = 0; + }; + class ItemAluminumBar : Item + { + usedIn[] = {"ItemAluminumBar10oz"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"ItemSodaEmpty",6},{"water_epoch",1}}; + previewPosition[] = {0.797144,1,0.27}; + previewScale = 1.3; + previewVector = 2.5; + }; + class ItemAluminumBar10oz : Item + { + usedIn[] = {"KitVehicleUpgradeII_200_EPOCH"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"ItemAluminumBar",10},{"water_epoch",1}}; + previewPosition[] = {0.797144,1,0.26}; + previewScale = 0.7; + previewVector = 2.5; + }; + class ItemEmptyTin : Part + { + usedIn[] = {"ItemTinBar"}; + previewPosition[] = {0.799961,1,0.27}; + previewScale = 3; + previewVector = 0; + }; + class ItemTinBar : Item + { + usedIn[] = {"ItemTinBar10oz"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"ItemEmptyTin",6},{"water_epoch",1}}; + previewPosition[] = {0.797144,1,0.27}; + previewScale = 1.3; + previewVector = 2.5; + }; + class ItemTinBar10oz : Item + { + usedIn[] = {}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"ItemTinBar",10},{"water_epoch",1}}; + previewPosition[] = {0.797144,1,0.26}; + previewScale = 0.7; + previewVector = 2.5; + }; + class PartOre : Part + { + usedIn[] = {"ItemScraps"}; + previewPosition[] = {0.8,1,0.27}; + previewScale = 1.38; + previewVector = 0; + }; + class PartOreSilver : Part + { + usedIn[] = {"ItemSilverBar"}; + previewPosition[] = {0.8,1,0.27}; + previewScale = 2.4; + previewVector = 0; + }; + class PartOreGold : Part + { + usedIn[] = {"ItemGoldBar"}; + previewPosition[] = {0.8,1,0.27}; + previewScale = 2.4; + previewVector = 0; + }; + class Pelt_EPOCH : Part + { + usedIn[] = {"KitTiPi"}; + previewPosition[] = {0.793741,1,0.274824}; + previewScale = 0.7; + previewVector = 2.2; + }; + class ItemRock : Part + { + usedIn[] = {"KitFirePlace","MeleeMaul","CrudeHatchet","MortarBucket","Kit_Garden"}; + previewPosition[] = {0.796998,1,0.35}; + previewScale = 1.3; + }; + class ItemStick : Item + { + usedIn[] = {"WoodClub","MeleeMaul","CrudeHatchet","KitFirePlace","KitSpikeTrap","KitMetalTrap","MeleeRod","KitSunShade"}; + recipe[] = {{"WoodLog_EPOCH",1}}; + previewPosition[] = {0.8,1,0.25}; + previewScale = 0.4; + previewVector = 1; + }; + class JackKit : Part + { + usedIn[] = {"KitSpikeTrap","KitMetalTrap"}; + previewPosition[] = {0.80573,1,0.461778}; + previewScale = 0.5; + previewVector = 0; + }; + class ItemSeedBag : Part + { + usedIn[] = {"SeedPacket_Hemp","SeedPacket_GoldenSeal","SeedPacket_Poppy","SeedPacket_Pumpkin","SeedPacket_Sunflower"}; + recipe[] = {{"ItemCanvas",1}}; + previewPosition[] = {0.8,1,0.26}; + previewScale = 0.6; + previewVector = 0; + }; + class Hemp : Part + { + usedIn[] = {"ItemKiloHemp","SeedPacket_Hemp"}; + previewPosition[] = {0.8,1,0.24}; + previewScale = 0.11; + previewVector = 0; + }; + class GoldenSeal : Part + { + usedIn[] = {"SeedPacket_GoldenSeal"}; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1.1; + previewVector = 0; + }; + class Poppy : Part + { + usedIn[] = {"SeedPacket_Poppy"}; + previewPosition[] = {0.8,1,0.27}; + previewScale = 0.4; + previewVector = 0; + }; + class Pumpkin : Part + { + usedIn[] = {"SeedPacket_Pumpkin"}; + previewPosition[] = {0.8,1,0.35}; + previewScale = 0.8; + previewVector = 0; + }; + class Sunflower : Part + { + usedIn[] = {"SeedPacket_Sunflower"}; + previewPosition[] = {0.8,1,0.26}; + previewScale = 0.15; + previewVector = 0; + }; + class SeedPacket_Hemp : Item + { + recipe[] = {{"Hemp",1},{"ItemSeedBag",1}}; + craftCount = 2; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1.4; + previewVector = 0; + }; + class SeedPacket_GoldenSeal : Item + { + recipe[] = {{"GoldenSeal",1},{"ItemSeedBag",1}}; + craftCount = 2; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1.4; + previewVector = 0; + }; + class SeedPacket_Poppy : Item + { + recipe[] = {{"Poppy",1},{"ItemSeedBag",1}}; + craftCount = 2; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1.4; + previewVector = 0; + }; + class SeedPacket_Pumpkin : Item + { + recipe[] = {{"Pumpkin",1},{"ItemSeedBag",1}}; + craftCount = 2; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1.4; + previewVector = 0; + }; + class SeedPacket_Sunflower : Item + { + recipe[] = {{"Sunflower",1},{"ItemSeedBag",1}}; + craftCount = 2; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1.4; + previewVector = 0; + }; + class ItemKiloHemp : Item + { + usedIn[] = {"ItemRope","ItemBurlap","ItemCanvas"}; + recipe[] = {{"Hemp",2}}; + previewPosition[] = {0.796267,1,0.322762}; + previewScale = 0.9; + previewVector = 1.4; + }; + class ItemRope : Item + { + usedIn[] = {"WoodClub","MeleeMaul","CrudeHatchet","MeleeRod","KitSunShade","KitScaffolding","KitBarbedWire"}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + recipe[] = {{"ItemKiloHemp",1}}; + previewPosition[] = {0.8,1,0.35}; + previewScale = 4; + }; + class ItemBurlap : Item + { + usedIn[] = {"KitHesco3","KitVehicleUpgradeIII_200_EPOCH","KitSandbagWall","KitSandbagWallLong","KitBagBunker"}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + recipe[] = {{"ItemKiloHemp",2}}; + previewPosition[] = {0.8,1,0.38}; + previewScale = 0.5; + previewVector = -0.3; + }; + class MeleeMaul : Item + { + recipe[] = {{"ItemRock",1},{"ItemStick",2},{"ItemRope",1}}; + previewPosition[] = {0.798975,1,0.300388}; + previewScale = 0.3; + previewVector = -1.8; + }; + class CrudeHatchet : Item + { + recipe[] = {{"ItemRock",1},{"ItemStick",1},{"ItemRope",1}}; + previewPosition[] = {0.786139,1,0.328525}; + previewScale = 0.6; + }; + class WoodClub : Item + { + recipe[] = {{"ItemStick",2}}; + previewPosition[] = {0.799633,1,0.237804}; + previewScale = 0.35; + previewVector = 2.4; + }; + class WoodLog_EPOCH : Part + { + usedIn[] = {"PartPlankPack","ItemStick","ItemPlywoodPack","KitBurnBarrel"}; + previewPosition[] = {0.800064,1,0.25}; + previewScale = 0.3; + }; + class MortarBucket : Item + { + usedIn[] = {"KitFoundation","KitCinderWall","KitHesco3","KitCinderFloor","KitCinderHalfFloor","KitCinderQuarterFloor","KitCinderTower","KitSandbagWall","KitSandbagWallLong","KitBagBunker","KitWaterPump"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0},{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + recipe[] = {{"ItemRock",12},{"water_epoch",2}}; + previewPosition[] = {0.799442,1,0.426761}; + previewScale = 0.6; + previewVector = 0; + }; + class ItemScraps : Item + { + usedIn[] = {"ItemCorrugated","KitMetalTrap","MeleeRod","KitVehicleUpgradeIV_200_EPOCH","KitBarbedWire","BaseCam","BaseCamTerminal"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"PartOre",2}}; + previewPosition[] = {0.797144,1,0.309158}; + previewScale = 1; + previewVector = 2.8; + }; + class ItemCorrugated : Item + { + usedIn[] = {"KitShelf","ItemCorrugatedLg","VehicleRepairLg","EngineParts","KitSink","KitFieldToilet","KitWaterPump","KitLightPole","FuelTank","KitJailWall"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"ItemScraps",2}}; + previewPosition[] = {0.791088,1,0.300004}; + previewScale = 0.2; + previewVector = 1; + }; + class CinderBlocks : Part + { + usedIn[] = {"KitCinderWall","KitCinderFloor","KitCinderHalfFloor","KitCinderQuarterFloor","KitCinderTower","KitBarGate","KitWaterPump"}; + previewPosition[] = {0.801866,1,0.35}; + previewScale = 0.2; + }; + class ItemMixOil : Part + { + usedIn[] = {"CSGAS"}; + previewPosition[] = {0.802419,1,0.433119}; + previewScale = 1.5; + }; + class jerrycan_epoch : Part + { + usedIn[] = {"CSGAS","KitVehicleUpgradeIV_200_EPOCH","BarrelBomb_EPOCH_Remote_Mag","BarrelBomb2_EPOCH_Remote_Mag","KitBurnBarrel"}; + previewPosition[] = {0.802443,1,0.254301}; + previewScale = 0.6; + previewVector = 4.9; + }; + class VehicleRepair : Part + { + usedIn[] = {"VehicleRepairLg","EngineParts","SpareTire","KitVehicleUpgradeI_200_EPOCH","FuelTank"}; + previewPosition[] = {0.787659,1,0.30098}; + previewScale = 0.45; + previewVector = 1.5; + }; + class VehicleRepairLg : Item + { + recipe[] = {"VehicleRepair","ItemCorrugated"}; + previewPosition[] = {0.798742,1,0.317871}; + previewScale = 0.25; + previewVector = 0.7; + }; + class ItemDuctTape : Part + { + usedIn[] = {"SpareTire","EngineParts","ItemRotor","BaseCam","BaseCamTerminal"}; + previewPosition[] = {0.807346,1,0.27}; + previewScale = 1.8; + previewVector = -3.9; + }; + class ItemGlass : Part + { + usedIn[] = {"BaseCam", "BaseCamTerminal"}; + previewPosition[] = {0.807346,1,0.27}; + previewScale = 0.55; + previewVector = -3.9; + }; + class EngineParts : Item + { + usedIn[] = {"EngineBlock"}; + recipe[] = {{"VehicleRepair",2},{"ItemCorrugated",1},{"ItemDuctTape",1} }; + previewPosition[] = {0.807346,1,0.29}; + previewScale = 0.38; + previewVector = 0.9; + }; + class EngineBlock : Item + { + recipe[] = {{"EngineParts",1},{"ItemCorrugatedLg",1} }; + previewPosition[] = {0.807346,1,0.29}; + previewScale = 0.38; + previewVector = 0.5; + }; + class ItemRotor : Item + { + recipe[] = {{"ItemCorrugatedLg",1},{"ItemDuctTape",1} }; + previewPosition[] = {0.807346,1,0.29}; + previewScale = 0.2; + previewVector = 0.5; + }; + class FuelTank : Item + { + recipe[] = {{"ItemCorrugated",1},{"VehicleRepair",1} }; + previewPosition[] = {0.8,1,0.26}; + previewScale = 0.4; + previewVector = 1; + }; + class EpochRadio0 : Part + { + usedIn[] = {"EpochRadio1"}; + model = "\a3\ui_f\objects\Radio.p3d"; + previewPosition[] = {0.800569,1,0.272473}; + previewScale = 0.45; + previewVector = -3.9; + }; + class EpochRadio1 : Item + { + usedIn[] = {"EpochRadio2"}; + recipe[] = {"EpochRadio0","ItemGarnet"}; + model = "\a3\ui_f\objects\Radio.p3d"; + previewPosition[] = {0.800569,1,0.272473}; + previewScale = 0.45; + previewVector = -3.9; + }; + class EpochRadio2 : Item + { + usedIn[] = {"EpochRadio3"}; + recipe[] = {"EpochRadio1","ItemCitrine"}; + model = "\a3\ui_f\objects\Radio.p3d"; + previewPosition[] = {0.800569,1,0.272473}; + previewScale = 0.45; + previewVector = -3.9; + }; + class EpochRadio3 : Item + { + usedIn[] = {"EpochRadio4"}; + recipe[] = {"EpochRadio2","ItemAmethyst"}; + model = "\a3\ui_f\objects\Radio.p3d"; + previewPosition[] = {0.800569,1,0.272473}; + previewScale = 0.45; + previewVector = -3.9; + }; + class EpochRadio4 : Item + { + usedIn[] = {"EpochRadio5"}; + recipe[] = {"EpochRadio3","ItemTopaz"}; + model = "\a3\ui_f\objects\Radio.p3d"; + previewPosition[] = {0.800569,1,0.272473}; + previewScale = 0.45; + previewVector = -3.9; + }; + class EpochRadio5 : Item + { + usedIn[] = {"EpochRadio6"}; + recipe[] = {"EpochRadio4","ItemSapphire"}; + model = "\a3\ui_f\objects\Radio.p3d"; + previewPosition[] = {0.800569,1,0.272473}; + previewScale = 0.45; + previewVector = -3.9; + }; + class EpochRadio6 : Item + { + usedIn[] = {"EpochRadio7"}; + recipe[] = {"EpochRadio5","ItemOnyx"}; + model = "\a3\ui_f\objects\Radio.p3d"; + previewPosition[] = {0.800569,1,0.272473}; + previewScale = 0.45; + previewVector = -3.9; + }; + class EpochRadio7 : Item + { + usedIn[] = {"EpochRadio8"}; + recipe[] = {"EpochRadio6","ItemEmerald"}; + model = "\a3\ui_f\objects\Radio.p3d"; + previewPosition[] = {0.800569,1,0.272473}; + previewScale = 0.45; + previewVector = -3.9; + }; + class EpochRadio8 : Item + { + usedIn[] = {"EpochRadio9"}; + recipe[] = {"EpochRadio7","ItemRuby"}; + model = "\a3\ui_f\objects\Radio.p3d"; + previewPosition[] = {0.800569,1,0.272473}; + previewScale = 0.45; + previewVector = -3.9; + }; + class EpochRadio9 : Item + { + recipe[] = {"EpochRadio8","ItemJade"}; + model = "\a3\ui_f\objects\Radio.p3d"; + previewPosition[] = {0.800569,1,0.272473}; + previewScale = 0.45; + previewVector = -3.9; + }; + class ItemGarnet : Part + { + usedIn[] = {"EpochRadio1"}; + previewPosition[] = {0.801697,1,0.379502}; + previewScale = 3; + }; + class ItemCitrine : Part + { + usedIn[] = {"EpochRadio2"}; + previewPosition[] = {0.796925,1,0.285847}; + previewScale = 3.5; + previewVector = 2.7; + }; + class ItemAmethyst : Part + { + usedIn[] = {"EpochRadio3"}; + previewPosition[] = {0.798082,1,0.277137}; + previewScale = 3; + previewVector = 2.9; + }; + class ItemTopaz : Part + { + usedIn[] = {"EpochRadio4"}; + previewPosition[] = {0.79555,1,0.393739}; + previewScale = 3; + }; + class ItemSapphire : Part + { + usedIn[] = {"EpochRadio5"}; + previewPosition[] = {0.804014,1,0.283865}; + previewScale = 3; + previewVector = 3.3; + }; + class ItemOnyx : Part + { + usedIn[] = {"EpochRadio6"}; + previewPosition[] = {0.799376,1,0.283337}; + previewScale = 3; + previewVector = 3.1; + }; + class ItemEmerald : Part + { + usedIn[] = {"EpochRadio7"}; + previewPosition[] = {0.805568,1,0.293134}; + previewScale = 3; + previewVector = 2.5; + }; + class ItemRuby : Part + { + usedIn[] = {"EpochRadio8"}; + previewPosition[] = {0.79555,1,0.393739}; + previewScale = 3; + }; + class ItemJade : Part + { + usedIn[] = {"EpochRadio9"}; + previewPosition[] = {0.796903,1,0.369781}; + previewScale = 3; + }; + class SnakeCarcass_EPOCH : Part + { + usedIn[] = {"SnakeMeat_EPOCH"}; + previewPosition[] = {0.808621,1,0.238853}; + previewScale = 0.55; + previewVector = 1.8; + }; + class SnakeMeat_EPOCH : Item + { + usedIn[] = {"ItemCooler0"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {"SnakeCarcass_EPOCH"}; + previewPosition[] = {0.803189,1,0.408752}; + previewScale = 6; + }; + class RabbitCarcass_EPOCH : Part + { + usedIn[] = {"CookedRabbit_EPOCH"}; + previewPosition[] = {0.796141,1,0.340971}; + previewScale = 1.5; + }; + class CookedRabbit_EPOCH : Item + { + usedIn[] = {"ItemCooler1"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {"RabbitCarcass_EPOCH"}; + previewPosition[] = {0.796141,1,0.340971}; + previewScale = 1.5; + }; + class ChickenCarcass_EPOCH : Part + { + usedIn[] = {"CookedChicken_EPOCH"}; + previewPosition[] = {0.796141,1,0.340971}; + previewScale = 0.9; + }; + class CookedChicken_EPOCH : Item + { + usedIn[] = {"ItemCooler2"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {"ChickenCarcass_EPOCH"}; + previewPosition[] = {0.796141,1,0.340971}; + previewScale = 0.9; + }; + class ItemTuna : Part + { + usedIn[] = {"ItemTunaCooked"}; + previewPosition[] = {0.8,1,0.25}; + previewScale = 0.21; + previewVector = 2.1; + }; + class ItemSeaBass : Part + { + usedIn[] = {"ItemSeaBassCooked"}; + previewPosition[] = {0.796141,1,0.25}; + previewScale = 0.4; + previewVector = 2.1; + }; + class ItemTrout : Part + { + usedIn[] = {"ItemTroutCooked"}; + previewPosition[] = {0.796141,1,0.25}; + previewScale = 0.7; + previewVector = 2.1; + }; + class ItemTunaCooked : Item + { + usedIn[] = {}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {"ItemTuna"}; + previewPosition[] = {0.8,1,0.25}; + previewScale = 0.2; + previewVector = 2; + }; + class ItemSeaBassCooked : Item + { + usedIn[] = {}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {"ItemSeaBass"}; + previewPosition[] = {0.796141,1,0.3}; + previewScale = 0.4; + previewVector = 2; + }; + class ItemTroutCooked : Item + { + usedIn[] = {}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {"ItemTrout"}; + previewPosition[] = {0.8,1,0.25}; + previewScale = 0.7; + previewVector = 2; + }; + class GoatCarcass_EPOCH : Part + { + usedIn[] = {"CookedGoat_EPOCH"}; + previewPosition[] = {0.796141,1,0.27}; + previewScale = 0.4; + previewVector = 2.1; + }; + class CookedGoat_EPOCH : Item + { + usedIn[] = {"ItemCooler3"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {"GoatCarcass_EPOCH"}; + previewPosition[] = {0.796141,1,0.27}; + previewScale = 0.4; + previewVector = 2; + }; + class DogCarcass_EPOCH : Part + { + usedIn[] = {"CookedDog_EPOCH"}; + previewPosition[] = {0.796141,1,0.27}; + previewScale = 0.4; + previewVector = 2.1; + }; + class CookedDog_EPOCH : Item + { + usedIn[] = {}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {"DogCarcass_EPOCH"}; + previewPosition[] = {0.796141,1,0.27}; + previewScale = 0.4; + previewVector = 2; + }; + class SheepCarcass_EPOCH : Part + { + usedIn[] = {"CookedSheep_EPOCH"}; + previewPosition[] = {0.796141,1,0.27}; + previewScale = 0.4; + previewVector = 2.1; + }; + class CookedSheep_EPOCH : Item + { + usedIn[] = {"ItemCooler4"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {"SheepCarcass_EPOCH"}; + previewPosition[] = {0.796141,1,0.27}; + previewScale = 0.4; + previewVector = 2.1; + }; + class icecream_epoch : Part + { + usedIn[] = {"KitSnowman"}; + previewPosition[] = {0.796141,1,0.27}; + previewScale = 0.7; + previewVector = 2.1; + }; + class emptyjar_epoch : Part + { + usedIn[] = {"water_epoch"}; + previewPosition[] = {0.807346,1,0.43035}; + previewScale = 2.5; + }; + class water_epoch : Item + { + usedIn[] = {"clean_water_epoch", "MortarBucket","ItemCopperBar","ItemCopperBar10oz","ItemGoldBar","ItemSilverBar","ItemGoldBar10oz","ItemSilverBar10oz","ItemAluminumBar","ItemAluminumBar10oz","ItemTinBar","ItemTinBar10oz","Kit_Garden"}; + nearby[] = {{"Water source","","water",{2,{"water"}},3,1,0,0}}; + recipe[] = {"emptyjar_epoch"}; + previewPosition[] = {0.807346,1,0.43035}; + previewScale = 2.5; + }; + class clean_water_epoch : Item + { + usedIn[] = {"EnergyPack","KitSnowman"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {"water_epoch"}; + previewPosition[] = {0.807346,1,0.43035}; + previewScale = 2.5; + displayName = "Clean Water"; + }; + class CSGAS : Item + { + recipe[] = {"ItemMixOil","jerrycan_epoch"}; + model = "\x\addons\a3_epoch_assets_2\jerrycan.p3d"; + previewPosition[] = {0.802443,1,0.254301}; + previewScale = 0.6; + previewVector = 4.9; + }; + class ItemCorrugatedLg : Item + { + usedIn[] = {"KitPlotPole","KitTankTrap","KitHesco3","KitSolarGen","KitSolarCharger","KitSolarChargerXL","ItemRotor","EngineBlock","KitMetalFloor","KitMetalHalfFloor","KitMetalQuarterFloor","KitMetalTower","KitFieldToilet","KitSink","KitPortableLight_Single","KitPortableLight_Double","KitBarbedWire"}; + recipe[] = {{"ItemCorrugated",3}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + previewPosition[] = {0.797491,1,0.32899}; + previewScale = 0.25; + previewVector = 0.5; + }; + class PartPlankPack : Item + { + usedIn[] = {"KitStudWall","KitWoodFloor","KitWoodFoundation","KitWoodStairs","KitWoodRamp","KitWoodLadder","KitWoodTower","KitTiPi","KitWorkbench","KitSpikeTrap","KitMetalTrap","KitWoodQuarterFloor","KitWoodHalfFloor","KitBarGate","KitBagBunker","KitWatchTower","KitLightPole","KitScaffolding","KitPlyThirdWall_EPOCH"}; + recipe[] = {{"WoodLog_EPOCH",2}}; + previewPosition[] = {0.797837,1,0.288258}; + previewScale = 0.2; + previewVector = 1; + craftTime = 2; + }; + class ItemPlywoodPack : Item + { + usedIn[] = {"KitPlyThirdWall_EPOCH"}; + recipe[] = {{"WoodLog_EPOCH",3}}; + previewPosition[] = {0.797837,1,0.288258}; + previewScale = 0.2; + previewVector = 1; + craftTime = 2; + }; + class KitFirePlace : Kit + { + recipe[] = {{"ItemRock",2},{"ItemStick",1}}; + model = "\x\addons\a3_epoch_assets_2\fireplace.p3d"; + previewPosition[] = {0.791523,1,0.244987}; + previewScale = 0.2; + previewVector = 1.5; + }; + class KitSpikeTrap : Kit + { + recipe[] = {{"PartPlankPack",4},{"ItemStick",1},{"JackKit",1}}; + model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d"; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; + class KitMetalTrap : Kit + { + recipe[] = {{"PartPlankPack",4},{"ItemStick",1},{"ItemScraps",2},{"JackKit",1}}; + model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d"; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; + class KitStudWall : Kit + { + recipe[] = {{"PartPlankPack",4}}; + model = "\x\addons\a3_epoch_assets\models\Wooden_Wall_SIM.p3d"; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + previewPosition[] = {0.797675,1,0.398882}; + previewScale = 0.07; + previewVector = 0; + }; + class KitJailWall : Kit + { + recipe[] = {{"ItemPipe",4},{"ItemCorrugated",2}}; + model = "\x\addons\a3_epoch_community\models\jail_walls\jail_wall_01.p3d"; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + previewPosition[] = {0.797675,1,0.398882}; + previewScale = 0.07; + previewVector = 0; + descriptionShort = "Jail Wall"; + descriptionFull = "Used to hold opponent players"; + }; + class KitPlyThirdWall_EPOCH : Kit + { + recipe[] = {{"PartPlankPack",2},{"ItemPlywoodPack",1}}; + model = "\x\addons\a3_epoch_community\models\third_ply_wall.p3d"; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + previewPosition[] = {0.797675,1,0.398882}; + previewScale = 0.07; + previewVector = 0; + descriptionShort = "1/3 Plywood Wall"; + descriptionFull = "Base building material"; + }; + class KitWoodFloor : Kit + { + usedIn[] = {"KitWoodTower","KitBagBunker"}; + recipe[] = {{"PartPlankPack",8}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets\models\Wooden_Floor.p3d"; + previewPosition[] = {0.800198,1,0.262418}; + previewScale = 0.055; + previewVector = 3.6; + }; + class KitWoodHalfFloor : Kit + { + recipe[] = {{"PartPlankPack",4}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets_1\models\Half_Floor.p3d"; + previewPosition[] = {0.800198,1,0.262418}; + previewScale = 0.055; + previewVector = 3.6; + }; + class KitWoodQuarterFloor : Kit + { + recipe[] = {{"PartPlankPack",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets_1\models\Quarter_Floor.p3d"; + previewPosition[] = {0.800198,1,0.262418}; + previewScale = 0.055; + previewVector = 3.6; + }; + class KitWoodLadder : Kit + { + recipe[] = {{"PartPlankPack",4}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Ladder\wood_ladder.p3d"; + previewPosition[] = {0.798736,1,0.441696}; + previewScale = 0.08; + previewVector = 0; + }; + class KitWoodRamp : Kit + { + recipe[] = {{"PartPlankPack",6}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets\models\Wood_Ramp.p3d"; + previewPosition[] = {0.799137,1,0.350575}; + previewScale = 0.05; + previewVector = 0; + }; + class KitTankTrap : Kit + { + usedIn[] = {"KitVehicleUpgradeII_200_EPOCH"}; + recipe[] = {{"ItemCorrugatedLg",1}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\tank_trap.p3d"; + previewPosition[] = {0.8,1,0.25}; + previewScale = 0.19; + previewVector = 0; + }; + class KitHesco3 : Kit + { + recipe[] = {{"ItemBurlap",3},{"MortarBucket",2},{"ItemCorrugatedLg",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\hesco.p3d"; + previewPosition[] = {0.798145,1,0.325629}; + previewScale = 0.095; + previewVector = 0.3; + }; + class KitWoodStairs : Kit + { + recipe[] = {{"PartPlankPack",4}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets\models\Wood_stairs.p3d"; + previewPosition[] = {0.795037,1,0.377922}; + previewScale = 0.054; + previewVector = 0; + }; + class KitWoodTower : Kit + { + recipe[] = {{"KitWoodFloor",1},{"PartPlankPack",4}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Tower\Tower\Base_Tower_Frame.p3d"; + previewPosition[] = {0.800653,1,0.378749}; + previewScale = 0.05; + previewVector = 0; + }; + class KitMetalFloor : Kit + { + usedIn[] = {"KitMetalTower"}; + recipe[] = {{"ItemCorrugatedLg",4}}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0},{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets_1\models\metal_floor.p3d"; + previewPosition[] = {0.800198,1,0.262418}; + previewScale = 0.055; + previewVector = 3.6; + }; + class KitMetalHalfFloor : Kit + { + recipe[] = {{"ItemCorrugatedLg",2}}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0},{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_community\models\metal_floor_half.p3d"; + previewPosition[] = {0.800198,1,0.262418}; + previewScale = 0.055; + previewVector = 3.6; + }; + class KitMetalQuarterFloor : Kit + { + recipe[] = {{"ItemCorrugatedLg",1}}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0},{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_community\models\metal_floor_quarter.p3d"; + previewPosition[] = {0.800198,1,0.262418}; + previewScale = 0.055; + previewVector = 3.6; + }; + class KitMetalTower : Kit + { + recipe[] = {{"KitMetalFloor",1},{"ItemCorrugatedLg",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_community\Metal_Base_Tower\Metal_floor_tower.p3d"; + previewPosition[] = {0.800653,1,0.378749}; + previewScale = 0.05; + previewVector = 0; + }; + class KitCinderFloor : Kit + { + usedIn[] = {"KitCinderTower"}; + recipe[] = {{"CinderBlocks",4},{"MortarBucket",4}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_community\models\cinderfloor.p3d"; + previewPosition[] = {0.800198,1,0.262418}; + previewScale = 0.055; + previewVector = 3.6; + }; + class KitCinderHalfFloor : Kit + { + recipe[] = {{"CinderBlocks",2},{"MortarBucket",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_community\models\cinderfloor_half.p3d"; + previewPosition[] = {0.800198,1,0.262418}; + previewScale = 0.055; + previewVector = 3.6; + }; + class KitCinderQuarterFloor : Kit + { + recipe[] = {{"CinderBlocks",1},{"MortarBucket",1}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_community\models\cinderfloor_quarter.p3d"; + previewPosition[] = {0.800198,1,0.262418}; + previewScale = 0.055; + previewVector = 3.6; + }; + class KitCinderTower : Kit + { + recipe[] = {{"KitCinderFloor",1},{"CinderBlocks",2},{"MortarBucket",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_community\Cinder_Base_Tower\cinder_tower_upgrade.p3d"; + previewPosition[] = {0.800653,1,0.378749}; + previewScale = 0.05; + previewVector = 0; + }; + class KitTiPi : Kit + { + recipe[] = {{"Pelt_EPOCH",4},{"PartPlankPack",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets\models\tp.p3d"; + previewPosition[] = {0.801503,1,0.433758}; + previewScale = 0.06; + previewVector = 0; + }; + class KitShelf : Kit + { + usedIn[] = {"KitVehicleUpgradeIII_200_EPOCH"}; + recipe[] = {{"ItemCorrugated",3}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets\models\shelf.p3d"; + previewPosition[] = {0.803749,1,0.448515}; + previewScale = 0.17; + previewVector = 0; + }; + class KitWorkbench : Kit + { + recipe[] = {{"PartPlankPack",2}}; + model = "\x\addons\a3_epoch_assets_1\models\workbench.p3d"; + previewPosition[] = {0.8,1,0.39}; + previewScale = 0.25; + previewVector = 0; + }; + class KitFoundation : Kit + { + recipe[] = {{"MortarBucket",4}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets\models\Concrete_Col.p3d"; + previewPosition[] = {0.796787,1,0.211457}; + previewScale = 0.047; + previewVector = 0; + }; + class KitWoodFoundation : Kit + { + recipe[] = {{"PartPlankPack",8}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets\models\Wood_Col.p3d"; + previewPosition[] = {0.796787,1,0.211457}; + previewScale = 0.047; + previewVector = 0; + }; + class KitCinderWall : Kit + { + recipe[] = {{"CinderBlocks",2},{"MortarBucket",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets\models\cinder_half.p3d"; + previewPosition[] = {0.797638,1,0.341915}; + previewScale = 0.07; + previewVector = 0; + }; + class Kit_Garden : Kit + { + recipe[] = {{"ItemRock",4},{"water_epoch",4},{"PartPlankPack",4}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_community\models\Farming\epoch_Garden.p3d"; + previewPosition[] = {0.800198,1,0.262418}; + previewScale = 0.055; + previewVector = 3.6; + }; + class KitBarbedWire : Kit + { + recipe[] = {{"ItemCorrugatedLg",2},{"ItemScraps",10},{"ItemRope",4}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "x\addons\a3_epoch_community\models\barbed_wire.p3d"; + previewPosition[] = {0.8,1,0.3}; + previewScale = 0.038; + previewVector = 0; + }; + class KitPlotPole : Kit + { + recipe[] = {{"ItemCables",1},{"ItemBattery",1},{"ItemCorrugatedLg",2},{"CircuitParts",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets\models\jammer.p3d"; + previewPosition[] = {0.801378,1,0.464834}; + previewScale = 0.055; + previewVector = 0; + }; + class KitSnowman : Kit + { + recipe[] = {{"ItemCoolerE",1},{"icecream_epoch",1},{"clean_water_epoch",2}}; + model = "\x\addons\a3_epoch_community\models\hol_x\epoch_snowman.p3d"; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + previewPosition[] = {0.801378,1,0.29}; + previewScale = 0.15; + previewVector = 0; + descriptionShort = "Snowman"; + descriptionFull = "Nice deco for Wintertime"; + }; + class ItemSolar : Part + { + usedIn[] = {"KitSolarGen","KitSolarCharger","KitSolarChargerXL"}; + previewPosition[] = {0.802374,1,0.26}; + previewScale = 0.19; + previewVector = 3.3; + }; + class SmeltingTools_EPOCH : Part + { + usedIn[] = {"ItemCopperBar","ItemCopperBar10oz","ItemGoldBar","ItemSilverBar","ItemGoldBar10oz","ItemSilverBar10oz"}; + previewPosition[] = {0.8,1,0.25}; + previewScale = 0.6; + previewVector = 1.2; + }; + class ItemCables : Item + { + usedIn[] = {"KitSolarGen","KitSolarCharger","KitSolarChargerXL","KitPlotPole","ItemCopperBar","KitVehicleUpgradeI_200_EPOCH","BaseCam","BaseCamTerminal"}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + recipe[] = {{"ItemCopperBar",1}}; + previewPosition[] = {0.802374,1,0.26}; + previewScale = 0.3; + previewVector = 2.8; + }; + class ItemCopperBar : Item + { + usedIn[] = {"ItemCables","ItemCopperBar10oz","EnergyPack"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"ItemCables",1},{"water_epoch",1},{"SmeltingTools_EPOCH",1}}; + recipeReturn[] = {"SmeltingTools_EPOCH"}; + previewPosition[] = {0.797144,1,0.27}; + previewScale = 1.3; + previewVector = 2.5; + }; + class ItemCopperBar10oz : Item + { + usedIn[] = {}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"ItemCopperBar",10},{"water_epoch",1},{"SmeltingTools_EPOCH",1}}; + recipeReturn[] = {"SmeltingTools_EPOCH"}; + previewPosition[] = {0.797144,1,0.26}; + previewScale = 0.7; + previewVector = 2.5; + }; + class ItemGoldBar : Item + { + usedIn[] = {"ItemGoldBar10oz","EnergyPackLg"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"PartOreGold",2},{"water_epoch",1},{"SmeltingTools_EPOCH",1}}; + recipeReturn[] = {"SmeltingTools_EPOCH"}; + previewPosition[] = {0.8,1,0.26}; + previewScale = 2.5; + previewVector = 2.5; + }; + class ItemSilverBar : Item + { + usedIn[] = {"ItemSilverBar10oz"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"PartOreSilver",2},{"water_epoch",1},{"SmeltingTools_EPOCH",1}}; + recipeReturn[] = {"SmeltingTools_EPOCH"}; + previewPosition[] = {0.8,1,0.26}; + previewScale = 2.5; + previewVector = 2.5; + }; + class ItemGoldBar10oz : Item + { + usedIn[] = {"ItemBriefcaseGold100oz"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"ItemGoldBar",10},{"water_epoch",1},{"SmeltingTools_EPOCH",1}}; + recipeReturn[] = {"SmeltingTools_EPOCH"}; + previewPosition[] = {0.801715,1,0.331674}; + previewScale = 1.5; + previewVector = 0.3; + }; + class ItemSilverBar10oz : Item + { + usedIn[] = {"ItemBriefcaseSilver100oz"}; + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"ItemSilverBar",10},{"water_epoch",1},{"SmeltingTools_EPOCH",1}}; + recipeReturn[] = {"SmeltingTools_EPOCH"}; + previewPosition[] = {0.801715,1,0.331674}; + previewScale = 1.5; + previewVector = 0.3; + }; + class ItemBriefcaseGold100oz : Item + { + usedIn[] = {}; + nearby[] = {}; + recipe[] = {{"ItemGoldBar10oz",10},{"ItemBriefcaseE",1}}; + previewPosition[] = {0.8,1,0.42}; + previewScale = 0.5; + previewVector = 0; + }; + class ItemBriefcaseSilver100oz : Item + { + usedIn[] = {}; + nearby[] = {}; + recipe[] = {{"ItemSilverBar10oz",10},{"ItemBriefcaseE",1}}; + previewPosition[] = {0.8,1,0.42}; + previewScale = 0.5; + previewVector = 0; + }; + class ItemBriefcaseE : Part + { + usedIn[] = {"ItemBriefcaseGold100oz","ItemBriefcaseSilver100oz"}; + previewPosition[] = {0.8,1,0.42}; + previewScale = 0.5; + previewVector = 0; + }; + class ItemBattery : Item + { + usedIn[] = {"KitSolarGen","KitSolarCharger","KitSolarChargerXL","KitPlotPole","BarrelBomb_EPOCH_Remote_Mag","BarrelBomb2_EPOCH_Remote_Mag"}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + recipe[] = {{"EnergyPackLg",3},{"CircuitParts",1}}; + previewPosition[] = {0.802374,1,0.276733}; + previewScale = 0.4; + }; + class KitSolarGen : Kit + { + recipe[] = {{"ItemSolar",1},{"ItemCables",1},{"ItemBattery",1},{"ItemCorrugatedLg",2},{"CircuitParts",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Solar_Generator_Complete\Solar_generator.p3d"; + previewPosition[] = {0.804979,1,0.39189}; + previewScale = 0.11; + previewVector = 0; + }; + class KitSolarCharger : Kit + { + recipe[] = {{"ItemSolar",1},{"ItemCables",1},{"ItemBattery",1},{"ItemCorrugatedLg",2},{"CircuitParts",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_community\models\Solar_generator_charger.p3d"; + previewPosition[] = {0.804979,1,0.39189}; + previewScale = 0.11; + previewVector = 0; + descriptionShort = "Solar Charger Kit"; + descriptionFull = "Used to charge small Energy Packs"; + }; + class KitSolarChargerXL : Kit + { + recipe[] = {{"ItemSolar",2},{"ItemCables",2},{"ItemBattery",2},{"ItemCorrugatedLg",2},{"CircuitParts",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_community\models\Solar_generator_charger.p3d"; + previewPosition[] = {0.804979,1,0.39189}; + previewScale = 0.11; + previewVector = 0; + descriptionShort = "Solar Charger Kit XL"; + descriptionFull = "Used to charge large Energy Packs"; + }; + class BaseCam : Kit + { + recipe[] = {{"ItemCables",1},{"ItemGlass",1},{"ItemDuctTape",1},{"ItemScraps",2},{"CircuitParts",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_community\models\base_cam.p3d"; + previewPosition[] = {0.804979,1,0.3}; + previewScale = 0.5; + previewVector = 0; + descriptionShort = "Base Camera"; + descriptionFull = "Protect your Base with a Camera.
A BaseCam Terminal is needed,
to check your Base Cameras"; + }; + class BaseCamTerminal : Kit + { + recipe[] = {{"ItemCables",1},{"ItemGlass",1},{"ItemDuctTape",1},{"ItemScraps",2},{"CircuitParts",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\x\addons\a3_epoch_community\models\base_cam_terminal.p3d"; + previewPosition[] = {0.804979,1,0.3}; + previewScale = 0.5; + previewVector = 0; + descriptionShort = "Base Camera Terminal"; + descriptionFull = "Check your Base Cameras with this Terminal"; + }; + class MeleeRod : Kit + { + recipe[] = { { "ItemRope", 1 }, { "ItemStick", 1 }, { "ItemScraps", 1 } }; + descriptionFull = ""; + previewPosition[] = {0.798975,1,0.375}; + previewScale = 0.2; + previewVector = -1.8; + }; +/* + class KitVehicleUpgradeI_100_EPOCH : Kit //doc1 + { + recipe[] = { {"ItemVehDoc1",1}, {"CircuitParts",1}, {"ItemCables",1}, {"VehicleRepair",3} }; //update rest of items + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; +*/ + class KitVehicleUpgradeI_200_EPOCH : Kit + { + recipe[] = { {"ItemVehDoc1",1}, {"CircuitParts",1}, {"ItemCables",1}, {"VehicleRepair",3} }; //update rest of items + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; +/* + class KitVehicleUpgradeI_300_EPOCH : Kit + { + recipe[] = { {"ItemVehDoc1",1}, {"CircuitParts",1}, {"ItemCables",1}, {"VehicleRepair",3} }; //update rest of items + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; +*/ +/* + class KitVehicleUpgradeII_100_EPOCH : Kit //doc2, tire + { + recipe[] = { {"ItemVehDoc2",1}, {"SpareTire",1}, {"KitTankTrap",2}, {"ItemAluminumBar10oz",2} }; + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; +*/ + class KitVehicleUpgradeII_200_EPOCH : Kit + { + recipe[] = { {"ItemVehDoc2",1}, {"SpareTire",1}, {"KitTankTrap",2}, {"ItemAluminumBar10oz",2} }; + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; +/* + class KitVehicleUpgradeII_300_EPOCH : Kit + { + recipe[] = { {"ItemVehDoc2",1}, {"SpareTire",1}, {"KitTankTrap",2}, {"ItemAluminumBar10oz",2} }; + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; +*/ +/* + class KitVehicleUpgradeIII_100_EPOCH : Kit //doc3, pipes + { + recipe[] = { {"ItemVehDoc3",1}, {"ItemPipe",2}, {"KitShelf",2}, {"ItemBurlap",2} }; + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; +*/ + class KitVehicleUpgradeIII_200_EPOCH : Kit + { + recipe[] = { {"ItemVehDoc3",1}, {"ItemPipe",2}, {"KitShelf",2}, {"ItemBurlap",2} }; + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; +/* + class KitVehicleUpgradeIII_300_EPOCH : Kit + { + recipe[] = { {"ItemVehDoc3",1}, {"ItemPipe",2}, {"KitShelf",2}, {"ItemBurlap",2} }; + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; +*/ +/* + class KitVehicleUpgradeIV_100_EPOCH : Kit //doc4 + { + recipe[] = { {"ItemVehDoc4",1}, {"CircuitParts",1}, {"ItemScraps",2}, {"jerrycan_epoch",2} }; + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; +*/ + class KitVehicleUpgradeIV_200_EPOCH : Kit + { + recipe[] = { {"ItemVehDoc4",1}, {"CircuitParts",1}, {"ItemScraps",2}, {"jerrycan_epoch",2} }; + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; +/* + class KitVehicleUpgradeIV_300_EPOCH : Kit + { + recipe[] = { {"ItemVehDoc4",1}, {"CircuitParts",1}, {"ItemScraps",2}, {"jerrycan_epoch",2} }; + previewPosition[] = {0.798208,1,0.227936}; + previewScale = 0.28; + previewVector = -0.5; + }; +*/ + class ItemVehDoc1 : Part + { + usedIn[] = {"KitVehicleUpgradeI_200_EPOCH"}; + previewPosition[] = {0.802374,1,0.26}; + previewScale = 1.2; + previewVector = 3.3; + }; + class ItemVehDoc2 : Part + { + usedIn[] = {"KitVehicleUpgradeII_200_EPOCH"}; + previewPosition[] = {0.802374,1,0.26}; + previewScale = 1.2; + previewVector = 3.3; + }; + class ItemVehDoc3 : Part + { + usedIn[] = {"KitVehicleUpgradeIII_200_EPOCH"}; + previewPosition[] = {0.802374,1,0.26}; + previewScale = 1.2; + previewVector = 3.3; + }; + class ItemVehDoc4 : Part + { + usedIn[] = {"KitVehicleUpgradeIV_200_EPOCH"}; + previewPosition[] = {0.802374,1,0.26}; + previewScale = 1.2; + previewVector = 3.3; + }; + class SpareTire : Part + { + recipe[] = {{"VehicleRepair",2},{"ItemDuctTape",1} }; + usedIn[] = {"KitVehicleUpgradeII_200_EPOCH"}; + previewPosition[] = {0.802374,1,0.26}; + previewScale = 0.45; + previewVector = 3.3; + }; + class ItemPipe : Part + { + usedIn[] = {"KitVehicleUpgradeIII_200_EPOCH","KitTentA","KitTentDome","KitScaffolding","KitSink","KitSunShade","KitWaterPump","KitJailWall"}; + previewPosition[] = {0.802374,1,0.26}; + previewScale = 0.2; + previewVector = 0.5; + }; + class ItemCanvas : Item + { + usedIn[] = {"KitTentA","KitTentDome","KitSunShade","KitWatchTower","KitScaffolding","ItemSeedBag"}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + recipe[] = {{"ItemKiloHemp",1}}; + previewPosition[] = {0.802443,1,0.254301}; + previewScale = 0.8; + previewVector = 4.9; + }; + class ItemBulb : Part + { + usedIn[] = {"KitLightPole","KitPortableLight_Single","KitPortableLight_Double"}; + previewPosition[] = {0.802443,1,0.254301}; + previewScale = 0.95; + previewVector = 4.9; + }; + class BarrelBomb_EPOCH_Remote_Mag : Kit + { + nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}}; + recipe[] = {{"ItemBarrelE",1},{"jerrycan_epoch",3},{"ItemBattery",1},{"CircuitParts",1}}; + previewPosition[] = {0.79545,1,0.42}; + previewScale = 0.3; + previewVector = 0.3; + }; + class BarrelBomb2_EPOCH_Remote_Mag : BarrelBomb_EPOCH_Remote_Mag + { + previewPosition[] = {0.79545,1,0.234395}; + previewScale = 0.2; + previewVector = 0.1; + }; + class ItemBarrelE : Part + { + usedIn[] = {"BarrelBomb_EPOCH_Remote_Mag","BarrelBomb2_EPOCH_Remote_Mag","KitBurnBarrel"}; + previewPosition[] = {0.79545,1,0.234395}; + previewScale = 0.2; + previewVector = 0.1; + }; + class KitTentA : Kit + { + recipe[] = {{"ItemCanvas",2},{"ItemPipe",3}}; + model = "\x\addons\a3_epoch_community\models\tent_camo.p3d"; + previewPosition[] = {0.8,1,0.3}; + previewScale = 0.5; + previewVector = 0.3; + }; + class KitTentDome : Kit + { + recipe[] = {{"ItemCanvas",3},{"ItemPipe",4}}; + model = "\x\addons\a3_epoch_community\models\tent_dome.p3d"; + previewPosition[] = {0.8,1,0.3}; + previewScale = 0.5; + previewVector = 0.3; + }; + class ItemWaterPurificationTablets : Part + { + usedIn[] = {"ItemBottlePlastic_Clean","ItemCanteen_Clean"}; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1; + previewVector = 1; + }; + class ItemBottlePlastic_Empty : Part + { + usedIn[] = {"ItemBottlePlastic_Dirty"}; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1; + previewVector = 1; + }; + class ItemBottlePlastic_Dirty: Item + { + usedIn[] = {"ItemBottlePlastic_Clean"}; + nearby[] = {{"Water source","","water",{2,{"water"}},3,1,0,0}}; + recipe[] = {"ItemBottlePlastic_Empty"}; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1; + previewVector = 1; + }; + class ItemBottlePlastic_Clean : Item + { + recipe[] = {"ItemBottlePlastic_Dirty","ItemWaterPurificationTablets"}; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1; + previewVector = 1; + }; + class ItemCanteen_Empty : Part + { + usedIn[] = {"ItemCanteen_Dirty"}; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1; + previewVector = 1; + }; + class ItemCanteen_Dirty : Item + { + usedIn[] = {"ItemCanteen_Clean"}; + nearby[] = {{"Water source","","water",{2,{"water"}},3,1,0,0}}; + recipe[] = {"ItemCanteen_Empty"}; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1; + previewVector = 1; + }; + class ItemCanteen_Clean : Item + { + usedIn[] = {}; + recipe[] = {"ItemCanteen_Dirty","ItemWaterPurificationTablets"}; + previewPosition[] = {0.8,1,0.26}; + previewScale = 1; + previewVector = 1; + }; + class lighter_epoch : Part + { + usedIn[] = {"KitBurnBarrel"}; + previewPosition[] = {0.79545,1,0.234395}; + previewScale = 2.5; + previewVector = -90; + }; + class KitBurnBarrel : Kit + { + recipe[] = {{"ItemBarrelE",1},{"jerrycan_epoch",1},{"WoodLog_EPOCH",3},{"lighter_epoch",1}}; + model = "\A3\Structures_F\Items\Vessels\MetalBarrel_empty_F.p3d"; + previewPosition[] = {0.8,1,0.26}; + previewScale = 0.30; + }; + class KitLightPole : Kit + { + recipe[] = {{"ItemBulb",1},{"ItemCables",1},{"ItemBattery",1},{"ItemCorrugated",1},{"PartPlankPack",4}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\A3\Structures_F\Civ\Lamps\LampShabby_F.p3d"; + previewPosition[] = {0.796787,1,0.27}; + previewScale = 0.040; + previewVector = 0; + }; + class KitFieldToilet : Kit + { + recipe[] = {{"ItemCorrugatedLg",2},{"ItemCorrugated",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\A3\Structures_F\Civ\Camping\FieldToilet_F.p3d"; + previewPosition[] = {0.796787,1,0.27}; + previewScale = 0.1; + previewVector = 0; + }; + class KitScaffolding : Kit + { + recipe[] = {{"ItemPipe",16},{"PartPlankPack",2},{"ItemRope",12},{"ItemCanvas",4}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\A3\Structures_F\Civ\Constructions\Scaffolding_F.p3d"; + previewPosition[] = {0.8,1,0.27}; + previewScale = 0.02; + previewVector = 0; + }; + class KitSink : Kit + { + recipe[] = {{"ItemCorrugatedLg",2},{"ItemPipe",1},{"ItemCorrugated",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\A3\Structures_F\Civ\Accessories\Sink_F.p3d"; + previewPosition[] = {0.8,1,0.27}; + previewScale = 0.15; + previewVector = 0; + }; + class KitPortableLight_Single : Kit + { + recipe[] = {{"ItemBulb",1},{"ItemCables",1},{"ItemBattery",1},{"ItemCorrugatedLg",1},{"CircuitParts",1}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\A3\Structures_F_EPA\Civ\Constructions\PortableLight_single_F.p3d"; + previewPosition[] = {0.796787,1,0.27}; + previewScale = 0.1; + previewVector = 0; + }; + class KitPortableLight_Double : Kit + { + recipe[] = {{"ItemBulb",2},{"ItemCables",2},{"ItemBattery",1},{"ItemCorrugatedLg",1},{"CircuitParts",2}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\A3\Structures_F_EPA\Civ\Constructions\PortableLight_double_F.p3d"; + previewPosition[] = {0.796787,1,0.27}; + previewScale = 0.1; + previewVector = 0; + }; + class KitWatchTower : Kit + { + recipe[] = {{"PartPlankPack",8},{"ItemRope",4},{"ItemCanvas",2}}; + model = "\A3\Structures_F_EPC\Civ\Accessories\LifeguardTower_01_F.p3d"; + previewPosition[] = {0.796787,1,0.27}; + previewScale = 0.040; + previewVector = 0; + }; + class KitSunShade : Kit + { + recipe[] = {{"ItemCanvas",1},{"ItemPipe",1},{"ItemRope",1},{"ItemStick",4}}; + nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}}; + model = "\A3\Structures_F_EPC\Civ\Camping\Sunshade_03_F.p3d"; + previewPosition[] = {0.796787,1,0.27}; + previewScale = 0.09; + previewVector = 0; + }; + class KitSandbagWall : Kit + { + recipe[] = {{"ItemBurlap",2},{"MortarBucket",2}}; + model = "A3\Structures_F\Mil\BagFence\BagFence_Short_F.p3d"; + previewPosition[] = {0.8,1,0.27}; + previewScale = 0.17; + previewVector = 0; + }; + class KitSandbagWallLong : Kit + { + recipe[] = {{"ItemBurlap",4},{"MortarBucket",4}}; + model = "A3\Structures_F\Mil\BagFence\BagFence_Long_F.p3d"; + previewPosition[] = {0.8,1,0.27}; + previewScale = 0.12; + previewVector = 0; + }; + class KitBagBunker : Kit + { + recipe[] = {{"ItemBurlap",8},{"MortarBucket",8},{"KitWoodFloor",1},{"PartPlankPack",2}}; + model = "\A3\Structures_F\Mil\BagBunker\BagBunker_Small_F.p3d"; + previewPosition[] = {0.8,1,0.27}; + previewScale = 0.055; + previewVector = 0; + }; + class KitBarGate : Kit + { + recipe[] = {{"PartPlankPack",6},{"CinderBlocks",1}}; + model = "\A3\Structures_F\Walls\BarGate_F.p3d"; + previewPosition[] = {0.8,1,0.26}; + previewScale = 0.035; + previewVector = 0; + }; + class KitWaterPump : Kit + { + recipe[] = {{"CinderBlocks",4},{"MortarBucket",4},{"ItemPipe",2},{"ItemCorrugated",2}}; + model = "\A3\Structures_F\Civ\Accessories\Water_source_F.p3d"; + previewPosition[] = {0.8,1,0.27}; + previewScale = 0.09; + previewVector = 0; + }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgDisabledCommands.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgDisabledCommands.hpp new file mode 100644 index 0000000..aaba51a --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgDisabledCommands.hpp @@ -0,0 +1,210 @@ +/* + COMMANDS: LOADFILE, SETFRIEND, SETAMMO, ENABLEFATIGUE, SETUNITRECOILCOEFFICIENT, CALLEXTENSION, ENABLECOLLISIONWITH, REMOVEALLITEMS, REMOVEALLACTIONS, CREATETEAM, FORCEADDUNIFORM, REMOVEALLMPEVENTHANDLERS, SETDAMMAGE, DISPLAYSETEVENTHANDLER, ADDMPEVENTHANDLER, REMOVEALLMISSIONEVENTHANDLERS, CTRLCLASSNAME, CTRLMODEL, SETGROUPICONSVISIBLE, SETGROUPICONSSELECTABLE, SETGROUPICONPARAMS, ADDGROUPICON +*/ + +class CfgDisabledCommands +{ + class LOADFILE + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{},{"STRING"}}; + }; + }; + + class SETFRIEND + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"SIDE"},{"ARRAY"}}; + }; + }; + + class SETAMMO + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"OBJECT"},{"ARRAY"}}; + }; + }; + + class ENABLEFATIGUE + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"OBJECT"},{"BOOL"}}; + }; + }; + + class SETUNITRECOILCOEFFICIENT + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"OBJECT"},{"SCALAR"}}; + }; + }; + + class CALLEXTENSION + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"STRING"},{"STRING"}}; + }; + + class SYNTAX2 + { + targets[] = {1,0,1}; + args[] = {{"STRING"},{"ARRAY"}}; + }; + }; + + class ENABLECOLLISIONWITH + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"OBJECT"},{"OBJECT"}}; + }; + }; + + class REMOVEALLITEMS + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{},{"OBJECT"}}; + }; + }; + + class REMOVEALLACTIONS + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{},{"OBJECT"}}; + }; + }; + + class CREATETEAM + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{},{"ARRAY"}}; + }; + }; +/* + class FORCEADDUNIFORM + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"OBJECT"},{"STRING"}}; + }; + }; +*/ + class REMOVEALLMPEVENTHANDLERS + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"OBJECT"},{"STRING"}}; + }; + }; + + class SETDAMMAGE + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"OBJECT"},{"SCALAR"}}; + }; + }; + + class DISPLAYSETEVENTHANDLER + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"DISPLAY"},{"ARRAY"}}; + }; + }; + + class ADDMPEVENTHANDLER + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"OBJECT"},{"ARRAY"}}; + }; + }; + + class REMOVEALLMISSIONEVENTHANDLERS + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{},{"STRING"}}; + }; + }; + + class CTRLCLASSNAME + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{},{"CONTROL"}}; + }; + }; + + class CTRLMODEL + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{},{"CONTROL"}}; + }; + }; + + class SETGROUPICONSVISIBLE + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{},{"ARRAY"}}; + }; + }; + + class SETGROUPICONSSELECTABLE + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{},{"BOOL"}}; + }; + }; + + class SETGROUPICONPARAMS + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"GROUP"},{"ARRAY"}}; + }; + }; + + class ADDGROUPICON + { + class SYNTAX1 + { + targets[] = {1,0,1}; + args[] = {{"GROUP"},{"ARRAY"}}; + }; + }; +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgDynamicHUD.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgDynamicHUD.hpp new file mode 100644 index 0000000..0a5f38c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgDynamicHUD.hpp @@ -0,0 +1,108 @@ +/* +defaultPos: + 0 - top left + 1 - top center + 2 - top right + 3 - mid left + 4 - mid center + 5 - mid right + 6 - bottom left + 7 - bottom center + 8 - bottom right + +defaultPopulate: + 0 - right + 1 - left + 2 - down + 3 - up + 4 - horizontal grow (starts from center, evens on left, odds on right) + 5 - vertical grow (same as above) + +offSetX: Positive = right, Negative = left +offSetY: Positive = down, Negative = up + Offsets group of controls, unit measurement is width or height of group. The bigger the group the more it will be offset. + Offsets are optional, don't have to be included + +classname: + https://community.bistudio.com/wiki/ctrlCreate/classnames + +Obtaining Controls: + use epoch_getHUDCtrl function to obtain controls for manipulation + _name = Config name of your group + _index = each group hosts multiple elements, each element has it's index, starting from 1! Don't use 0 as it returns configName + [_ConfigName, _index] call epoch_getHUDCtrl; + ["myHUDname", 3] call epoch_getHUDCtrl; +*/ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Raimonds Virtoss - https://EpochMod.com"; + @contributors[] = {}; + @description = "Epoch dynamic player HUD config"; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgDynamicHUD.hpp"; +*/ +class rmx_dynamicHUD +{ + class topRight + { + classname = "RscPictureKeepAspect"; + defaultPos = 2; + defaultPopulate = 1; + arraySize = 10; + width = 4; + height = 4; + offSetX = 0; + offSetY = 1.3; + angle[] = {-5,0.5,0.5,0.5}; + scale[] = {1,0.05}; + }; + class fav_pic_bg + { + classname = "RscPictureKeepAspect"; + defaultPos = 7; + defaultPopulate = 0; + arraySize = 5; + width = 4; + height = 4; + }; + class fav_pic + { + classname = "RscPictureKeepAspect"; + defaultPos = 7; + defaultPopulate = 0; + arraySize = 5; + width = 4; + height = 4; + }; + class fav_equipped + { + classname = "RscPicture"; + defaultPos = 7; + defaultPopulate = 0; + arraySize = 5; + width = 4; + height = 4; + }; + class fav_keymap + { + classname = "fav_keymap"; + defaultPos = 7; + defaultPopulate = 0; + arraySize = 5; + width = 4; + height = 1; + }; + class geigerCounter + { + classname = "RscPicture"; + defaultPos = 8; + defaultPopulate = 3; + arraySize = 8; + width = 10; + height = 2.5; + offSetX = -0.25; + offSetY = -1; + }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEPad.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEPad.hpp new file mode 100644 index 0000000..c4184ac --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEPad.hpp @@ -0,0 +1,324 @@ +class e_pad_config +{ + LoadVarsFromProfile[] = { // Variables, that will be loaded from profile on connect + {"EPOCH_AutoEarplug","true"}, + {"EPOCH_debugMode","false"}, + {"EPOCH_PlayerMarkerOn","false"}, + {"EPOCH_DeathMarkerOn","false"}, + {"EPOCH_EpadButtonOn","true"} + }; + class Apps + { +/* + class FullExample + { + ButtonText = "app10"; // Static Button Text + ButtonTextCode = "if (true) then {'Text'} else {''}"; // Variable Button Text - will overwrite static Button Text, if defined + Description = ""; // Static Description Text + DescriptionCode = "if (true) then {'Desctription'} else {''}"; // Variable Description Text - will overwrite static Description Text, if defined + Icon = ""; // Static Icon on Button + IconCode = "if (true) then {'addons\MyIcon.paa'} else {''}"; // Variable Icon - will overwrite static Icon, if defined + color[] = {1,1,1,1}; // default color for Icon / Button text + colortoggled[] = {0,1,0,1}; // Icon / Button color if toggleable and variable is toggled (true) + html = "epoch_code\customs\E_Pad\ServerInfos.html"; // Path to a html-file (if defined or not "", the action will only load this web site into the e-pad) + action = ""; // code to run on button click + Tooltip = "PLACE-HOLDER"; // Static Tooltip + TooltipCode = "if (true) then {'My ToolTip'} else {''}"; // Variable Tooltip - will overwrite static Tooltip, if defined + ToggleVar = ""; // Script will check this variable. If true, Button is toggled and color change to "colortoggled" + ToggleAble = "false"; // if "true", the defined variable will be toggled (and saved to profile) on buttonclick + class SubMenu { // If a Sub-Menu is defined, on Buttonclick, a new submenu will be opened with defined classes here + ButtonText = "app10"; + ButtonTextCode = "if (true) then {'Text'} else {''}"; + Description = ""; + DescriptionCode = "if (true) then {'Desctription'} else {''}"; + Icon = ""; + IconCode = "if (true) then {'addons\MyIcon.paa'} else {''}"; + color[] = {1,1,1,1}; + colortoggled[] = {0,1,0,1}; + html = "epoch_code\customs\E_Pad\ServerInfos.html"; + action = ""; + Tooltip = "PLACE-HOLDER"; + TooltipCode = "if (true) then {'My ToolTip'} else {''}"; + ToggleVar = ""; + ToggleAble = "false"; + }; + }; +*/ + class settings + { + ButtonText = ""; + Description = "Settings"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\settings_ca.paa"; + color[] = {1,1,0,1}; + colortoggled[] = {0,1,0,1}; + action = ""; + Tooltip = "Settings"; + ToggleVar = ""; + ToggleAble = "false"; + class EpadButton { + ButtonText = ""; + Description = "Epad Dyna"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\epoch_tablet_back.paa"; + color[] = {1,0,0,1}; + colortoggled[] = {0,1,0,1}; + action = ""; + Tooltip = "Add / Remove E-Pad Button from DynaMenu (you can still open it with F10)"; + ToggleVar = "EPOCH_EpadButtonOn"; + ToggleAble = "true"; + }; + class playerMarker + { + ButtonText = ""; + Description = "Playermarker"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\gps.paa"; + color[] = {1,0,0,1}; + colortoggled[] = {0,1,0,1}; + action = "if (!EPOCH_PlayerMarkerOn) then {if !('ItemGPS' in (assignedItems player)) then {['You need a GPS to see your Position',5] call epoch_message}}"; + tooltip = "Toggle player marker"; + ToggleVar = "EPOCH_PlayerMarkerOn"; + ToggleAble = "true"; + }; + class deathMarker + { + ButtonText = ""; + Description = "DeathMarker"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\skull.paa"; + color[] = {1,0,0,1}; + colortoggled[] = {0,1,0,1}; + action = "if (!EPOCH_DeathMarkerOn) then {if ((profileNameSpace getVariable ['EPOCHLastKnownDeath',[]]) isequalto []) then {['You had no GPS on last death',5] call epoch_message}}"; + tooltip = "Toggle death marker"; + ToggleVar = "EPOCH_DeathMarkerOn"; + ToggleAble = "true"; + }; + class blockedMarker + { + ButtonText = ""; + Description = "Blocked Areas"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\blocked.paa"; + color[] = {1,0,0,1}; + colortoggled[] = {0,1,0,1}; + action = "call compile preprocessfilelinenumbers 'epoch_code\customs\E_Pad\BlockedAreas.sqf'"; + tooltip = "Show / Hide blocked areas on the map"; + ToggleVar = "Epoch_BlockedMarkeron"; + ToggleAble = "true"; + }; + class Earplug { + ButtonText = ""; + Description = "Auto-Earplugs"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\Earplugs.paa"; + color[] = {1,0,0,1}; + colortoggled[] = {0,1,0,1}; + action = ""; + Tooltip = "Toggle Auto-Earplugs"; + ToggleVar = "EPOCH_AutoEarplug"; + ToggleAble = "true"; + }; + class PublicStats { + ButtonText = ""; + Description = "Public Stats"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\ServerStats.paa"; + color[] = {1,0,0,1}; + colortoggled[] = {0,1,0,1}; + action = "EPOCH_totalPublicStats = if (EPOCH_MyStatsPublic) then {0} else {1};EPOCH_forceUpdateNow = true"; + Tooltip = "Enable / Disable your Stats in Server Stats"; + ToggleVar = "EPOCH_MyStatsPublic"; + ToggleAble = "true"; + }; + class Reset { + ButtonText = "Reset"; + Description = "Reset Settings"; + Icon = ""; + color[] = {1,1,0,1}; + colortoggled[] = {0,1,0,1}; + action = "[] spawn {_confirm = ['Reset all E-Pad Settings? Sure?','WARNING!',true,true] call BIS_fnc_guiMessage; if (_confirm) then {call Epoch_EPad_Reset; [] call EPOCH_EPad_dialog}}"; + Tooltip = "Reset all settings"; + ToggleVar = ""; + ToggleAble = "false"; + }; +/* + class SubSub { + ButtonText = "SubMenu"; + Description = "Sub Menu"; + Icon = ""; + color[] = {1,1,1,1}; + colortoggled[] = {0,1,0,1}; + action = ""; + Tooltip = "Open Sub-Sub Menu"; + ToggleVar = ""; + ToggleAble = "false"; + class SubSub1 { + ButtonText = "SubSub1"; + Description = "Sub Sub Menu"; + Icon = ""; + color[] = {1,1,1,1}; + colortoggled[] = {0,1,0,1}; + action = ""; + Tooltip = "App in SubSub Menu"; + ToggleVar = ""; + ToggleAble = "false"; + }; + }; +*/ + }; + class infos + { + ButtonText = ""; + Description = "Infos"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\server_info_icon_ca.paa"; + color[] = {1,1,1,1}; + colortoggled[] = {0,1,0,1}; + action = ""; + Tooltip = "Info-Menu"; + ToggleVar = ""; + ToggleAble = "false"; + class contact + { + ButtonText = ""; + Description = "Contact"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\Contact1.paa"; + color[] = {1,1,1,1}; + colortoggled[] = {0,1,0,1}; + html = "epoch_code\customs\E_Pad\ServerContacts.html"; + action = ""; + Tooltip = "COntact us"; + ToggleVar = ""; + ToggleAble = "false"; + }; + class serverinfo + { + ButtonText = ""; + Description = "Server Info"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\info.paa"; + color[] = {1,1,1,1}; + colortoggled[] = {0,1,0,1}; + html = "epoch_code\customs\E_Pad\ServerInfos.html"; + action = ""; + Tooltip = "Display Server Infos"; + ToggleVar = ""; + ToggleAble = "false"; + }; + class serversettings + { + ButtonText = ""; + Description = "Server Settings"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\seversettings.paa"; + color[] = {1,1,1,1}; + colortoggled[] = {0,1,0,1}; + html = "epoch_code\customs\E_Pad\ServerSettings.html"; + action = ""; + Tooltip = "Display Server Settings"; + ToggleVar = ""; + ToggleAble = "false"; + }; + class serverrules + { + ButtonText = ""; + Description = "Server Rules"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\Rules.paa"; + color[] = {1,1,1,1}; + colortoggled[] = {0,1,0,1}; + html = "epoch_code\customs\E_Pad\ServerRules.html"; + action = "createDialog 'server_info_picture'"; + Tooltip = "Display Server Rules"; + ToggleVar = ""; + ToggleAble = "false"; + }; + }; + class debug + { + ButtonText = ""; + Description = "Debug"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\debug_ca.paa"; + color[] = {1,0,0,1}; + colortoggled[] = {0,1,0,1}; + action = "if !(EPOCH_debugMode) then {['Debug Mode Enabled', 5,[[0,0,0,0.5],[1,1,0,1]]] call Epoch_message;} else {['Debug Mode Disabled', 5,[[0,0,0,0.5],[1,1,0,1]]] call Epoch_message;hintSilent ''};"; + Tooltip = "DebugMonitor"; + ToggleVar = "EPOCH_debugMode"; + ToggleAble = "true"; + }; + class reviveable + { + ButtonText = ""; + Description = "Reviveable?"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\Reviveable.paa"; + color[] = {1,0,0,1}; + colortoggled[] = {0,1,0,1}; + action = ""; + Tooltipcode = "if (Epoch_canBeRevived) then {'Reviveable: true'} else {'Reviveable: false'}"; + ToggleVar = "Epoch_canBeRevived"; + ToggleAble = "false"; + }; + class news + { + ButtonText = "News"; + Description = "Tips"; + Icon = ""; + color[] = {1,1,1,1}; + colortoggled[] = {0,1,0,1}; + action = "call compile preprocessfilelinenumbers 'epoch_code\customs\E_Pad\traderDiag_news.sqf'"; + Tooltip = "News"; + ToggleVar = ""; + ToggleAble = "false"; + }; + class vehs + { + ButtonText = "Vehicle"; + Description = "Near Vehicle"; + Icon = ""; + color[] = {1,1,1,1}; + colortoggled[] = {0,1,0,1}; + action = "[250,1000] call compile preprocessfilelinenumbers 'epoch_code\customs\E_Pad\traderDiag_nearVehicles.sqf'"; + Tooltip = "Scan for near Vehicles (costs 250 energy)"; + ToggleVar = ""; + ToggleAble = "false"; + }; + class players + { + ButtonText = "Player"; + Description = "Near Player"; + Icon = ""; + color[] = {1,1,1,1}; + colortoggled[] = {0,1,0,1}; + action = "[250,250] call compile preprocessfilelinenumbers 'epoch_code\customs\E_Pad\traderDiag_nearPlayers.sqf'"; + Tooltip = "Scan for near Players (costs 250 energy)"; + ToggleVar = ""; + ToggleAble = "false"; + }; + class suicide + { + ButtonText = ""; + Description = "Kill yourself"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\suicide.paa"; + color[] = {1,1,1,1}; + colortoggled[] = {0,1,0,1}; + action = "[] spawn {_confirm = ['Are you sure to kill yourself?','Suicide!',true,true] call BIS_fnc_guiMessage;if (_confirm) then {while {dialog} do {closedialog 0};disableUserInput true;Player playAction 'GestureSuicide';uisleep 3;Player setdamage 1;disableUserInput false;};};"; + Tooltip = "Kill yourself to respawn"; + ToggleVar = ""; + ToggleAble = "false"; + }; + class PlayerStats + { + ButtonText = ""; + Description = "Player Statistic"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\PlayerStats.paa"; + color[] = {0,0,1,1}; + colortoggled[] = {0,1,0,1}; + action = "if (isnull (finddisplay -1200)) then {createdialog 'PlayerStatsDialog'};"; + Tooltip = "Player Statistic"; + ToggleVar = ""; + ToggleAble = "false"; + }; + class ServerStats + { + ButtonText = ""; + Description = "Server Statistic"; + icon = "x\addons\a3_epoch_code\Data\UI\epad\ServerStats.paa"; + color[] = {0,0,1,1}; + colortoggled[] = {0,1,0,1}; + action = "if (isnull (finddisplay -1200)) then {createdialog 'ServerStatsDialog'};"; + Tooltip = "Server Statistic"; + ToggleVar = ""; + ToggleAble = "false"; + }; + }; +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient.hpp new file mode 100644 index 0000000..5e2245b --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient.hpp @@ -0,0 +1,484 @@ +/* + Author: Aaron Clark - EpochMod.com + Contributors: Andrew Gregory + + Description: + Main Client side configs for the Epoch gamemode + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient.hpp +*/ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +class CfgEpochClient +{ + epochVersion = "1.3.2"; + ArmAVersion = 176; + debug = "true"; // true = enable extra rpt debug lines, false to disable + ForceGender = ""; // Force Players to spawn as "Male" or "Female" + RemoveLaserfromUAV = "true"; // remove LaserDesignator from assembled UAV's + + UseOldRevive = "false"; // Revive / Heal Player has been changed to use "HandleDamage" Eventhandler. If scripts are breaking it for you, set it to true (not recommended!) + UnconsciousChance = 30; // Change in percent to get unconscious by a hit with an Axe / Sledge / Sword + UnconsciousTime[] = {60,180}; // Min / Max time for unconscious after you got a hit from a non lethal weapon / Axe / Sledge / Sword + + antagonistRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 + NuisanceMulti = 0.5; // Multi for Nuisance increase on shooting - higher Nuisance effect at least antagonist spawn change. (0-1, default 0.5) + + outOfBoundsRadiation = 10; // how much rads per tick (10sec), when outside play area. + radioactiveLocations[] = {"NameCityCapital", "NameCity", "Airport"}; // used for random radioactive locations and to suppress animal spawns within cities. + radiatedObjMaxFalloutDist = 125; // max distance radiated object can affect player (number in meters) + geigerCounterEnergyUsage = 10; // default loss of 10 energy every 10sec of use + radiationEffectsThreshold = 10; // default level for screen effects to indicate a player's rad dosage (0-100) + + baseRadiationLoss = -1; //default radiation loss every 1 minute, calculated from total immunity. No immunity no reduction. + baseRadiationLossImmunityPenalty = -1; //immunity is reduced as a penalty for radiation loss effect + + baseHungerLoss = 2; // increase number to speed up rate of Hunger loss + baseThirstLoss = 2; // increase number to speed up rate of Thirst loss + accelerateHTALoss = "false"; // use server's time acceleration to increase the rate of Hunger, Thirst and Alcohol loss + + buildingNearbyMilitary = 0; //1 to allow building nearby + buildingNearbyMilitaryRange = 300; //Define radius of blocked area + buildingNearbyMilitaryClasses[] = {"Cargo_Tower_base_F","Cargo_HQ_base_F","Cargo_Patrol_base_F","Cargo_House_base_F"}; + restrictedLocations[] = {"NameCityCapital"}; + restrictedLocationsRange = 300; + buildingRequireJammer = 1; //1 = require jammer to build + buildingJammerRange = 125; // Unused by Epoch, but leave it to prevent issues with custom scripts (should be set to the max possible JammerRange from cfgJammers) + jammerPerGroup = 1; // allowed number of jammers per group. + jammerGLOnly = 1; // allow only group leader to place Jammer + minJammerDistance = 650; // min distance to next Jammer + maxBuildingHeight = 100; // Max Height, building is allowed. + splitCountLimits = 0; //1 = distinguish buildingCountLimit from storageCountLimit (ex.: buildingCountLimit=100, storageCountLimit=100 >> you can build 100 baseparts AND additional 100 storage objects like safes, lockboxes...) + MaxBuildingTilt = 180; // Max degrees players can tilt building elements + EnablePhysicsOnBuild = "true"; // Building parts need Snap (hold) points to not fall on the ground while building + + class CfgJammers { + class PlotPole_EPOCH // Jammer Classname + { + buildingJammerRange = 75; // jammer range in meters + buildingCountLimit = 200; // Max Building Elements per Base + storageCountLimit = 100; // Max Storage Elements per Base + buildingCountPerMember = 5; // Additional Building elements per Member + storageCountPerMember = 5; // Additional Storage elements per Member + maxdoors = 10; // Max Doors per Base + maxgates = 5; // Max Gates per Base + maxCams = 2; // Max Cams per Base + }; + class PlotPole_M_EPOCH : PlotPole_EPOCH // inherits from "PlotPole_EPOCH" (not defined values will be taken from PlotPole_EPOCH) + { + buildingJammerRange = 100; // jammer range in meters + buildingCountLimit = 215; // Max Building Elements per Base + storageCountLimit = 115; // Max Storage Elements per Base + }; + class PlotPole_L_EPOCH : PlotPole_M_EPOCH + { + buildingJammerRange = 125; // jammer range in meters + buildingCountLimit = 230; // Max Building Elements per Base + storageCountLimit = 130; // Max Storage Elements per Base + }; + class PlotPole_XL_EPOCH : PlotPole_L_EPOCH + { + buildingJammerRange = 150; // jammer range in meters + buildingCountLimit = 245; // Max Building Elements per Base + storageCountLimit = 145; // Max Storage Elements per Base + }; + class PlotPole_XXL_EPOCH : PlotPole_XL_EPOCH + { + buildingJammerRange = 175; // jammer range in meters + buildingCountLimit = 260; // Max Building Elements per Base + storageCountLimit = 160; // Max Storage Elements per Base + }; + }; + StorageClasses[] = {"Buildable_Storage","Buildable_Storage_SIM","Buildable_Storage_Ghost","Constructions_lockedstatic_F","Secure_Storage_Temp"}; + BuildingClasses[] = {"Constructions_static_F","Constructions_foundation_F","Const_Ghost_EPOCH"}; + DoorClasses[] = {"WoodLargeWallDoorL_EPOCH","WoodWall4_EPOCH","CinderWallDoorwHatch_EPOCH","WoodStairs3_EPOCH","JailWallDoor_EPOCH"}; + GateClasses[] = {"CinderWallGarage_EPOCH","WoodWallGarage_EPOCH","MetalWallGarage_EPOCH"}; + + AtmBlockedAtPlot = "true"; // Block ATM's in Plotpole-Range + disableRemoteSensors = "true"; // disableRemoteSensors true/false + + ActionFireOnLighter = "true"; // Lighter is needed to inflame fires + ActionBurnBarrelOffExtinguisher = "true"; // FireExtinguisher is needed to put off Burn Barrels + ActionHookRope = "true"; // Rope is needed to hook vehicles (get back on release) + + DefuseBombChance = 0.6; // Chance for successfully defuse a bomb -> If fail, the bomb will explode + DisableDoorInteractForACE = "true"; // If true, Door-Interactions from ACE-Mod will be blocked (no effect, if ACE is not running) + + epochMessageBackgroundCol[] = {0,0,0,0.2}; //Epoch_message background color (format: {R,G,B,A}) + epochMessageTextCol[] = {1,1,1,0.95}; //Epoch_message text color (format: {R,G,B,A}) + //to use different colored messages in scripts, just call it this way: ["the message", 6, [[0,0,0,0.2],[1,1,1,0.95]]] call Epoch_message; + + EPOCH_news[] = {"Word is that Sappers have a new boss.","Dogs will often lure them monsters away.","My dog was blown up. I miss him.."}; + deathMorphClass[] = {"Epoch_Sapper_F","Epoch_SapperG_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F"}; //Random selection of these classes when player morphs after death. Currently available: Epoch_Cloak_F, Epoch_SapperB_F, Epoch_Sapper_F, I_UAV_01_F + niteLight[] = {1,1.88,22}; // 0 = disabled or 1 = enabled, Set ambient lighting at night: {Brightness of light,Height of light}. Default (Low Ambient): {1.88,22} | Twilight: {7.2,88} | Distant: {12.8,142} + ryanZombiesEnabled = "true"; + + antagonistChances[] = { + // {"type", chance} + "Epoch_Cloak_F",0.06, + "GreatWhite_F",0, + "Epoch_Sapper_F",0.12, + "Epoch_SapperG_F",0.06, + "Epoch_SapperB_F",0.03, + "I_UAV_01_F",0.12, + "PHANTOM",0.03, + "B_Heli_Transport_01_F",0, + "EPOCH_RyanZombie_1",0.12, + "I_Soldier_EPOCH",0 + }; + + antagonistSpawnIndex[] = { + // {"type", limit} + {"Epoch_Cloak_F",1}, + {"GreatWhite_F",2}, + {"Epoch_Sapper_F",2}, + {"Epoch_SapperG_F",1}, + {"Epoch_SapperB_F",1}, + {"I_UAV_01_F",2}, + {"PHANTOM",1}, + {"B_Heli_Transport_01_F",1}, + {"EPOCH_RyanZombie_1",12}, + {"I_Soldier_EPOCH",1} + }; + customVarsDefaults[] = { + // EPOCH_player + varName, default value, {max,min,high-warn,high-critical,low-warn,low-critical} + {"Temp",98.6,{106.7,95,102,105,96,95}}, + {"Hunger",1500,{5000,0,5001,5001,1250,0}}, + {"Thirst",750,{2500,0,2501,2501,625,0}}, + {"AliveTime",0,{-2,0}}, // local + {"Energy",0,{2500,0}}, + {"Wet",0,{100,0,35,55,-1,-1}}, + {"Soiled",0,{100,0,35,55,-1,-1}}, + {"Immunity",0,{100,0}}, + {"Toxicity",0,{100,0,35,55,-1,-1}}, + {"Stamina",100,{"EPOCH_playerStaminaMax",0}}, + {"Crypto",0,{250000,0}}, + {"HitPoints",{0,0,0,0},{1,0,0.5,1,-1,-1}}, // limits here only used for HUD. + {"BloodP",100,{190,0,120,140,70,50}}, + {"SpawnArray",{},{}}, + {"NotUsed",0,{50000,-50000}}, // TODO remove or replace + {"Alcohol",0,{100,0,35,55,-1,-1}}, + {"Radiation",0,{100,0,35,55,-1,-1}}, // local + {"Nuisance",0,{100,0}}, + {"MissionArray",{},{}} + }; + // Vars and the value that gets set if godmode is enabled + gmVars[] = { + {"Temp",98.6}, + {"Hunger",2500}, + {"Thirst",1500}, + {"Energy",2500}, + {"Toxicity",0}, + {"Stamina",100}, + {"BloodP",100}, + {"Alcohol",0}, + {"Radiation",0} + }; + hudConfigs[] = { + {{"BloodP","","",{"getPlayerDamage",">=",0.7}},"topRight","x\addons\a3_epoch_code\Data\UI\bleeding_ca.paa",{"forceUpdate"}}, + {{"Oxygen","getPlayerOxygenRemaining","",{},{1,0,2,2,1,0.55}},"topRight","x\addons\a3_epoch_code\Data\UI\oxygen_ca.paa"}, + {"Hunger","topRight","x\addons\a3_epoch_code\Data\UI\hunger_ca.paa",{"forceBloodRise"}}, + {"Thirst","topRight","x\addons\a3_epoch_code\Data\UI\thirst_ca.paa",{"forceBloodRise"}}, + {"Temp","topRight",{"x\addons\a3_epoch_code\Data\UI\hot_ca.paa","x\addons\a3_epoch_code\Data\UI\cold_ca.paa"},{{"forceFatigue","forceBloodRise"},{"forceFatigue","forceBloodDrop"}}}, + {"Toxicity","topRight","x\addons\a3_epoch_code\Data\UI\hazzard_ca.paa",{"forceBloodRise"}}, + {"Alcohol","topRight","x\addons\a3_epoch_code\Data\UI\drunk_ca.paa"}, + {"Soiled","topRight","x\addons\a3_epoch_code\Data\UI\soiled_ca.paa"}, + {"Radiation","topRight","x\addons\a3_epoch_code\Data\UI\rads_ca.paa",{"forceBloodRise"}}, + {{"HitPoints","getPlayerHitPointDamage","HitLegs"},"topRight","x\addons\a3_epoch_code\Data\UI\broken_ca.paa"} + }; + defineCommunityStats[] = { + // EPOCH_total + varName, starting value, {min,max or custom values} + {"Karma",1500,{-50000,50000,{-5000,-15000,-30000},{5000,15000,30000}}}, // min, max, {Work In Progress levels} + {"Murders",0,{}}, + {"Deaths",0,{}}, + {"Suicides",0,{0,99999,500}}, // min, max, "Suicide King" status + {"Revives",0,{0,99999,500}}, // min, max, "Medic" status + {"TraderMissions",0,{}}, + {"AIKills",0,{}}, + {"AntagonistKills",0,{}}, + {"ZombieKills",0,{}}, + {"WalkDist",0,{}}, + {"MaxAliveTime",0,{}}, + {"NPCTrades",0,{}}, + {"PlayTime",0,{}}, + {"LootedObjs",0,{}}, + {"CraftedItems",0,{}}, + {"ConnectCount",0,{}}, + {"BuildingsSet",0,{}}, + {"AIDeaths",0,{}}, + {"PublicStats",1,{}} // DO not change this! Players can disable it within the E-Pad by themself! + }; + PlayerStatsDialogEntries[] = { +/* + { + {"CommunityVariable","DisplayName","ExtraCalculation"} + }, +*/ + { + {"ConnectCount","Times connected"}, + {"PlayTime","Playtime (hours)","%1/3600 toFixed 2"}, + {"MaxAliveTime","Max Alivetime (hours)","%1/3600 toFixed 2"}, + {"WalkDist","Distance Walked (Km)","%1/1000 toFixed 2"} + }, + { + {"LootedObjs","Objects Looted"}, + {"NPCTrades","Trades at Trader"}, + {"BuildingsSet","Placed Buildings"}, + {"CraftedItems","Crafted Items"} + }, + { + {"Karma","Karma","round %1"}, + {"Revives","Player Revived"}, + {"TraderMissions","Tradermissions"} + }, + { + {"Murders","Player Kills"}, + {"AIKills","AI Kills"}, + {"AntagonistKills","Antagonist Kills"}, + {"ZombieKills","Zombie Kills"} + }, + { + {"Deaths","Deaths by Player"}, + {"AIDeaths","Deaths by AI"}, + {"Suicides","Suicides"} + }, + { + {"","K/D PvP","(Epoch_totalMurders/(Epoch_totalDeaths max 1)) toFixed 1"}, + {"","K/D PvE","(Epoch_totalAIKills/(Epoch_totalAIDeaths max 1)) toFixed 1"} + } + }; + TopStatsDialogEntries[] = { +/* + {"CommunityVariable","DisplayName","ExtraCalculation"}, +*/ + {"PlayTime","Playtime (hours)","%1/3600 toFixed 2"}, + {"MaxAliveTime","Max Alivetime (hours)","%1/3600 toFixed 2"}, + {"WalkDist","Distance Walked (Km)","%1/1000 toFixed 2"}, + {"LootedObjs","Objects Looted"}, + {"NPCTrades","Trades at Trader"}, + {"BuildingsSet","Placed Buildings"}, + {"CraftedItems","Crafted Items"}, + {"Karma","Karma","round %1"}, + {"Murders","Player Kills"}, + {"AIKills","AI Kills"}, + {"Deaths","Deaths by Player"}, + {"AIDeaths","Deaths by AI"} + }; + group_upgrade_lvl[] = {4,"1000",6,"1500",8,"2000",10,"2500",12,"3000",14,"3500",16,"4000",32,"8000",64,"16000"}; // controls max group limit and cost + // Event handler code + displayAddEventHandler[] = {"keyDown","keyUp"}; + keyDown = "(_this call EPOCH_KeyDown)"; + keyUp = "(_this call EPOCH_KeyUp)"; + addEventHandler[] = {"Respawn","Put","Take","InventoryClosed","InventoryOpened","FiredMan","Killed","HandleRating","HandleScore","HandleDamage","GetInMan","GetOutMan","Hit","SeatSwitchedMan","FiredNear","WeaponAssembled"}; + Respawn = "(_this select 0) call EPOCH_clientRespawn"; + Put = "(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler;_this call Epoch_custom_EH_Put"; + Take = "(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck;_this call Epoch_custom_EH_Take"; + FiredMan = "_this call EPOCH_fnc_playerFired;_this call Epoch_custom_EH_FiredMan"; + InventoryClosed = "_this call EPOCH_InventoryClosed;_this call EPOCH_custom_EH_InventoryClosed"; + InventoryOpened = "_this call EPOCH_InventoryOpened||_this call EPOCH_custom_EH_InventoryOpened"; // the || here allows either function to block opening of inventory by returning true. + Killed = "_this call EPOCH_fnc_playerDeath;_this call Epoch_custom_EH_Killed"; + HandleRating = "0"; + HandleScore = ""; + HandleDamage = "_this call EPOCH_HandleDamage;_this call EPOCH_custom_EH_HandleDamage"; + HandleHeal = ""; + Dammaged = ""; + Hit = "_this call EPOCH_custom_EH_Hit"; + HitPart = ""; + GetInMan = "_this call EPOCH_getInMan;_this call Epoch_custom_EH_GetInMan"; + GetOutMan = "_this call EPOCH_getOutMan;_this call Epoch_custom_EH_GetOutMan"; + SeatSwitchedMan = "_this call EPOCH_custom_EH_SeatSwitchedMan"; + FiredNear = "_this call EPOCH_custom_EH_FiredNear"; + WeaponAssembled = "clearItemCargoGlobal (_this select 1);if (['CfgEpochClient','RemoveLaserfromUAV',true] call EPOCH_fnc_returnConfigEntryV2) then {(_this select 1) removeWeaponTurret ['Laserdesignator_mounted',[0]]}; if ((_this select 1) isKindOf 'UAV_01_base_F' || (_this select 1) isKindOf 'UAV_06_base_F') then {['UAV assembled - Connect it with DynaMenu (Space)',5] call Epoch_Message}"; + // suppress these units from spawning near Jammer or Traders + nonJammerAI[] = {"B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperG_F","Epoch_SapperB_F","I_UAV_01_F","EPOCH_RyanZombie_1"}; + nonTraderAI[] = {"B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperG_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F","GreatWhite_F","EPOCH_RyanZombie_1"}; + nonTraderAIRange = 50; + fishLoots[] = {"ItemTuna","ItemSeaBass","ItemSeaBass","ItemSeaBass","ItemTrout","ItemTrout","ItemTrout","ItemTrout","ItemTrout","ItemTrout"}; // Fishing loots + animalAiTables[] = {"Sheep_random_EPOCH","Sheep_random_EPOCH","Goat_random_EPOCH","Goat_random_EPOCH","Goat_random_EPOCH",{"Cock_random_EPOCH","Hen_random_EPOCH"},{"Cock_random_EPOCH","Hen_random_EPOCH"},"Rabbit_EPOCH","Rabbit_EPOCH","Rabbit_EPOCH","Snake_random_EPOCH","Snake2_random_EPOCH",{"Fin_random_EPOCH","Alsatian_Random_EPOCH"}}; // Animal spawn table + playerDeathScreen = "TapOut"; + playerKilledScreen = "TapOut2"; + playerDisableRevenge = 0; + playerRevengeMinAliveTime = 900; + playerLocationMarkerGPSOnly = 1; // Map marker toggle in map dyna menu with assigned GPS only + playerDeathMarkerGPSOnly = 1; // Map marker toggle in map dyna menu on death with assigned GPS only + mapOnZoomSetMarkerSize = 1; // When in map markers will change to larger size as player zooms in + bankTransferTime[] = {0.0006,1.2,0.06}; + + // Player (Building) Energy + energyPowerSources[] = { // Add PowerCapacity and PowerType in CfgBaseBuilding, if you add something here! + "Land_spp_Tower_F", + "Land_wpp_Turbine_V2_F", + "Land_wpp_Turbine_V1_F", + "SolarGen_EPOCH", + "Land_Wreck_Satellite_EPOCH" + }; + energyRange = 75; // Range to check for energy sources + energyRegenMax = 5; // Max energy increase value (every 10 seconds) + energyCostNV = 3; // Energy loss value by using nightvision (every 10 seconds) + energyRegenInVeh = 5; // Energy increase value in Vehicles with Engine On (every 10 seconds) + + // Favorite Bar + Fav_enableFavoriteBar = "true"; // If disabled, players will not be able to use favorite bar + Fav_DropIfOverflow = "false"; // If enabled and inventory full, equipped weapon will be dropped on ground in favor for the new selected weapon, otherwise action will fail with message and weapon will not be equipped + Fav_FastWeaponSwitching = "false"; // If enabled, same slot weapons from favorites bar are equipped instantly, otherwise reload action is played (recommended for immersion) + Fav_BannedItems[] = {"FAK"}; // Items that users are not allowed to pin + + EnableTempVehTrade = "false"; // Enable selling of temp Vehicles (not handled by Epoch). Temp Vehicles will not be stored in Traders, but can be sold + BulletCalculateOnCraft = "true"; // Enable Bullet Calculation on Crafting - Example: If you craft a large EnergyPack with 3 half full EnergyPacks, you will only get a half filled large EnergyPack back + + // Vehicle Settings + DisallowSellOnDamage = "false"; // Prevent from selling Vehicles with one or more fully damaged wheel or engine + MaxVehTradeDist = 30; // Max distance where Players can sell Vehicles to Traders + UseAdvancedVehicleRepair = "true"; // Switch On / Off Advanced Vehicle Repair (Does not effect SuppressedCraftingItems !) + EnableRemoveParts = "true"; // Enable removing Tires / Engines from Vehicles + SuppressedCraftingItems[] = { // These Items can not be crafted (but can be used in recipe) + "VehicleRepairLg", // Supressed for Advanced Vehicle Repair (no longer needed) + "KitMetalQuarterFloor", // Item is Upgradeable, but you can remove it here to make it also Craftable + "KitMetalHalfFloor", // Item is Upgradeable, but you can remove it here to make it also Craftable + "KitMetalFloor", // Item is Upgradeable, but you can remove it here to make it also Craftable + "KitMetalTower", // Item is Upgradeable, but you can remove it here to make it also Craftable + "KitCinderQuarterFloor", // Item is Upgradeable, but you can remove it here to make it also Craftable + "KitCinderHalfFloor", // Item is Upgradeable, but you can remove it here to make it also Craftable + "KitCinderFloor", // Item is Upgradeable, but you can remove it here to make it also Craftable + "KitCinderTower" // Item is Upgradeable, but you can remove it here to make it also Craftable + }; + VehicleRepairs[] = { // {Hitpoint, dmg to repair, dmg to replace, mat to repair, mat to replace} + {"HitHull",0.33,0.66,"ItemScraps","ItemCorrugated"}, + {"HitBody",0.33,1,"ItemScraps","ItemCorrugated"}, + {"HitEngine",0.33,0.91,"EngineParts","EngineBlock"}, + {"glass",0.33,1,"ItemGlass","ItemGlass"}, + {"HitFuel",0.1,0.66,"ItemDuctTape","FuelTank"}, + {"HitHRotor",0.33,1,"ItemCorrugated","ItemRotor"}, + {"HitVRotor",0.33,1,"ItemCorrugated","ItemRotor"}, + {"HitWinch",0.33,0.91,"ItemCables","ItemCables"}, + {"HitAvionics",0.33,0.91,"CircuitParts","CircuitParts"}, + // Wheels - Do not change the order (front to back wheels) here! + {"HitLFWheel",0.33,1,"VehicleRepair","SpareTire"}, + {"HitRFWheel",0.33,1,"VehicleRepair","SpareTire"}, + {"HitLF2Wheel",0.33,1,"VehicleRepair","SpareTire"}, + {"HitRF2Wheel",0.33,1,"VehicleRepair","SpareTire"}, + {"HitLMWheel",0.33,1,"VehicleRepair","SpareTire"}, + {"HitRMWheel",0.33,1,"VehicleRepair","SpareTire"}, + {"HitLBWheel",0.33,1,"VehicleRepair","SpareTire"}, + {"HitRBWheel",0.33,1,"VehicleRepair","SpareTire"}, + // Mountainbike wheels + {"HitFWheel",0.33,0.91,"",""}, + {"HitBWheel",0.33,0.91,"",""} + }; + +/* // Lower difficult VehicleRepairs example + VehicleRepairs[] = { // {Hitpoint, dmg to repair, dmg to replace, mat to repair, mat to replace} + {"HitHull",0.33,0.66,"ItemScraps","ItemCorrugated"}, + {"HitBody",0.33,1,"ItemScraps","ItemCorrugated"}, + {"HitEngine",0.33,0.91,"VehicleRepair","VehicleRepair"}, + {"glass",0.33,1,"ItemGlass","ItemGlass"}, + {"HitFuel",0.1,0.66,"ItemDuctTape","ItemDuctTape"}, + {"HitHRotor",0.33,1,"ItemCorrugated","ItemCorrugated"}, + {"HitVRotor",0.33,1,"ItemCorrugated","ItemCorrugated"}, + {"HitWinch",0.33,0.91,"ItemCables","ItemCables"}, + {"HitAvionics",0.33,0.91,"CircuitParts","CircuitParts"}, + // Wheels - Do not change the order (front to back wheels) here! + {"HitLFWheel",0.33,1,"VehicleRepair","VehicleRepair"}, + {"HitRFWheel",0.33,1,"VehicleRepair","VehicleRepair"}, + {"HitLF2Wheel",0.33,1,"VehicleRepair","VehicleRepair"}, + {"HitRF2Wheel",0.33,1,"VehicleRepair","VehicleRepair"}, + {"HitLMWheel",0.33,1,"VehicleRepair","VehicleRepair"}, + {"HitRMWheel",0.33,1,"VehicleRepair","VehicleRepair"}, + {"HitLBWheel",0.33,1,"VehicleRepair","VehicleRepair"}, + {"HitRBWheel",0.33,1,"VehicleRepair","VehicleRepair"}, + // Mountainbike wheels + {"HitFWheel",0.33,0.91,"",""}, + {"HitBWheel",0.33,0.91,"",""} + }; +*/ + + // include configs + #include "CfgEpochClient\Altis.hpp" + #include "CfgEpochClient\australia.hpp" + #include "CfgEpochClient\Bornholm.hpp" + #include "CfgEpochClient\Chernarus_Summer.hpp" + #include "CfgEpochClient\Chernarus.hpp" + #include "CfgEpochClient\ChernarusRedux.hpp" + #include "CfgEpochClient\Enoch.hpp" + #include "CfgEpochClient\Esseker.hpp" + #include "CfgEpochClient\ProvingGrounds_PMC.hpp" + #include "CfgEpochClient\Sara_dbe1.hpp" + #include "CfgEpochClient\Sara.hpp" + #include "CfgEpochClient\SaraLite.hpp" + #include "CfgEpochClient\Stratis.hpp" + #include "CfgEpochClient\takistan.hpp" + #include "CfgEpochClient\utes.hpp" + #include "CfgEpochClient\vr.hpp" + #include "CfgEpochClient\Zargabad.hpp" + #include "CfgEpochClient\Tanoa.hpp" + #include "CfgEpochClient\Malden.hpp" + #include "CfgEpochClient\WorldInteractions.hpp" +}; +class CfgEpochSoldier +{ + unitTypes[] = {"I_Soldier_EPOCH", "I_Soldier2_EPOCH", "I_Soldier3_EPOCH"};//Selects from randomly + minAISkill = 0.2; //Minumum AI Skill. Skills are chosen randomly between this minimum overall AI skill value and the following max AI skill values, for each of the next skills: + maxAimingAccuracy = 0.7; + maxAimingShake = 0.9; + maxAimingSpeed = 0.6; + maxEndurance = 0.4; + maxSpotDistance = 0.4; + maxSpotTime = 0.3; + maxCourage = 0.3; + maxReloadSpeed = 0.5; + maxCommanding = 0.4; + maxGeneral = 0.4; + minspawndist = 120; + maxspawndist = 200; +}; +class CfgEpochSapper +{ + detonateDistMax = 8; //Random distance between 3m and this number at which sapper detonates. Min value = 4 + groanTrig = 16; //Percentage chance of a groan. Min value = 4 + sRange = 300; //Distance from target over which sapper will dispose. Range within which sapper code will be aware of targets. Distance up to which sapper will attempt to find a spot to hide in. Min Value = 150. + smellDist = 24; //Distance up to which sapper can smell. Used to decide if sapper can see target when deciding to charge and influences target selection. Is influenced by wind direction. Min Value = 8. + reflexSpeed = 0.25; //Sapper brain will pause for this time when checking for new stimulus during each thought process. Lower number equals a more reactive sapper. (Guide Min 0.25 - Max 2.5). + nestChance = 2; //Every time a sapper spawns apply this percentage chance that sapper will create a nest. + hideLevel = 72; //(Emotion) Sapper fear increases by several factors, higher number of armed player(s) in area / being shot at. Set fear level (out of 100) at which he will go into a 'hide / evade mode'.. temporarily. + chargeLevel = 52; //(Emotion) Sapper anger increases by smelling / sensing players, being shot at / hit, too many players on his turf. Set level (Out of 100) at which he is triggered to charge on the current target. +}; +class CfgEpochUAV +{ + UAVMinDist = 48; //Minimum distance to choose next position when roaming. Min Value = 8. + UAVMaxDist = 180; //Maximum distance to choose next position when roaming. Min Value = 42 / Max Value = 400. + UAVHeight = 100; //Set height when roaming, slight randomness is applied to this value. UAV will choose own height when locked onto target. Min Value = 42 / Max Value = 280. UAV can still spot targets from height ! +}; +class CfgEpochUAVSupport +{ + unitTypes[] = {"I_Soldier_EPOCH"}; //Selects from randomly (e.g. {"I_Soldier_EPOCH","Epoch_Sapper_F","Epoch_SapperB_F","Epoch_SapperG_F"};) + minUnitNum = 2; //Maximum number of units spawned when UAV spots target. + maxUnitNum = 4; //Maximum number of units spawned when UAV spots target. +}; +class CfgEpochCloak +{ + cRange = 300; //Distance, from target, at which Cloak will dispose. Cloak is also aware of players within this range. (Min: 60 / Max: 600) + cAggression = 75; //Percentage chance of attack, currently a psychological attack (Cultist spooky voice). (Min: 1 / Max: 100) + attackFrequency = 120; //One attack only per this period. (Min: 120) + attackDistance = 38; // Distance, from target, up to which Cloak will attack. Lower for less vocals. (Min: 16) + targetChangeFrequency = 42; //Cloak will only attempt to change target once per this period. Make Higher to stick to first target player. (Min: 42) + teleportChance = 66; //Chance for cloak to teleport. (Min: 1) + hoverFrequency = 1280; //Cloak has new hover attack. When player is above cloak, and at a distance, cloak will float to player and teleport attack. Only perform one of these moves per this period. (Min: 240) +}; +class CfgEpochRyanZombie +{ + zeds[] = {"EPOCH_RyanZombie_1","EPOCH_RyanZombie_2","EPOCH_RyanZombie_3","EPOCH_RyanZombie_4","EPOCH_RyanZombie_5"}; + attackDist = 1.6; //Attack Distance. + range = 45; //Range at which to dispose old zombies and spawn new ones within. + disposeRange = 800; // distance before zombie is disposed + smell[] = {38,0.42}; //Distance in metres up to which the zombie can smell a target. | Skill (0 - 1). 0 - Disable + sight[] = {28,0.72}; //Zombie sight distance | Skill (0 - 1). + hearing[] = {108,0.68}; //Zombie hearing distance / Skill. Max FiredNear EH Limit ? + memory[] = {480,0.8}; //Memory time. / Weighting. WIP - Not Used + reflexSpeed = 0.25; //Zombie brain will pause for this time when checking for new stimulus during each thought process. Lower number equals a more reactive zombie. (Guide Min 0.25 - Max 2.5). + moans[] = {"ryanzombiesmoan1","ryanzombiesmoan2","ryanzombiesmoan3","ryanzombiesmoan4"}; + screams[] = {"ryanzombiesscream1","ryanzombiesscream2","ryanzombiesscream3","ryanzombiesscream4","ryanzombiesscream5","ryanzombiesscream6","ryanzombiesscream7","ryanzombiesscream8","ryanzombiesscream9"}; +}; +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Altis.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Altis.hpp new file mode 100644 index 0000000..93eb7cb --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Altis.hpp @@ -0,0 +1,28 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Altis + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Altis.hpp +*/ + +class Altis { + blockedArea[] = { //[POS],radius + { { 16085, 16997, 0 }, 250 }, //South Telos + { { 12844, 16714, 0 }, 120 }, //Soldner Base + { { 3085, 13184, 0 }, 300 }, //Kavalar Carstel + { { 13493, 12013, 0 }, 450 }, //Makrynisi (Island) + { { 17439, 13165, 0 }, 165 }, //Pyrgorsk Military + { { 20084, 6728, 0 }, 55 }, //West of Selakano + { { 25303, 21807, 0 }, 100 } //Sofia + }; + // Trash config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Bornholm.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Bornholm.hpp new file mode 100644 index 0000000..ca33f97 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Bornholm.hpp @@ -0,0 +1,43 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: uro1, Robio + + Description: + Epoch gamemode config for Bornholm + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Bornholm.hpp +*/ +class Bornholm { + blockedArea[] = { + { { 1433, 8071, 0 }, 250 }, //Roenne NorthEast + { { 1939, 7788, 0 }, 250 }, //Roenne East + { { 1553, 7103, 0 }, 400 }, //Roenne South + { { 3052, 5412, 0 }, 400 }, //Main Airport + { { 3676, 5148, 0 }, 300 }, //Airport addons + { { 9547, 5541, 0 }, 600 }, //Aakirkeby + { { 17433, 5106, 0 }, 600 }, //Nexoe + { { 17989, 9844, 0 }, 600 }, //Svaneke + { { 11600, 14723, 0 }, 500 }, //Gudhjem + { { 5010, 19132, 0 }, 250 }, //Allinge + { { 5291, 12450, 0 }, 450 }, //Klemensker + { { 3386, 10088, 0 }, 350 }, //Nyker + { { 14560, 5130, 0 }, 300 }, //South Airport + { { 148786, 5024, 0 }, 300 }, //South Airport Base + { { 12993, 10197, 0 }, 250 }, //Oestermarie + { { 13867, 10672, 0 }, 300 }, //East Airport + { { 8564, 15015, 0 }, 350 }, //Roe + { { 6554, 5866, 0 }, 400 }, //Lobbaek + { { 5350, 5724, 0 }, 300 }, //Nylars + { { 12438, 2980, 0 }, 400 }, //Pedersker + { { 14121, 11331, 0 }, 200 }, //Central Spawn + { { 1322, 8733, 0 }, 200 }, //West Spawn + { { 15639, 191, 0 }, 200 } //East Spawn + }; + // main config + TrashClasses[] = {"Trash","TrashSmall","TrashVehicle","PumpkinPatch","TrashFood"}; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Chernarus.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Chernarus.hpp new file mode 100644 index 0000000..3529955 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Chernarus.hpp @@ -0,0 +1,33 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Chernarus + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Chernarus.hpp +*/ +class Chernarus { + blockedArea[] = { + { { 10203, 1886, 0 }, 430 }, //South Electro + { { 6822, 2498, 0 }, 600 }, //Cherno + { { 4612, 9670, 0 }, 140 }, //NWAF south barack + { { 4907, 10117, 0 }, 250 }, //NWAF NE hangas + { { 4707, 10384, 0 }, 200 }, //NWAF north barack + { { 4069, 10778, 0 }, 75 }, //NWAF west hangas + { { 4553, 10722, 0 }, 150 }, //NWAF NW hangas + { { 12279, 9505, 0 }, 350 }, //Berenzino Mid + { { 12816, 9816, 0 }, 400 }, //Berenzino SE + { { 12991, 10147, 0 }, 375 }, //Berenzino Docs + { { 2693, 5138, 0 }, 200 }, //Zeleno + { { 11467, 7508, 0 }, 150 }, //Polana Factory + { { 13092, 7096, 0 }, 140 } //Solnichniy Factory + }; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/ChernarusRedux.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/ChernarusRedux.hpp new file mode 100644 index 0000000..8826482 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/ChernarusRedux.hpp @@ -0,0 +1,33 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Chernarus Redux + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/ChernarusRedux.hpp +*/ +class ChernarusRedux { + blockedArea[] = { + { { 10203, 1886, 0 }, 430 }, //South Electro + { { 6822, 2498, 0 }, 600 }, //Cherno + { { 4612, 9670, 0 }, 140 }, //NWAF south barack + { { 4907, 10117, 0 }, 250 }, //NWAF NE hangas + { { 4707, 10384, 0 }, 200 }, //NWAF north barack + { { 4069, 10778, 0 }, 75 }, //NWAF west hangas + { { 4553, 10722, 0 }, 150 }, //NWAF NW hangas + { { 12279, 9505, 0 }, 350 }, //Berenzino Mid + { { 12816, 9816, 0 }, 400 }, //Berenzino SE + { { 12991, 10147, 0 }, 375 }, //Berenzino Docs + { { 2693, 5138, 0 }, 200 }, //Zeleno + { { 11467, 7508, 0 }, 150 }, //Polana Factory + { { 13092, 7096, 0 }, 140 } //Solnichniy Factory + }; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Chernarus_Summer.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Chernarus_Summer.hpp new file mode 100644 index 0000000..9bd7baa --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Chernarus_Summer.hpp @@ -0,0 +1,33 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Chernarus_Summer + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Chernarus_Summer.hpp +*/ +class Chernarus_Summer { + blockedArea[] = { + { { 10203, 1886, 0 }, 430 }, //South Electro + { { 6822, 2498, 0 }, 600 }, //Cherno + { { 4612, 9670, 0 }, 140 }, //NWAF south barack + { { 4907, 10117, 0 }, 250 }, //NWAF NE hangas + { { 4707, 10384, 0 }, 200 }, //NWAF north barack + { { 4069, 10778, 0 }, 75 }, //NWAF west hangas + { { 4553, 10722, 0 }, 150 }, //NWAF NW hangas + { { 12279, 9505, 0 }, 350 }, //Berenzino Mid + { { 12816, 9816, 0 }, 400 }, //Berenzino SE + { { 12991, 10147, 0 }, 375 }, //Berenzino Docs + { { 2693, 5138, 0 }, 200 }, //Zeleno + { { 11467, 7508, 0 }, 150 }, //Polana Factory + { { 13092, 7096, 0 }, 140 } //Solnichniy Factory + }; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Enoch.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Enoch.hpp new file mode 100644 index 0000000..1261dfb --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Enoch.hpp @@ -0,0 +1,21 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Altis + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Altis.hpp +*/ + +class Enoch { + blockedArea[] = { //[POS],radius + }; + // Trash config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Esseker.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Esseker.hpp new file mode 100644 index 0000000..2f5ee38 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Esseker.hpp @@ -0,0 +1,47 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Richie + + Description: + Epoch gamemode config for Esseker + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Esseker.hpp +*/ +class Esseker { + blockedArea[] = { + { { 208.778, 353.779, 0 }, 300 }, //Cave + { { 1997.77, 4177.22, 0 }, 200 }, //Krupa + { { 2710.82, 4577.82, 0 }, 300 }, //Kupress + { { 6698.04, 3901.16, 0 }, 220 }, //Plava Vrana Military + { { 9441.22, 4768.86, 0 }, 500 }, //Adela AF West + { { 10336, 4809.92, 0 }, 280 }, //Adela AF East + { { 6453.85, 5454.12, 0 }, 200 }, //Neptune resort + { { 5237.39, 4756.58, 0 }, 200 }, //Power station + { { 5034.75, 5126.94, 0 }, 300 }, //Kula + { { 6317.04, 6194.92, 0 }, 200 }, //Gulash + { { 3023.79, 6078.66, 0 }, 400 }, //Danilov Grad + { { 8665.26, 5643.09, 0 }, 600 }, //Old Esseker (West) + { { 9676.37, 5592.46, 0 }, 600 }, //Esseker (Central) + { { 10547.4, 5465.63, 0 }, 600 }, //Lower Esseker (East) + { { 11896.2, 7941.4, 0 }, 200 }, //Novi Grad + { { 10136.3, 7917, 0 }, 60 }, //Chardak Resort + { { 9054.67, 7902.84, 0 }, 150 }, //Pilana Sawmill + { { 7780.88, 6914.07, 0 }, 200 }, //Posestra + { { 6199.98, 6919.69, 0 }, 150 }, //Lug + { { 3503.95, 6888.93, 0 }, 170 }, //Melina + { { 1953.28, 7815.1, 0 }, 210 }, //Rama + { { 4791.52, 8074.88, 0 }, 200 }, //Chokory + { { 3967.84, 9242.61, 0 }, 120 }, //ES Petrol + { { 1171.25, 10280.1, 0 }, 150 }, //Camp Spencer + { { 7169.08, 9298.94, 0 }, 150 }, //Tuk + { { 7676.77, 10152.7, 0 }, 100 }, //Igman Military Base + { { 10060.6, 9901.3, 0 }, 200 } //Borosh + }; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Malden.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Malden.hpp new file mode 100644 index 0000000..1d61245 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Malden.hpp @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Malden + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Malden.hpp +*/ +class Malden { + blockedArea[] = {}; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/ProvingGrounds_PMC.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/ProvingGrounds_PMC.hpp new file mode 100644 index 0000000..486822e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/ProvingGrounds_PMC.hpp @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for ProvingGrounds_PMC + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/ProvingGrounds_PMC.hpp +*/ +class ProvingGrounds_PMC { + blockedArea[] = {}; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Sara.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Sara.hpp new file mode 100644 index 0000000..a03eeec --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Sara.hpp @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Sahrani + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp +*/ +class Sara { + blockedArea[] = {}; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/SaraLite.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/SaraLite.hpp new file mode 100644 index 0000000..a1bd15d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/SaraLite.hpp @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Sahrani Lite + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp +*/ +class SaraLite { + blockedArea[] = {}; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Sara_dbe1.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Sara_dbe1.hpp new file mode 100644 index 0000000..16bdc35 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Sara_dbe1.hpp @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Sahrani + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp +*/ +class Sara_dbe1 { + blockedArea[] = {}; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Stratis.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Stratis.hpp new file mode 100644 index 0000000..e7691d4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Stratis.hpp @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Stratis + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Stratis.hpp +*/ +class Stratis { + blockedArea[] = {}; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Tanoa.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Tanoa.hpp new file mode 100644 index 0000000..b2bee08 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Tanoa.hpp @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Zargabad + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Tanoa.hpp +*/ +class Tanoa { + blockedArea[] = {}; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/WorldInteractions.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/WorldInteractions.hpp new file mode 100644 index 0000000..e6a9352 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/WorldInteractions.hpp @@ -0,0 +1,856 @@ +class CfgWorldInteractions { + class Ore { + ore = 1; + }; + class Water { + water = 1; + }; + class BankTerminal { + bankTerminal = 1; + }; + class Rocks { + rock = 1; + }; + class HempFiber { + HempFiber = 1; + }; + class PumpkinPatch { + PumpkinPatch = 1; + }; + class Bushes { + bush = 1; + }; + class Trash { + Trash = 1; + }; + class TrashSmall { + TrashSmall = 1; + }; + class Trees { + tree = 1; + }; + class Cinder { + cinder = 1; + }; + class Wrecks { + wreck = 1; + }; + + class Land_WaterBarrel_F : Water {}; + class Land_BarrelWater_F : Water {}; + class Land_WaterTank_F : Water {}; + class barrelwater_f_p3d : Water {}; + class water_source_f_p3d : Water {}; + class waterbarrel_f_p3d : Water {}; + class canisterplastic_f_p3d : Water {}; + class watertank_f_p3d : Water {}; + class misc_well_p3d : Water {}; + class misc_wellpump_p3d : Water {}; + class kasna_new_p3d : Water {}; + class rasman_pond_p3d : Water {}; + class pumpa_p3d : Water {}; + class misc_well_c_ep1_p3d : Water {}; + class misc_well_l_ep1_p3d : Water {}; + class stand_water_ep1_p3d : Water {}; + class misc_concbox_ep1_p3d : Water {}; + class Land_water_tank : Water {}; + class Land_Pumpa : Water {}; + class watertank_01_f_p3d : Water {}; + class watertank_02_f_p3d : Water {}; + class watertank_04_f_p3d : Water {}; + class watertank_03_f_p3d : Water {}; + class Sink_EPOCH : Water {}; + class WaterPump_EPOCH : Water {}; + class atm_01_f_p3d : bankTerminal {}; + class phonebooth_01_f_p3d : bankTerminal {}; + class atm_02_f_p3d : bankTerminal {}; + class phonebooth_02_f_p3d : bankTerminal {}; + class nastenka_p3d : bankTerminal {}; + class nastenka2_p3d : bankTerminal {}; + class nastenka3_p3d : bankTerminal {}; + class phone_box_south_p3d : bankTerminal {}; + class mailboxsouth_p3d : bankTerminal {}; + class Land_PhoneBooth_02_F : bankTerminal {}; + class Land_PhoneBooth_01_F : bankTerminal {}; + class Land_Atm_01_F : bankTerminal {}; + class Land_Atm_02_F : bankTerminal {}; + class Land_Laptop_device_F : bankTerminal {}; + class Land_ATM_01_malden_F : bankTerminal {}; + class Land_ATM_02_malden_F : bankTerminal {}; + class Land_PhoneBooth_01_malden_F : bankTerminal {}; + class Land_PhoneBooth_02_malden_F : bankTerminal {}; + class atm_01_malden_f_p3d : bankTerminal {}; + class atm_02_malden_f_p3d : bankTerminal {}; + class phonebooth_01_malden_f_p3d : bankTerminal {}; + class phonebooth_02_malden_f_p3d : bankTerminal {}; + class sharpstone_03_lc_p3d : Rocks {}; + class sharpstone_02_lc_p3d : Rocks {}; + class sharpstone_01_lc_p3d : Rocks {}; + class sharpstone_02_p3d : Rocks {}; + class sharpstone_03_p3d : Rocks {}; + class sharprock_monolith_p3d : Rocks {}; + class sharprock_apart_p3d : Rocks {}; + class sharpstones_erosion_p3d : Rocks {}; + class bluntstone_01_lc_p3d : Rocks {}; + class bluntstone_02_lc_p3d : Rocks {}; + class bluntstone_03_lc_p3d : Rocks {}; + class bluntstones_erosion_p3d : Rocks {}; + class bluntstone_01_p3d : Rocks {}; + class bluntstone_03_p3d : Rocks {}; + class sharprock_spike_p3d : Rocks {}; + class sharprock_wallh_p3d : Rocks {}; + class w_sharpstone_03_p3d : Rocks {}; + class w_sharpstone_02_p3d : Rocks {}; + class w_sharpstone_01_p3d : Rocks {}; + class bluntrock_apart_p3d : Rocks {}; + class bluntstone_02_p3d : Rocks {}; + class bluntrock_monolith_p3d : Rocks {}; + class bluntrock_wallh_p3d : Rocks {}; + class sharprock_wallv_p3d : Rocks {}; + class stonesharp_medium_p3d : Rocks {}; + class stone_medium_f_p3d : Rocks {}; + class stonesharp_big_p3d : Rocks {}; + class stonesharp_small_p3d : Rocks {}; + class small_stone_02_f_p3d : Rocks {}; + class stone_small_f_p3d : Rocks {}; + class stone_big_f_p3d : Rocks {}; + class bluntrock_spike_p3d : Rocks {}; + class r2_boulder1_p3d : Rocks {}; + class r2_boulder2_p3d : Rocks {}; + class r2_rock1_p3d : Rocks {}; + class r2_rocktower_p3d : Rocks {}; + class r2_rockwall_p3d : Rocks {}; + class r_rock_02_ep1_p3d : Rocks {}; + class brownrock2_p3d : Rocks {}; + class brownrock3_p3d : Rocks {}; + class desertrock_p3d : Rocks {}; + class desertrock2_p3d : Rocks {}; + class desertrock3_p3d : Rocks {}; + class r_stone_01_ep1_p3d : Rocks {}; + class brownrock_p3d : Rocks {}; + class rockn_02_p3d : Rocks {}; + class sharpstone_01_p3d : Rocks {}; + class r_rock_03_ep1_p3d : Rocks {}; + class rocks_02_p3d : Rocks {}; + class skala3_5_p3d : Rocks {}; + class skala3_4_p3d : Rocks {}; + class skala1_4_p3d : Rocks {}; + class bo_r2_boulder1_p3d : Rocks {}; + class bo_r2_boulder2_p3d : Rocks {}; + class bo_r2_rock1_p3d : Rocks {}; + class bo_r2_rocktower_p3d : Rocks {}; + class bo_r2_rockwall_p3d : Rocks {}; + class w_sharpstones_erosion_p3d : Rocks {}; + class decal_rock_dark_p3d : Rocks {}; + class r_stone_01_pmc_p3d : Rocks {}; + class r_stone_02_pmc_p3d : Rocks {}; + class stone4_p3d : Rocks {}; + class stone3_p3d : Rocks {}; + class stone4_invert_p3d : Rocks {}; + class rocks_01_p3d : Rocks {}; + class stone4a_p3d : Rocks {}; + class stone3a_p3d : Rocks {}; + class rockn_01_p3d : Rocks {}; + class r_tk_stone_01_ep1_p3d : Rocks {}; + class r_tk_stone_02_ep1_p3d : Rocks {}; + class r_tk_rock_03_ep1_p3d : Rocks {}; + class r_tk_boulder_03_ep1_p3d : Rocks {}; + class r_tk_rock_02_ep1_p3d : Rocks {}; + class r_tk_boulder_01_ep1_p3d : Rocks {}; + class r_tk_boulder_02_ep1_p3d : Rocks {}; + class r_tk_rock_01_ep1_p3d : Rocks {}; + class cliff_stone_big_lc_f_p3d : Rocks {}; + class cliff_wall_long_f_p3d : Rocks {}; + class cliff_stone_medium_lc_f_p3d : Rocks {}; + class cliff_stone_small_lc_f_p3d : Rocks {}; + class cliff_boulder_f_p3d : Rocks {}; + class cliff_peak_f_p3d : Rocks {}; + class cliff_wall_round_f_p3d : Rocks {}; + class cliff_stonecluster_f_p3d : Rocks {}; + class cliff_wall_tall_f_p3d : Rocks {}; + class lavaboulder_03_f_p3d : Rocks {}; + class lavastone_small_lc_f_p3d : Rocks {}; + class lavaboulder_02_f_p3d : Rocks {}; + class lavaboulder_01_f_p3d : Rocks {}; + class lavastone_big_lc_f_p3d : Rocks {}; + class lavastonecluster_large_f_p3d : Rocks {}; + class lavaboulder_04_f_p3d : Rocks {}; + class lavastonecluster_small_f_p3d : Rocks {}; + class cliff_stone_medium_f_p3d : Rocks {}; + class lavastone_big_f_p3d : Rocks {}; + class lavastone_small_f_p3d : Rocks {}; + class cliff_surfacemine_f_p3d : Rocks {}; + class limestone_01_01_f_p3d : Rocks {}; + class limestone_01_02_f_p3d : Rocks {}; + class limestone_01_03_f_p3d : Rocks {}; + class limestone_01_01_lc_f_p3d : Rocks {}; + class limestone_01_02_lc_f_p3d : Rocks {}; + class limestone_01_03_lc_f_p3d : Rocks {}; + class limestone_01_apart_f_p3d : Rocks {}; + class limestone_01_erosion_f_p3d : Rocks {}; + class limestone_01_monolith_f_p3d : Rocks {}; + class limestone_01_spike_f_p3d : Rocks {}; + class p_fiberplant_ep1_p3d : HempFiber {}; + class p_pumpkin_summer_p3d : PumpkinPatch {}; + class pumpkin_p3d : PumpkinPatch {}; + class sack_f_p3d : Trash {}; + class garbagebags_f_p3d : Trash {}; + class pallets_f_p3d : Trash {}; + class junkpile_f_p3d : Trash {}; + class garbagepallet_f_p3d : Trash {}; + class garbagewashingmachine_f_p3d : Trash {}; + class basket_f_p3d : Trash {}; + class sacks_goods_f_p3d : Trash {}; + class crateswooden_f_p3d : Trash {}; + class cratesplastic_f_p3d : Trash {}; + class garbagebin_01_f_p3d : Trash {}; + class barrelsand_f_p3d : Trash {}; + class garbagecontainer_closed_f_p3d : Trash {}; + class cratesshabby_f_p3d : Trash {}; + class bucket_f_p3d : Trash {}; + class garbagebarrel_01_f_p3d : Trash {}; + class tyres_f_p3d : Trash {}; + class cargobox_v1_f_p3d : Trash {}; + class metalbarrel_f_p3d : Trash {}; + class sacks_heap_f_p3d : Trash {}; + class woodenbox_f_p3d : Trash {}; + class grave_v1_f_p3d : Trash {}; + class grave_v2_f_p3d : Trash {}; + class calvary_02_v2_f_p3d : Trash {}; + class fishinggear_02_f_p3d : Trash {}; + class fishinggear_01_f_p3d : Trash {}; + class humanskull_f_p3d : Trash {}; + class calvary_02_v1_f_p3d : Trash {}; + class rack_f_p3d : Trash {}; + class wreck_uaz_f_p3d : Trash {}; + class humanskeleton_f_p3d : Trash {}; + class shelvesmetal_f_p3d : Trash {}; + class popelnice_p3d : Trash {}; + class garbage_misc_p3d : Trash {}; + class paletyc_p3d : Trash {}; + class junkpile_p3d : Trash {}; + class kontejner_p3d : Trash {}; + class misc_chickencoop_p3d : Trash {}; + class misc_boogieman_p3d : Trash {}; + class misc_hutch_p3d : Trash {}; + class garbage_paleta_p3d : Trash {}; + class misc_cargo1a_p3d : Trash {}; + class misc_cargo2a_p3d : Trash {}; + class misc_greenhouse_p3d : Trash {}; + class zastavka_stojan_p3d : Trash {}; + class podesta_s10_p3d : Trash {}; + class kontejner_sklo_p3d : Trash {}; + class paletyd_p3d : Trash {}; + class popelnice_2_p3d : Trash {}; + class garbage_plastic_p3d : Trash {}; + class garbage_metal_p3d : Trash {}; + class jeept_tanker_p3d : Trash {}; + class kontejner_plasty_p3d : Trash {}; + class odpadkovy_kos_p3d : Trash {}; + class socha_p3d : Trash {}; + class kontejner_papir_p3d : Trash {}; + class metalcrate_p3d : Trash {}; + class hrob2_p3d : Trash {}; + class barel5_p3d : Trash {}; + class barel4_p3d : Trash {}; + class tires_ep1_p3d : Trash {}; + class barel2_p3d : Trash {}; + class barels_p3d : Trash {}; + class barel1_p3d : Trash {}; + class barels2_p3d : Trash {}; + class barels3_p3d : Trash {}; + class bricks_v2_f_p3d : Trash {}; + class Land_GarbagePallet_F : Trash {}; + class Land_GarbageBags_F : Trash {}; + class garb_misc_pmc_p3d : Trash {}; + class garb_paleta_pmc_p3d : Trash {}; + class garb_heap_pmc_p3d : Trash {}; + class drevena_bedna_p3d : Trash {}; + class barel3_p3d : Trash {}; + class dum_olez_istan1_p3d : Trash {}; + class misc_rubble_ep1_p3d : Trash {}; + class bags_stack_ep1_p3d : Trash {}; + class crates_ep1_p3d : Trash {}; + class cages_ep1_p3d : Trash {}; + class crates_stack_ep1_p3d : Trash {}; + class transport_cart_ep1_p3d : Trash {}; + class stand_small_ep1_p3d : Trash {}; + class stand_meat_ep1_p3d : Trash {}; + class bags_ep1_p3d : Trash {}; + class misc_garb_heap_ep1_p3d : Trash {}; + class woodencrate_01_stack_x3_f_p3d : Trash {}; + class garbageheap_03_f_p3d : Trash {}; + class garbageheap_04_f_p3d : Trash {}; + class garbageheap_02_f_p3d : Trash {}; + class garbageheap_01_f_p3d : Trash {}; + class woodencrate_01_stack_x5_f_p3d : Trash {}; + class woodencrate_01_f_p3d : Trash {}; + class clothesline_01_short_f_p3d : Trash {}; + class boat_01_abandoned_red_f_p3d : Trash {}; + class grave_01_f_p3d : Trash {}; + class grave_03_f_p3d : Trash {}; + class Land_GarbageBarrel_01_english_F : Trash {}; + class misc_postbox_p3d : TrashSmall {}; + class garbagebin_02_f_p3d : TrashSmall {}; + class t_ficusb1s_f_p3d : Trees {}; + class t_oleae1s_f_p3d : Trees {}; + class t_ficusb2s_f_p3d : Trees {}; + class t_broussonetiap1s_f_p3d : Trees {}; + class t_pinuss2s_f_p3d : Trees {}; + class t_pinuss2s_b_f_p3d : Trees {}; + class t_pinuss1s_f_p3d : Trees {}; + class t_oleae2s_f_p3d : Trees {}; + class t_fraxinusav2s_f_p3d : Trees {}; + class t_pinusp3s_f_p3d : Trees {}; + class t_poplar2f_dead_f_p3d : Trees {}; + class t_populusn3s_f_p3d : Trees {}; + class t_phoenixc1s_f_p3d : Trees {}; + class t_populus3s_p3d : Trees {}; + class t_fagus2w_p3d : Trees {}; + class t_betula2s_p3d : Trees {}; + class t_fagus2s_p3d : Trees {}; + class t_fagus2f_p3d : Trees {}; + class t_sorbus2s_p3d : Trees {}; + class t_fraxinus2w_p3d : Trees {}; + class t_salix2s_p3d : Trees {}; + class t_malus1s_p3d : Trees {}; + class t_betula1f_p3d : Trees {}; + class t_pinusn2s_p3d : Trees {}; + class t_picea2s_p3d : Trees {}; + class t_larix3s_p3d : Trees {}; + class t_picea3f_p3d : Trees {}; + class t_picea1s_p3d : Trees {}; + class misc_fallentree2_p3d : Trees {}; + class misc_stub2_p3d : Trees {}; + class t_fraxinus2s_p3d : Trees {}; + class t_quercus2f_p3d : Trees {}; + class misc_trunk_water_p3d : Trees {}; + class misc_trunk_torzo_p3d : Trees {}; + class t_alnus2s_p3d : Trees {}; + class misc_fallentree1_p3d : Trees {}; + class t_betula2f_p3d : Trees {}; + class t_pinusn1s_p3d : Trees {}; + class t_pinuss2f_p3d : Trees {}; + class t_quercus3s_p3d : Trees {}; + class t_carpinus2s_p3d : Trees {}; + class misc_fallenspruce_p3d : Trees {}; + class t_stub_picea_p3d : Trees {}; + class misc_stub1_p3d : Trees {}; + class t_acer2s_p3d : Trees {}; + class t_betula2w_p3d : Trees {}; + class t_pyrus2s_p3d : Trees {}; + class t_pinuss3s_ep1_p3d : Trees {}; + class t_pinuse2s_ep1_p3d : Trees {}; + class t_populusf2s_ep1_p3d : Trees {}; + class str_topol_p3d : Trees {}; + class les_singlestrom_b_p3d : Trees {}; + class banana_3_p3d : Trees {}; + class jablon_p3d : Trees {}; + class str_pinie_p3d : Trees {}; + class t_ficusb2s_ep1_p3d : Trees {}; + class palm_01_p3d : Trees {}; + class vysilac_budova_p3d : Trees {}; + class palm_10_p3d : Trees {}; + class palm_03_p3d : Trees {}; + class palm_04_p3d : Trees {}; + class t_pistacial2s_ep1_p3d : Trees {}; + class panelak_p3d : Trees {}; + class str_kastan_p3d : Trees {}; + class a_hospital_p3d : Trees {}; + class i_barracks_v1_f_p3d : Trees {}; + class dum_istan3_hromada_p3d : Trees {}; + class dum_istan3_hromada2_p3d : Trees {}; + class dum_istan4_big_inverse_p3d : Trees {}; + class panelak2_p3d : Trees {}; + class podesta_1_mid_p3d : Trees {}; + class podesta_1_cornl_p3d : Trees {}; + class t_prunuss2s_ep1_p3d : Trees {}; + class dum_istan2_02_p3d : Trees {}; + class dum_istan4_inverse_p3d : Trees {}; + class podesta_1_stairs2_p3d : Trees {}; + class podesta_1_mid_cornl_p3d : Trees {}; + class hrusen2_p3d : Trees {}; + class zed_kamenna_p3d : Trees {}; + class str_dub_p3d : Trees {}; + class str_dub_jiny_p3d : Trees {}; + class smrk_siroky_p3d : Trees {}; + class smrk_maly_p3d : Trees {}; + class les_singlestrom_p3d : Trees {}; + class palm_02_p3d : Trees {}; + class brg_banana_3_p3d : Trees {}; + class banana_2_p3d : Trees {}; + class oliva_p3d : Trees {}; + class brg_umbrella_acacia02b_p3d : Trees {}; + class brg_umbrella_acacia01b_p3d : Trees {}; + class brg_umbrella_acacia04b_p3d : Trees {}; + class brg_umbrella_acacia03b_p3d : Trees {}; + class str_buk_p3d : Trees {}; + class les_dub_p3d : Trees {}; + class b_pinusm1s_ep1_p3d : Trees {}; + class krovi_long_p3d : Trees {}; + class str_lipa_p3d : Trees {}; + class str_javor_p3d : Trees {}; + class str_trnka_p3d : Trees {}; + class t_poplar2f_dead_pmc_p3d : Trees {}; + class t_quercusir2s_f_p3d : Trees {}; + class dd_bush01_p3d : Trees {}; + class t_fagus2f_summer_p3d : Trees {}; + class akat02s_p3d : Trees {}; + class t_amygdalusc2s_ep1_p3d : Trees {}; + class str_osika_p3d : Trees {}; + class palm_09_p3d : Trees {}; + class dd_borovice_p3d : Trees {}; + class dd_borovice02_p3d : Trees {}; + class str_topol2_p3d : Trees {}; + class brg_umbrella_acacia_shrub02_p3d : Trees {}; + class t_populusb2s_ep1_p3d : Trees {}; + class les_dub_jiny_p3d : Trees {}; + class les_buk_p3d : Trees {}; + class str_fikovnik_p3d : Trees {}; + class str_briza_rovna_p3d : Trees {}; + class str_jerabina_p3d : Trees {}; + class str_habr_p3d : Trees {}; + class les_fikovnik2_p3d : Trees {}; + class bo_t_populus3s_p3d : Trees {}; + class bo_t_fagus2w_p3d : Trees {}; + class bo_t_betula2s_p3d : Trees {}; + class bo_t_fagus2s_p3d : Trees {}; + class bo_t_fagus2f_p3d : Trees {}; + class bo_t_sorbus2s_p3d : Trees {}; + class bo_t_fraxinus2w_p3d : Trees {}; + class bo_t_salix2s_p3d : Trees {}; + class bo_t_malus1s_p3d : Trees {}; + class bo_t_betula1f_p3d : Trees {}; + class bo_t_pinusn2s_p3d : Trees {}; + class bo_t_picea2s_p3d : Trees {}; + class bo_t_larix3s_p3d : Trees {}; + class bo_t_picea3f_p3d : Trees {}; + class bo_t_picea1s_p3d : Trees {}; + class bo_misc_fallentree2_p3d : Trees {}; + class bo_misc_stub2_p3d : Trees {}; + class bo_t_fraxinus2s_p3d : Trees {}; + class bo_t_quercus2f_p3d : Trees {}; + class bo_misc_trunk_water_p3d : Trees {}; + class bo_misc_trunk_torzo_p3d : Trees {}; + class bo_t_alnus2s_p3d : Trees {}; + class bo_misc_fallentree1_p3d : Trees {}; + class bo_t_betula2f_p3d : Trees {}; + class bo_t_pinusn1s_p3d : Trees {}; + class bo_t_pinuss2f_p3d : Trees {}; + class bo_t_quercus3s_p3d : Trees {}; + class bo_t_carpinus2s_p3d : Trees {}; + class bo_t_stub_picea_p3d : Trees {}; + class bo_t_acer2s_p3d : Trees {}; + class bo_t_betula2w_p3d : Trees {}; + class bo_t_pyrus2s_p3d : Trees {}; + class bo_b_corylus_p3d : Trees {}; + class t_fagus2s_summer_p3d : Trees {}; + class t_betula2s_summer_p3d : Trees {}; + class cwr2_a2_t_sorbus2s_p3d : Trees {}; + class cwr2_a2_t_fagus2w_p3d : Trees {}; + class cwr2_a2_t_alnus2s_p3d : Trees {}; + class mb_t_ulmus_large_p3d : Trees {}; + class cwr_aleppopine_p3d : Trees {}; + class cwr2_a2_t_quercus3s_p3d : Trees {}; + class cwr2_a2_t_fraxinus2s_p3d : Trees {}; + class misc_torzotree_pmc_p3d : Trees {}; + class misc_brokenspruce_pmc_p3d : Trees {}; + class misc_stubleafs_pmc_p3d : Trees {}; + class str_fikovnik2_p3d : Trees {}; + class str_fikovnik_ker_p3d : Trees {}; + class str_briza_kriva_p3d : Trees {}; + class smrk_velky_p3d : Trees {}; + class str_briza_p3d : Trees {}; + class misc_trunk_torzo_ep1_p3d : Trees {}; + class t_juniperusc2s_ep1_p3d : Trees {}; + class misc_trunk_water_ep1_p3d : Trees {}; + class t_cocosnucifera3s_tall_f_p3d : Trees {}; + class t_leucaena_f_p3d : Trees {}; + class t_ficus_medium_f_p3d : Trees {}; + class t_cyathea_f_p3d : Trees {}; + class t_ficus_small_f_p3d : Trees {}; + class t_cocosnucifera2s_small_f_p3d : Trees {}; + class t_millettia_f_p3d : Trees {}; + class t_inocarpus_f_p3d : Trees {}; + class t_cocosnucifera3s_bend_f_p3d : Trees {}; + class t_agathis_wide_f_p3d : Trees {}; + class d_treestump_cut_small_f_p3d : Trees {}; + class d_treestump_natural_small_f_p3d : Trees {}; + class d_treestump_natural_large_f_p3d : Trees {}; + class t_albizia_f_p3d : Trees {}; + class t_agathis_tall_f_p3d : Trees {}; + class t_palaquium_f_p3d : Trees {}; + class t_ficus_big_f_p3d : Trees {}; + class t_rhizophora_f_p3d : Trees {}; + class t_cacao_ripe_f_p3d : Trees {}; + class d_treestump_cut_large_f_p3d : Trees {}; + class t_cupressus_stricta_2s_f_p3d : Trees {}; + class t_cupressus_stricta_3s_f_p3d : Trees {}; + class t_ficus_3d_f_p3d : Trees {}; + class t_phoenixrupicola1s_f_p3d : Trees {}; + class t_phoenixrupicola3s_f_p3d : Trees {}; + class Land_t_acer2s : Trees {}; + class Land_t_alnus2s : Trees {}; + class Land_t_betula1f : Trees {}; + class Land_t_betula2f : Trees {}; + class Land_t_betula2s : Trees {}; + class Land_t_betula2w : Trees {}; + class Land_t_carpinus2s : Trees {}; + class Land_t_fagus2f : Trees {}; + class Land_t_fagus2s : Trees {}; + class Land_t_fagus2W : Trees {}; + class Land_t_fraxinus2s : Trees {}; + class Land_t_fraxinus2W : Trees {}; + class Land_t_larix3f : Trees {}; + class Land_t_larix3s : Trees {}; + class Land_t_malus1s : Trees {}; + class Land_t_picea1s : Trees {}; + class Land_t_picea2s : Trees {}; + class Land_t_picea3f : Trees {}; + class Land_t_pinusN1s : Trees {}; + class Land_t_pinusN2s : Trees {}; + class Land_t_pinusS2f : Trees {}; + class Land_t_populus3s : Trees {}; + class Land_t_pyrus2s : Trees {}; + class Land_t_quercus2f : Trees {}; + class Land_t_quercus3s : Trees {}; + class Land_t_salix2s : Trees {}; + class Land_t_sorbus2s : Trees {}; + class Land_t_stub_picea : Trees {}; + class b_ficusc2d_f_p3d : Bushes {}; + class b_ficusc1s_f_p3d : Bushes {}; + class b_neriumo2d_f_p3d : Bushes {}; + class b_arundod2s_f_p3d : Bushes {}; + class b_arundod3s_f_p3d : Bushes {}; + class b_ficusc2s_f_p3d : Bushes {}; + class b_craet1_p3d : Bushes {}; + class b_craet2_p3d : Bushes {}; + class b_corylus_p3d : Bushes {}; + class b_corylus2s_p3d : Bushes {}; + class b_betulahumilis_p3d : Bushes {}; + class b_sambucus_p3d : Bushes {}; + class b_salix2s_p3d : Bushes {}; + class b_canina2s_p3d : Bushes {}; + class b_pmugo_p3d : Bushes {}; + class b_prunus_p3d : Bushes {}; + class krovi_bigest_p3d : Bushes {}; + class krovi4_p3d : Bushes {}; + class krovi_p3d : Bushes {}; + class ker_s_bobulema_p3d : Bushes {}; + class ker_pichlavej_p3d : Bushes {}; + class pinus_mugo_lowpoly_p3d : Bushes {}; + class b_amygdalusn1s_ep1_p3d : Bushes {}; + class banana_4_p3d : Bushes {}; + class banana_1_p3d : Bushes {}; + class palm_08small_p3d : Bushes {}; + class ker_deravej_p3d : Bushes {}; + class brg_umbrella_acacia_shrub2_p3d : Bushes {}; + class krovi2_p3d : Bushes {}; + class brg_banana_4_p3d : Bushes {}; + class bo_b_craet1_p3d : Bushes {}; + class bo_b_craet2_p3d : Bushes {}; + class bo_b_corylus2s_p3d : Bushes {}; + class bo_b_betulahumilis_p3d : Bushes {}; + class bo_b_sambucus_p3d : Bushes {}; + class salix2s_p3d : Bushes {}; + class bo_b_canina2s_p3d : Bushes {}; + class bo_b_pmugo_p3d : Bushes {}; + class bo_b_prunus_p3d : Bushes {}; + class b_corylus2s_summer_p3d : Bushes {}; + class b_craet1_summer_p3d : Bushes {}; + class b_betula2w_summer_p3d : Bushes {}; + class b_canina2s_summer_p3d : Bushes {}; + class cwr2_a2_b_canina2s_p3d : Bushes {}; + class cwr2_a2_b_craet1_p3d : Bushes {}; + class str_krovisko_vysoke_p3d : Bushes {}; + class cwr2_a2_b_prunus_p3d : Bushes {}; + class b_neriumo2s_f_p3d : Bushes {}; + class b_neriumo2s_white_f_p3d : Bushes {}; + class cwr2_a2_b_sambucus_p3d : Bushes {}; + class b_hip2s_pmc_p3d : Bushes {}; + class b_elderberry2s_pmc_p3d : Bushes {}; + class ker_buxus_p3d : Bushes {}; + class str_liskac_p3d : Bushes {}; + class dd_bush02_p3d : Bushes {}; + class b_pistacial1s_ep1_p3d : Bushes {}; + class b_colored_red_f_p3d : Bushes {}; + class b_colored_yellow_f_p3d : Bushes {}; + class b_cestrum_f_p3d : Bushes {}; + class b_calochlaena_f_p3d : Bushes {}; + class b_gardenia_f_p3d : Bushes {}; + class b_gardenia_dec_01_f_p3d : Bushes {}; + class b_gardenia_dec_02_f_p3d : Bushes {}; + class b_leucaena_f_p3d : Bushes {}; + class t_pritchardia_f_p3d : Bushes {}; + class b_pipermeth_f_p3d : Bushes {}; + class t_banana_f_p3d : Bushes {}; + class t_banana_slim_f_p3d : Bushes {}; + class t_banana_wild_f_p3d : Bushes {}; + class b_rhizophora_f_p3d : Bushes {}; + class b_neriumo2d_tanoa_f_p3d : Bushes {}; + class b_opuntiaficusindica3s_f_p3d : Bushes {}; + class b_vitus_vinifera_f_p3d : Bushes {}; + class Land_b_betulaHumilis : Bushes {}; + class Land_b_canina2s : Bushes {}; + class Land_b_corylus : Bushes {}; + class Land_b_corylus2s : Bushes {}; + class Land_b_craet1 : Bushes {}; + class Land_b_craet2 : Bushes {}; + class Land_b_hrusen2 : Bushes {}; + class Land_b_pmugo : Bushes {}; + class Land_b_prunus : Bushes {}; + class Land_b_salix2s : Bushes {}; + class Land_b_sambucus : Bushes {}; + class cinderblocks_f_p3d : Cinder {}; + class cinderblocks_01_f_p3d : Cinder {}; + class wall_tin_4_2_p3d : Wrecks {}; + class mil_wiredfence_f_p3d : Wrecks {}; + class cages_f_p3d : Wrecks {}; + class wreck_car_f_p3d : Wrecks {}; + class pipes_small_f_p3d : Wrecks {}; + class pipe_fence_4m_f_p3d : Wrecks {}; + class spp_tower_f_p3d : Wrecks {}; + class wreck_ural_f_p3d : Wrecks {}; + class wreck_car3_f_p3d : Wrecks {}; + class ironpipes_f_p3d : Wrecks {}; + class pipes_large_f_p3d : Wrecks {}; + class coil_f_p3d : Wrecks {}; + class wreck_offroad_f_p3d : Wrecks {}; + class wreck_offroad2_f_p3d : Wrecks {}; + class crabcages_f_p3d : Wrecks {}; + class metalbarrel_empty_f_p3d : Wrecks {}; + class net_fenced_8m_f_p3d : Wrecks {}; + class net_fence_8m_f_p3d : Wrecks {}; + class wavepowerplantbroken_f_p3d : Wrecks {}; + class wreck_truck_dropside_f_p3d : Wrecks {}; + class wavepowerplant_f_p3d : Wrecks {}; + class wreck_traw_f_p3d : Wrecks {}; + class wreck_slammer_f_p3d : Wrecks {}; + class maroula_f_p3d : Wrecks {}; + class indfnc_9_f_p3d : Wrecks {}; + class indfnc_3_f_p3d : Wrecks {}; + class indfnc_3_d_f_p3d : Wrecks {}; + class wreck_car2_f_p3d : Wrecks {}; + class net_fence_4m_f_p3d : Wrecks {}; + class wreck_truck_f_p3d : Wrecks {}; + class wreck_hunter_f_p3d : Wrecks {}; + class wreck_slammer_hull_f_p3d : Wrecks {}; + class wall_fen1_5_pole_p3d : Wrecks {}; + class wall_fen1_5_2_p3d : Wrecks {}; + class wall_fen1_5_p3d : Wrecks {}; + class wall_indfnc_3_p3d : Wrecks {}; + class wall_indfnc_9_p3d : Wrecks {}; + class wall_indfnc_corner_p3d : Wrecks {}; + class misc_concrete_high_p3d : Wrecks {}; + class plot_vlnplech2_p3d : Wrecks {}; + class misc_g_pipes_p3d : Wrecks {}; + class wall_tincom_9_p3d : Wrecks {}; + class wall_tin_4_p3d : Wrecks {}; + class plot_vlnplech1_p3d : Wrecks {}; + class wall_tincom_9_2_p3d : Wrecks {}; + class wall_tincom_3_p3d : Wrecks {}; + class wall_tincom_pole_p3d : Wrecks {}; + class datsun01t_p3d : Wrecks {}; + class datsun02t_p3d : Wrecks {}; + class skodovka_wrecked_p3d : Wrecks {}; + class lada_wrecked_p3d : Wrecks {}; + class hiluxt_p3d : Wrecks {}; + class uaz_wrecked_p3d : Wrecks {}; + class ural_wrecked_p3d : Wrecks {}; + class rubble_metal_plates_04_p3d : Wrecks {}; + class rubble_metal_plates_02_p3d : Wrecks {}; + class rubble_metal_plates_01_p3d : Wrecks {}; + class wreck_brdm2_f_p3d : Wrecks {}; + class wreck_bmp2_f_p3d : Wrecks {}; + class wreck_heli_attack_01_f_p3d : Wrecks {}; + class bmp_break_p3d : Wrecks {}; + class wreck_t72_hull_f_p3d : Wrecks {}; + class wreck_t72_turret_f_p3d : Wrecks {}; + class wreck_hmmwv_f_p3d : Wrecks {}; + class kamaz_bort_p3d : Wrecks {}; + class wreck_van_f_p3d : Wrecks {}; + class kamaz_awtobas_p3d : Wrecks {}; + class maz_p3d : Wrecks {}; + class wreck_skodovka_f_p3d : Wrecks {}; + class wreck_cardismantled_f_p3d : Wrecks {}; + class kamaz_pozarka_p3d : Wrecks {}; + class zaporosez_p3d : Wrecks {}; + class kamaz_tent_p3d : Wrecks {}; + class budova5_p3d : Wrecks {}; + class pletivo_dira_p3d : Wrecks {}; + class pletivo_p3d : Wrecks {}; + class wall_indfnc_pole_p3d : Wrecks {}; + class wall_indfnc_3_d_p3d : Wrecks {}; + class t72_wrecked_p3d : Wrecks {}; + class t72_wrecked_turret_p3d : Wrecks {}; + class parkingmeter_01_f_p3d : Wrecks {}; + class pipefence_01_m_d_f_p3d : Wrecks {}; + class pipefence_01_m_8m_f_p3d : Wrecks {}; + class pipefence_01_m_gate_v2_f_p3d : Wrecks {}; + class fuelstation_02_prices_f_p3d : Wrecks {}; + class tinwall_01_m_4m_v2_f_p3d : Wrecks {}; + class pipefence_01_m_pole_f_p3d : Wrecks {}; + class wiredfence_01_16m_f_p3d : Wrecks {}; + class wiredfence_01_8m_d_f_p3d : Wrecks {}; + class wiredfence_01_8m_f_p3d : Wrecks {}; + class netfence_01_m_8m_f_p3d : Wrecks {}; + class netfence_01_m_d_f_p3d : Wrecks {}; + class netfence_01_m_4m_f_p3d : Wrecks {}; + class tinwall_02_l_4m_f_p3d : Wrecks {}; + class tinwall_02_l_8m_f_p3d : Wrecks {}; + class bulldozer_01_wreck_f_p3d : Wrecks {}; + class excavator_01_wreck_f_p3d : Wrecks {}; + class railwaycar_01_tank_f_p3d : Wrecks {}; + class railwaycar_01_passenger_f_p3d : Wrecks {}; + class locomotive_01_v3_f_p3d : Wrecks {}; + class bulldozer_01_abandoned_f_p3d : Wrecks {}; + class locomotive_01_v1_f_p3d : Wrecks {}; + class locomotive_01_v2_f_p3d : Wrecks {}; + class excavator_01_abandoned_f_p3d : Wrecks {}; + + class Land_Wreck_Skodovka_F : Wrecks {}; + class Land_Wreck_CarDismantled_F : Wrecks {}; + class Land_Wreck_Truck_F : Wrecks {}; + class Land_Wreck_Car2_F : Wrecks {}; + class Land_Wreck_Car_F : Wrecks {}; + class Land_Wreck_Car3_F : Wrecks {}; + class Land_Wreck_Hunter_F : Wrecks {}; + class Land_Wreck_Van_F : Wrecks {}; + class Land_Wreck_Offroad_F : Wrecks {}; + class Land_Wreck_UAZ_F : Wrecks {}; + class Land_Wreck_Ural_F : Wrecks {}; + class Land_Wreck_Truck_dropside_F : Wrecks {}; + class Land_Wreck_HMMWV_F : Wrecks {}; + class Land_GarbageWashingMachine_F : Trash {}; + class Land_GarbageHeap_01_F : Trash {}; + class Land_GarbageHeap_02_F : Trash {}; + class Land_GarbageHeap_03_F : Trash {}; + class Land_GarbageHeap_04_F : Trash {}; + + class Mi8Wreck : Wrecks {}; + class BlackhawkWreck : Wrecks {}; + class C130J_Wreck_EP1 : Wrecks {}; + class Land_Wreck_C130J_EP1_ruins : Wrecks {}; + class T72Wreck : Wrecks {}; + class T72WreckTurret : Wrecks {}; + class HMMWVWreck : Wrecks {}; + class JeepWreck1 : Wrecks {}; + class JeepWreck2 : Wrecks {}; + class JeepWreck3 : Wrecks {}; + class SKODAWreck : Wrecks {}; + class UAZWreck : Wrecks {}; + class UralWreck : Wrecks {}; + class datsun01Wreck : Wrecks {}; + class datsun02Wreck : Wrecks {}; + class LADAWreck : Wrecks {}; + class hiluxWreck : Wrecks {}; + class BMP2Wreck : Wrecks {}; + class BRDMWreck : Wrecks {}; + class M113Wreck : Wrecks {}; + class Land_chz_avtobus : Wrecks {}; + class Land_chz_avtobus2 : Wrecks {}; + class Land_chz_avtobus2a : Wrecks {}; + class Land_chz_benozovoz_gaz : Wrecks {}; + class Land_chz_benozovoz_zil : Wrecks {}; + class Land_chz_bochka_pricep : Wrecks {}; + class Land_chz_buldozer : Wrecks {}; + class Land_chz_ekskavator : Wrecks {}; + class Land_chz_gaz : Wrecks {}; + class Land_chz_gaz66_02 : Wrecks {}; + class Land_chz_gazon : Wrecks {}; + class Land_chz_kamaz_fura : Wrecks {}; + class Land_chz_kamaz_korpus : Wrecks {}; + class Land_chz_kamaz_korpus_02 : Wrecks {}; + class Land_chz_kamaz_korpus_03 : Wrecks {}; + class Land_chz_kamaz_korpus_04 : Wrecks {}; + class Land_chz_kamaz_pricep : Wrecks {}; + class Land_chz_katok_1 : Wrecks {}; + class Land_chz_katok_1_br : Wrecks {}; + class Land_chz_molokovoz_01 : Wrecks {}; + class Land_chz_moskvich : Wrecks {}; + class Land_chz_moskvich_2 : Wrecks {}; + class Land_chz_niva_01 : Wrecks {}; + class Land_chz_niva_02 : Wrecks {}; + class Land_chz_niva_03 : Wrecks {}; + class Land_chz_rls_chp75b : Wrecks {}; + class Land_chz_train_vagon_01_open_br1 : Wrecks {}; + class Land_chz_train_vagon_02_open_br1 : Wrecks {}; + class Land_chz_train_vagon_04 : Wrecks {}; + class Land_chz_train_vagon_platforma : Wrecks {}; + class Land_chz_train_vagon_suburban_01 : Wrecks {}; + class Land_chz_train_vagon_suburban_02 : Wrecks {}; + class Land_chz_traktor_1 : Wrecks {}; + class Land_chz_traktor_2 : Wrecks {}; + class Land_chz_traktor_3 : Wrecks {}; + class Land_chz_traktor_4 : Wrecks {}; + class Land_chz_uaz_1 : Wrecks {}; + class Land_chz_uazik_01 : Wrecks {}; + class Land_chz_uazik_02 : Wrecks {}; + class Land_chz_veh_diesel_br : Wrecks {}; + class Land_chz_zaz968_1 : Wrecks {}; + class Land_chz_zaz968_2 : Wrecks {}; + class Land_chz_zil_130_4 : Wrecks {}; + class Land_chz_zil_fire_1 : Wrecks {}; + class Land_chz_zibk_2 : Wrecks {}; + class Land_chz_zibk_3 : Wrecks {}; + class Land_chz_zibk_4 : Wrecks {}; + class Land_fishing_boat : Wrecks {}; + class Land_Wreck_Satellite_EPOCH : Wrecks {}; + class satellite_p3d : Wrecks {}; + class Land_Pipes_large_F : Wrecks {}; + class Land_Pipes_small_F : Wrecks {}; + class garbagebarrel_01_english_f_p3d : Trash {}; + class uwreck_fishingboat_f_p3d : Wrecks {}; + // ore classes + class MineralDepositCopper_EPOCH : Ore {}; + class MineralDepositGold_EPOCH : Ore {}; + class MineralDepositSilver_EPOCH : Ore {}; + class mineral_p3d : Ore {}; + // CUP Winter Assets + class t_populus3sW_f_p3d : Trees {}; + class t_fagus2WW_p3d : Trees {}; + class t_betula2sW_p3d : Trees {}; + class t_fagus2sW_p3d : Trees {}; + class t_fagus2fW_p3d : Trees {}; + class t_sorbus2sW_p3d : Trees {}; + class t_fraxinus2wW_p3d : Trees {}; + class t_salix2sW_p3d : Trees {}; + class t_malus1sW_p3d : Trees {}; + class t_pinusn2sW_p3d : Trees {}; + class t_picea2sW_p3d : Trees {}; + class t_larix3fW_p3d : Trees {}; + class t_larix3sW_p3d : Trees {}; + class t_picea3fWW_p3d : Trees {}; + class t_picea1sW_p3d : Trees {}; + class s_misc_fallentree2_p3d : Trees {}; + class s_misc_stub2_p3d : Trees {}; + class t_fraxinus2sW_p3d : Trees {}; + class t_quercus2fW_p3d : Trees {}; + class s_misc_trunk_water_p3d : Trees {}; + class s_misc_trunk_torzo_p3d : Trees {}; + class t_alnus2sW_p3d : Trees {}; + class s_misc_fallentree1_p3d : Trees {}; + class t_betula2fW_p3d : Trees {}; + class t_pinusn1sW_p3d : Trees {}; + class t_pinuss2fW_p3d : Trees {}; + class t_quercus3sW_p3d : Trees {}; + class t_carpinus2sW_p3d : Trees {}; + class s_misc_fallenspruce_p3d : Trees {}; + class s_misc_stub1_p3d : Trees {}; + class t_acer2sW_p3d : Trees {}; + class t_betula2wW_p3d : Trees {}; + class t_pyrus2sW_p3d : Trees {}; + class t_xmastree_p3d : Trees {}; + class b_craet2W_p3d : Bushes {}; + class b_corylusW_p3d : Bushes {}; + class b_corylus2sW_p3d : Bushes {}; + class b_betulahumilisW_p3d : Bushes {}; + class b_sambucusW_p3d : Bushes {}; + class b_salix2sW_p3d : Bushes {}; + class b_canina2sW_p3d : Bushes {}; + class b_pmugoW_p3d : Bushes {}; + class b_prunusW_p3d : Bushes {}; + class garbagebin_03_f_p3d : TrashSmall {}; + class concretewell_02_f_p3d : Water {}; + class Land_ConcreteWell_02_F : Water {}; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Zargabad.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Zargabad.hpp new file mode 100644 index 0000000..0dc8f3b --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/Zargabad.hpp @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Zargabad + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Zargabad.hpp +*/ +class Zargabad { + blockedArea[] = {}; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/australia.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/australia.hpp new file mode 100644 index 0000000..cd9c867 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/australia.hpp @@ -0,0 +1,39 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for australia + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/australia.hpp +*/ + +class australia { + blockedArea[] = { + { { 16286.1, 33578.6, 0 }, 650 }, //Darwin + { { 28467, 35190.1, 0 }, 150 }, //Weipa + { { 32103.5, 29816.8, 0 }, 300 }, //Cairns + { { 26754.5, 28028.5, 0 }, 120 }, //Mount Isa + { { 22069.6, 25578.4, 0 }, 380 }, //Alice Springs + { { 19741.6, 24224.8, 0 }, 420 }, //Pine Gap + { { 5201.47, 18284, 0 }, 1100 }, //Perth + { { 31122.2, 19938.1, 0 }, 280 }, //Toowoomba + { { 38111.5, 19942.4, 0 }, 600 }, //North Brisbane + { { 38621.4, 19226.6, 0 }, 410 }, //South Brisbane + { { 27702.9, 16997.3, 0 }, 170 }, //Broken Hill + { { 20723.4, 12752.9, 0 }, 160 }, //Port Lincoln + { { 25072.6, 12705.2, 0 }, 350 }, //Adelaide + { { 36505.9, 12877.1, 0 }, 540 }, //North Sydney + { { 36469.4, 12133.5, 0 }, 420 }, //South Sydney + { { 31070, 10856, 0 }, 750 }, //North Melbourne + { { 31205.9, 9721.02, 0 }, 510 }, //South Melbourne + { { 35364.5, 8453.59, 0 }, 200 } //Eden + }; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/takistan.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/takistan.hpp new file mode 100644 index 0000000..3f6bcac --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/takistan.hpp @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Takistan + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Takistan.hpp +*/ +class Takistan { + blockedArea[] = {}; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/utes.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/utes.hpp new file mode 100644 index 0000000..62ad594 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/utes.hpp @@ -0,0 +1,21 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for utes + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/utes.hpp +*/ +class utes { + Water[] = { + "misc_wellpump.p3d" + }; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/vr.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/vr.hpp new file mode 100644 index 0000000..f7a8473 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochClient/vr.hpp @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for VR + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/vr.hpp +*/ +class vr { + blockedArea[] = {}; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochConfiguration.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochConfiguration.hpp new file mode 100644 index 0000000..0420159 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgEpochConfiguration.hpp @@ -0,0 +1,36 @@ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Raimonds Virtoss - https://EpochMod.com"; + @contributors[] = {}; + @description = "Config for Epoch Configuration system"; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochConfiguration.hpp"; +*/ +class CfgEpochConfiguration +{ + class remap + { + name = "Controls"; + color[] = {1,1,1,1}; + icon = "\x\addons\a3_epoch_code\Data\owner.paa"; + controlGroup = "EpochConfigKeyMap"; + }; + /* + class HUD + { + name = "Customize HUD (WIP)"; + color[] = {1,1,1,1}; + icon = "\x\addons\a3_epoch_code\Data\owner.paa"; + controlGroup = "Epoch_main_config_dynamicHUD"; + }; + */ + class html + { + name = "Changelog"; + color[] = {1,1,1,1}; + icon = "\x\addons\a3_epoch_code\Data\owner.paa"; + controlGroup = "Epoch_main_config_changelog"; + }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgFunctions.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgFunctions.hpp new file mode 100644 index 0000000..02f4b53 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgFunctions.hpp @@ -0,0 +1,68 @@ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {}; + @description = "Epoch cfgfunctions"; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgFunctions.hpp"; +*/ +class cfgFunctions +{ + class A3 + { + tag = "BIS"; + class functions + { + class returnVector + { + file = "epoch_code\compile\bis_functions\returnVector.sqf"; + }; + }; + }; + class EPOCH + { + tag = "EPOCH"; + class functions + { + class arrayToLogic + { + file = "epoch_code\compile\functions\EPOCH_fnc_arrayToLogic.sqf"; + }; + class returnConfigEntryV2 + { + file = "epoch_code\compile\functions\EPOCH_fn_returnConfigEntryV2.sqf"; + }; + class isAny + { + file = "epoch_code\compile\both\EPOCH_isAny.sqf"; + }; + class weightedArray + { + file = "epoch_code\compile\both\EPOCH_weightedArray.sqf"; + }; + class itemDisplayName + { + file = "epoch_code\compile\both\EPOCH_itemDisplayName.sqf"; + }; + class compiler + { + file = "epoch_code\compile\both\EPOCH_compiler.sqf"; + }; + }; + class Client + { + class init + { + file = "epoch_code\init\fn_init.sqf"; + preInit = 1; + }; + class postinit + { + file = "epoch_code\init\fn_postinit.sqf"; + postInit = 1; + }; + }; + }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgItemInteractions.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgItemInteractions.hpp new file mode 100644 index 0000000..80a6c4d --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgItemInteractions.hpp @@ -0,0 +1,1109 @@ +/* +Legend: +interactAction: 0 = examine, + 1 = eat, + 2 = drink, + 3 = build, + 4 = refuel, + 5 = siphon, + 6 = Soiled-25, + 7 = Warm+1, + 8 = Cold-1, + 9 = Energy 100, + 10 = Repair Light, + 11 = Repair Heavy, + 12 = base painting, + 13 = Heal Player, + 14 = Unpack Backpack, + 15 = Read +interactAttributes[] = { + {"Temp",0}, + {"Hunger",0}, + {"Thirst",0}, + {"Energy",0}, + {"Soiled",0}, + {"Immunity",0}, + {"Toxicity",0}, + {"Stamina",0}, + {"Wet",0}, + {"BloodP",0}, + {"NotUsed",0}, + {"Alcohol",0}, + {"Radiation",0} +}; +*/ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {"Andrew Gregory"}; + @description = "Item interaction configs"; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgItemInteractions.hpp"; +*/ +class CfgItemInteractions +{ + class Default + { + interactAction = 0; + }; + class Food_base : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",600}}; + }; + class Food_TinCan_base : Food_base + { + interactReturnOnUse = "ItemEmptyTin"; + }; + class Food_Jar_base : Food_base + { + interactReturnOnUse = "emptyjar_epoch"; + }; + class Food_Cooler_base : Food_base + { + interactReturnOnUse = "ItemCoolerE"; + }; + class Drink_base : Default + { + interactAction = 2; + interactText = "DRINK"; + interactAttributes[] = {{"Thirst",500}}; + }; + class Drink_Jar_base : Drink_base + { + interactReturnOnUse = "emptyjar_epoch"; + }; + class Soda_base : Drink_base + { + interactReturnOnUse = "ItemSodaEmpty"; + }; + class Item_Build_base : Default + { + interactAction = 3; + interactText = "BUILD"; + }; + class Item_Packed_base : Default + { + interactAction = 14; + interactText = "UNPACK"; + }; + class honey_epoch : Food_Jar_base + { + interactText = "EAT"; + interactAttributes[] = {{"Immunity",1},{"Stamina",30}}; + interactActions[] = {{"EMPTY","[1,[],'emptyjar_epoch'] call EPOCH_consumeItem;"}}; + }; + class sardines_epoch : Food_TinCan_base + { + interactAttributes[] = {{"Hunger",1000},{"Toxicity",7,1},{"Radiation",2,1}}; + }; + class meatballs_epoch : Food_TinCan_base + { + interactAttributes[] = {{"Hunger",1200},{"Radiation",2,1}}; + }; + class scam_epoch : Food_TinCan_base + { + interactAttributes[] = {{"Hunger",1000},{"Radiation",2,1}}; + }; + class sweetcorn_epoch : Food_TinCan_base + { + interactAttributes[] = {{"Hunger",600},{"Radiation",2,1}}; + }; + class FoodBioMeat : Food_TinCan_base + { + interactAttributes[] = {{"Hunger",1000},{"Toxicity",7},{"Radiation",2,1}}; + }; + class TacticalBacon : Food_TinCan_base + { + interactAttributes[] = {{"Hunger",500},{"Radiation",2,1}}; + }; + class ItemTrout : Food_base + { + interactAttributes[] = {{"Hunger",300},{"Toxicity",5,1}}; + }; + class ItemSeaBass : Food_base + { + interactAttributes[] = {{"Hunger",500},{"Toxicity",10,1}}; + }; + class ItemTuna : Food_base + { + interactAttributes[] = {{"Hunger",2500}}; + }; + class ItemTroutCooked : Food_base + { + interactAttributes[] = {{"Hunger",600}}; + }; + class ItemSeaBassCooked : Food_base + { + interactAttributes[] = {{"Hunger",1200}}; + }; + class ItemTunaCooked : Food_base + { + interactAttributes[] = {{"Hunger",5000}}; + }; + class FoodMeeps : Food_base + { + interactAttributes[] = {{"Hunger",500}}; + }; + class FoodSnooter : Food_base + { + interactAttributes[] = {{"Hunger",500},{"Stamina",50}}; + }; + class ItemCooler0 : Food_Cooler_base + { + interactAttributes[] = {{"Hunger",3000}}; + }; + class ItemCooler1 : Food_Cooler_base + { + interactAttributes[] = {{"Hunger",3500}}; + }; + class ItemCooler2 : Food_Cooler_base + { + interactAttributes[] = {{"Hunger",4000}}; + }; + class ItemCooler3 : Food_Cooler_base + { + interactAttributes[] = {{"Hunger",5000}}; + }; + class ItemCooler4 : Food_Cooler_base + { + interactAttributes[] = {{"Hunger",5000}}; + }; + class WhiskeyNoodle : Drink_base + { + interactAttributes[] = {{"Thirst",400},{"Toxicity",-1},{"Radiation",-1},{"Stamina",50},{"Alcohol",10},{"BloodP",1}}; + }; + class water_epoch : Drink_Jar_base + { + interactAttributes[] = {{"Thirst",500},{"Toxicity",5,1},{"Stamina",50}}; + }; + class clean_water_epoch : Drink_Jar_base + { + interactAttributes[] = {{"Thirst",500},{"Stamina",50}}; + }; + class HotAxeSauce_epoch : Drink_Jar_base + { + interactAttributes[] = {{"Thirst",-500},{"Immunity",1},{"Stamina",5}}; + }; + class ItemSodaRbull : Soda_base + { + interactAttributes[] = {{"Thirst",1000},{"Stamina",100}}; + }; + class ItemSodaOrangeSherbet : Soda_base + { + interactAttributes[] = {{"Thirst",800},{"Stamina",75}}; + }; + class ItemSodaPurple : Soda_base + { + interactAttributes[] = {{"Thirst",800},{"Stamina",75}}; + }; + class ItemSodaMocha : Soda_base + { + interactAttributes[] = {{"Thirst",650},{"Stamina",150}}; + }; + class ItemSodaBurst : Soda_base + { + interactAttributes[] = {{"Thirst",800},{"Stamina",75}}; + }; + class FoodWalkNSons : Soda_base + { + interactAttributes[] = {{"Thirst",1200},{"Stamina",150}}; + }; + class ItemSodaAlpineDude : Soda_base + { + interactAttributes[] = {{"Thirst",800},{"Stamina",800}}; + }; + class jerrycan_epoch : Default + { + interactAction = 4; + interactText = "FILL"; + interactReturnOnUse = "jerrycanE_epoch"; + interactAttributes[] = {10}; + interactActions[] = {{"DRINK","[2,[['Toxicity',100],['Alcohol',50]],'jerrycanE_epoch'] call EPOCH_consumeItem;"},{"EMPTY","[2,[],'jerrycanE_epoch'] call EPOCH_consumeItem;"}}; + }; + class jerrycanE_epoch : Default + { + interactAction = 5; + interactText = "SIPHON"; + interactReturnOnUse = "jerrycan_epoch"; + interactAttributes[] = {10}; + }; + class lighter_epoch : Default + { + interactAction = 5; + interactText = "Fill"; + interactReturnOnUse = "lighter_epoch"; + interactAttributes[] = {2}; + }; + class FAK : Default + { + interactAction = 13; + interactText = "USE"; + }; + class ItemLockbox : Item_Build_base + { + buildClass = "LockBox_SIM_EPOCH"; + }; + class ItemSafe : Item_Build_base + { + buildClass = "Safe_SIM_EPOCH"; + }; + class ItemSafe_s : Item_Build_base + { + buildClass = "Safe_s_SIM_EPOCH"; + }; + class ItemGunSafe : Item_Build_base + { + buildClass = "GunSafe_SIM_EPOCH"; + }; + class JackKit : Item_Build_base + { + buildClass = "Jack_SIM_EPOCH"; + }; + class EnergyPack : Default + { + interactAction = 9; + interactText = "USE"; + interactAttributes[] = {{"Energy",100}}; + }; + class EnergyPackLg : Default + { + interactAction = 9; + interactText = "USE"; + interactAttributes[] = {{"Energy",1000}}; + }; + class VehicleRepair : Default + { + interactAction = 10; + interactText = "USE"; + }; + class VehicleRepairLg : Default + { + interactAction = 11; + interactText = "USE"; + }; + class Venom_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Toxicity",20,1}}; + }; + class SnakeCarcass_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",300},{"Soiled",1},{"Toxicity",10,1}}; + }; + class SnakeMeat_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",1200}}; + }; + class RabbitCarcass_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",300},{"Soiled",1},{"Toxicity",10,1}}; + }; + class CookedRabbit_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",1200}}; + }; + class ChickenCarcass_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",500},{"Soiled",1},{"Toxicity",25,1}}; + }; + class CookedChicken_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",2000}}; + }; + class GoatCarcass_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",500},{"Soiled",1},{"Toxicity",15,1}}; + }; + class DogCarcass_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",500},{"Soiled",1},{"Toxicity",15,1}}; + }; + class CookedDog_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",3000}}; + }; + class CookedGoat_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",3000}}; + }; + class SheepCarcass_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",500},{"Soiled",1},{"Toxicity",15,1}}; + }; + class CookedSheep_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = {{"Hunger",3000}}; + }; + class ItemPowderMilk : Food_base + { + interactAttributes[] = {{"Thirst",-350},{"Hunger",300}}; + }; + class ItemRicebox : Food_base + { + interactAttributes[] = {{"Thirst",-1000},{"Hunger",1200}}; + }; + class ItemCereals : Food_base + { + interactAttributes[] = {{"Thirst",-1000},{"Hunger",1200}}; + }; + class ItemVitamins : Food_base + { + interactText = "Take Pills"; + interactAttributes[] = {{"Immunity",20},{"Stamina",50},{"Toxicity",-5},{"Thirst",-150}}; + }; + class KitSpikeTrap : Item_Build_base + { + buildClass = "Spike_TRAP_SIM_EPOCH"; + }; + class KitMetalTrap : Item_Build_base + { + buildClass = "Metal_TRAP_SIM_EPOCH"; + }; + class KitStudWall : Item_Build_base + { + buildClass = "WoodLargeWall_EPOCH"; + }; + class KitJailWall : Item_Build_base + { + buildClass = "JailWall_EPOCH"; + }; + class KitWoodFloor : Item_Build_base + { + buildClass = "WoodFloor_EPOCH"; + }; + class KitWoodHalfFloor : Item_Build_base + { + buildClass = "WoodHalfFloor_EPOCH"; + }; + class KitWoodQuarterFloor : Item_Build_base + { + buildClass = "WoodQuarterFloor_EPOCH"; + }; + class KitWoodStairs : Item_Build_base + { + buildClass = "WoodStairs_EPOCH"; + }; + class KitWoodTower : Item_Build_base + { + buildClass = "WoodTower_EPOCH"; + }; + class KitMetalTower : Item_Build_base + { + buildClass = "MetalTower_EPOCH"; + }; + class KitMetalFloor : Item_Build_base + { + buildClass = "MetalFloor_EPOCH"; + }; + class KitMetalHalfFloor : Item_Build_base + { + buildClass = "MetalHalfFloor_EPOCH"; + }; + class KitMetalQuarterFloor : Item_Build_base + { + buildClass = "MetalQuarterFloor_EPOCH"; + }; + class KitCinderTower : Item_Build_base + { + buildClass = "CinderTower_EPOCH"; + }; + class KitCinderFloor : Item_Build_base + { + buildClass = "CinderFloor_EPOCH"; + }; + class KitCinderHalfFloor : Item_Build_base + { + buildClass = "CinderHalfFloor_EPOCH"; + }; + class KitCinderQuarterFloor : Item_Build_base + { + buildClass = "CinderQuarterFloor_EPOCH"; + }; + class KitWoodRamp : Item_Build_base + { + buildClass = "WoodRamp_EPOCH"; + }; + class KitTankTrap : Item_Build_base + { + buildClass = "TankTrap_SIM_EPOCH"; + }; + class KitHesco3 : Item_Build_base + { + buildClass = "Hesco3_EPOCH"; + }; + class KitWoodLadder : Item_Build_base + { + buildClass = "WoodLadder_EPOCH"; + }; + class KitFirePlace : Item_Build_base + { + buildClass = "FirePlace_SIM_EPOCH"; + }; + class KitTiPi : Item_Build_base + { + buildClass = "Tipi_SIM_EPOCH"; + isStorage = 1; + }; + class KitShelf : Item_Build_base + { + buildClass = "StorageShelf_SIM_EPOCH"; + isStorage = 1; + }; + class KitWorkbench : Item_Build_base + { + buildClass = "Workbench_SIM_EPOCH"; + isStorage = 1; + }; + class KitTentA : Item_Build_base + { + buildClass = "TentA_SIM_EPOCH"; + isStorage = 1; + }; + class KitTentDome : Item_Build_base + { + buildClass = "TentDome_SIM_EPOCH"; + isStorage = 1; + }; + class KitFoundation : Item_Build_base + { + buildClass = "Foundation_EPOCH"; + }; + class KitWoodFoundation : Item_Build_base + { + buildClass = "WoodFoundation_EPOCH"; + }; + class KitSolarGen : Item_Build_base + { + buildClass = "SolarGen_EPOCH"; + }; + class KitPlotPole : Item_Build_base + { + buildClass = "PlotPole_SIM_EPOCH"; + }; + class KitPlotPole_M : Item_Build_base + { + buildClass = "PlotPole_M_SIM_EPOCH"; + }; + class KitPlotPole_L : Item_Build_base + { + buildClass = "PlotPole_L_SIM_EPOCH"; + }; + class KitPlotPole_XL : Item_Build_base + { + buildClass = "PlotPole_XL_SIM_EPOCH"; + }; + class KitPlotPole_XXL : Item_Build_base + { + buildClass = "PlotPole_XXL_SIM_EPOCH"; + }; + class KitCinderWall : Item_Build_base + { + buildClass = "CinderWallHalf_EPOCH"; + }; + class Kit_Garden : Item_Build_base + { + buildClass = "Garden_EPOCH"; + isStorage = 1; + }; + class KitSolarCharger : Item_Build_base + { + buildClass = "SolarCharger_EPOCH"; + isStorage = 1; + }; + class KitSolarChargerXL : Item_Build_base + { + buildClass = "SolarChargerXL_EPOCH"; + isStorage = 1; + }; + class KitBurnBarrel : Item_Build_base + { + buildClass = "BurnBarrel_EPOCH"; + }; + class KitLightPole : Item_Build_base + { + buildClass = "LightPole_EPOCH"; + }; + class KitSmallForestCamoNet : Item_Build_base + { + buildClass = "SmallForestCamoNet_EPOCH"; + }; + class KitSmallDesertCamoNet : Item_Build_base + { + buildClass = "SmallDesertCamoNet_EPOCH"; + }; + class KitLargeForestCamoNet : Item_Build_base + { + buildClass = "LargeForestCamoNet_EPOCH"; + }; + class KitLargeDesertCamoNet : Item_Build_base + { + buildClass = "LargeDesertCamoNet_EPOCH"; + }; + class KitFirePlace_02 : Item_Build_base + { + buildClass = "FirePlace_02_EPOCH"; + }; + class KitFieldToilet : Item_Build_base + { + buildClass = "FieldToilet_EPOCH"; + }; + class KitScaffolding : Item_Build_base + { + buildClass = "Scaffolding_EPOCH"; + }; + class KitSink : Item_Build_base + { + buildClass = "Sink_EPOCH"; + }; + class KitPortableLight_Single : Item_Build_base + { + buildClass = "PortableLight_Single_EPOCH"; + }; + class KitPortableLight_Double : Item_Build_base + { + buildClass = "PortableLight_Double_EPOCH"; + }; + class KitWatchTower : Item_Build_base + { + buildClass = "WatchTower_EPOCH"; + }; + class KitSunShade : Item_Build_base + { + buildClass = "SunShade_EPOCH"; + }; + class KitFuelPump : Item_Build_base + { + buildClass = "FuelPump_EPOCH"; + }; + class KitBagBunker : Item_Build_base + { + buildClass = "BagBunker_EPOCH"; + }; + class KitSandBagWall : Item_Build_base + { + buildClass = "SandBagWall_EPOCH"; + }; + class KitSandBagWallLong : Item_Build_base + { + buildClass = "SandBagWallLong_EPOCH"; + }; + class KitBarGate : Item_Build_base + { + buildClass = "BarGate_EPOCH"; + }; + class KitWaterPump : Item_Build_base + { + buildClass = "WaterPump_EPOCH"; + }; + class KitBarbedWire : Item_Build_base + { + buildClass = "BarbedWire_EPOCH"; + }; + class BaseCam : Item_Build_base + { + buildClass = "BaseCam_EPOCH"; + }; + class PaintCanBase : Default + { + interactAction = 12; + interactText = "USE"; + }; + class PaintCanClear : PaintCanBase + { + colorName = "None"; + textureIndex = 0; + }; + class PaintCanBlk : PaintCanBase + { + colorName = "Black"; + textureIndex = 1; + }; + class PaintCanBlu : PaintCanBase + { + colorName = "Blue"; + textureIndex = 2; + }; + class PaintCanBrn : PaintCanBase + { + colorName = "Brown"; + textureIndex = 3; + }; + class PaintCanGrn : PaintCanBase + { + colorName = "Green"; + textureIndex = 4; + }; + class PaintCanOra : PaintCanBase + { + colorName = "Orange"; + textureIndex = 5; + }; + class PaintCanPur : PaintCanBase + { + colorName = "Purple"; + textureIndex = 6; + }; + class PaintCanRed : PaintCanBase + { + colorName = "Red"; + textureIndex = 7; + }; + class PaintCanTeal : PaintCanBase + { + colorName = "Teal"; + textureIndex = 8; + }; + class PaintCanYel : PaintCanBase + { + colorName = "Yellow"; + textureIndex = 9; + }; + class Poppy : Default + { + interactAction = 6; + interactText = "USE"; + interactAttributes[] = {{"Immunity",10},{"Stamina",-100}}; + }; + class Goldenseal : Default + { + interactAction = 6; + interactText = "USE"; + interactAttributes[] = {{"Toxicity",-5}}; + }; + class Pumpkin : Default + { + interactAction = 6; + interactText = "USE"; + interactAttributes[] = {{"Hunger",500},{"Stamina",50}}; + }; + class Towelette : Default + { + interactAction = 6; + interactText = "USE"; + interactAttributes[] = {{"Soiled",-25}}; + }; + class HeatPack : Default + { + interactAction = 7; + interactText = "USE"; + interactAttributes[] = {{"Temp",1}}; + }; + class ColdPack : Default + { + interactAction = 8; + interactText = "USE"; + interactAttributes[] = {{"Temp",-1}}; + }; + class ItemHotwire : Default + { + interactAction = 2; + interactText = "USE"; + }; + class ItemKeyKit : Default + { + interactAction = 2; + interactText = "USE"; + }; + class ItemBarrelF : Default + { + interactAction = 4; + interactText = "FILL"; + interactAttributes[] = {210}; + interactReturnOnUse = "ItemBarrelE"; + }; + class ItemBarrelE : Default + { + interactAction = 5; + interactText = "SIPHON"; + interactAttributes[] = {210}; + interactReturnOnUse = "ItemBarrelF"; + }; + class ItemKey : Default + { + interactAction = 2; + interactText = "USE"; + }; + class ItemKeyBlue : ItemKey {}; + class ItemKeyGreen : ItemKey {}; + class ItemKeyRed : ItemKey {}; + class ItemKeyYellow : ItemKey {}; + class ItemDoc1 : Default + { + interactAction = 15; + interactText = "READ"; + }; + class ItemDoc2 : ItemDoc1 {}; + class ItemDoc3 : ItemDoc1 {}; + class ItemDoc4 : ItemDoc1 {}; + class ItemDoc5 : ItemDoc1 {}; + class ItemDoc6 : ItemDoc1 {}; + class ItemDoc7 : ItemDoc1 {}; + class ItemDoc8 : ItemDoc1 {}; + class ItemVehDoc1 : ItemDoc1 {}; + class ItemVehDoc2 : ItemDoc1 {}; + class ItemVehDoc3 : ItemDoc1 {}; + class ItemVehDoc4 : ItemDoc1 {}; + class KitVehicleUpgradeI_100_EPOCH : ItemDoc1 {}; + class KitVehicleUpgradeI_200_EPOCH : ItemDoc1 {}; + class KitVehicleUpgradeI_300_EPOCH : ItemDoc1 {}; + class KitVehicleUpgradeII_100_EPOCH : ItemDoc1 {}; + class KitVehicleUpgradeII_200_EPOCH : ItemDoc1 {}; + class KitVehicleUpgradeII_300_EPOCH : ItemDoc1 {}; + class KitVehicleUpgradeIII_100_EPOCH : ItemDoc1 {}; + class KitVehicleUpgradeIII_200_EPOCH : ItemDoc1 {}; + class KitVehicleUpgradeIII_300_EPOCH : ItemDoc1 {}; + class KitVehicleUpgradeIV_100_EPOCH : ItemDoc1 {}; + class KitVehicleUpgradeIV_200_EPOCH : ItemDoc1 {}; + class KitVehicleUpgradeIV_300_EPOCH : ItemDoc1 {}; + class ItemBulb : Default {}; + class ItemBurlap : Default {}; + class ItemBriefcaseE : Default {}; + class ItemBriefcaseGold100oz : Default {}; + class ItemBriefcaseSilver100oz : Default {}; + class ItemAluminumBar : Default {}; + class ItemAluminumBar10oz : Default {}; + class ItemCopperBar : Default {}; + class ItemCopperBar10oz : Default {}; + class ItemTinBar : Default {}; + class ItemTinBar10oz : Default {}; + class ItemPlywoodPack : Default {}; + class ItemComboLock : Default {}; + class CircuitParts : Default {}; + class Pelt_EPOCH : Default {}; + class ItemPipe : Default {}; + class ItemEmptyTin : Default {}; + class ItemSodaEmpty : Default {}; + class emptyjar_epoch : Default {}; + class PartPlankPack : Default {}; + class CinderBlocks : Default {}; + class MortarBucket : Default {}; + class ItemKiloHemp : Default {}; + class ItemTopaz : Default {}; + class ItemOnyx : Default {}; + class ItemSapphire : Default {}; + class ItemAmethyst : Default {}; + class ItemEmerald : Default {}; + class ItemCitrine : Default {}; + class ItemRuby : Default {}; + class ItemQuartz : Default {}; + class ItemJade : Default {}; + class ItemGarnet : Default {}; + class ItemMixOil : Default {}; + class ItemDocument : Default {}; + class ItemDocumentMission : Default {}; + class ItemSilverBar : Default {}; + class ItemSilverBar10oz : Default {}; + class ItemGoldBar : Default {}; + class ItemGoldBar10oz : Default {}; + class ItemRock : Default {}; + class ItemStick : Default {}; + class ItemRope : Default {}; + class PartOre : Default {}; + class PartOreSilver : Default {}; + class PartOreGold : Default {}; + class ItemPacked : Default {}; + class ItemSolar : Default {}; + class ItemCables : Default {}; + class ItemBattery : Default {}; + class ItemScraps : Default {}; + class ItemCorrugated : Default {}; + class ItemCorrugatedLg : Default {}; + class 5Rnd_rollins_mag : Default {}; + class CSGAS : Default {}; + class sledge_swing : Default {}; + class stick_swing : Default {}; + class hatchet_swing : Default {}; + class WoodLog_EPOCH : Default {}; + class ItemCoolerE : Default {}; + class Item_AssaultPack_cbr : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_cbr"; + }; + class Item_AssaultPack_dgtl : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_dgtl"; + }; + class Item_AssaultPack_khk : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_khk"; + }; + class Item_AssaultPack_mcamo : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_mcamo"; + }; + class Item_AssaultPack_ocamo : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_ocamo"; + }; + class Item_AssaultPack_rgr : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_rgr"; + }; + class Item_AssaultPack_sgg : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_sgg"; + }; + class Item_AssaultPack_blk : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_blk"; + }; + class Item_Carryall_cbr : Item_Packed_base + { + interactReturnOnUse = "B_Carryall_cbr"; + }; + class Item_Carryall_khk : Item_Packed_base + { + interactReturnOnUse = "B_Carryall_khk"; + }; + class Item_Carryall_mcamo : Item_Packed_base + { + interactReturnOnUse = "B_Carryall_mcamo"; + }; + class Item_Carryall_ocamo : Item_Packed_base + { + interactReturnOnUse = "B_Carryall_ocamo"; + }; + class Item_Carryall_oli : Item_Packed_base + { + interactReturnOnUse = "B_Carryall_oli"; + }; + class Item_Carryall_oucamo : Item_Packed_base + { + interactReturnOnUse = "B_Carryall_oucamo"; + }; + class Item_FieldPack_blk : Item_Packed_base + { + interactReturnOnUse = "B_FieldPack_blk"; + }; + class Item_FieldPack_cbr : Item_Packed_base + { + interactReturnOnUse = "B_FieldPack_cbr"; + }; + class Item_FieldPack_khk : Item_Packed_base + { + interactReturnOnUse = "B_FieldPack_khk"; + }; + class Item_FieldPack_ocamo : Item_Packed_base + { + interactReturnOnUse = "B_FieldPack_ocamo"; + }; + class Item_FieldPack_oli : Item_Packed_base + { + interactReturnOnUse = "B_FieldPack_oli"; + }; + class Item_FieldPack_oucamo : Item_Packed_base + { + interactReturnOnUse = "B_FieldPack_oucamo"; + }; + class Item_Kitbag_cbr : Item_Packed_base + { + interactReturnOnUse = "B_Kitbag_cbr"; + }; + class Item_Kitbag_mcamo : Item_Packed_base + { + interactReturnOnUse = "B_Kitbag_mcamo"; + }; + class Item_Kitbag_rgr : Item_Packed_base + { + interactReturnOnUse = "B_Kitbag_rgr"; + }; + class Item_Kitbag_sgg : Item_Packed_base + { + interactReturnOnUse = "B_Kitbag_sgg"; + }; + class Item_TacticalPack_blk : Item_Packed_base + { + interactReturnOnUse = "B_TacticalPack_blk"; + }; + class Item_TacticalPack_mcamo : Item_Packed_base + { + interactReturnOnUse = "B_TacticalPack_mcamo"; + }; + class Item_TacticalPack_ocamo : Item_Packed_base + { + interactReturnOnUse = "B_TacticalPack_ocamo"; + }; + class Item_TacticalPack_oli : Item_Packed_base + { + interactReturnOnUse = "B_TacticalPack_oli"; + }; + class Item_TacticalPack_rgr : Item_Packed_base + { + interactReturnOnUse = "B_TacticalPack_rgr"; + }; + class Item_smallbackpack_red : Item_Packed_base + { + interactReturnOnUse = "smallbackpack_red_epoch"; + }; + class Item_smallbackpack_green : Item_Packed_base + { + interactReturnOnUse = "smallbackpack_green_epoch"; + }; + class Item_smallbackpack_teal : Item_Packed_base + { + interactReturnOnUse = "smallbackpack_teal_epoch"; + }; + class Item_smallbackpack_pink : Item_Packed_base + { + interactReturnOnUse = "smallbackpack_pink_epoch"; + }; + class ItemCanvas : Default {}; + class ItemSeedBag : Default {}; + class SeedPacket_GoldenSeal : Food_base { + interactAttributes[] = {{"Toxicity",-1}}; + interactReturnOnUse = "ItemSeedBag"; + }; + class SeedPacket_Hemp : Food_base { + interactAttributes[] = {{"Immunity",1},{"Stamina",30},{"Hunger",100}}; + interactReturnOnUse = "ItemSeedBag"; + }; + class SeedPacket_Poppy : Food_base { + interactAttributes[] = {{"Immunity",1},{"Stamina",30},{"Hunger",50}}; + interactReturnOnUse = "ItemSeedBag"; + }; + class SeedPacket_Pumpkin : Food_base { + interactAttributes[] = {{"Immunity",1},{"Stamina",30},{"Hunger",100}}; + interactReturnOnUse = "ItemSeedBag"; + }; + class SeedPacket_Sunflower : Food_base { + interactAttributes[] = {{"Immunity",1},{"Toxicity",-2},{"Stamina",30},{"Hunger",100}}; + interactReturnOnUse = "ItemSeedBag"; + }; + class ItemBakedBeans : Food_TinCan_base + { + interactAttributes[] = {{"Hunger",800},{"Radiation",2,1}}; + }; + class gyro_wrap_epoch : Food_base + { + interactAttributes[] = {{"Hunger",600}}; + }; + class icecream_epoch : Food_base + { + interactAttributes[] = {{"Hunger",200},{"Stamina",20}}; + }; + class redburger_epoch : Food_base + { + interactAttributes[] = {{"Hunger",600}}; + }; + class bluburger_epoch : Food_base + { + interactAttributes[] = {{"Hunger",600}}; + }; + class krypto_candy_epoch : Food_base + { + interactAttributes[] = {{"Hunger",500},{"Stamina",50}}; + }; + class ItemBottlePlastic_Clean : Drink_base + { + interactAttributes[] = {{"Thirst",500},{"Stamina",50}}; + interactReturnOnUse = "ItemBottlePlastic_Empty"; + }; + class ItemCanteen_Clean : Drink_base + { + interactAttributes[] = {{"Thirst",1000},{"Stamina",100}}; + interactReturnOnUse = "ItemCanteen_Empty"; + }; + class ItemBottlePlastic_Dirty: Drink_base + { + interactAttributes[] = {{"Thirst",500},{"Toxicity",5,1},{"Stamina",50},{"Radiation",2,1}}; + interactReturnOnUse = "ItemBottlePlastic_Empty"; + }; + + class ItemCanteen_Dirty : Drink_base + { + interactAttributes[] = {{"Thirst",1000},{"Toxicity",10,1},{"Stamina",100},{"Radiation",4,1}}; + interactReturnOnUse = "ItemCanteen_Empty"; + }; + class adrenaline_epoch : Drink_base + { + interactText = "USE"; // todo digest system to give attributes over time + interactAttributes[] = {{"Thirst",-50},{"Stamina",120},{"BloodP",20},{"Toxicity",5}}; + }; + class atropine_epoch : Drink_base + { + interactText = "USE"; // todo digest system to give attributes over time + interactAttributes[] = {{"Thirst",-50},{"Stamina",-20},{"Toxicity",-5},{"Immunity",-1}}; + }; + class morphine_epoch : Default + { + interactAction = 16; // currently heals most damaged hitpoint first on self and gives attributes + interactText = "USE"; + interactAttributes[] = {{"Thirst",-20},{"Stamina",-50},{"Toxicity",5},{"BloodP",5}}; + }; + class caffeinepills_epoch : Food_base + { + // todo digest system to give attributes over time (some type of boost system is needed as well as new action to feed it) + interactAttributes[] = {{"Thirst",-20},{"Stamina",50},{"Toxicity",1}}; + }; + class orlistat_epoch : Food_base + { + // todo should reduce hunger downtick for a duration, if too much is taken causes bowel issues? + interactAttributes[] = {{"Thirst",-20},{"Hunger",25},{"BloodP",-1}}; + }; + class nanite_cream_epoch : Food_base + { + interactText = "USE"; + interactAttributes[] = {{"Radiation",-25},{"Soiled",20},{"Toxicity",5},{"Immunity",5}}; + }; + class nanite_gun_epoch : Food_base + { + interactText = "USE"; + interactAttributes[] = {{"Radiation",-100},{"Toxicity",5},{"Immunity",5}}; + }; + class nanite_pills_epoch : Food_base + { + interactText = "USE"; + interactAttributes[] = {{"Radiation",-10},{"Thirst",-50},{"Toxicity",5},{"Immunity",5}}; + }; + class iodide_pills_epoch : Food_base + { + interactText = "USE"; + interactAttributes[] = {{"Radiation",-15},{"Thirst",-50},{"Immunity",5}}; + }; + class ItemDefibrillator : Default + { + interactAction = 17; + interactText = "ReCharge"; + }; + class BaseCamTerminal : Item_Build_base + { + buildClass = "BaseCamTerminal_EPOCH"; + interactActions[] = {{"Watch","call Epoch_CamUse;"}}; + }; + class KitSnowman : Item_Build_base + { + buildClass = "snowman_EPOCH"; + }; + class KitPlyThirdWall_EPOCH : Item_Build_base + { + buildClass = "PlyThirdWall_EPOCH"; + }; +}; +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgItemSort.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgItemSort.hpp new file mode 100644 index 0000000..4c432d6 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgItemSort.hpp @@ -0,0 +1,1592 @@ +// File created by Ignatz - He-Man + +class CfgItemSort +{ + class MainCategories + { + classes[] = { + {0,"All",{}}, + {1,"Clothings / Backpacks",{"Uniforms","Vests","HeadGear","Backpacks"}}, + {2,"Weapons",{"Weapons","Handweapons"}}, + {3,"Magazines / Attachments",{"Magazines","Attachments"}}, + {4,"Equipment / Explosives",{"Equipment","Explosive","Hand"}}, + {5,"Medical / Food",{"Medical","Food","Drink"}}, + {6,"Items / Basebuilding",{"Basebuilding","Items"}}, + {7,"Vehicles",{"Vehicles_Land","Vehicles_Air","Vehicles_Ship"}} + }; + }; + class SubCatergories + { + Uniforms[] = { + "U_JeansPatched1_uniform", + "U_JeansPatched2_uniform", + "U_JeansPatched3_uniform", + "U_JeansPatched4_uniform", + "U_JeansPatched5_uniform", + "U_JeansPatched6_uniform", + "U_JeansPatched7_uniform", + "U_JeansPatched8_uniform", + "U_JeansPatched9_uniform", + "U_JeansPatched10_uniform", + "U_JeansPatched11_uniform", + "U_JeansPatched12_uniform", + "U_JeansPatched13_uniform", + "U_JeansPatched14_uniform", + "U_JeansPatched15_uniform", + "U_JeansPatched16_uniform", + "U_JeansPatched17_uniform", + "U_JeansPatched18_uniform", + "U_JeansPatched19_uniform", + "U_JeansPatched20_uniform", + "U_JeansPatched21_uniform", + "U_JeansBlkBrn1_uniform", + "U_JeansBlkBrn2_uniform", + "U_JeansBlkBrn3_uniform", + "U_JeansBlkBrn4_uniform", + "U_JeansBlkBrn5_uniform", + "U_JeansBlkBrn6_uniform", + "U_JeansBlkBrn7_uniform", + "U_JeansBlkBrn8_uniform", + "U_JeansBlkBrn9_uniform", + "U_JeansBlkBrn10_uniform", + "U_JeansBlkBrn11_uniform", + "U_JeansBlkBrn12_uniform", + "U_JeansBlkBrn13_uniform", + "U_JeansBlkBrn14_uniform", + "U_JeansBlkBrn15_uniform", + "U_JeansBlkBrn16_uniform", + "U_JeansBlkBrn17_uniform", + "U_JeansBlkBrn18_uniform", + "U_JeansBlkBrn19_uniform", + "U_JeansBlkBrn20_uniform", + "U_JeansBlkBrn21_uniform", + "U_JeansArBrn1_uniform", + "U_JeansArBrn2_uniform", + "U_JeansArBrn3_uniform", + "U_JeansArBrn4_uniform", + "U_JeansArBrn5_uniform", + "U_JeansArBrn6_uniform", + "U_JeansArBrn7_uniform", + "U_JeansArBrn8_uniform", + "U_JeansArBrn9_uniform", + "U_JeansArBrn10_uniform", + "U_JeansArBrn11_uniform", + "U_JeansArBrn12_uniform", + "U_JeansArBrn13_uniform", + "U_JeansArBrn14_uniform", + "U_JeansArBrn15_uniform", + "U_JeansArBrn16_uniform", + "U_JeansArBrn17_uniform", + "U_JeansArBrn18_uniform", + "U_JeansArBrn19_uniform", + "U_JeansArBrn20_uniform", + "U_JeansArBrn21_uniform", + "U_JeansBlack1_uniform", + "U_JeansBlack2_uniform", + "U_JeansBlack3_uniform", + "U_JeansBlack4_uniform", + "U_JeansBlack5_uniform", + "U_JeansBlack6_uniform", + "U_JeansBlack7_uniform", + "U_JeansBlack8_uniform", + "U_JeansBlack9_uniform", + "U_JeansBlack10_uniform", + "U_JeansBlack11_uniform", + "U_JeansBlack12_uniform", + "U_JeansBlack13_uniform", + "U_JeansBlack14_uniform", + "U_JeansBlack15_uniform", + "U_JeansBlack16_uniform", + "U_JeansBlack17_uniform", + "U_JeansBlack18_uniform", + "U_JeansBlack19_uniform", + "U_JeansBlack20_uniform", + "U_JeansBlack21_uniform", + + "U_O_CombatUniform_ocamo", + "U_O_GhillieSuit", + "U_O_PilotCoveralls", + "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_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_Camo_uniform", + "U_ghillie1_uniform", + "U_ghillie2_uniform", + "U_ghillie3_uniform", + "U_CamoBlue_uniform", + "U_CamoBrn_uniform", + "U_CamoRed_uniform", + "U_CamoAloha_uniform", + "U_CamoBiker_uniform", + "U_CamoBubblegum_uniform", + "U_CamoLumberjack_uniform", + "U_CamoOutback_uniform", + "U_CamoPink_uniform", + "U_CamoPinkPolka_uniform", + + "U_C_Driver_1", + "U_C_Driver_2", + "U_C_Driver_3", + "U_C_Driver_4", + "U_C_Driver_1_black", + "U_C_Driver_1_blue", + "U_C_Driver_1_green", + "U_C_Driver_1_red", + "U_C_Driver_1_white", + "U_C_Driver_1_yellow", + "U_C_Driver_1_orange", + + // Apex + "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", + + // Marksman Clothing + "U_O_FullGhillie_lsh", + "U_O_FullGhillie_sard", + "U_O_FullGhillie_ard", + + // Radiation Suits + "U_RadiationSuit_M_uniform", + "U_RadiationSuit_F_uniform", + + // CIV + "U_I_OfficerUniform", + "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_C_IDAP_Man_shorts_F", + "U_C_IDAP_Man_casual_F", + "U_C_IDAP_Man_cargo_F", + "U_C_IDAP_Man_Tee_F", + "U_C_IDAP_Man_Jeans_F", + "U_C_IDAP_Man_TeeShorts_F", + "U_C_ConstructionCoverall_Red_F", + "U_C_ConstructionCoverall_Vrana_F", + "U_C_ConstructionCoverall_Black_F", + "U_C_ConstructionCoverall_Blue_F", + "U_I_CombatUniform", + "U_I_CombatUniform_shortsleeve", + "U_I_pilotCoveralls", + "U_I_HeliPilotCoveralls", + "U_I_Wetsuit" + }; + + 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", + + // CIV + "V_Press_F", + + // Vests Apex + "V_PlateCarrier1_tna_F", + "V_TacChestrig_grn_F", + "V_TacChestrig_oli_F", + "V_TacChestrig_cbr_F", + "V_PlateCarrierSpec_tna_F", + "V_PlateCarrierSpec_mtp", + "V_PlateCarrierSpec_blk", + "V_HarnessO_ghex_F", + "V_HarnessOGL_ghex_F", + "V_PlateCarroer2_tna_F", + "V_PlateCarrierGL_tna_F", + "V_PlateCarrier2_blk" + }; + + Backpacks[] = { + "B_AssaultPack_blk", + "B_AssaultPack_cbr", + "B_AssaultPack_dgtl", + "B_AssaultPack_khk", + "B_AssaultPack_mcamo", + "B_AssaultPack_ocamo", + "B_AssaultPack_rgr", + "B_AssaultPack_sgg", + "B_Carryall_cbr", + "B_Carryall_khk", + "B_Carryall_mcamo", + "B_Carryall_ocamo", + "B_Carryall_oli", + "B_Carryall_oucamo", + "B_FieldPack_blk", + "B_FieldPack_cbr", + "B_FieldPack_khk", + "B_FieldPack_ocamo", + "B_FieldPack_oli", + "B_FieldPack_oucamo", + "B_Kitbag_cbr", + "B_Kitbag_mcamo", + "B_Kitbag_rgr", + "B_Kitbag_sgg", + "B_Parachute", + "B_TacticalPack_blk", + "B_TacticalPack_mcamo", + "B_TacticalPack_ocamo", + "B_TacticalPack_oli", + "B_TacticalPack_rgr", + "smallbackpack_red_epoch", + "smallbackpack_green_epoch", + "smallbackpack_teal_epoch", + "smallbackpack_pink_epoch", + + // Backpacks Apex + "B_Bergen_tna_F", + "B_AssaultPack_tna_F", + "B_ViperHarness_ghex_F", + "B_ViperHarness_blk_F", + "B_ViperHarness_hex_F", + "B_ViperHarness_khk_F", + "B_ViperHarness_oli_F", + "B_ViperLightHarness_oli_F", + "B_ViperLightHarness_khk_F", + "B_ViperLightHarness_hex_F", + "B_ViperLightHarness_ghex_F", + "B_ViperLightHarness_blk_F", + "B_Carryall_ghex_F", + "B_FieldPack_ghex_F", + + // A2 Backpacks + "Assault_Pack_Epoch", + "Patrol_Pack_Epoch", + "TK_RPG_Backpack_Epoch", + "CZ_VestPouch_Epoch", + "civil_assault_pack_Epoch", + "S_Gunbag_Epoch", + "ALICE_Pack_Epoch", + "US_Backpack_Epoch", + "CZ_Backpack_Epoch", + "L_Gunbag_Epoch", + + "I_UAV_01_backpack_F", + "C_IDAP_UAV_06_backpack_F", + "C_IDAP_UAV_06_antimine_backpack_F", + "B_UAV_06_medical_backpack_F" + }; + + 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", + "H_F0_EPOCH", + "H_F1_EPOCH", + "H_F2_EPOCH", + "H_F3_EPOCH", + "H_F4_EPOCH", + "H_F5_EPOCH", + "thor_mask_epoch", + "iron_mask_epoch", + "wolf_mask_epoch", + "pkin_mask_epoch", + "clown_mask_epoch", + "hockey_mask_epoch", + "plague_mask_epoch", + "ghostface_mask_epoch", + "skull_mask_epoch", + "witch_mask_epoch", + "radiation_mask_epoch", + "H_Cap_surfer", + "H_ShemagOpen_khk", + + // Headgear Apex + "H_HelmetLeaderO_ghex_F", + "H_HelmetLeaderO_oucamo", + "H_HelmetLeaderO_ocamo", + "H_HelmetCrew_O_ghex_F", + "H_HelmetO_ghex_F", + "H_Helmet_Skate", + "H_HelmetB_TI_tna_F", + "H_HelmetB_tna_F", + "H_HelmetB_Enh_tna_F", + "H_MilCap_tna_F", + "H_MilCap_ghex_F", + "H_Booniehat_tna_F", + "H_HelmetB_Light_tna_F", + "H_HelmetSpecO_ocamo", + "H_HelmetSpecO_blk", + "H_HelmetO_oucamo", + "H_HelmetO_ocamo" + }; + + Equipment[] = { + "Rangefinder", + "Laserdesignator", + "ItemCompass", + "ItemGPS", + "ItemLaptop", + "ItemLaptop_wpn", + "ItemGeigerCounter_EPOCH", + "ItemWatch", + "NVG_EPOCH", + "Binocular", + "EpochRadio0", + "EpochRadio1", + "EpochRadio2", + "EpochRadio3", + "EpochRadio4", + "EpochRadio5", + "EpochRadio6", + "EpochRadio7", + "EpochRadio8", + "EpochRadio9", + "B_UavTerminal", + "O_UavTerminal" + }; + + Weapons[] = { + "MultiGun", + + "hgun_ACPC2_F", + "hgun_Rook40_F", + "hgun_P07_F", + "hgun_Pistol_heavy_01_F", + "hgun_Pistol_heavy_02_F", + "ruger_pistol_epoch", + "1911_pistol_epoch", + "hgun_Pistol_Signal_F", + + "pvcrifle_01_F", + "nl_Shotgun", + "nl_auto_xbow", + "hgun_Pistol_tranq_01", + + // light Rifle + "l85a2_epoch", + "l85a2_pink_epoch", + "l85a2_ugl_epoch", + "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", + "SMG_01_F", + "SMG_02_F", + "SMG_03_TR_black", + "SMG_03_TR_camo", + "SMG_03_TR_khaki", + "SMG_03_TR_hex", + "SMG_03C_TR_black", + "SMG_03C_TR_camo", + "SMG_03C_TR_khaki", + "SMG_03C_TR_hex", + "SMG_03_black", + "SMG_03_camo", + "SMG_03_khaki", + "SMG_03_hex", + "SMG_03C_black", + "SMG_03C_camo", + "SMG_03C_khaki", + "SMG_03C_hex", + "hgun_PDW2000_F", + "arifle_MXM_Black_F", + "arifle_MX_GL_Black_F", + "arifle_MX_Black_F", + "arifle_MXC_Black_F", + "Rollins_F", + "m16_EPOCH", + "m16Red_EPOCH", + "m4a3_EPOCH", + + // Apex + "SMG_05_F", + + // mid Rifle + "sr25_epoch", + "srifle_EBR_F", + "srifle_DMR_01_F", + "M14_EPOCH", + "M14Grn_EPOCH", + "AKM_EPOCH", + + // A2 Weapons + "a2_ak47s_gold_EPOCH", + "a2_AK107_EPOCH", + "a2_bizon_epoch", + "a2_dmr_epoch", + "a2_dmr_epoch_scoped", + "a2_fnfal_epoch", + "a2_G36_C_epoch", + "a2_Mg36_epoch", + "a2_leeenfield_epoch", + "a2_m110_epoch", + "a2_mk16_epoch", + "a2_mk17_epoch", + "a2_svd_epoch", + "a2_VSS_vintorez_epoch", + "a2_aks74un_EPOCH", + + // Apex + "arifle_AK12_F", + "arifle_MX_khk_F", + "arifle_MX_GL_khk_F", + "arifle_MXC_khk_F", + "arifle_MXM_khk_F", + "arifle_AK12_GL_F", + "arifle_AKM_F", + "arifle_AKS_F", + "arifle_ARX_blk_F", + "arifle_ARX_hex_F", + "arifle_CTAR_blk_F", + "arifle_CTAR_GL_blk_F", + "arifle_SPAR_01_blk_F", + "arifle_SPAR_01_snd_F", + "arifle_SPAR_01_khk_F", + "arifle_SPAR_01_GL_khk_F", + "arifle_SPAR_01_GL_blk_F", + "arifle_SPAR_01_GL_snd_F", + "arifle_SPAR_02_blk_F", + "arifle_SPAR_02_snd_F", + "arifle_SPAR_02_khk_F", + "arifle_SPAR_03_khk_F", + "arifle_SPAR_03_blk_F", + "arifle_SPAR_03_snd_F", + + // heavy Rifle + "srifle_GM6_F", + "srifle_LRR_F", + "m107Tan_EPOCH", + "m107_EPOCH", + // Apex + "srifle_GM6_ghex_F", + "srifle_LRR_tna_F", + "srifle_DMR_07_blk_F", + "srifle_DMR_07_hex_F", + "srifle_DMR_07_ghex_F", + + // light Mashinegun + "m249_EPOCH", + "m249Tan_EPOCH", + "LMG_Mk200_F", + "arifle_MX_SW_F", + "arifle_MX_SW_Black_F", + + // mid Machinegun + "LMG_Zafir_F", + + // Apex + "LMG_03_F", + + "arifle_CTARS_blk_F", + "arifle_CTARS_hex_F", + // Launcher + "launch_I_Titan_F", + "launch_B_Titan_short_F", + "Titan_AT", + "Titan_AA", + + // Marksman rifles + "srifle_DMR_02_F", + "srifle_DMR_02_camo_F", + "srifle_DMR_02_sniper_F", + "srifle_DMR_03_F", + "srifle_DMR_03_khaki_F", + "srifle_DMR_03_tan_F", + "srifle_DMR_03_multicam_F", + "srifle_DMR_03_woodland_F", + "srifle_DMR_03_spotter_F", + "srifle_DMR_06_camo_F", + "srifle_DMR_06_olive_F", + "srifle_DMR_04_Tan_F", + "srifle_DMR_04_F", + "srifle_DMR_05_blk_F", + "srifle_DMR_05_hex_F", + "srifle_DMR_05_tan_f", + + // Marksman machine guns + "MMG_01_hex_F", + "MMG_01_tan_F", + "MMG_02_camo_F", + "MMG_02_black_F", + "MMG_02_sand_F", + + // Handweapons + "Hatchet", + "MeleeSledge", + "CrudeHatchet", + "MeleeMaul", + "WoodClub", + "Plunger", + "MeleeSword", + "Power_Sword", + "MeleeRod", + "speargun_epoch", + "ChainSaw" + }; + + Magazines[] = { + "spear_magazine", + + // Handgun Mags + "16Rnd_9x21_Mag", + "30Rnd_9x21_Mag", + "9Rnd_45ACP_Mag", + "11Rnd_45ACP_Mag", + "6Rnd_45ACP_Cylinder", + "10rnd_22X44_magazine", + "9rnd_45X88_magazine", + "6Rnd_GreenSignal_F", + "6Rnd_RedSignal_F", + "6Rnd_BlueSignal_F", + "6Rnd_PurpleSignal_F", + "6Rnd_OrangeSignal_F", + + "NL_pvc_bb_mag", + "NL_shot_bb_mag", + "xbow_mag_bolt", + "xbow_mag_tranq", + "xbow_mag_exp", + "tranq_dart_mag", + + // light Mags + "30Rnd_65x39_caseless_green", + "30Rnd_65x39_caseless_green_mag_Tracer", + "30Rnd_65x39_caseless_mag", + "30Rnd_65x39_caseless_mag_Tracer", + "20Rnd_556x45_UW_mag", + "30Rnd_556x45_Stanag", + "30Rnd_556x45_Stanag_Tracer_Red", + "30Rnd_556x45_Stanag_Tracer_Green", + "30Rnd_556x45_Stanag_Tracer_Yellow", + "30Rnd_45ACP_Mag_SMG_01", + "30Rnd_45ACP_Mag_SMG_01_Tracer_Green", + "5Rnd_rollins_mag", + "30rnd_556_magazine", + "50Rnd_570x28_SMG_03", + // mid Mags + "20Rnd_762x51_Mag", + "10Rnd_762x54_Mag", + "20rnd_762_magazine", + "30Rnd_762x39_Mag", + + // A2 Mags + "Bizon_64Rnd_9x18", + "20Rnd_762x51_DMR", + "20Rnd_762x51_FNFAL", + "30Rnd_556x45_G36", + "10Rnd_303", + "100Rnd_556x45_BetaCMag", + "10Rnd_762x54_SVD", + "10Rnd_9x39_SP5_VSS", + + // Apex + "30Rnd_762x39_Mag_F", + "30Rnd_762x39_Mag_Green_F", + "30Rnd_762x39_Mag_Tracer_F", + "30Rnd_580x42_Mag_F", + "30Rnd_580x42_Mag_Tracer_F", + "20Rnd_650x39_Cased_Mag_F", + + // heavy Mags + "10Rnd_127x54_Mag", + "5Rnd_127x108_Mag", + "5Rnd_127x108_APDS_Mag", + "7Rnd_408_Mag", + + // Apex + "10Rnd_50BW_Mag_F", + + // light Mashinegun Mags + "200Rnd_65x39_cased_Box", + "100Rnd_65x39_caseless_mag", + "200Rnd_65x39_cased_Box_Tracer", + "100Rnd_65x39_caseless_mag_Tracer", + "200Rnd_556x45_M249", + + // mid Mashinegun Mags + "150Rnd_762x54_Box", + "150Rnd_762x54_Box_Tracer", + + // Apex Mags + "30Rnd_545x39_Mag_F", + "30Rnd_545x39_Mag_Green_F", + "30Rnd_545x39_Mag_Tracer_F", + "30Rnd_545x39_Mag_Tracer_Green_F", + "100Rnd_580x42_Mag_F", + "100Rnd_580x42_Mag_Tracer_F", + "150Rnd_556x45_Drum_Mag_F", + "150Rnd_556x45_Drum_Mag_Tracer_F", + "200Rnd_556x45_Box_F", + "200Rnd_556x45_Box_Red_F", + + // Marksman Mags + "10Rnd_338_Mag", + "10Rnd_93x64_DMR_05_Mag", + "130Rnd_338_Mag", + "150Rnd_93x64_Mag", + + // GL + "3Rnd_HE_Grenade_shell", + "1Rnd_HE_Grenade_shell", + "UGL_FlareWhite_F", + "UGL_FlareGreen_F", + "UGL_FlareRed_F", + "UGL_FlareYellow_F", + "UGL_FlareCIR_F", + "1Rnd_Smoke_Grenade_shell", + "1Rnd_SmokeRed_Grenade_shell", + "1Rnd_SmokeGreen_Grenade_shell", + "1Rnd_SmokeYellow_Grenade_shell", + "1Rnd_SmokePurple_Grenade_shell", + "1Rnd_SmokeBlue_Grenade_shell", + "1Rnd_SmokeOrange_Grenade_shell", + "3Rnd_UGL_FlareWhite_F", + "3Rnd_UGL_FlareGreen_F", + "3Rnd_UGL_FlareRed_F", + "3Rnd_UGL_FlareYellow_F", + "3Rnd_UGL_FlareCIR_F", + "3Rnd_Smoke_Grenade_shell", + "3Rnd_SmokeRed_Grenade_shell", + "3Rnd_SmokeGreen_Grenade_shell", + "3Rnd_SmokeYellow_Grenade_shell", + "3Rnd_SmokePurple_Grenade_shell", + "3Rnd_SmokeBlue_Grenade_shell", + "3Rnd_SmokeOrange_Grenade_shell", + + // Vehicle Mags + "500Rnd_127x99_mag", + "500Rnd_127x99_mag_Tracer_Red", + "500Rnd_127x99_mag_Tracer_Green", + "500Rnd_127x99_mag_Tracer_Yellow", + "200Rnd_127x99_mag", + "200Rnd_127x99_mag_Tracer_Red", + "200Rnd_127x99_mag_Tracer_Green", + "200Rnd_127x99_mag_Tracer_Yellow", + "100Rnd_127x99_mag", + "100Rnd_127x99_mag_Tracer_Red", + "100Rnd_127x99_mag_Tracer_Green", + "100Rnd_127x99_mag_Tracer_Yellow", + "2000Rnd_762x51_Belt", + "200Rnd_40mm_G_belt", + "32Rnd_40mm_G_belt", + "64Rnd_40mm_G_belt", + "96Rnd_40mm_G_belt", + "200Rnd_20mm_G_belt", + "40Rnd_20mm_G_belt", + "60Rnd_CMFlare_Chaff_Magazine", + "120Rnd_CMFlare_Chaff_Magazine", + "240Rnd_CMFlare_Chaff_Magazine", + "192Rnd_CMFlare_Chaff_Magazine", + "168Rnd_CMFlare_Chaff_Magazine", + "300Rnd_CMFlare_Chaff_Magazine", + "SmokeLauncherMag", + "SmokeLauncherMag_boat", + "200Rnd_65x39_Belt", + "200Rnd_65x39_Belt_Tracer_Red", + "200Rnd_65x39_Belt_Tracer_Green", + "200Rnd_65x39_Belt_Tracer_Yellow", + "1000Rnd_65x39_Belt", + "1000Rnd_65x39_Belt_Tracer_Red", + "1000Rnd_65x39_Belt_Green", + "1000Rnd_65x39_Belt_Tracer_Green", + "1000Rnd_65x39_Belt_Yellow", + "1000Rnd_65x39_Belt_Tracer_Yellow", + "2000Rnd_65x39_Belt", + "2000Rnd_65x39_Belt_Tracer_Red", + "2000Rnd_65x39_Belt_Green", + "2000Rnd_65x39_Belt_Tracer_Green", + "2000Rnd_65x39_Belt_Tracer_Green_Splash", + "2000Rnd_65x39_Belt_Yellow", + "2000Rnd_65x39_Belt_Tracer_Yellow", + "2000Rnd_65x39_Belt_Tracer_Yellow_Splash", + "8Rnd_82mm_Mo_shells", + "8Rnd_82mm_Mo_Flare_white", + "8Rnd_82mm_Mo_Smoke_white", + "8Rnd_82mm_Mo_guided", + "8Rnd_82mm_Mo_LG", + "24Rnd_PG_missiles", + "12Rnd_PG_missiles", + "24Rnd_missiles", + "12Rnd_missiles", + "60Rnd_40mm_GPR_shells", + "60Rnd_40mm_GPR_Tracer_Red_shells", + "60Rnd_40mm_GPR_Tracer_Green_shells", + "60Rnd_40mm_GPR_Tracer_Yellow_shells", + "40Rnd_40mm_APFSDS_shells", + "40Rnd_40mm_APFSDS_Tracer_Red_shells", + "40Rnd_40mm_APFSDS_Tracer_Green_shells", + "40Rnd_40mm_APFSDS_Tracer_Yellow_shells", + "140Rnd_30mm_MP_shells", + "140Rnd_30mm_MP_shells_Tracer_Red", + "140Rnd_30mm_MP_shells_Tracer_Green", + "140Rnd_30mm_MP_shells_Tracer_Yellow", + "60Rnd_30mm_APFSDS_shells", + "60Rnd_30mm_APFSDS_shells_Tracer_Red", + "60Rnd_30mm_APFSDS_shells_Tracer_Green", + "60Rnd_30mm_APFSDS_shells_Tracer_Yellow" + }; + + Attachments[] = { + // Multigun + "Heal_EPOCH", + "Defib_EPOCH", + "Repair_EPOCH", + + // Optics Light + "optic_Aco", + "optic_ACO_grn", + "optic_Aco_smg", + "optic_ACO_grn_smg", + "optic_Holosight", + "optic_Holosight_smg", + "optic_Yorris", + "optic_MRD", + + // Optics Mid + "optic_Arco", + "optic_Hamr", + "optic_MRCO", + "optic_NVS", + "Elcan_epoch", + "Elcan_reflex_epoch", + + // Optics Heavy + "optic_LRPS", + "optic_SOS", + "optic_DMS", + "optic_Nightstalker", + "optic_tws", + "optic_tws_mg", + + // Optics Marksman + "optic_AMS", + "optic_AMS_khk", + "optic_AMS_snd", + "optic_KHS_blk", + "optic_KHS_hex", + "optic_KHS_old", + "optic_KHS_tan", + + // Optics_Apex + "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_ARCO_ghex_F", + "optic_Hamr_khk_F", + "optic_Holosight_khk_F", + "optic_DMS_ghex_F", + + "acc_flashlight", + "acc_flashlight_pistol", + "acc_pointer_IR", + + // Bipods Marksman + "bipod_01_F_snd", + "bipod_01_F_blk", + "bipod_01_F_mtp", + "bipod_02_F_blk", + "bipod_02_F_tan", + "bipod_02_F_hex", + "bipod_03_F_blk", + "bipod_03_F_oli", + + // Bipods Apex + "bipod_01_F_khk", + + // Muzzles + "muzzle_snds_H", + "muzzle_snds_L", + "muzzle_snds_M", + "muzzle_snds_B", + "muzzle_snds_H_MG", + "muzzle_snds_acp", + "muzzle_snds_570", + // Muzzles Marksman + "muzzle_snds_338_black", + "muzzle_snds_338_green", + "muzzle_snds_338_sand", + "muzzle_snds_93mmg", + "muzzle_snds_93mmg_tan", + "muzzle_sr25S_epoch", + + // Muzzles Apex + "muzzle_snds_58_blk_F", + "muzzle_snds_58_wdm_F", + "muzzle_snds_H_MG_khk_F", + "muzzle_snds_H_MG_blk_F", + "muzzle_snds_H_khk_F", + "muzzle_snds_H_snd_F", + "muzzle_snds_m_khk_F", + "muzzle_snds_m_snd_F", + "uzzle_snds_B_khk_F", + "muzzle_snds_B_snd_F", + "muzzle_snds_65_TI_ghex_F", + "muzzle_snds_65_TI_blk_F", + "muzzle_snds_65_TI_hex_F" + }; + + Explosive[] = { + "DemoCharge_Remote_Mag", + "SatchelCharge_Remote_Mag", + "ATMine_Range_Mag", + "ClaymoreDirectionalMine_Remote_Mag", + "APERSMine_Range_Mag", + "APERSBoundingMine_Range_Mag", + "SLAMDirectionalMine_Wire_Mag", + "APERSTripMine_Wire_Mag", + "BarrelBomb_EPOCH_Remote_Mag", + "BarrelBomb2_EPOCH_Remote_Mag" + }; + Hand[] = { + "SmokeShell", + "SmokeShellYellow", + "SmokeShellGreen", + "SmokeShellToxic", + "SmokeShellRed", + "SmokeShellPurple", + "SmokeShellOrange", + "SmokeShellBlue", + "Chemlight_green", + "Chemlight_red", + "Chemlight_yellow", + "Chemlight_blue" + }; + + Medical[] = { + "ItemDefibrillator", + "FAK", + "Soap_Epoch", + "Towelette", + "HeatPack", + "ColdPack", + "ItemVitamins", + "adrenaline_epoch", + "atropine_epoch", + "morphine_epoch", + "caffeinepills_epoch", + "orlistat_epoch", + "nanite_cream_epoch", + "nanite_gun_epoch", + "nanite_pills_epoch", + "iodide_pills_epoch", + "ItemWaterPurificationTablets", + + "ItemBloodbag_Full", + "ItemBloodbag_Empty", + "ItemAntibiotic" + }; + + Food[] = { + "ItemPowderMilk", + "ItemRicebox", + "ItemCereals", + "Pumpkin", + "FoodBioMeat", + "FoodMeeps", + "FoodSnooter", + "sardines_epoch", + "meatballs_epoch", + "scam_epoch", + "sweetcorn_epoch", + "CookedSheep_EPOCH", + "CookedGoat_EPOCH", + "SnakeMeat_EPOCH", + "CookedRabbit_EPOCH", + "CookedChicken_EPOCH", + "ItemTrout", + "ItemSeaBass", + "ItemTuna", + "ItemTroutCooked", + "ItemSeaBassCooked", + "ItemTunaCooked", + "honey_epoch", + "TacticalBacon", + "ChickenCarcass_EPOCH", + "GoatCarcass_EPOCH", + "RabbitCarcass_EPOCH", + "SheepCarcass_EPOCH", + "SnakeCarcass_EPOCH", + "ItemBakedBeans", + "krypto_candy_epoch", + "bluburger_epoch", + "redburger_epoch", + "gyro_wrap_epoch", + "icecream_epoch", + "HotAxeSauce_epoch", + "Hemp", + "Sunflower" + }; + + Drink[] = { + "water_epoch", + "clean_water_epoch", + "ItemCanteen_Empty", + "ItemCanteen_Dirty", + "ItemCanteen_Clean", + "ItemBottlePlastic_Empty", + "ItemBottlePlastic_Dirty", + "ItemBottlePlastic_Clean", + "WhiskeyNoodle", + "FoodWalkNSons", + "ItemSodaOrangeSherbet", + "ItemSodaPurple", + "ItemSodaMocha", + "ItemSodaBurst", + "ItemSodaRbull", + "ItemSodaAlpineDude" + }; + Basebuilding[] = { + "FieldToilet_EPOCH", + "KitSandbagWall", + "KitSandbagWallLong", + "KitBurnBarrel", + "KitLightPole", + "KitPortableLight_Single", + "KitPortableLight_Double", + "KitScaffolding", + "KitSink", + "KitWatchTower", + "KitSunShade", + "KitBagBunker", + "KitBarGate", + "KitWaterPump", + "KitBarbedWire", + "Kit_Garden", + "KitTentA", + "KitTentDome", + "CircuitParts", + "PartPlankPack", + "CinderBlocks", + "MortarBucket", + "ItemScraps", + "ItemCorrugated", + "ItemCorrugatedLg", + "KitStudWall", + "KitJailWall", + "KitPlyThirdWall_EPOCH", + "KitWoodFloor", + "KitWoodHalfFloor", + "KitWoodQuarterFloor", + "KitWoodStairs", + "KitWoodRamp", + "KitSnowman", + "KitFirePlace", + "KitTiPi", + "KitShelf", + "KitWoodFoundation", + "KitFoundation", + "KitPlotPole", + "KitPlotPole_M", + "KitPlotPole_L", + "KitPlotPole_XL", + "KitPlotPole_XXL", + "KitCinderWall", + "KitSolarGen", + "KitSolarCharger", + "KitSolarChargerXL", + "BaseCam", + "BaseCamTerminal", + "KitWorkbench", + "KitWoodLadder", + "KitWoodTower", + "KitMetalFloor", + "KitMetalHalfFloor", + "KitMetalQuarterFloor", + "KitMetalTower", + "KitCinderFloor", + "KitCinderHalfFloor", + "KitCinderQuarterFloor", + "KitCinderTower", + "ItemLockbox", + "Pelt_EPOCH", + "ItemSafe", + "ItemSafe_s", + "ItemGunSafe", + "ItemSolar", + "ItemCables", + "ItemBattery", + "ItemPlywoodPack", + "ItemComboLock", + "ItemPipe", + "ItemBulb", + "SmeltingTools_EPOCH", + "Kit_IG_Box_s", + "Kit_IG_Box_l" + }; + + Items[] = { + "ItemCanvas", + "ItemSeedBag", + "SpareTire", + "EngineParts", + "EngineBlock", + "ItemGlass", + "ItemDuctTape", + "ItemRotor", + "FuelTank", + "VehicleRepair", + "VehicleRepairLg", + "ItemDocument", + "ItemDocumentMission", + "ItemMixOil", + "emptyjar_epoch", + "jerrycan_epoch", + "lighter_epoch", + "WoodLog_EPOCH", + "ItemRope", + "ItemStick", + "ItemRock", + "ItemCoolerE", + "Venom_EPOCH", + "JackKit", + "EnergyPack", + "EnergyPackLg", + "ItemBarrelF", + "ItemBarrelE", + "ItemBurlap", + "ItemKey", + "ItemKeyBlue", + "ItemKeyGreen", + "ItemKeyRed", + "ItemKeyYellow", + "ItemHotwire", + "ItemKeyKit", + "ItemDoc1", + "ItemDoc2", + "ItemDoc3", + "ItemDoc4", + "ItemDoc5", + "ItemDoc6", + "ItemDoc7", + "ItemDoc8", + "ItemVehDoc1", + "ItemVehDoc2", + "ItemVehDoc3", + "ItemVehDoc4", + "ItemVehDocRara", + + // KryptoItems + "ItemTinBar10oz", + "ItemAluminumBar10oz", + "ItemCopperBar10oz", + "ItemSilverBar10oz", + "ItemBriefcaseSilver100oz", + "PartOreGold", + "PartOreSilver", + "PartOre", + "ItemGoldBar", + "ItemSilverBar", + "ItemGoldBar10oz", + "ItemTopaz", + "ItemOnyx", + "ItemSapphire", + "ItemAmethyst", + "ItemEmerald", + "ItemCitrine", + "ItemRuby", + "ItemQuartz", + "ItemJade", + "ItemGarnet", + "ItemKiloHemp", + "ItemAluminumBar", + "ItemCopperBar", + "ItemTinBar", + "ItemEmptyTin", + "ItemSodaEmpty", + "ItemBriefcaseE", + "ItemBriefcaseGold100oz", + "PaintCanClear", + "PaintCanBlk", + "PaintCanBlu", + "PaintCanBrn", + "PaintCanGrn", + "PaintCanOra", + "PaintCanPur", + "PaintCanRed", + "PaintCanTeal", + "PaintCanYel", + "SeedPacket_GoldenSeal", + "SeedPacket_Hemp", + "SeedPacket_Poppy", + "SeedPacket_Pumpkin", + "SeedPacket_Sunflower", + "ItemFireExtinguisher" + }; + Vehicles_Land[] = { + "hoverboard_epoch_1", + "hoverboard_epoch_bttf", + "hoverboard_epoch_a3", + "hoverboard_epoch_cargo", + "MBK_01_EPOCH", + "ebike_epoch", // Motorcycle + "C_Kart_01_black_F", + "C_Quadbike_01_F", + "C_Offroad_01_EPOCH", // Offroader + "C_Offroad_01_EPOCH1", + "C_Offroad_01_EPOCH2", + "C_Offroad_01_EPOCH3", + "C_Offroad_01_EPOCH4", + "C_Quadbike_01_EPOCH", // Quad + "C_Hatchback_01_EPOCH", // Hatchback + "C_Hatchback_01_EPOCH1", + "C_Hatchback_01_EPOCH2", + "C_Hatchback_01_EPOCH3", + "C_Hatchback_01_EPOCH4", + "C_Hatchback_02_EPOCH", // Hatchback Sport + "C_Hatchback_02_EPOCH1", + "C_Hatchback_02_EPOCH2", + "C_Hatchback_02_EPOCH3", + "C_Hatchback_02_EPOCH4", + "C_SUV_01_EPOCH", // SUV + "C_SUV_01_EPOCH1", + "C_SUV_01_EPOCH2", + "C_SUV_01_EPOCH3", + "C_SUV_01_EPOCH4", + "C_Van_01_box_EPOCH", // Truck Box + "C_Van_01_box_EPOCH1", + "C_Van_01_box_EPOCH2", + "C_Van_01_box_EPOCH3", + "C_Van_01_box_EPOCH4", + "C_Van_01_transport_EPOCH", // Truck + "C_Van_01_transport_EPOCH1", + "C_Van_01_transport_EPOCH2", + "C_Van_01_transport_EPOCH3", + "C_Van_01_transport_EPOCH4", + "K01", // Kart + "K02", // Kart Blueking + "K03", // Kart Redstone + "K04", // Kart Vrana + "B_Truck_01_transport_EPOCH", // HEMTT Transport + "B_Truck_01_transport_EPOCH1", + "B_Truck_01_transport_EPOCH2", + "B_Truck_01_transport_EPOCH3", + "B_Truck_01_transport_EPOCH4", + "B_Truck_01_covered_EPOCH", // HEMTT Covered + "B_Truck_01_covered_EPOCH1", + "B_Truck_01_covered_EPOCH2", + "B_Truck_01_covered_EPOCH3", + "B_Truck_01_covered_EPOCH4", + "B_Truck_01_mover_EPOCH", // HEMTT Mover + "B_Truck_01_mover_EPOCH1", + "B_Truck_01_mover_EPOCH2", + "B_Truck_01_mover_EPOCH3", + "B_Truck_01_mover_EPOCH4", + "B_Truck_01_box_EPOCH", // HEMTT Box + "B_Truck_01_box_EPOCH1", + "B_Truck_01_box_EPOCH2", + "B_Truck_01_box_EPOCH3", + "B_Truck_01_box_EPOCH4", + "O_Truck_02_covered_EPOCH", // Zamak Covered + "O_Truck_02_covered_EPOCH1", + "O_Truck_02_covered_EPOCH2", + "O_Truck_02_covered_EPOCH3", + "O_Truck_02_covered_EPOCH4", + "O_Truck_02_transport_EPOCH", // Zamak Transport + "O_Truck_02_transport_EPOCH1", + "O_Truck_02_transport_EPOCH2", + "O_Truck_02_transport_EPOCH3", + "O_Truck_02_transport_EPOCH4", + "O_Truck_03_covered_EPOCH", // Tempest Covered + "O_Truck_03_covered_EPOCH1", + "O_Truck_03_covered_EPOCH2", + "O_Truck_03_covered_EPOCH3", + "O_Truck_03_covered_EPOCH4", + "O_Truck_03_transport_EPOCH", // Tempest Transport + "O_Truck_03_transport_EPOCH1", + "O_Truck_03_transport_EPOCH2", + "O_Truck_03_transport_EPOCH3", + "O_Truck_03_transport_EPOCH4", + + // A2 Landvehicles + "A2_Golf_EPOCH", + "A2_HMMWV_EPOCH", + "A2_HMMWV_load_EPOCH", + "A2_Lada_EPOCH", + "A2_SUV_EPOCH", + "A2_SUV_load_EPOCH", + "A2_SUV_armed_EPOCH", + "A2_UAZ_EPOCH", + "A2_UAZ_Open_EPOCH", + "A2_Ural_EPOCH", + "A2_Vodnik_EPOCH", + "A2_Volha_EPOCH", + + // Funktions Fahrzeuge |Repair,Heal,Tank| + "C_Offroad_01_repair_F", + "O_G_Van_01_fuel_F", + "B_G_Van_01_fuel_F", + "B_Truck_01_Repair_F", + "B_Truck_01_ammo_F", + "B_Truck_01_fuel_F", + "B_Truck_01_medical_F", + "O_Truck_02_box_EPOCH", // Zamak Box (Medical) + "O_Truck_02_box_EPOCH1", + "O_Truck_02_box_EPOCH2", + "O_Truck_02_box_EPOCH3", + "O_Truck_02_box_EPOCH4", + "O_Truck_02_medical_F", + "O_Truck_02_Ammo_F", + "O_Truck_02_fuel_F", + "O_Truck_03_repair_F", + "O_Truck_03_ammo_F", + "O_Truck_03_fuel_F", + "O_Truck_03_medical_F", + + "O_G_Offroad_01_armed_F", + "I_G_Offroad_01_armed_F", + "B_G_Offroad_01_armed_F", + "B_G_Offroad_01_armed_EPOCH", + "B_G_Offroad_01_armed_EPOCH1", + "B_G_Offroad_01_armed_EPOCH2", + "B_G_Offroad_01_armed_EPOCH3", + "B_G_Offroad_01_armed_EPOCH4", + "B_MRAP_01_EPOCH", + "B_MRAP_01_EPOCH1", + "B_MRAP_01_EPOCH2", + "B_MRAP_01_EPOCH3", + "B_MRAP_01_EPOCH4", + "O_MRAP_02_F", + "O_MRAP_02_EPOCH", + "O_MRAP_02_EPOCH1", + "O_MRAP_02_EPOCH2", + "O_MRAP_02_EPOCH3", + "O_MRAP_02_EPOCH4", + "I_MRAP_03_F", + "I_MRAP_03_EPOCH", + "I_MRAP_03_EPOCH1", + "I_MRAP_03_EPOCH2", + "I_MRAP_03_EPOCH3", + "I_MRAP_03_EPOCH4", + "B_MRAP_01_hmg_F", + "O_MRAP_02_hmg_F", + "I_MRAP_03_hmg_F", + "I_LT_01_scout_F", + "I_LT_01_cannon_F", + + // Orange DLC + "I_G_Van_02_transport_F", /* Van Transport (Orange DLC) */ + "O_G_Van_02_transport_F", /* Van Transport (Orange DLC) */ + "B_G_Van_02_transport_F", /* Van Transport (Orange DLC) */ + + "I_G_Van_02_vehicle_F", /* Van Transport (Orange DLC) */ + "O_G_Van_02_vehicle_F", /* Van Transport (Orange DLC) */ + "B_G_Van_02_vehicle_F", /* Van Transport (Orange DLC) */ + + "I_G_Van_02_transport_EPOCH", /* Van Transport (Orange DLC) */ + "O_G_Van_02_transport_EPOCH", /* Van Transport (Orange DLC) */ + "B_G_Van_02_transport_EPOCH", /* Van Transport (Orange DLC) */ + "I_G_Van_02_vehicle_EPOCH", /* Van Transport (Orange DLC) */ + "O_G_Van_02_vehicle_EPOCH", /* Van Transport (Orange DLC) */ + "B_G_Van_02_vehicle_EPOCH", /* Van Transport (Orange DLC) */ + "B_GEN_Van_02_transport_EPOCH", /* Van Transport (Orange DLC) */ + + // Apex + "I_C_Offroad_02_unarmed_F", + "I_C_Offroad_02_unarmed_brown_F", + "I_C_Offroad_02_unarmed_olive_F", + "C_Offroad_02_unarmed_F", + "C_Offroad_02_unarmed_blue_F", + "C_Offroad_02_unarmed_orange_F", + "C_Offroad_02_unarmed_green_F", + "C_Offroad_02_unarmed_black_F", + "C_Offroad_02_unarmed_white_F", + "C_Offroad_02_unarmed_red_F", + + "C_IDAP_Offroad_02_unarmed_F", + "I_C_Offroad_02_LMG_F", + "B_LSV_01_unarmed_F", + "B_LSV_01_unarmed_olive_F", + "B_LSV_01_unarmed_sand_F", + "B_LSV_01_unarmed_black_F", + + "B_T_LSV_01_unarmed_F", + "B_T_LSV_01_unarmed_CTRG_F", + "B_T_LSV_01_unarmed_olive_F", + "B_T_LSV_01_unarmed_black_F", + "B_T_LSV_01_unarmed_sand_F", + + "O_LSV_02_unarmed_F", + "O_LSV_02_unarmed_ghex_F", + "O_LSV_02_unarmed_arid_F", + "O_LSV_02_unarmed_viper_F", + "O_LSV_02_unarmed_black_F", + + "O_T_LSV_02_unarmed_black_F", + "O_T_LSV_02_unarmed_ghex_F", + "O_T_LSV_02_unarmed_arid_F", + "O_T_LSV_02_unarmed_viper_F", + + "O_T_LSV_02_armed_black_F", + "O_T_LSV_02_armed_ghex_F", + "B_LSV_01_armed_black_F", + "B_LSV_01_armed_olive_F" + }; + + Vehicles_Air[] = { + "mosquito_epoch", + "C_Heli_light_01_wasp_F", + "C_Heli_light_01_red_F", + "C_Heli_light_01_blue_F", + "C_Heli_light_01_ion_F", + "C_Heli_light_01_graywatcher_F", + "C_Heli_light_01_digital_F", + "C_Heli_light_01_vrana_F", + "C_Heli_light_01_elliptical_F", + "C_Heli_light_01_speedy_F", + "C_Heli_light_01_jeans_F", + "C_Heli_light_01_light_F", + "C_Heli_light_01_shadow_F", + "C_Heli_light_01_furious_F", + "C_Heli_light_01_wave_F", + "C_Heli_light_01_sheriff_F", + "C_Heli_Light_01_civil_EPOCH", + "C_Heli_Light_01_civil_2seat_EPOCH", + "C_Heli_Light_01_civil_4seat_EPOCH", + "O_Heli_Light_02_unarmed_EPOCH", + "I_Heli_light_03_unarmed_EPOCH", + "I_Heli_Transport_02_EPOCH", + "C_IDAP_Heli_Transport_02_F", + "B_Heli_Transport_03_unarmed_green_F", + "B_Heli_Transport_03_unarmed_EPOCH", + "O_Heli_Transport_04_EPOCH", + "O_Heli_Transport_04_bench_EPOCH", + "O_Heli_Transport_04_box_EPOCH", + "O_Heli_Transport_04_covered_EPOCH", + "B_Heli_Light_01_EPOCH", + + // A2 AirVehicles + "uh1h_Epoch", + "uh1h_armed_EPOCH", + "uh1h_armed_plus_EPOCH", + "a2_mi8_EPOCH", + "a2_ch47f_EPOCH", + "a2_ch47f_armed_EPOCH", + "a2_ch47f_armed_plus_EPOCH", + "C_Heli_Light_01_armed_EPOCH", + "C_Heli_Light_01_armed_plus_EPOCH", + + "B_Heli_Light_01_armed_F", + "B_Heli_Transport_01_EPOCH", + "B_Heli_Transport_01_F", + "B_Heli_Transport_03_black_F", + "O_Heli_Light_02_v2_F", + "I_Heli_light_03_F", + + // Apex + "B_T_VTOL_01_vehicle_blue_F", + "B_T_VTOL_01_vehicle_blue_EPOCH", + "B_T_VTOL_01_infantry_blue_F", + "B_T_VTOL_01_infantry_olive_F", + "B_T_VTOL_01_infantry_olive_EPOCH", + "O_T_VTOL_02_vehicle_grey_F", + "O_T_VTOL_02_vehicle_grey_EPOCH", + "O_T_VTOL_02_vehicle_F", + "O_T_VTOL_02_infantry_F", + "O_T_VTOL_02_infantry_EPOCH" + }; + + Vehicles_Ship[] = { + "jetski_epoch", + "C_Boat_Civil_01_EPOCH", + "C_Boat_Civil_01_police_EPOCH", + "C_Boat_Civil_01_rescue_EPOCH", + "C_Rubberboat_EPOCH", + "C_Rubberboat_02_EPOCH", + "C_Rubberboat_03_EPOCH", + "C_Rubberboat_04_EPOCH", + "B_SDV_01_EPOCH", + + // Apex + "I_C_Boat_Transport_02_F", + "O_G_Boat_Transport_02_F", + "C_Boat_Transport_02_F", + "B_G_Boat_Transport_02_F", + "I_G_Boat_Transport_02_F" + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMarkerSets.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMarkerSets.hpp new file mode 100644 index 0000000..fb0a60f --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMarkerSets.hpp @@ -0,0 +1,229 @@ +/* + DirtySanchez + + Local Markers are single instance and can only be seen by the player + Use ['Name',position] call EPOCH_fnc_createLocalMarkerSet; + + Global Markers are mostly for server use + Use ['Name',position] call EPOCH_server_createGlobalMarkerSet; + + + Config setup and small explanation: + + {_markerName, _markerShape, _markerTypeOrBrush, _markerColor, _markerAlpha, _markerSize, _markerDir, _markerTextorCode}, + + _markerName - setting this as "" will assume marker name as a counter starting with marker_0 + + _markerShape - Selects the shape of the marker. Shape can be "ICON", "RECTANGLE" or "ELLIPSE". + - if Shape is not ICON it will look for a Brush in the next variable + + _markerTypeOrBrush - (type) this can be any marker from CfgMarkers. ie "KIA" from arma 3 or "EpochSkull" in epoch community assets + - (brush) https://community.bistudio.com/wiki/setMarkerBrushLocal for more info + + _markerColor(optional) - follows arma 3 colors. ie "ColorBlue", "ColorPink" + + _markerAlpha(optional) - alpha channel 0-1 value + + _markerSize(optional) - [x,y] https://community.bistudio.com/wiki/setMarkerSize + + _markerDir(optional) - degrees + + _markerTextOrCode(optional) - Text - place any text in here as: "'Service Point #1'" + - Code - place any code in here such as: "str(player name)" + - for GPS coords use this: "format['%1/%2',(format[mapGridPosition player]) select [0,3],(format[mapGridPosition player]) select [3,3]]" + + Marker sets: + + Active Marker sets include 1 Active shape, 1 Background(BG) shape and 1 Epoch marker or your marker of choice + for example the PlayerMarker below is 1 EpochActive_Hex, 1 EpochBG_Hex and the EpochGPS marker +*/ +class CfgMarkerSets +{ + brushes[] = {"Solid","SolidFull","Horizontal","Vertical","Grid","FDiagonal","BDiagonal","DiagGrid","Cross","Border","SolidBorder"}; + mapScalerPresets[] = { + {1.00,2}, + {0.80,2.25}, + {0.60,2.5}, + {0.30,2.75}, + {0.21,3.25}, + {0.12,3.5}, + {0.08,3.75} + }; + class PlayerMarker { + markerArray[] = { + {"EPOCH_PlayerMarker1","ICON","EpochActive_Hex","ColorBlue",1,{0.6,0.6}}, + {"EPOCH_PlayerMarker2","ICON","EpochBG_Hex","ColorWhite",0.3,{0.6,0.6}}, + {"EPOCH_PlayerMarker3","ICON","EpochGPS","ColorBlue",1,{0.5,0.5},0,"format['%1/%2',(format[mapGridPosition player]) select [0,3],(format[mapGridPosition player]) select [3,3]]"} + }; + }; + class DeathMarker { + markerArray[] = { + {"EPOCH_DeathMarker1","ICON","EpochActive_Circle","ColorRed",1,{0.6,0.6}}, + {"EPOCH_DeathMarker2","ICON","EpochBG_Circle","ColorPink",0.3,{0.6,0.6}}, + {"EPOCH_DeathMarker3","ICON","EpochSkull","ColorRed",1,{0.5,0.5},0,"str(name player)"} + }; + }; + class EpochDebugBox { + markerArray[] = { + {"","ICON","EpochActive_Square","ColorGreen",1,{1,1}}, + {"","ICON","EpochBG_Square","ColorBlack",0.2,{1,1}}, + {"","ICON","EpochRespawn","ColorGreen",0.75,{1,1}} + }; + }; + class PlantSpawn { + markerArray[] = { + {"","ICON","EpochActive_Diamond","ColorGreen",1,{0.8,0.8}}, + {"","ICON","EpochBG_Diamond","ColorBlack",0.2,{0.8,0.8}}, + {"","ICON","EpochPlant","ColorGreen",0.9,{0.9,0.9}} + }; + }; + class AirDrop { + markerArray[] = { + {"","ICON","EpochActive_Diamond","ColorGreen",1,{1.1,1.1}}, + {"","ICON","EpochBG_Diamond","ColorBlack",0.2,{1.1,1.1}}, + {"","ICON","EpochAirdrop","ColorGreen",0.75,{1.2,1.2}} + }; + }; + class Carnival { + markerArray[] = { + {"","ICON","EpochActive_Diamond","ColorOrange",1,{1,1}}, + {"","ICON","EpochBG_Diamond","ColorBlack",0.2,{1,1}}, + {"","ICON","EpochCarnival","ColorOrange",0.75,{1.1,1.1}} + }; + }; + class Container { + markerArray[] = { + {"","ICON","EpochActive_Diamond","ColorOrange",1,{1,1}}, + {"","ICON","EpochBG_Diamond","ColorBlack",0.2,{1,1}}, + {"","ICON","EpochContainer","ColorOrange",0.75,{1.1,1.1}} + }; + }; + class EarthQuake { + markerArray[] = { + {"","ICON","EpochActive_Circle","ColorGrey",1,{0.8,0.8}}, + {"","ICON","EpochBG_Circle","ColorBlack",0.2,{0.8,0.8}}, + {"","ICON","EpochGem","ColorRed",1,{0.9,0.9}} + }; + }; + class ServicePoint { + markerArray[] = { + {"","ICON","EpochActive_Circle","ColorBlack",1,{0.85,0.85}}, + {"","ICON","EpochBG_Circle","ColorGrey",0.25,{0.85,0.85}}, + {"","ICON","EpochService","ColorWhite",1,{0.9,0.9},0,"'Service Point'"} + }; + }; + class PaintGarage { + markerArray[] = { + {"","ICON","EpochPaint","ColorBlue",0.5,{0.1,0.1},0} + }; + }; + class Radiation { + markerArray[] = { + {"","ICON","EpochActive_Triangle","ColorYellow",1,{0.7,0.7}}, + {"","ICON","EpochBG_Triangle","ColorBlack",0.3,{0.7,0.7}}, + {"","ICON","EpochRadiation","ColorYellow",1,{0.9,0.9}} + }; + }; + class Satellite { + markerArray[] = { + {"","ICON","EpochActive_Triangle","ColorYellow",0.5,{0.7,0.7},58}, + {"","ICON","EpochBG_Triangle","ColorBlack",0.15,{0.7,0.7},58}, + {"","ICON","EpochSatellite","ColorYellow",1,{0.9,0.9},58} + }; + }; + class MissionNoob { + markerArray[] = { + {"","ICON","EpochActive_Square","ColorGreen",0.5,{1,1}}, + {"","ICON","EpochBG_Square","ColorBlack",0.15,{1,1}}, + {"","ICON","EpochMissionNoob1","ColorYellow",1,{0.9,0.9}} + }; + }; + class MissionNoobPlus { + markerArray[] = { + {"","ICON","EpochActive_Square","ColorGreen",0.75,{1,1}}, + {"","ICON","EpochBG_Square","ColorBlack",0.15,{1,1}}, + {"","ICON","EpochMissionNoob2","ColorYellow",1,{0.9,0.9}} + }; + }; + class MissionSurvivor { + markerArray[] = { + {"","ICON","EpochActive_Square","ColorBlue",0.5,{1,1}}, + {"","ICON","EpochBG_Square","ColorBlack",0.15,{1,1}}, + {"","ICON","EpochMissionMedium1","ColorGreen",1,{0.9,0.9}} + }; + }; + class MissionSurvivorPlus { + markerArray[] = { + {"","ICON","EpochActive_Square","ColorBlue",0.75,{1,1}}, + {"","ICON","EpochBG_Square","ColorBlack",0.15,{1,1}}, + {"","ICON","EpochMissionMedium2","ColorGreen",1,{0.9,0.9}} + }; + }; + class MissionSlaughter { + markerArray[] = { + {"","ICON","EpochActive_Square","ColorRed",0.5,{1,1}}, + {"","ICON","EpochBG_Square","ColorBlack",0.15,{1,1}}, + {"","ICON","EpochMissionVeteran1","ColorBlue",1,{0.9,0.9}} + }; + }; + class MissionSlaughterPlus { + markerArray[] = { + {"","ICON","EpochActive_Square","ColorRed",0.75,{1,1}}, + {"","ICON","EpochBG_Square","ColorBlack",0.15,{1,1}}, + {"","ICON","EpochMissionVeteran2","ColorBlue",1,{0.9,0.9}} + }; + }; + class IGSafeZones { + markerArray[] = { + {"","ICON","mil_warning","ColorRed",1,{1,1},0,"format['SafeZone%1',IGSZCounter];IGSZCounter = IGSZCounter+1"}, + {"","ELLIPSE","Grid","ColorGreen",1,{250,250}} + }; + }; + class StaticTrader { + markerArray[] = { + {"","ICON","EpochActive_Circle","ColorRed",0.75,{0.6,0.6}}, + {"","ICON","EpochBG_Circle","ColorWhite",0.15,{0.6,0.6}}, + {"","ICON","EpochStaticTrader","ColorBlack",1,{0.5,0.5}} + }; + }; + class DynamicTrader { + markerArray[] = { + {"","ICON","EpochActive_Circle","ColorGreen",0.75,{0.6,0.6}}, + {"","ICON","EpochBG_Circle","ColorWhite",0.15,{0.6,0.6}}, + {"","ICON","EpochDynamicTrader","ColorBrown",1,{0.5,0.5}} + }; + }; + class NewDynamicTrader { + markerArray[] = { + {"","ICON","EpochActive_Circle","ColorKhaki",0.75,{0.6,0.6}}, + {"","ICON","EpochBG_Circle","ColorWhite",0.15,{0.6,0.6}}, + {"","ICON","EpochStaticTrader","ColorKhaki",1,{0.5,0.5}} + }; + }; + class Shipwreck { + markerArray[] = { + {"","ICON","EpochActive_Circle","ColorOrange",1,{0.6,0.6}}, + {"","ICON","EpochBG_Circle","ColorWhite",0.15,{0.6,0.6}}, + {"","ICON","EpochShipwreck","ColorOrange",1,{0.5,0.5}} + }; + }; + class MoneyDrop { + markerArray[] = { + {"","ICON","EpochCash","ColorGreen",1,{0.9,0.9}}, + {"","ICON","","ColorBlack",1,{0.8,0.8}}, + {"","ICON","","ColorGreen",0.2,{0.8,0.8}} + }; + }; + class HeliCrash { + markerArray[] = { + {"","ICON","EpochActive_Circle","ColorYellow",1,{0.6,0.6}}, + {"","ICON","EpochBG_Circle","ColorWhite",0.15,{0.6,0.6}}, + {"","ICON","EpochHeli2","ColorYellow",1,{0.5,0.5}} + }; + }; + class Medical { + markerArray[] = { + {"","ICON","o_med","",1,{1,1}} + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMasterLoop.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMasterLoop.hpp new file mode 100644 index 0000000..36e58f7 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMasterLoop.hpp @@ -0,0 +1,62 @@ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {}; + @description = "Master loop is a simple config based event scheduler that handles all time based player related tasks."; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgMasterLoop.hpp"; +*/ +class CfgMasterLoop +{ + class Init + { + file = "epoch_code\compile\setup\masterLoop\init.sqf"; + }; + class Events + { + condition = "alive player"; + file = "epoch_code\compile\setup\masterLoop"; + class Event0 + { + delay = 0.4; + }; + class Event1 + { + delay = 1; + }; + class Event2 + { + delay = 10; + }; + class Event3 + { + delay = 15; + }; + class Event4 + { + delay = 30; + }; + class Event5 + { + delay = 60; + }; + class Event6 + { + delay = 300; + }; + class Event7 + { + delay = 600; + }; + class Event8 + { + delay = 5; //used for FavBar, adjust as required + }; + class Event9 + { + delay = 2; //used for geiger counter UI + }; + }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions.hpp new file mode 100644 index 0000000..b609ce6 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions.hpp @@ -0,0 +1,214 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Mission selection configs and dialogs. Defines the missions for trader menu or triggered event. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgMissions.hpp +*/ + +class EpochMissionList{ + traderMissionClasses[] = {"missionDocCheck","missionfishing","missionDelivery","missionUav","infoTime","infoName","infoNews","infoVehicles","infoPeople","debugResetMission"}; //Exclude from here to remove from menu and trigger + traderMissionActiveNames[] = {}; //Not currently used (WIP) + traderMissionLongDesc[] = {}; //Not currently used (WIP) + traderMissionActiveLongDesc[] = {}; //Not currently used (WIP) +}; + +class epochMissions { + class missionDocCheck{ + missionName = "Check unknown documents"; //Name of mission as it appears in trader list + missionToolTip= "Trader can check your unknown document and eventually find out, what it is."; //Tooltip for trader menu + missionDesc = "You must have a unknown document in your inventory. The trader will check, what it is."; //Misison description as it appears in trader menu. + missionDeny = ""; //Specify a call compile condition. If it returns true the mission will be dis-allowed. Title will be rust coloured and prefixed with NOT ALLOWED. + missionDenyToolTip = ""; //Provides a tooltip explaining why the mission is denied. prefixed with NOT ALLOWED. + tasksList[] = {"DocCheckAccept"}; //Must contain a list of tasks used for this mission, in order. Used to control trader menu when mission is active. WIP - To control mission from this array alone. + missionTrigger = ""; //A dynamic trigger that sets off the mission anywhere in-game. e.g. player != vehicle player Not currently used (WIP) + missionTriggerDialog[] = {""}; //Randomly selected dialogue that is shown when mission is dynamically triggered. Not currently used (WIP) + }; + class missionfishing{ + missionName = "Bring me a fresh Fish"; //Name of mission as it appears in trader list + missionToolTip= "Bring the Trader a fresh Fish from the Water."; //Tooltip for trader menu + missionDesc = "You must went to the Water and catch a Fish for the Trader and bring it to him."; //Misison description as it appears in trader menu. + missionDeny = "!(""MeleeRod"" in weapons player)"; //Specify a call compile condition. If it returns true the mission will be dis-allowed. Title will be rust coloured and prefixed with NOT ALLOWED. + missionDenyToolTip = "You need a Fishing-Rod for this Mission"; //Provides a tooltip explaining why the mission is denied. prefixed with NOT ALLOWED. + tasksList[] = {"StartFishMission"}; //Must contain a list of tasks used for this mission, in order. Used to control trader menu when mission is active. WIP - To control mission from this array alone. + missionTrigger = ""; //A dynamic trigger that sets off the mission anywhere in-game. e.g. player != vehicle player Not currently used (WIP) + missionTriggerDialog[] = {""}; //Randomly selected dialogue that is shown when mission is dynamically triggered. Not currently used (WIP) + }; + class missionMonster{ + missionName = "Escort my Monster (Experimental)"; //Name of mission as it appears in trader list + missionToolTip= "Escort a Monster."; //Tooltip for trader menu + missionDesc = "You must escort the Traders Monster to another Trader somewhere else on the map."; //Misison description as it appears in trader menu. + missionDeny = ""; //Specify a call compile condition. If it returns true the mission will be dis-allowed. Title will be rust coloured and prefixed with NOT ALLOWED. + missionDenyToolTip = ""; //Provides a tooltip explaining why the mission is denied. prefixed with NOT ALLOWED. + tasksList[] = {"prepForMonsterEscort"}; //Must contain a list of tasks used for this mission, in order. Used to control trader menu when mission is active. WIP - To control mission from this array alone. + missionTrigger = ""; //A dynamic trigger that sets off the mission anywhere in-game. e.g. player != vehicle player Not currently used (WIP) + missionTriggerDialog[] = {""}; //Randomly selected dialogue that is shown when mission is dynamically triggered. Not currently used (WIP) + }; + class missionDelivery{ + missionName = "Pikes Peak Express"; //Name of mission as it appears in trader list + missionToolTip= "Courier."; //Tooltip for trader menu + missionDesc = "You must deliver an important message to another trader somewhere else on the map. Choose your trader wisely."; //Misison description as it appears in trader menu. + missionDeny = ""; //Specify a call compile condition. If it returns true the mission will be dis-allowed. Title will be rust coloured and prefixed with NOT ALLOWED. + missionDenyToolTip = ""; //Provides a tooltip explaining why the mission is denied. prefixed with NOT ALLOWED. + tasksList[] = {"prepForDelivery","doDelivery","finishDelivery"}; //Must contain a list of tasks used for this mission, in order. Used to control trader menu when mission is active. WIP - To control mission from this array alone. + missionTrigger = ""; //A dynamic trigger that sets off the mission anywhere in-game. e.g. player != vehicle player Not currently used (WIP) + missionTriggerDialog[] = {""}; //Randomly selected dialogue that is shown when mission is dynamically triggered. Not currently used (WIP) + }; + + class missionEscort{ + missionName = "VIP Escort"; + missionToolTip = "Escort a VIP.."; + missionDesc = "You must deliver the generals daughter to a secret military base."; + missionDeny = "true"; + missionDenyToolTip = "Not Ready."; + tasksList[] = {"takeEscortDelivery","startEscortMission","AIVehicleFind","rndDenyIfInGroup"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class missionUav{ + missionName = "Drone Pilot"; + missionToolTip = "Pilot a UAV."; + missionDesc = "Fly a drone to another trader and perform reconnaissance over the area. Girls make better pilots."; + missionDeny = "missionNameSpace getVariable [""EPOCH_playerEnergy"",0] < 50"; + missionDenyToolTip = "You require energy for this mission !"; + tasksList[] = {"uavMissionAccepted","doUAVSpawn","doUAVAttach","takeOffUAV","uavMission1","uavMission2","uavMission3"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class missionSapper{ + missionName = "Sapper Bait"; + missionToolTip = "Lure a sapper back to the trader."; + missionDesc = "Traders use sappers as bait for bigger prey, earn a reward."; + missionDeny = "true"; + missionDenyToolTip = "Not Ready."; + tasksList[] = {"takeEscortDelivery","startSapperMission","AIVehicleFind","rndDenyIfInGroup"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class missionSkull{ + missionName = "Skulls New Target"; + missionToolTip = "Infiltrate a secure location."; + missionDesc = "Use your sniper and camouflage skills to complete this mission for a large reward."; + missionDeny = "true"; + missionDenyToolTip = "Not Ready."; + tasksList[] = {"prepForMisssion","moveToContact","TakeMission","leaveContact","moveToMilitary","meetInsurgentContact","spawnCOntact","findPosition","removeTargets","moveIn","takeReward","rndVehicleSpawn","rndLooter","rndSapperSpwn","rndInsurgentTaskBin","rndInsurgentTaksCont"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class missionMilitary{ + missionName = "Military Crash"; + missionToolTip = "Loot the crashed military vehcile."; + missionDesc = "Expect some resistance as you clear out the remaining troops and reap the rewards."; + missionDeny = "count weapons player < 1"; + missionDenyToolTip = "You are going to need weapons."; + tasksList[] = {"milMissionAccepted","milSpawnCrashSite","milMarkCrashSite","milFindCrashSite","milEndCrashSite"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class gameCaptureTheJammer{ + missionName = "Capture the Jammer"; + missionToolTip = "Mini Game - Fight for control of the base with your group."; + missionDesc = "Weapon and ammo drops during the game, the longer you keep the jammer the larger the prize, if you can find it."; + missionDeny = "true"; + missionDenyToolTip = "Not Ready."; + tasksList[] = {"acceptMisssion","tpPlayerFSM","scoreMOnitorFSM","timeoutSpawnRndReward"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class gameCarRace{ + missionName = "First Past The Line"; + missionToolTip = "Mini Game - Vehicle Race"; + missionDesc = "Mini Game - Race your vehicles to the finish point, make it there without stacking into a tree, there may be a prize for the winner."; + missionDeny = "true"; + missionDenyToolTip = "Not Ready."; + tasksList[] = {}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class infoTime{ + missionName = "What is the time ?"; + missionDesc = "Find out the time from the trader."; + missionToolTip = "What's the time"; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderDiagTime"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class infoName{ + missionName = "What is your name friend ?"; + missionDesc = "Ask the trader his name.."; + missionToolTip = "Trader Name"; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderDiagName"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class infoNews{ + missionName = "So, what's new ?"; + missionDesc = "Ask the trader for news or tips."; + missionToolTip = "News"; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderDiagNews"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + class infoPeople{ + missionName = "Who is nearby ?"; + missionDesc = "Find out if there are nearby players."; + missionToolTip = "Players"; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderDiagNearby"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + class infoVehicles{ + missionName = "What Vehicles are Nearby ?"; + missionDesc = "Ask the trader if they know of any vehicle locations."; + missionToolTip = "Need a Ride."; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderNearVehicles"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + class helpAirDrop{ + missionName = "Call an Air Drop"; + missionDesc = "Helper - Call an airdrop if available"; + missionToolTip = "Airdrop Request."; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderTriggerAirDrop"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + class debugResetMission{ + missionName = "Reset Missions"; + missionDesc = "Experimental - Reset missions cache if stuck on a mission."; + missionToolTip = "DEBUG - Reset."; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderMissionReset"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgDocCheck.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgDocCheck.hpp new file mode 100644 index 0000000..2fdcac1 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgDocCheck.hpp @@ -0,0 +1,98 @@ +class DocCheckAccept{ + author = "He-Man"; + title = "Document check accept"; + simpleTask = 0; + items[] = {}; + triggerDelay = 1; + triggerintervall = 10; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = ""; + dialogues[] = {}; + callevents[] = {}; + abandonTime = 240; + failedCondition = "missionNameSpace getVariable ['InSafeZone',false]"; + faileddialogues[] = {"Mission not allowed in Safe Zone"}; + completeCondition = "true"; + completedialogues[] = {}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"DocCheckStart"}; +}; +class DocCheckStart{ + author = "He-Man"; + title = "Document check start"; + simpleTask = 0; + items[] = {}; + triggerDelay = 1; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "EPOCH_Mission_StartPos = getposatl player"; + cleanUpCall = "EPOCH_Mission_StartPos = nil;"; + dialogues[] = { + { + "'ItemDocument' in magazines player", + {"You have an unknown Document for me? Let's have a look...","Lets try to find out what kind of document you have...","Let's try to identify your unknown document..."} + }, + { + "'ItemDocument' in magazines player", + {"Hmm, it's hard to identify it... give me some seconds","Oh, I think it is... hmm... no... wait..."} + } + }; + callevents[] = { + { + "(getposatl player) distance EPOCH_Mission_StartPos > 5", + "[selectrandom ['Abort - Come back or I can not check your document!','Abort - Hey, I need your document. Come back!','Abort - If you run away, I can not check your document!'],5,[[0,0,0,0.5],[1,0.5,0,1]]] call epoch_message", + {"DocCheckAbord"} + }, + { + "!('ItemDocument' in magazines player)", + "[selectrandom ['Come back later with an unknown document.','You have no unknown document. Find one and come back later.','Without an unknown document, I have nothing to check'],5,[[0,0,0,0.5],[1,0.5,0,1]]] call epoch_message", + {"DocCheckAbord"} + } + }; + abandonTime = 240; + failedCondition = "!(alive player)"; + faileddialogues[] = {}; + completeCondition = "'ItemDocument' in magazines player && diag_tickTime - EPOCH_task_startTime >= 12 && alive player && (getposatl player) distance EPOCH_Mission_StartPos <= 5"; + completedialogues[] = {}; + completedCALL = "if !('ItemDocument' in magazines player) exitwith {}; player removeMagazine 'ItemDocument'; if ((random 100) > 70) exitwith {[selectrandom ['Oh no, your document is too much damaged. Sorry!','Sorry, I can not read this document. It is only trash. Sorry!'],5] call epoch_message};_randomdoc = selectRandomWeighted ['ItemVehDoc1',10,'ItemVehDoc2',6,'ItemVehDoc3',4,'ItemVehDoc4',2,'ItemVehDocRara',1]; [format ['Oh great, it is a %1 - I put it in your pocket',_randomdoc call EPOCH_itemDisplayName],5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_Message; _randomdoc call EPOCH_fnc_addItemOverflow"; + reward[] = {}; + cleanUp = 1; + nextTask[] = {}; +}; +class DocCheckAbord{ + author = "He-Man"; + title = "DocCheckAbord"; + simpleTask = 0; + items[] = {}; + triggerDelay = 1; + triggerintervall = 1; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "EPOCH_Mission_StartPos = nil;"; + cleanUpCall = ""; + dialogues[] = { + }; + callevents[] = { + }; + abandonTime = 240; + failedCondition = "true"; + faileddialogues[] = {}; + completeCondition = "false"; + completedialogues[] = {}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {}; +}; + diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgExample.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgExample.hpp new file mode 100644 index 0000000..4d517b4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgExample.hpp @@ -0,0 +1,76 @@ +/* + Author: Andrew Gregory - EpochMod.com + Contributors: + + Description: + Example Mission file containing individual tasks (Commented) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient.hpp +*/ + +//Built in useful vars that can be used in code based conditions / responses etc. +//N.B. Local vars can not be used as they are not in scope when call compiled. +// +// EPOCH_task_startTime - task start diag_tickTime | Usage: diag_tickTime - EPOCH_task_startTime > _someDelayTime; +// EPOCH_mission_starttime - mission start diag_ticktime +// EPOCH_taskMarker - Array for Marker, if set [markername,markerType]. "markerType" see in task description +// EPOCH_taskMarkerPos - Markerposition, if set. + + +class sampletask { + author = "My Name"; + title = "Mission Title"; + simpleTask = 0; + items[] = {"B_UavTerminal"}; // Items will be dropped on the Ground next to Player + triggerDelay = 2; // Before this time (in sec) the task will not Start + taskCheckTime = 3; // Intervall (in sec) for the triggers + markerType = 0; // Place a marker on task target (0 = No Marker, 1 = Marker, with text, exactly on target, 2 = radial marker with target somewhere random inside marker) + markerVisible = 0; // Marker visible for: 0 = Only Player (default), 1 = Group of Player, 2 = Global + markerRadius = 0; // Set marker radius for radial marker (markerType = 2) + markerText = ""; // Marker Text - Add text to marker, leave "" for no text. No text available for Marker type 2 yet. + initcall = ""; // Code to call on task-start + cleanUpCall = ""; // Code to call on task failed or when cleanUp = 1 on finished + dialogues[] = { // Array to make dialogues while task is running + { + "alive player", // Condition 1 + {"Text 1","Text 2","Text 3"} // Array of random dialogues when condition 1 = true + }, + { + "alive player", // Condition 2 + {"Text 1","Text 2","Text 3"} // Array of random dialogues when condition 2 = true + } + }; + callevents[] = { // Array to call codes and / or start a nex task + { + "(diag_tickTime - StartTime > 30)", // Condition 1 + "", // String with code to call when condition 1 = true + {"uavMission1"} // Array of random selected tasks to switch to when condition 1 = true + }, + { + "!alive player", // Condition 2 + "player setdamage 1", // String with code to call when condition 2 = true + {"uavMission2"} // Array of random selected tasks to switch to when condition 2 = true + }, + }; + abandonTime = 240; // Timeout for task + failedCondition = "false"; // Failed Condition for Task + faileddialogues[] = {"Text1","Text2"}; // Array of random dialogues when task failed + failedCall = ""; // Code to call when task failed + completeCondition = "'B_UavTerminal' in assignedItems player"; // Condition to complete the task succesfully + completedialogues[] = {"Text1","Text2"}; // Array of random dialogues when task completed successfully + completedCALL = ""; // Code to call when task completed successfully + reward[] = {}; // Array of items, that spawn next to the Player when completed successfully + cleanUp = 0; // Set to 1 to call cleanupcall on success + nextTask[] = {"doUAVSpawn"}; // Array of next selected random tasks + +// Not used atm + taskLimit = 3; + itemSpawn = 3; + callEventBinTask = 0; + diagSquelch = 30; + abandonDist = 100; +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgTraderDiags.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgTraderDiags.hpp new file mode 100644 index 0000000..05603b5 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgTraderDiags.hpp @@ -0,0 +1,71 @@ +class traderDiagTime{ +author = "axeman"; +title = "Trader Time"; +//Simple task will skip all monitoring and run the provided code (call, fsm, sqf) only. +simpleTask = 1; +initsqf = "epoch_code\compile\missions\tasks\traderDiag_timePlease.sqf"; +initfsm = ""; +initcall = ""; +//Next task is allowed to trigger a task if required. +nextTask[] = {}; +}; + +class traderDiagNearby{ +author = "axeman"; +title = "Trader Near By Players"; +simpleTask = 1; +initsqf = "epoch_code\compile\missions\tasks\traderDiag_nearPlayers.sqf"; +initfsm = ""; +initcall = ""; +nextTask[] = {}; +}; + +class traderDiagNews{ +author = "axeman"; +title = "Trader News"; +simpleTask = 1; +initsqf = "epoch_code\compile\missions\tasks\traderDiag_news.sqf"; +initfsm = ""; +initcall = ""; +nextTask[] = {}; +}; + +class traderDiagName{ +author = "axeman"; +title = "Traders Name"; +simpleTask = 1; +initsqf = "epoch_code\compile\missions\tasks\traderDiag_name.sqf"; +initfsm = ""; +initcall = ""; +nextTask[] = {}; +}; + +class traderNearVehicles{ +author = "axeman"; +title = "Trader Nearby Vehicles"; +simpleTask = 1; +initsqf = "epoch_code\compile\missions\tasks\traderDiag_nearVehicles.sqf"; +initfsm = ""; +initcall = ""; +nextTask[] = {}; +}; + +class traderTriggerAirDrop{ +author = "axeman"; +title = "Trigger AirDrop"; +simpleTask = 1; +initsqf = "epoch_code\compile\missions\tasks\traderDiag_triggerAirDrop.sqf"; +initfsm = ""; +initcall = ""; +nextTask[] = {}; +}; + +class traderMissionReset{ +author = "axeman"; +title = "Reset Missions"; +simpleTask = 1; +initsqf = "epoch_code\compile\missions\tasks\traderDebug_resetMissions.sqf"; +initfsm = ""; +initcall = ""; +nextTask[] = {}; +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionDelivery.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionDelivery.hpp new file mode 100644 index 0000000..3fe7563 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionDelivery.hpp @@ -0,0 +1,158 @@ +class prepForDelivery { + author = "axeman"; + title = "Prep for Delivery"; + simpleTask = 0; + items[] = {"ItemDocumentMission"}; + triggerDelay = 2; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil]"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "true", + {"Pick up the Document to Start."} + }, + { + "!(""ItemDocumentMission"" in magazines player)", + {"Come on Buddy, Pick it up !","It's right next to you on the floor, pick it up to start."} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 240; + failedCondition = "false"; + faileddialogues[] = {"I guess you have better things to do.","Try again later.","You didn't pick up the document. Misison Failed !"}; + completeCondition = "('ItemDocumentMission' in magazines player)"; + completedialogues[] = {"That's great, let's get out of here.","Good, you have the document, let's move on.","Ok, well done. We can start now."}; + completedCALL = "uiNameSpace setVariable ['axeStartTraders',EPOCH_Traders select {_x distance player < 500 && alive _x}]"; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"doDelivery"}; + +// Not used atm + taskLimit = 3; + itemSpawn = 3; + callEventBinTask = 0; + diagSquelch = 30; + abandonDist = 100; +}; +class doDelivery { + author = "axeman"; + title = "Do Delivery"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil]"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "(""ItemDocumentMission"" in magazines player)", + {"Ok, head off to another trader, you can't deliver to any nearby.","All set. Now take that document to another trader further away.","Take that message to another trader or trader city."} + }, + { + "!('ItemDocumentMission' in magazines player)", + {"Don't leave that document anywhere.","If you lose that document you will fail the mission."} + }, + { + "({player distance _x < 42 && !((_x getvariable ['AI_SLOT',-1]) == -1) && alive _x && !(_x in (uiNameSpace getVariable ['axeStartTraders',[]]))} count EPOCH_Traders > 0)", + {"Well done, you have a trader nearby, go see him","Looks like you found another trader, well done, deliver the message.","UAV has spotted another trader nearby, go deliver the message."} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...},{"NextTask1","NextTask2", ...}} + "(EPOCH_task_startTime + 480 < diag_tickTime) && ({player distance _x < 500 && !((_x getvariable ['AI_SLOT',-1]) == -1) && alive _x && (_x in (uiNameSpace getVariable ['axeStartTraders',[]]))} count EPOCH_Traders > 0)", + "[""Hey, what are you doing here ? Get on with your task !"", 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message", + {} + } + }; + abandonTime = 1800; + failedCondition = "false"; + faileddialogues[] = {"Looks like you took too long buddy, Mission Over.","You need to be quicker next time, Mission Over !","Misison Failed - You took too long, better luck next time."}; + completeCondition = "({player distance _x < 6 && !((_x getvariable ['AI_SLOT',-1]) == -1) && alive _x && !(_x in (uiNameSpace getVariable ['axeStartTraders',[]]))} count EPOCH_Traders > 0)"; + completedialogues[] = {"Hey there pal, it looks like you have something for me ?","Great Job there. Step into my office traveller.","You made it, time to take a look at that message."}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"finishDelivery"}; +}; +class finishDelivery { + author = "axeman"; + title = "Finish Delivery"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "axeRndBadNews = floor random 100"; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil];axeRndBadNews = nil"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "axeRndBadNews > 5", + {"That's interesting news. Thanks for bringing this.","Great news, you did well to bring this to me."} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...},{"NextTask1","NextTask2", ...}} + "(""ItemDocumentMission"" in magazines player)", + "player removeMagazine ""ItemDocumentMission""", + {} + }, + { // {"condition",{"Message1","Message2", ...},{"NextTask1","NextTask2", ...}} + "axeRndBadNews < 6", + "", + {"deliveryMissionBadNews"} + } + }; + abandonTime = 240; + failedCondition = "false"; + faileddialogues[] = {}; + completeCondition = "diag_ticktime - EPOCH_task_startTime > 16 && axeRndBadNews > 5"; + completedialogues[] = {"Take your reward, you have earnt it","Here is your reward, you are a great courier.","Any time you need work, come and see me, great job."}; + completedCALL = "[objnull,""Pelican_EPOCH"",true,getposatl player] remoteExec [""EPOCH_serverLootObject"",2];"; + reward[] = {}; + cleanUp = 1; + nextTask[] = {}; +}; +class deliveryMissionBadNews { + author = "axeman"; + title = "Delivery Gone Bad"; + simpleTask = 0; + items[] = {}; + triggerDelay = 0; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "[player,6] call EPOCH_callSapperMigration"; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil]"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "true", + {"Oh my, that's terrible, why did you bring me this news ?","No no no, why would you do this to me, this is awful news."} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime =240; + failedCondition = "false"; + faileddialogues[] = {}; + completeCondition = "diag_ticktime - EPOCH_task_startTime > 8"; + completedialogues[] = {"You are going to pay for that, get out of my sight","Nobody does that to me, go away.","I would run buddy, I am not pleased."}; + completedCALL = ""; + reward[] = {}; + cleanUp = 1; + nextTask[] = {}; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionFish.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionFish.hpp new file mode 100644 index 0000000..2540505 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionFish.hpp @@ -0,0 +1,139 @@ +class StartFishMission { + author = "He-Man"; + title = "Start Fish Mission"; + simpleTask = 0; + items[] = {}; + triggerDelay = 2; + triggerintervall = 5; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "uiNameSpace setVariable ['axeStartTraders',EPOCH_Traders select {_x distance player < 20 && alive _x}]; EPOCH_Mission_StartPos = getpos player"; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil];EPOCH_Mission_StartPos = nil"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "true", + {"I really need a fresh Fish. Can you fish me one?","Go to the Water and catch me a fresh Fish. I will reward you"} + }, + { // {"condition",{"Message1","Message2", ...}} + "true", + {"But don't bring me a Fish from this region. Go a bit away","The Fishes from this region are boring. Please go a bit farther"} + }, + { + "!(""MeleeRod"" in weapons player)", + {"Hey, you need your Fishin Rod for fishing! Don't throw it away"} + }, + { + "(surfaceiswater (getpos player) || (surfaceiswater (player modelToWorld[0, 5 + (random 5), 0]))) && player distance EPOCH_Mission_StartPos < 1000", + {"The Fishes in this region taste awful. Go to another Spot.","Don't bring me a fish frome here! They taste terrible..."} + }, + { + "(surfaceiswater (getpos player) || (surfaceiswater (player modelToWorld[0, 5 + (random 5), 0]))) && player distance EPOCH_Mission_StartPos > 1000", + {"Oh nice, here is an excellent spot for fishing...","Use your Fishing-Rod to catch me a fresh Fish"} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 1200; + failedCondition = "!alive player"; + faileddialogues[] = {"I guess you have better things to do. - Mission Failed","Mission Failed - Try again later."}; + completeCondition = "player distance (missionNamespace getVariable [""EPOCH_myBobber"", objNull]) < 40 && player distance EPOCH_Mission_StartPos > 900"; + completedialogues[] = {"Okay, now catch a Fish","Let's wait now..."}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"CatchFish"}; + +// Not used atm + taskLimit = 3; + itemSpawn = 3; + callEventBinTask = 0; + diagSquelch = 30; + abandonDist = 100; +}; +class CatchFish { + author = "He-Man"; + title = "Catch the Fish"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 5; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil];EPOCH_Mission_StartPos = nil"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 1200; + failedCondition = "!alive player"; + faileddialogues[] = {"I guess you have better things to do. - Mission Failed","Mission Failed - You took to long."}; + completeCondition = "{_x in magazines player} count ([""CfgEpochClient"", ""fishLoots"", [""ItemTuna"",""ItemSeaBass"",""ItemSeaBass"",""ItemSeaBass"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout""]] call EPOCH_fnc_returnConfigEntryV2) > 0"; + completedialogues[] = {"YEAH! You got one. Bring it to me","Wow, bring the Fish to me!"}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"BringTheFish"}; +}; +class BringTheFish { + author = "He-Man"; + title = "Bring the Fish"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil];EPOCH_Mission_StartPos = nil"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "diag_ticktime - EPOCH_task_startTime > 180", + {"Hurry up, I am really hungry.","Hey, where is my Fish? Bring it to me!","Why does it take so long to bring me a Fish?"} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 1200; + failedCondition = "!alive player"; + faileddialogues[] = {"I guess you have better things to do. - Mission Failed","Mission Failed - You took to long."}; + completeCondition = "({player distance _x < 20 && !((_x getvariable ['AI_SLOT',-1]) == -1) && alive _x && (_x in (uiNameSpace getVariable ['axeStartTraders',[]]))} count EPOCH_Traders > 0) && {_x in magazines player} count (['CfgEpochClient', 'fishLoots', ['ItemTuna','ItemSeaBass','ItemSeaBass','ItemSeaBass','ItemTrout','ItemTrout','ItemTrout','ItemTrout','ItemTrout','ItemTrout']] call EPOCH_fnc_returnConfigEntryV2) > 0"; + completedialogues[] = {"Hey, you bring me my Fish? - THANKS!!!","Great Job there. Step into my office traveller.","You made it, thanks for bringing me the Fish."}; + completedCALL = "{if (_x in magazines player) exitwith {player removeMagazine _x}} foreach ([""CfgEpochClient"", ""fishLoots"", [""ItemTuna"",""ItemSeaBass"",""ItemSeaBass"",""ItemSeaBass"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout""]] call EPOCH_fnc_returnConfigEntryV2)"; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"FinishFishMission"}; +}; +class FinishFishMission { + author = "He-Man"; + title = "Finish Fish Mission"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil];EPOCH_Mission_StartPos = nil"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 240; + failedCondition = "false"; + faileddialogues[] = {}; + completeCondition = "true"; + completedialogues[] = {"Take your reward, you have earnt it","Here is your reward, you are a great fisher man.","Any time you need work, come and see me, great job."}; + completedCALL = "[objnull,""Mission_Fishing_Payout"",true,getposatl player] remoteExec [""EPOCH_serverLootObject"",2];"; + reward[] = {}; + cleanUp = 1; + nextTask[] = {}; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionMilitary.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionMilitary.hpp new file mode 100644 index 0000000..b8ca5c4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionMilitary.hpp @@ -0,0 +1,296 @@ +class milMissionAccepted{ + author = "axeman"; + title = "Military Crash Site"; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 3; + items[] = {""}; + itemSpawn = 0; + markerType = 0; + markerRadius = 250; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = ""; + callEventBinTask = 0; + callEventCondition1 = ""; + callEventCondition2 = ""; + callEventCondition3 = ""; + callEventCALL1 = ""; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = ""; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "true"; + dialogue1[] = {"A militia group has stolen military aircraft from a nearby airfield.","A stolen military aircraft has just taken off from an airport nearby.","I have received word that a splinter group are stealing an aircraft."}; + diagSquelch = 30; + diag2Condition = ""; + dialogue2[] = {""}; + diag3Condition = ""; + dialogue3[] = {""}; + failedCondition = ""; + abandonDist = -1; + abandonTime = 480; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 0; + cleanUpCalls[] = {}; + completeCondition = "true"; + reward[] = {""}; + completed1[] = {""}; + completed2[] = {""}; + completedCALL = ""; + reminder[] = {""}; + nextTask[] = {"milSpawnCrashSite"}; +}; +class milSpawnCrashSite{ + author = "axeman"; + title = "Military Spawn Crash Site"; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 0; + items[] = {""}; + itemSpawn = 0; + markerType = 0; + markerRadius = 250; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = "[] spawn {milCrashPos = [position player, 1000, 2550, 0, 0, 1000, 0] call BIS_fnc_findSafePos;terminate _thisScript;};"; + callEventBinTask = 0; + callEventCondition1 = "(diag_tickTime - EPOCH_task_startTime) > 12"; + callEventCondition2 = ""; + callEventCondition3 = ""; + callEventCALL1 = "[player,Epoch_personalToken,selectRandom [""B_Plane_CAS_01_F"",""O_Heli_Attack_02_black_F"",""B_UAV_02_CAS_F"",""I_Plane_Fighter_03_AA_F ""],milCrashPos,objNull,false,""CAN_COLLIDE"","""","""","""","""",true] remoteExec [""EPOCH_Server_createObject"",2];"; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = ""; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "(diag_tickTime - EPOCH_task_startTime) > 6"; + dialogue1[] = {"As suspected, the aircraft was sabotaged and has crashed.","An inept theft attempt, the aircraft has gone down.","Something went wrong, my UAV has spotted the aircraft, it has crashed nearby."}; + diagSquelch = 15; + diag2Condition = "true"; + dialogue2[] = {}; + diag3Condition = ""; + dialogue3[] = {""}; + failedCondition = ""; + abandonDist = -1; + abandonTime = 480; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 0; + cleanUpCalls[] = {}; + completeCondition = "(diag_tickTime - EPOCH_task_startTime) > 18"; + reward[] = {""}; + completed1[] = {""}; + completed2[] = {""}; + completedCALL = "true"; + reminder[] = {"Wait 10, I am triangulating the position.","Hold your position and wait for the location","I am calculating the location of the crash site."}; + nextTask[] = {"milMarkCrashSite"}; +}; +class milMarkCrashSite{ + author = "axeman"; + title = "Mark Military Crash Site"; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 3; + items[] = {""}; + itemSpawn = 0; + markerType = 0; + markerRadius = 500; + markerText = "Crash Site"; + initfsm = ""; + initsqf = ""; + initcall = "[[1,player],milCrashPos,""ELLIPSE"",""mil_dot"",""Crash Site"",""ColorRed"",[800,800], ""SolidBorder"", 42, 0.6, ""milMarkCrashSite""] remoteExec [""EPOCH_server_makeMarker"",2];"; + callEventBinTask = 0; + callEventCondition1 = "true"; + callEventCondition2 = "true"; + callEventCondition3 = "true"; + callEventCALL1 = "milWH1 = createVehicle[""groundWeaponHolder"", milCrashPos, [], 4, ""CAN_COLLIDE""];removeFromRemainsCollector [milWH1];[milWH1,""Pelican_EPOCH""] remoteExec [""EPOCH_serverLootObject"",2];"; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = "milWH2 = createVehicle[""groundWeaponHolder"", milCrashPos, [], 4, ""CAN_COLLIDE""];removeFromRemainsCollector [milWH2];[milWH2,""ToolRack_EPOCH""] remoteExec [""EPOCH_serverLootObject"",2];"; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = "milWH3 = createVehicle[""groundWeaponHolder"", milCrashPos, [], 4, ""CAN_COLLIDE""];removeFromRemainsCollector [milWH3];[milWH3,""AirDrop_Payout1""] remoteExec [""EPOCH_serverLootObject"",2];"; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "(diag_tickTime - EPOCH_task_startTime) > 6"; + dialogue1[] = {"Check your map, I have marked the site in red for your team.","Your map has been marked.","I have added a marker for your team."}; + diagSquelch = 30; + diag2Condition = "(diag_tickTime - EPOCH_task_startTime) > 31"; + dialogue2[] = {"Reports are it was last spotted in that area..","Search the area, it was seen coming down from that location.","Be sure to search the area, the marker is the last know location."}; + diag3Condition = "(diag_tickTime - EPOCH_task_startTime) > 128"; + dialogue3[] = {"Be careful, I have spotted another UAV.","An enemy UAV is scouting the location","Keep a low profile, the enemy are scouting the area."}; + failedCondition = ""; + abandonDist = -1; + abandonTime = 1280; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 0; + cleanUpCalls[] = {}; + completeCondition = "(diag_tickTime - EPOCH_task_startTime) > 60"; + reward[] = {""}; + completed1[] = {""}; + completed2[] = {""}; + completedCALL = ""; + reminder[] = {""}; + nextTask[] = {"milFindCrashSite"}; +}; +class milFindCrashSite{ + author = "axeman"; + title = "Military Crash Site Hunt"; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 20; + items[] = {""}; + itemSpawn = 0; + markerType = 0; + markerRadius = 250; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = "milDoUAV = false;"; + callEventBinTask = 0; + callEventCondition1 = "count (units group player select {_x distance milCrashPos < 800}) > 0"; + callEventCondition2 = "count (units group player select {_x distance milCrashPos < 480}) > 0 && random 100 < 12"; + callEventCondition3 = ""; + callEventCALL1 = "_diag = format [""Great work the UAV has spotted %1 nearly on-site."",name ((units group player select {_x distance milCrashPos < 800}) select 0)];[_diag, 5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_message;"; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = "[(selectRandom (units group player select {_x distance milCrashPos < 480}))] execVM ""epoch_code\compile\missions\tasks\mission_spawnUAV.sqf"";milDoUAV = true;"; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "count (units group player select {_x distance milCrashPos < 1000}) > 0"; + dialogue1[] = {"Keep going you are getting close now","You are closing in on the target.","You are nearly there. Keep it up."}; + diagSquelch = 60; + diag2Condition = "milDoUAV"; + dialogue2[] = {"Enemy UAV spotted, you've got company.","You've got another UAV in the area, keep low.","Find a spot to hide, enemy UAV incoming."}; + diag3Condition = "count (units group player select {_x distance milCrashPos < 60}) > 0"; + dialogue3[] = {"You've made it, find any loot.","Search the area, there will be loot around","There should be plenty to scavange."}; + failedCondition = ""; + abandonDist = -1; + abandonTime = 4800; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 0; + cleanUpCalls[] = {}; + completeCondition = "(diag_tickTime - EPOCH_task_startTime) > 4600 || count (units group player select {_x distance milWH1 < 60}) > 0"; + reward[] = {""}; + completed1[] = {""}; + completed2[] = {""}; + completedCALL = ""; + reminder[] = {""}; + nextTask[] = {"milEndCrashSite"}; +}; + +class milEndCrashSite{ + author = "axeman"; + title = ""; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 16; + items[] = {""}; + itemSpawn = 1; + markerType = 0; + markerRadius = 50; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = ""; + callEventBinTask = 0; + callEventCondition1 = ""; + callEventCondition2 = ""; + callEventCondition3 = ""; + callEventCALL1 = ""; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = ""; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "true"; + dialogue1[] = {"Well done, that was a good find","You are an official scavenger now, congratulations.","Your loot is welcome at my store any time."}; + diagSquelch = 60; + diag2Condition = ""; + dialogue2[] = {""}; + diag3Condition = ""; + dialogue3[] = {""}; + failedCondition = ""; + abandonDist = 100; + abandonTime = 240; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 1; + cleanUpCalls[] = {}; + completeCondition = "true"; + reward[] = {""}; + completed1[] = {""}; + completed2[] = {""}; + completedCALL = "[player,1,""milMarkCrashSite""] remoteExec [""EPOCH_server_removeMarker"",2];"; + reminder[] = {""}; + nextTask[] = {""}; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionMonster.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionMonster.hpp new file mode 100644 index 0000000..5d726c2 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionMonster.hpp @@ -0,0 +1,134 @@ +class prepForMonsterEscort { + author = "He-Man"; + title = "Prep for Monster Escort"; + simpleTask = 0; + items[] = {}; + triggerDelay = 2; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "EPOCH_Monster = objnull"; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil]"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "true", + {"Hey, thanks for helping me to take my Monster to a friend"} + }, + { + "true", + {"I will call my monster. Bring him to another Trader"} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...},{"NextTask1","NextTask2", ...}} + "true", + "uiNameSpace setVariable ['axeStartTraders',EPOCH_Traders select {_x distance player < 500 && alive _x}]", + {} + }, + { // {"condition",{"Message1","Message2", ...},{"NextTask1","NextTask2", ...}} + "true", + "_animalPos = [getposatl player, 150, 250, 5, 0, 2000, 0] call BIS_fnc_findSafePos;_randomAIClass = ""Construct_F"";_animal = createAgent[_randomAIClass, _animalPos, [], 5, ""NONE""];EPOCH_Monster = _animal;[EPOCH_Monster] remoteExec [""EPOCH_localCleanup"",2]", + {} + } + }; + abandonTime = 240; + failedCondition = "false"; + faileddialogues[] = {"I guess you have better things to do.","Try again later.","You didn't pick up the document. Misison Failed !"}; + completeCondition = "!isnull EPOCH_Monster"; + completedialogues[] = {}; + completedCALL = "[] spawn {_pos = getpos player;_stay = false;while {!isnull EPOCH_Monster && alive EPOCH_Monster && alive player} do {if (EPOCH_Monster distance2d player > 35) then {_stay = false;_pos = getposatl player;}else {if (!_stay) then {_pos = getposatl EPOCH_Monster;_stay = true;};};EPOCH_Monster moveto _pos;_time = diag_ticktime;uisleep 3;waituntil {diag_ticktime - _time > 15 || EPOCH_Monster distance _pos < 25 || isnull EPOCH_Monster};};};"; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"EscortMonster"}; + +// Not used atm + taskLimit = 3; + itemSpawn = 3; + callEventBinTask = 0; + diagSquelch = 30; + abandonDist = 100; +}; +class EscortMonster { + author = "He-Man"; + title = "Escort Monster"; + simpleTask = 0; + items[] = {}; + triggerDelay = 5; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil]; deletevehicle EPOCH_Monster"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "true", + {"That's great, look for the Monster outside.","Good, now search my Monster outside","Ok, well done. We can start now."} + }, + { + "true", + {"Ok, head off to another trader, you can't deliver to any nearby.","All set. Now take the Monster to another trader further away.","Take that Monster to another trader or trader city."} + }, + { + "EPOCH_task_startTime + 60 < diag_ticktime", + {"Sorrz, he is an old Man and not very fast...","My Monster is very old a bit lazy"} + }, + { + "EPOCH_task_startTime + 120 < diag_ticktime && EPOCH_Monster distance player > 350", + {"Don't go to far away or you loose the Monster","Hey, wait for my Monster!"} + }, + { + "EPOCH_Monster distance player < 20", + {"Go forward, my Monster will follow you!","Hurry up a bit. My Monster is hungry..."} + }, + { + "({player distance _x < 42 && !((_x getvariable ['AI_SLOT',-1]) == -1) && alive _x && !(_x in (uiNameSpace getVariable ['axeStartTraders',[]]))} count EPOCH_Traders > 0)", + {"Well done, you have a trader nearby, go see him","Looks like you found another trader, well done, deliver the Monster.","UAV has spotted another trader nearby, go deliver the Monster."} + }, + { + "(EPOCH_task_startTime + 480 < diag_tickTime) && ({player distance _x < 500 && !((_x getvariable ['AI_SLOT',-1]) == -1) && alive _x && (_x in (uiNameSpace getVariable ['axeStartTraders',[]]))} count EPOCH_Traders > 0)", + {"Hey, what are you doing here ? Get on with your task!"} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 2000; + failedCondition = "!alive EPOCH_Monster || !alive player || EPOCH_Monster distance player > 500"; + faileddialogues[] = {"Oh no, you lost my Monster - Mission Failed","My Monster ist gone, Mission Over!"}; + completeCondition = "player distance EPOCH_Monster < 50 && ({player distance _x < 20 && !((_x getvariable ['AI_SLOT',-1]) == -1) && alive _x && !(_x in (uiNameSpace getVariable ['axeStartTraders',[]]))} count EPOCH_Traders > 0)"; + completedialogues[] = {"Hey, you bring me my friends Monster?","Great Job there. Step into my office traveller.","You made it, thanks for bringing me the Monster."}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"finishMonsterEscort"}; +}; +class finishMonsterEscort { + author = "He-Man"; + title = "Finish Monster Escort"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil]; deletevehicle EPOCH_Monster"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 240; + failedCondition = "false"; + faileddialogues[] = {}; + completeCondition = "true"; + completedialogues[] = {"Take your reward, you have earnt it","Here is your reward, you are a great courier.","Any time you need work, come and see me, great job."}; + completedCALL = "[objnull,""Mission_Monster_Payout"",true,getposatl player] remoteExec [""EPOCH_serverLootObject"",2];"; + reward[] = {}; + cleanUp = 1; + nextTask[] = {}; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionUav.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionUav.hpp new file mode 100644 index 0000000..a48e35c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissions/CfgmissionUav.hpp @@ -0,0 +1,266 @@ +class uavMissionAccepted{ + author = "axeman"; + title = "UAV Mission Accepted"; + simpleTask = 0; + items[] = {}; + triggerDelay = 1; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = ""; + dialogues[] = {}; + callevents[] = {}; + abandonTime = 240; + failedCondition = "missionNameSpace getVariable [""InSafeZone"",false]"; + faileddialogues[] = {"Mission not allowed in Safe Zone"}; + completeCondition = "true"; + completedialogues[] = {}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"uavMissionStart"}; + +// Not used atm + taskLimit = 3; + itemSpawn = 3; + callEventBinTask = 0; + diagSquelch = 30; + abandonDist = 100; +}; +class uavMissionStart{ + author = "axeman"; + title = "UAV Mission Start"; + simpleTask = 0; + items[] = {"B_UavTerminal"}; + triggerDelay = 1; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = ""; + dialogues[] = { + { + "true", + {"The UAV terminal is at your feet, Equip it !","Pick up the terminal and equip yourself with it.","Grab the UAV terminal and put it in your GPS slot."} + }, + { + "!('B_UavTerminal' in assignedItems player)", + {"Hurry it up, pick up and equip the terminal.","Come on, Equip yourself with the terminal.","We don't have all day, get that terminal equipped."} + } + }; + callevents[] = { + { + "missionNameSpace getVariable [""InSafeZone"",false]", + "['Mission not allowed in Safe Zone',5,[[0,0,0,0.5],[1,0.5,0,1]]] call Epoch_Message", + {} + } + + + }; + abandonTime = 240; + failedCondition = "false"; + faileddialogues[] = {"I guess you have better things to do.","Try again later.","You didn't pick up the terminal. Misison Failed !"}; + completeCondition = "'B_UavTerminal' in assignedItems player"; + completedialogues[] = {"That's great, you have 30 seconds to find a safe position.","Find a hidden spot to operate from, take off in 30 seconds.","Find yourself a concealed position to work from, taking off in half a minute."}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"doUAVSpawn"}; + +// Not used atm + taskLimit = 3; + itemSpawn = 3; + callEventBinTask = 0; + diagSquelch = 30; + abandonDist = 100; +}; +class doUAVSpawn{ + author = "axeman"; + title = "UAV Spawn"; + simpleTask = 0; + items[] = {}; + triggerDelay = 30; + triggerintervall = 2; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "axeUAV = objNull"; + cleanUpCall = ""; + dialogues[] = { + { + "true", + {"UAV is ready, get prepared! Connecting in 10 seconds","Here it comes, connecting you in 10 seconds..","Nice spot, connecting you to the UAV in 10 seconds!"} + } + }; + callevents[] = { + { + "(diag_tickTime - EPOCH_task_startTime) > 40", + "_targetPos = (getPosATL player) findEmptyPosition [25,250,""I_UAV_01_F""];axeUAV = createVehicle[""I_UAV_01_F"", _targetPos, [], 10, ""CAN_COLLIDE""];axeUAV disableTIEquipment true;_driver = (group player) createUnit[""I_UAV_AI"", position axeUAV, [], 0, ""CAN_COLLIDE""];_driver moveInAny axeUAV;[axeUAV] remoteExec [""EPOCH_localCleanup"",2]", + {} + } + }; + abandonTime = 240; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive player)"; + faileddialogues[] = {"Lost it already.. Mission Over","Not a willing pilot eh ? Try again later.","Equipment Lost.. Mission Failed !"}; + failedCall = "player unassignItem 'B_UavTerminal'; player removeItem 'B_UavTerminal'"; + completeCondition = "!(isNull axeUAV)"; + completedialogues[] = {}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"doUAVAttach"}; +}; +class doUAVAttach{ + author = "axeman"; + title = "UAV Spawn"; + simpleTask = 0; + items[] = {}; + triggerDelay = 2; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "player action [""SwitchToUAVDriver"", axeUAV];addToRemainsCollector[axeUAV];"; + cleanUpCall = "[(driver axeUAV)] joinSilent grpNull; removeFromRemainsCollector [axeUAV]; deletevehicle axeUAV"; + dialogues[] = { + { + "true", + {"Woohoo, here we go.. Get it in the air.","Get it in the air, no time to waste","You are a natural kid. Let's fly."} + } + }; + callevents[] = {}; + abandonTime = 1200; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV) || !(alive player) || cameraon != axeUAV"; + faileddialogues[] = {"Lost it already.. Mission Over","Not a natural pilot. Try again later.","Mission Failed !"}; + failedCall = "player unassignItem 'B_UavTerminal'; player removeItem 'B_UavTerminal'"; + completeCondition = "(getPosATL axeUAV select 2) > 10"; + completedialogues[] = {}; + completedCALL = "if(SunOrMoon < 1)then{player action [""lightOn"", axeUAV];};"; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"takeOffUAV"}; +}; +class takeOffUAV{ + author = "axeman"; + title = "Pilot the UAV"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "[(driver axeUAV)] joinSilent grpNull; removeFromRemainsCollector [axeUAV]; deletevehicle axeUAV"; + dialogues[] = { + { + "alive axeUAV", + {"Great start.. Lets take this thing for a ride.","We're off, get some practice, I am finding you a target.","Get clear of this area, I am calculating your target."} + }, + { + "alive axeUAV", + {"Keep it up, you are doing a great job.","Try and find some targets on your way.","Don't get shot down now !"} + } + }; + callevents[] = { + { + "diag_tickTime - EPOCH_task_startTime > 30", + "", + {"uavMission1","uavMission2"} + } + }; + abandonTime = 240; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV) || !(alive player) || cameraon != axeUAV"; + faileddialogues[] = {"Oh dear, that didn't go well..","Try again later.","Misison Failed !"}; + failedCall = "player unassignItem 'B_UavTerminal'; player removeItem 'B_UavTerminal'"; + completeCondition = "false"; + completedialogues[] = {}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {}; +}; +class uavMission1{ + author = "axeman"; + title = "Trader House Recon"; + simpleTask = 0; + items[] = {}; + triggerDelay = 0; + triggerintervall = 8; + markerType = 2; + markerVisible = 0; + markerRadius = 180; + markerText = "Trader House Recon"; + initcall = "_obj = selectRandom (nearestObjects [axeUAV,[""HOUSE""],2500]);EPOCH_taskMarkerPos = getPosATL _obj;"; + cleanUpCall = "[(driver axeUAV)] joinSilent grpNull; removeFromRemainsCollector [axeUAV]; deletevehicle axeUAV;player unassignItem 'B_UavTerminal'; player removeItem 'B_UavTerminal'"; + dialogues[] = { + { + "true", + {"I need some recon on a nearby house","We need intelligence on a potential trader location.","Help us gather intel on a trader house !"} + }, + { + "EPOCH_taskMarkerPos distance axeUAV > 450", + {"I have marked your map, it will be nearby.","Check you map, there is a marker near a safehouse","Search your map for the landing zone, near a traders safehouse."} + }, + { + "EPOCH_taskMarkerPos distance axeUAV < 450", + {"Land it nearby and switch off the engine.","You need to land by the house, quietly.","Drop the UAV in the marker, then keep quiet."} + } + }; + callevents[] = {}; + abandonTime = 900; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV) || !(alive player) || cameraon != axeUAV"; + faileddialogues[] = {"Oh dear, Mission Over !","Mission Failed !"}; + completeCondition = "!(isengineOn axeUAV) && EPOCH_taskMarkerPos distance axeUAV < 275"; + completedialogues[] = {"Great work, here's your reward."}; + completedCALL = "[(driver axeUAV)] joinSilent grpNull; removeFromRemainsCollector [axeUAV]; deletevehicle axeUAV"; + reward[] = {"ItemGoldBar","ItemGoldBar"}; + cleanUp = 1; + nextTask[] = {}; +}; +class uavMission2{ + author = "axeman"; + title = "Deliver UAV To Trader"; + simpleTask = 0; + items[] = {}; + triggerDelay = 0; + triggerintervall = 8; + markerType = 2; + markerVisible = 0; + markerRadius = 220; + markerText = "UAV Trader"; + initcall = "_obj = selectRandom (Epoch_Traders select {player distance _x > 50 && alive _x && !((_x getvariable ['AI_SLOT',-1]) == -1)});EPOCH_taskMarkerPos = getPosATL _obj;"; + cleanUpCall = "[(driver axeUAV)] joinSilent grpNull; removeFromRemainsCollector [axeUAV]; deletevehicle axeUAV;player unassignItem 'B_UavTerminal'; player removeItem 'B_UavTerminal'"; + dialogues[] = { + { + "true", + {"I need this UAV delivering to my buddy","Recon a rogue trader, land this near his location.","Land this UAV near the target trader."} + }, + { + "EPOCH_taskMarkerPos distance axeUAV > 450", + {"Check your map for his location, you will need to land nearby.","I have marked your map with his location.","Fly to the location marked on your map, then land."} + }, + { + "EPOCH_taskMarkerPos distance axeUAV < 450", + {"Get this thing down and the engine off.","Land in the zone and switch your engine off quickly.","Find a landing spot in the area and keep quiet."} + } + }; + callevents[] = {}; + abandonTime = 900; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV) || !(alive player) || cameraon != axeUAV"; + faileddialogues[] = {"Oh dear, Mission Over !","Mission Failed !"}; + completeCondition = "!(isengineOn axeUAV) && EPOCH_taskMarkerPos distance axeUAV < 275"; + completedialogues[] = {"Great work, here's your reward."}; + completedCALL = "[(driver axeUAV)] joinSilent grpNull; removeFromRemainsCollector [axeUAV]; deletevehicle axeUAV"; + reward[] = {"ItemGoldBar","ItemGoldBar"}; + cleanUp = 1; + nextTask[] = {}; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissionsTasks.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissionsTasks.hpp new file mode 100644 index 0000000..9055dc7 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgMissionsTasks.hpp @@ -0,0 +1,23 @@ +class inGameTasks { + + //Preset custom vars for use in task conditions - Count must match + //At task start the varNames variables will be added as missionNameSpace variables using the corresponding varData. + varName[] = {"_milBuildings","_testVar"}; + varData[] = {{"Cargo_HQ_base_F","Cargo_Tower_base_F","Cargo_Patrol_base_F"},"""TestVal"""}; + + //Filter out building classes from spawn areas. Some buildings just aren't suitable. NB. A garrison (buildingPos) point is required when spawning items in a building. + filterBuilds[] = {"Land_i_Addon_03_V1_F","Land_Offices_01_V1_F"}; + + //Path to task files (sqf,fsm etc.) + file = "epoch_code\compile\missions\tasks"; + //Path to main task control fsm - NB. Requires manually setting in mission accept sqf. + fsmpath = "epoch_code\system"; + +#include "CfgMissions\CfgTraderDiags.hpp" +#include "CfgMissions\CfgmissionDelivery.hpp" +#include "CfgMissions\CfgmissionUav.hpp" +#include "CfgMissions\CfgmissionMilitary.hpp" +#include "CfgMissions\CfgmissionMonster.hpp" +#include "CfgMissions\CfgmissionFish.hpp" +#include "CfgMissions\CfgDocCheck.hpp" +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgObjectInteractions.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgObjectInteractions.hpp new file mode 100644 index 0000000..ca3f103 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgObjectInteractions.hpp @@ -0,0 +1,321 @@ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {}; + @description = "Epoch object interaction configs."; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgObjectInteractions.hpp"; +*/ +class CfgObjectInteractions +{ + class Default + { + interactMode = 0; + distance = 0; + toxicChance = 0; + bleedChance = 0; + bloodpChance = 0; + fatigueChance = 0; + bleedAmount = 0; + bloodpAmount = 0; + toxicAmount = 0; + soundEffect[] = {}; + soundEffectGlobal = 0; + animationEffect[] = {}; + animationEffectGlobal = 0; + canSee = "false"; + ppEffect[] = {}; + aliveState = 0; + interactAttributes[] = {}; + }; + class Land_MPS_EPOCH : Default {}; + class container_epoch : Default {}; + class PlotPole_EPOCH : Default + { + interactMode = 1; + }; + class Tipi_EPOCH : Default + { + interactMode = 4; + }; + class Tipi_SIM_EPOCH : Default + { + interactMode = 1; + }; + class TentA_EPOCH : Default + { + interactMode = 4; + }; + class TentA_SIM_EPOCH : Default + { + interactMode = 1; + }; + class TentDome_EPOCH : Default + { + interactMode = 4; + }; + class TentDome_SIM_EPOCH : Default + { + interactMode = 1; + }; + class StorageShelf_EPOCH : Default + { + interactMode = 4; + }; + class WorkBench_EPOCH : Default + { + interactMode = 4; + }; + class Garden_EPOCH : Default + { + interactMode = 4; + }; + class SolarCharger_EPOCH : Default + { + interactMode = 4; + }; + class SolarChargerXL_EPOCH : Default + { + interactMode = 4; + }; + class FieldToilet_EPOCH : Default + { + interactMode = 4; + }; + class Foundation_EPOCH : Default + { + interactMode = 1; + }; + class WoodFoundation_EPOCH : Default + { + interactMode = 1; + }; + class Sheep_random_EPOCH : Default + { + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Soiled",1}}; + }; + class Goat_random_EPOCH : Default + { + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Soiled",1}}; + }; + class Cock_random_EPOCH : Default + { + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Soiled",1}}; + }; + class Hen_random_EPOCH : Default + { + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Soiled",1}}; + }; + class Rabbit_EPOCH : Default + { + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Soiled",1}}; + }; + class Fin_random_EPOCH : Default + { + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Karma",-100},{"Soiled",1}}; + }; + class Alsatian_Random_EPOCH : Default + { + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Karma",-100},{"Soiled",1}}; + }; + class Epoch_Sapper_F : Default + { + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Toxicity",20,1},{"Soiled",20,1}}; + }; + class Epoch_SapperG_F : Default + { + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Toxicity",50,1},{"Soiled",50,1}}; + }; + class Epoch_SapperB_F : Default + { + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Toxicity",20,1},{"Soiled",20,1}}; + }; + class I_UAV_01_F : Default + { + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Energy",20,1}}; + }; + class Epoch_Female_F : Default + { + interactMode = 2; + }; + class Epoch_Male_F : Default + { + interactMode = 2; + }; + class C_man_1 : Default + { + interactMode = 2; + }; + class SapperHead_SIM_EPOCH : Default + { + interactMode = 0; + interactAttributes[] = {{"Soiled",1}}; + }; + class SapperCorpse_SIM_EPOCH : Default + { + interactMode = 0; + interactAttributes[] = {{"Soiled",1}}; + }; + class Snake_random_EPOCH : Default + { + interactMode = 3; + distance = 3; + toxicChance = 0.2; + toxicAmount = 10; + bloodpChance = 1; + fatigueChance = 0.5; + bleedAmount = 30; + bloodpAmount = 3; + soundEffect[] = {"snake_bite0"}; + canSee = "!(lineIntersects[eyePos _unit, aimPos _target, _unit, _target])"; + ppEffect[] = {}; + aliveState = 0; + interactAttributes[] = {{"Toxicity",20,1},{"Soiled",1}}; + }; + class Snake2_random_EPOCH : Default + { + interactMode = 3; + distance = 3; + toxicChance = 0.1; + toxicAmount = 10; + bloodpChance = 1; + fatigueChance = 0.5; + bleedAmount = 30; + bloodpAmount = 3; + soundEffect[] = {"snake_bite0"}; + canSee = "!(lineIntersects[eyePos _unit, aimPos _target, _unit, _target])"; + ppEffect[] = {}; + aliveState = 0; + interactAttributes[] = {{"Toxicity",10,1},{"Soiled",1}}; + }; + class GreatWhite_F : Default + { + interactMode = 3; + distance = 6; + toxicChance = 0; + bleedChance = 1; + bloodpChance = 1; + fatigueChance = 1; + bleedAmount = 100; + bloodpAmount = 3; + canSee = "true"; + ppEffect[] = {}; + aliveState = 1; + interactAttributes[] = {}; + }; + class SmokeShellCustom : Default + { + distance = 6; + toxicChance = 1; + toxicAmount = 100; + bleedChance = 0; + bloodpChance = 1; + fatigueChance = 1; + bleedAmount = 0; + bloodpAmount = 3; + canSee = "true"; + ppEffect[] = {}; + }; + class SmokeShellToxic_Ammo : SmokeShellCustom {}; + class SmokeShellToxicSapper : SmokeShellCustom {}; + class Epoch_Cloak_F : Default + { + distance = 30; + toxicChance = 0; + bloodpChance = 0.9; + fatigueChance = 0.5; + bleedAmount = 66; + bloodpAmount = 3; + soundEffect[] = {"cultist_nearby"}; + canSee = "!(lineIntersects[eyePos _unit, aimPos _target, _unit, _target])"; + ppEffect[] = {{{"filmGrain",2005,{0.1,-1,0.05,0.05,2,false},1},{"chromAberration",2006,{0.01,0.01,true},5},{"colorCorrections",2007,{1,1,0,{1.5,-1,-1.5,0.5},{5,3.5,-5,-0.5},{-3,5,-5,-0.5}},5},{"radialBlur",2008,{0.02,0.02,0.15,0.15},5}},2,{{},{{0,0,true},5},{{1,1,-0.01,{0.0,0.0,0.0,0.0},{1.5,1,1.2,0.6},{0.199,0.587,0.114,0.2}},5},{{0,0,0,0},5}},5,{}}; + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Toxicity",20,1},{"Soiled",20,1}}; + }; + class EPOCH_RyanZombie_1 : Default + { + distance = 3; + toxicChance = 0.1; + toxicAmount = 10; + bloodpChance = 0.9; + fatigueChance = 0.4; + bleedAmount = 30; + bloodpAmount = 3; + soundEffect[] = {{"ryanzombies\sounds\attack1.ogg",400},{"ryanzombies\sounds\attack2.ogg",400},{"ryanzombies\sounds\attack3.ogg",400},{"ryanzombies\sounds\attack4.ogg",400},{"ryanzombies\sounds\attack5.ogg",400}}; + soundEffectGlobal = 1; + animationEffect[] = {"AwopPercMstpSgthWnonDnon_throw"}; + animationEffectGlobal = 1; + canSee = "!(lineIntersects[eyePos _unit, aimPos _target, _unit, _target])"; + ppEffect[] = {}; + interactMode = 3; + aliveState = 1; + interactAttributes[] = {{"Toxicity",5,1},{"Soiled",10,1}}; + }; + class EPOCH_RyanZombie_2 : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3 : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4 : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5 : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_1_C : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_2_C : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3_C : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4_C : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5_C : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_1_Sp : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_2_Sp : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3_Sp : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4_Sp : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5_Sp : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_1_B : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_2_B : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3_B : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4_B : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5_B : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_1_W : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_2_W : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3_W : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4_W : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5_W : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_1_M : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_2_M : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3_M : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4_M : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5_M : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_1_S : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_2_S : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3_S : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4_S : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5_S : EPOCH_RyanZombie_1 {}; + class IG_Box_s : Default + { + interactMode = 4; + }; + class IG_Box_l : Default + { + interactMode = 4; + }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgPainting.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgPainting.hpp new file mode 100644 index 0000000..2991364 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgPainting.hpp @@ -0,0 +1,57 @@ +class CfgPainting { + class DefaultVehicle + { + UseArmaDefaultColors = "true"; + PaintingCosts = 500; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Paint.paa"; + }; +}; + +/* +############################ Start Full Example ################################# +class CfgPainting { + class DefaultVehicle + { + UseArmaDefaultColors = "true"; // Use all availabe default colours from Arma (for all Vehicles) + PaintingCosts = 500; // Crypto costs for Painting + icon = "x\addons\a3_epoch_code\Data\UI\buttons\Paint.paa"; // Icon for the DynaMenu + + class Pink // Define custom colors for ALL Vehicle classes within "DefaultVehicle" + { + ColorName = "Pink"; // Will be used as Tooltip in DynaMenu + iconcolor[] = {1,0.0784,0.576,1}; // Color for the Icon [R,G,B,ALPHA] (0-1) + textures[] = { // Texture array. Use "#(rgb,8,8,3)color(R,G,B,1)" for simple colors + "#(rgb,8,8,3)color(1,0.0784,0.576,1)" // Texture for first selection (most vehicles only need one selection texture) + }; + }; + }; + class C_Hatchback_01_EPOCH : DefaultVehicle // Define custom colors for a unique Vehicle Class + { + UseArmaDefaultColors = "true"; // Use also all availabe default colours from Arma (for this Vehicle Class) + class Green + { + ColorName = "Green"; + iconcolor[] = {0,1,0,1}; + textures[] = { + "#(rgb,8,8,3)color(0,1,0,1)" + }; + }; + }; + class C_Hatchback_01_EPOCH1: C_Hatchback_01_EPOCH{}; // Inherit classes from already defined classes like this + class C_Hatchback_01_EPOCH2: C_Hatchback_01_EPOCH{}; + class C_Quadbike_01_EPOCH : DefaultVehicle + { + UseArmaDefaultColors = "false"; // This Quad can only be colored with the defined color(s) + class Black + { + ColorName = "Black"; + iconcolor[] = {0,0,0,1}; + textures[] = { + "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_BLACK_CO.paa", + "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVBLACK_CO.paa" + }; + }; + }; +}; +############################ End Full Example ################################# +*/ \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgPricing.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgPricing.hpp new file mode 100644 index 0000000..267a894 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgPricing.hpp @@ -0,0 +1,6465 @@ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {}; + @description = "Prices for Trading system."; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgPricing.hpp"; +*/ +class CfgPricing +{ + class ItemEmptyTin + { + price = 1; + }; + class ItemSodaEmpty + { + price = 1; + }; + class ItemSodaAlpineDude + { + price = 5; + }; + class ItemHotwire + { + price = 15; + }; + class ItemKeyKit + { + price = 15; + }; + class ItemBarrelF + { + price = 200; + }; + class ItemBarrelE + { + price = 50; + }; + class ItemPipe + { + price = 10; + }; + class ItemKey + { + price = 10; + }; + class ItemKeyBlue + { + price = 10; + }; + class ItemKeyGreen + { + price = 10; + }; + class ItemKeyRed + { + price = 10; + }; + class ItemKeyYellow + { + price = 10; + }; + class ItemDoc1 + { + price = 10; + }; + class ItemDoc2 + { + price = 10; + }; + class ItemDoc3 + { + price = 10; + }; + class ItemDoc4 + { + price = 10; + }; + class ItemDoc5 + { + price = 10; + }; + class ItemDoc6 + { + price = 10; + }; + class ItemDoc7 + { + price = 10; + }; + class ItemDoc8 + { + price = 10; + }; + class ItemVehDoc1 + { + price = 10; + }; + class ItemVehDoc2 + { + price = 10; + }; + class ItemVehDoc3 + { + price = 10; + }; + class ItemVehDoc4 + { + price = 10; + }; + class ItemVehDocRara + { + price = 25; + }; + class ItemWaterPurificationTablets + { + price = 10; + }; + class ItemBulb + { + price = 10; + }; + class ItemBurlap + { + price = 10; + }; + class SmeltingTools_EPOCH + { + price = 75; + }; + class ItemBriefcaseE + { + price = 10; + }; + class ItemBriefcaseGold100oz + { + price = 10000; + }; + class ItemBriefcaseSilver100oz + { + price = 1000; + }; + class ItemAluminumBar + { + price = 10; + }; + class ItemAluminumBar10oz + { + price = 100; + }; + class ItemCopperBar + { + price = 100; + }; + class ItemCopperBar10oz + { + price = 1000; + }; + class ItemTinBar + { + price = 1; + }; + class ItemTinBar10oz + { + price = 10; + }; + class ItemPlywoodPack + { + price = 10; + }; + class ItemComboLock + { + price = 45; + }; + class Item_AssaultPack_cbr + { + price = 10; + }; + class Item_AssaultPack_dgtl + { + price = 10; + }; + class Item_AssaultPack_khk + { + price = 10; + }; + class Item_AssaultPack_mcamo + { + price = 10; + }; + class Item_AssaultPack_ocamo + { + price = 10; + }; + class Item_AssaultPack_rgr + { + price = 10; + }; + class Item_AssaultPack_sgg + { + price = 10; + }; + class Item_AssaultPack_blk + { + price = 10; + }; + class Item_Carryall_cbr + { + price = 40; + }; + class Item_Carryall_khk + { + price = 40; + }; + class Item_Carryall_mcamo + { + price = 40; + }; + class Item_Carryall_ocamo + { + price = 40; + }; + class Item_Carryall_oli + { + price = 40; + }; + class Item_Carryall_oucamo + { + price = 40; + }; + class Item_FieldPack_blk + { + price = 15; + }; + class Item_FieldPack_cbr + { + price = 15; + }; + class Item_FieldPack_khk + { + price = 15; + }; + class Item_FieldPack_ocamo + { + price = 15; + }; + class Item_FieldPack_oli + { + price = 15; + }; + class Item_FieldPack_oucamo + { + price = 15; + }; + class Item_Kitbag_cbr + { + price = 25; + }; + class Item_Kitbag_mcamo + { + price = 25; + }; + class Item_Kitbag_rgr + { + price = 25; + }; + class Item_Kitbag_sgg + { + price = 25; + }; + class Item_TacticalPack_blk + { + price = 20; + }; + class Item_TacticalPack_mcamo + { + price = 20; + }; + class Item_TacticalPack_ocamo + { + price = 20; + }; + class Item_TacticalPack_oli + { + price = 20; + }; + class Item_TacticalPack_rgr + { + price = 20; + }; + class Item_smallbackpack_red + { + price = 22; + }; + class Item_smallbackpack_green + { + price = 22; + }; + class Item_smallbackpack_teal + { + price = 22; + }; + class Item_smallbackpack_pink + { + price = 22; + }; + class ChainSaw + { + price = 125; + }; + class CircuitParts + { + price = 50; + }; + class ItemCoolerE + { + price = 50; + }; + class JackKit + { + price = 25; + }; + class ItemLockbox + { + price = 250; + tax = 0.5; + }; + class ItemSafe + { + price = 1250; + tax = 0.5; + }; + class ItemSafe_s + { + price = 1250; + tax = 0.5; + }; + class ItemGunSafe + { + price = 1250; + tax = 0.5; + }; + class ItemCompass + { + price = 3; + }; + class ItemGPS + { + price = 20; + }; + class ItemGeigerCounter_EPOCH + { + price = 500; + }; + class EpochRadio0 + { + price = 2; + }; + class EpochRadio1 + { + price = 4; + }; + class EpochRadio2 + { + price = 6; + }; + class EpochRadio3 + { + price = 8; + }; + class EpochRadio4 + { + price = 10; + }; + class EpochRadio5 + { + price = 12; + }; + class EpochRadio6 + { + price = 14; + }; + class EpochRadio7 + { + price = 16; + }; + class EpochRadio8 + { + price = 18; + }; + class EpochRadio9 + { + price = 20; + }; + class VehicleRepair + { + price = 35; + }; + class VehicleRepairLg + { + price = 50; + }; + class SpareTire + { + price = 50; + }; + class EngineParts + { + price = 40; + }; + class EngineBlock + { + price = 60; + }; + class ItemGlass + { + price = 35; + }; + class ItemDuctTape + { + price = 25; + }; + class ItemRotor + { + price = 40; + }; + class FuelTank + { + price = 48; + }; + class WhiskeyNoodle + { + price = 80; + }; + class ItemWatch + { + price = 2; + }; + class Binocular + { + price = 4; + }; + class NVG_EPOCH + { + price = 35; + }; + class acc_flashlight + { + price = 5; + }; + class acc_flashlight_pistol + { + price = 5; + }; + class acc_pointer_IR + { + price = 5; + }; + class srifle_EBR_F + { + price = 150; + }; + class srifle_GM6_F + { + price = 150; + }; + class srifle_LRR_F + { + price = 200; + }; + class srifle_DMR_01_F + { + price = 200; + }; + class 20Rnd_762x51_Mag + { + price = 4; + tax = 0.9; + }; + class 5Rnd_127x108_Mag + { + price = 3; + tax = 0.9; + }; + class 5Rnd_127x108_APDS_Mag + { + price = 6; + tax = 0.9; + }; + class 7Rnd_408_Mag + { + price = 4; + tax = 0.9; + }; + class 10Rnd_762x54_Mag + { + price = 2; + tax = 0.9; + }; + class 10Rnd_338_Mag + { + price = 2; + tax = 0.9; + }; + class 130Rnd_338_Mag + { + price = 2; + tax = 0.9; + }; + class 10Rnd_93x64_DMR_05_Mag + { + price = 2; + tax = 0.9; + }; + class 10Rnd_127x54_Mag + { + price = 2; + tax = 0.9; + }; + class CUP_hgun_Compact + { + price = 20; + }; + class CUP_hgun_Duty + { + price = 20; + }; + class CUP_hgun_Phantom + { + price = 25; + }; + class CUP_hgun_Glock17 + { + price = 25; + }; + class CUP_hgun_Makarov + { + price = 20; + }; + class CUP_hgun_MicroUzi + { + price = 45; + }; + class CUP_hgun_TaurusTracker455 + { + price = 35; + }; + class CUP_hgun_PB6P9 + { + price = 30; + }; + class CUP_hgun_SA61 + { + price = 30; + }; + class CUP_hgun_M9 + { + price = 30; + }; + class CUP_hgun_TaurusTracker455_gold + { + price = 300; + }; + class CUP_hgun_Colt1911 + { + price = 30; + }; + class CUP_sgun_AA12 + { + price = 75; + }; + class CUP_sgun_M1014 + { + price = 50; + }; + class CUP_sgun_Saiga12K + { + price = 45; + }; + class CUP_srifle_AS50 + { + price = 200; + }; + class CUP_srifle_LeeEnfield + { + price = 100; + }; + class CUP_srifle_LeeEnfield_rail + { + price = 150; + }; + class CUP_srifle_M107_Base + { + price = 200; + }; + class CUP_srifle_M110 + { + price = 200; + }; + class CUP_srifle_M14 + { + price = 150; + }; + class CUP_srifle_M14_DMR + { + price = 150; + }; + class CUP_srifle_Mk12SPR + { + price = 200; + }; + class CUP_srifle_M24_des + { + price = 200; + }; + class CUP_srifle_M40A3 + { + price = 200; + }; + class CUP_srifle_ksvk + { + price = 150; + }; + class CUP_srifle_SVD + { + price = 200; + }; + class CUP_srifle_VSSVintorez + { + price = 200; + }; + class CUP_srifle_CZ750 + { + price = 200; + }; + class CUP_srifle_CZ550 + { + price = 200; + }; + class CUP_srifle_CZ550_rail + { + price = 200; + }; + class CUP_srifle_M24_wdl + { + price = 200; + }; + class CUP_srifle_SVD_des + { + price = 200; + }; + class CUP_srifle_AWM_des + { + price = 200; + }; + class CUP_srifle_AWM_wdl + { + price = 200; + }; + class CUP_srifle_G22_des + { + price = 200; + }; + class CUP_arifle_AK107_GL + { + price = 75; + }; + class CUP_arifle_AK47 + { + price = 75; + }; + class CUP_arifle_AK74 + { + price = 75; + }; + class CUP_arifle_AK74_GL + { + price = 75; + }; + class CUP_arifle_AK74M + { + price = 75; + }; + class CUP_arifle_AK74M_GL + { + price = 75; + }; + class CUP_arifle_AKM + { + price = 75; + }; + class CUP_arifle_AKS + { + price = 75; + }; + class CUP_arifle_AKS_Gold + { + price = 75; + }; + class CUP_arifle_AKS74 + { + price = 75; + }; + class CUP_arifle_RPK74 + { + price = 75; + }; + class CUP_arifle_L85A2_GL + { + price = 75; + }; + class CUP_arifle_M16A4_Base + { + price = 75; + }; + class CUP_arifle_M4A1_black + { + price = 75; + }; + class CUP_arifle_M4A1_BUIS_GL + { + price = 75; + }; + class CUP_arifle_M4A1_BUIS_camo_GL + { + price = 75; + }; + class CUP_arifle_M4A1_BUIS_desert_GL + { + price = 75; + }; + class CUP_arifle_M16A2 + { + price = 75; + }; + class CUP_arifle_M16A2_GL + { + price = 75; + }; + class CUP_arifle_M16A4_GL + { + price = 75; + }; + class CUP_arifle_M4A3_desert + { + price = 75; + }; + class CUP_arifle_M4A1 + { + price = 75; + }; + class CUP_arifle_CZ805_A1 + { + price = 75; + }; + class CUP_arifle_CZ805_GL + { + price = 75; + }; + class CUP_arifle_CZ805_B_GL + { + price = 75; + }; + class CUP_arifle_FNFAL + { + price = 100; + }; + class CUP_arifle_FNFAL_railed + { + price = 100; + }; + class CUP_arifle_FNFAL5061 + { + price = 100; + }; + class CUP_arifle_G36A + { + price = 75; + }; + class CUP_arifle_G36K + { + price = 75; + }; + class CUP_arifle_G36C + { + price = 75; + }; + class CUP_arifle_MG36 + { + price = 75; + }; + class CUP_arifle_Mk16_CQC + { + price = 75; + }; + class CUP_arifle_Mk16_CQC_FG + { + price = 75; + }; + class CUP_arifle_Mk16_CQC_SFG + { + price = 75; + }; + class CUP_arifle_Mk16_CQC_EGLM + { + price = 75; + }; + class CUP_arifle_Mk16_STD + { + price = 75; + }; + class CUP_arifle_Mk16_STD_FG + { + price = 75; + }; + class CUP_arifle_Mk16_STD_SFG + { + price = 75; + }; + class CUP_arifle_Mk16_STD_EGLM + { + price = 75; + }; + class CUP_arifle_Mk16_SV + { + price = 75; + }; + class CUP_arifle_Mk17_CQC + { + price = 75; + }; + class CUP_arifle_Mk17_CQC_FG + { + price = 75; + }; + class CUP_arifle_Mk17_CQC_SFG + { + price = 75; + }; + class CUP_arifle_Mk17_CQC_EGLM + { + price = 75; + }; + class CUP_arifle_Mk17_STD + { + price = 75; + }; + class CUP_arifle_Mk17_STD_FG + { + price = 75; + }; + class CUP_arifle_Mk17_STD_SFG + { + price = 75; + }; + class CUP_arifle_Mk17_STD_EGLM + { + price = 75; + }; + class CUP_arifle_Mk20 + { + price = 100; + }; + class CUP_arifle_Sa58RIS1 + { + price = 75; + }; + class CUP_arifle_Sa58RIS2_gl + { + price = 75; + }; + class CUP_arifle_XM8_Carbine_FG + { + price = 75; + }; + class CUP_arifle_XM8_Carbine + { + price = 75; + }; + class CUP_arifle_XM8_Carbine_GL + { + price = 75; + }; + class CUP_arifle_xm8_sharpshooter + { + price = 75; + }; + class CUP_arifle_xm8_SAW + { + price = 75; + }; + class CUP_arifle_XM8_Compact + { + price = 75; + }; + class CUP_arifle_XM8_Compact_Rail + { + price = 75; + }; + class CUP_arifle_CZ805_A2 + { + price = 75; + }; + class CUP_arifle_CZ805_B + { + price = 75; + }; + class CUP_arifle_Sa58P + { + price = 75; + }; + class CUP_arifle_Sa58P_des + { + price = 75; + }; + class CUP_arifle_Sa58V + { + price = 75; + }; + class CUP_arifle_Sa58V_camo + { + price = 75; + }; + class CUP_arifle_Sa58RIS1_des + { + price = 75; + }; + class CUP_arifle_Sa58RIS2 + { + price = 75; + }; + class CUP_arifle_Sa58RIS2_camo + { + price = 75; + }; + class CUP_arifle_AK107 + { + price = 75; + }; + class CUP_arifle_AKS74U + { + price = 75; + }; + class CUP_arifle_RPK74_45 + { + price = 75; + }; + class CUP_arifle_RPK74M + { + price = 75; + }; + class CUP_arifle_FNFAL5062 + { + price = 75; + }; + class CUP_arifle_FNFAL_OSW + { + price = 75; + }; + class CUP_arifle_G36A_camo + { + price = 75; + }; + class CUP_arifle_G36K_camo + { + price = 75; + }; + class CUP_arifle_G36C_camo + { + price = 75; + }; + class CUP_arifle_MG36_camo + { + price = 75; + }; + class CUP_arifle_L85A2 + { + price = 75; + }; + class CUP_arifle_L86A2 + { + price = 75; + }; + class CUP_arifle_M4A1_camo + { + price = 75; + }; + class CUP_arifle_M4A1_desert + { + price = 75; + }; + class CUP_arifle_XM8_Railed + { + price = 75; + }; + class CUP_lmg_L110A1 + { + price = 150; + }; + class CUP_lmg_M240 + { + price = 150; + }; + class CUP_lmg_minimipara + { + price = 150; + }; + class CUP_lmg_minimi + { + price = 150; + }; + class CUP_lmg_m249_para + { + price = 150; + }; + class CUP_lmg_M249_E2 + { + price = 150; + }; + class CUP_lmg_minimi_railed + { + price = 150; + }; + class CUP_lmg_m249_pip1 + { + price = 150; + }; + class CUP_lmg_m249_pip4 + { + price = 150; + }; + class CUP_lmg_L7A2 + { + price = 150; + }; + class CUP_lmg_PKM + { + price = 150; + }; + class CUP_lmg_Pecheneg + { + price = 150; + }; + class CUP_lmg_UK59 + { + price = 150; + }; + class CUP_lmg_m249_pip2 + { + price = 150; + }; + class CUP_lmg_m249_pip3 + { + price = 150; + }; + class CUP_lmg_m249_SQuantoon + { + price = 150; + }; + class CUP_lmg_M60E4 + { + price = 150; + }; + class CUP_lmg_Mk48_des + { + price = 150; + }; + class CUP_lmg_Mk48_wdl + { + price = 150; + }; + class CUP_smg_bizon + { + price = 75; + }; + class CUP_smg_EVO + { + price = 100; + }; + class CUP_smg_MP5SD6 + { + price = 125; + }; + class CUP_smg_MP5A5 + { + price = 100; + }; + class CUP_10Rnd_9x19_Compact + { + price = 3; + tax = 0.9; + }; + class CUP_18Rnd_9x19_Phantom + { + price = 3; + tax = 0.9; + }; + class CUP_17Rnd_9x19_glock17 + { + price = 3; + tax = 0.9; + }; + class CUP_8Rnd_9x18_Makarov_M + { + price = 3; + tax = 0.9; + }; + class CUP_8Rnd_9x18_MakarovSD_M + { + price = 3; + tax = 0.9; + }; + class CUP_30Rnd_9x19_UZI + { + price = 3; + tax = 0.9; + }; + class CUP_6Rnd_45ACP_M + { + price = 3; + tax = 0.9; + }; + class CUP_20Rnd_B_765x17_Ball_M + { + price = 3; + tax = 0.9; + }; + class CUP_15Rnd_9x19_M9 + { + price = 3; + tax = 0.9; + }; + class CUP_7Rnd_45ACP_1911 + { + price = 3; + tax = 0.9; + }; + class CUP_20Rnd_B_AA12_Pellets + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_B_AA12_74Slug + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_B_AA12_HE + { + price = 15; + tax = 0.9; + }; + class CUP_8Rnd_B_Beneli_74Slug + { + price = 5; + tax = 0.9; + }; + class CUP_8Rnd_B_Beneli_74Pellets + { + price = 5; + tax = 0.9; + }; + class CUP_8Rnd_B_Saiga12_74Slug_M + { + price = 5; + tax = 0.9; + }; + class CUP_8Rnd_B_Saiga12_74Pellets_M + { + price = 5; + tax = 0.9; + }; + class CUP_5Rnd_127x99_as50_M + { + price = 5; + tax = 0.9; + }; + class CUP_10x_303_M + { + price = 5; + tax = 0.9; + }; + class CUP_10Rnd_127x99_m107 + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_762x51_B_M110 + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_TE1_Yellow_Tracer_762x51_M110 + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_TE1_Red_Tracer_762x51_M110 + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_TE1_Green_Tracer_762x51_M110 + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_TE1_White_Tracer_762x51_M110 + { + price = 5; + tax = 0.9; + }; + class CUP_5Rnd_762x51_M24 + { + price = 5; + tax = 0.9; + }; + class CUP_5Rnd_127x108_KSVK_M + { + price = 5; + tax = 0.9; + }; + class CUP_10Rnd_762x54_SVD_M + { + price = 5; + tax = 0.9; + }; + class CUP_10Rnd_9x39_SP5_VSS_M + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_9x39_SP5_VSS_M + { + price = 5; + tax = 0.9; + }; + class CUP_10Rnd_762x51_CZ750_Tracer + { + price = 5; + tax = 0.9; + }; + class CUP_10Rnd_762x51_CZ750 + { + price = 5; + tax = 0.9; + }; + class CUP_5x_22_LR_17_HMR_M + { + price = 5; + tax = 0.9; + }; + class CUP_5Rnd_86x70_L115A1 + { + price = 5; + tax = 0.9; + }; + class CUP_5Rnd_762x67_G22 + { + price = 5; + tax = 0.9; + }; + class CUP_30Rnd_545x39_AK_M + { + price = 5; + tax = 0.9; + }; + class CUP_30Rnd_TE1_Green_Tracer_545x39_AK_M + { + price = 5; + tax = 0.9; + }; + class CUP_30Rnd_TE1_Red_Tracer_545x39_AK_M + { + price = 5; + tax = 0.9; + }; + class CUP_30Rnd_TE1_White_Tracer_545x39_AK_M + { + price = 5; + tax = 0.9; + }; + class CUP_30Rnd_TE1_Yellow_Tracer_545x39_AK_M + { + price = 5; + tax = 0.9; + }; + class CUP_45Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M + { + price = 5; + tax = 0.9; + }; + class CUP_30Rnd_762x39_AK47_M + { + price = 5; + tax = 0.9; + }; + class CUP_75Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_762x51_CZ805B + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_TE1_Yellow_Tracer_762x51_CZ805B + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_TE1_Red_Tracer_762x51_CZ805B + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_TE1_Green_Tracer_762x51_CZ805B + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_TE1_White_Tracer_762x51_CZ805B + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_762x51_FNFAL_M + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_762x51_B_SCAR + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_TE1_Yellow_Tracer_762x51_SCAR + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_TE1_Red_Tracer_762x51_SCAR + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_TE1_Green_Tracer_762x51_SCAR + { + price = 5; + tax = 0.9; + }; + class CUP_20Rnd_TE1_White_Tracer_762x51_SCAR + { + price = 5; + tax = 0.9; + }; + class CUP_30Rnd_Sa58_M_TracerG + { + price = 5; + tax = 0.9; + }; + class CUP_30Rnd_Sa58_M_TracerR + { + price = 5; + tax = 0.9; + }; + class CUP_30Rnd_Sa58_M_TracerY + { + price = 5; + tax = 0.9; + }; + class CUP_30Rnd_Sa58_M + { + price = 5; + tax = 0.9; + }; + class CUP_100Rnd_TE4_LRT4_White_Tracer_762x51_Belt_M + { + price = 7; + tax = 0.9; + }; + class CUP_100Rnd_TE4_LRT4_Red_Tracer_762x51_Belt_M + { + price = 7; + tax = 0.9; + }; + class CUP_100Rnd_TE4_LRT4_762x54_PK_Tracer_Green_M + { + price = 7; + tax = 0.9; + }; + class CUP_50Rnd_UK59_762x54R_Tracer + { + price = 5; + tax = 0.9; + }; + class CUP_64Rnd_9x19_Bizon_M + { + price = 5; + tax = 0.9; + }; + class CUP_64Rnd_Green_Tracer_9x19_Bizon_M + { + price = 4; + tax = 0.9; + }; + class CUP_64Rnd_Red_Tracer_9x19_Bizon_M + { + price = 4; + tax = 0.9; + }; + class CUP_64Rnd_White_Tracer_9x19_Bizon_M + { + price = 4; + tax = 0.9; + }; + class CUP_64Rnd_Yellow_Tracer_9x19_Bizon_M + { + price = 4; + tax = 0.9; + }; + class CUP_30Rnd_9x19_MP5 + { + price = 4; + tax = 0.9; + }; + class CUP_item_Money + { + price = 1000; + }; + class CUP_item_Kostey_photos + { + price = 100; + }; + class CUP_item_Kostey_map_case + { + price = 100; + }; + class CUP_item_Kostey_notebook + { + price = 100; + }; + class CUP_item_CDF_dogtags + { + price = 100; + }; + class CUP_item_Moscow_Bombing_File + { + price = 100; + }; + class CUP_item_Cobalt_File + { + price = 100; + }; + class CUP_muzzle_snds_M110 + { + price = 5; + }; + class CUP_muzzle_snds_M14 + { + price = 5; + }; + class CUP_muzzle_PBS4 + { + price = 5; + }; + class CUP_muzzle_PB6P9 + { + price = 5; + }; + class CUP_muzzle_Bizon + { + price = 5; + }; + class CUP_muzzle_snds_M9 + { + price = 5; + }; + class CUP_muzzle_snds_MicroUzi + { + price = 5; + }; + class CUP_muzzle_snds_AWM + { + price = 5; + }; + class CUP_muzzle_snds_G36_black + { + price = 5; + }; + class CUP_muzzle_snds_G36_desert + { + price = 5; + }; + class CUP_muzzle_snds_L85 + { + price = 5; + }; + class CUP_muzzle_snds_M16_camo + { + price = 5; + }; + class CUP_muzzle_snds_M16 + { + price = 5; + }; + class CUP_muzzle_snds_SCAR_L + { + price = 5; + }; + class CUP_muzzle_mfsup_SCAR_L + { + price = 5; + }; + class CUP_muzzle_snds_SCAR_H + { + price = 5; + }; + class CUP_muzzle_mfsup_SCAR_H + { + price = 5; + }; + class CUP_muzzle_snds_XM8 + { + price = 5; + }; + class CUP_optic_PSO_1 + { + price = 10; + }; + class CUP_optic_PSO_3 + { + price = 10; + }; + class CUP_optic_Kobra + { + price = 10; + }; + class CUP_optic_GOSHAWK + { + price = 10; + }; + class CUP_optic_NSPU + { + price = 10; + }; + class CUP_optic_PechenegScope + { + price = 10; + }; + class CUP_optic_SB_3_12x50_PMII + { + price = 10; + }; + class CUP_optic_AN_PAS_13c2 + { + price = 10; + }; + class CUP_optic_LeupoldMk4 + { + price = 10; + }; + class CUP_optic_HoloBlack + { + price = 10; + }; + class CUP_optic_HoloWdl + { + price = 10; + }; + class CUP_optic_HoloDesert + { + price = 10; + }; + class CUP_optic_Eotech533 + { + price = 10; + }; + class CUP_optic_Eotech533Grey + { + price = 10; + }; + class CUP_optic_CompM4 + { + price = 10; + }; + class CUP_optic_SUSAT + { + price = 10; + }; + class CUP_optic_ACOG + { + price = 10; + }; + class CUP_optic_CWS + { + price = 10; + }; + class CUP_optic_Leupold_VX3 + { + price = 10; + }; + class CUP_optic_AN_PVS_10 + { + price = 10; + }; + class CUP_optic_CompM2_Black + { + price = 10; + }; + class CUP_optic_CompM2_Woodland + { + price = 10; + }; + class CUP_optic_CompM2_Woodland2 + { + price = 10; + }; + class CUP_optic_CompM2_Desert + { + price = 10; + }; + class CUP_optic_RCO + { + price = 10; + }; + class CUP_optic_RCO_desert + { + price = 10; + }; + class CUP_optic_LeupoldM3LR + { + price = 15; + }; + class CUP_optic_LeupoldMk4_10x40_LRT_Desert + { + price = 15; + }; + class CUP_optic_LeupoldMk4_10x40_LRT_Woodland + { + price = 15; + }; + class CUP_optic_ElcanM145 + { + price = 10; + }; + class CUP_optic_AN_PAS_13c1 + { + price = 10; + }; + class CUP_optic_LeupoldMk4_CQ_T + { + price = 10; + }; + class CUP_optic_ELCAN_SpecterDR + { + price = 10; + }; + class CUP_optic_LeupoldMk4_MRT_tan + { + price = 10; + }; + class CUP_optic_SB_11_4x20_PM + { + price = 10; + }; + class CUP_optic_ZDDot + { + price = 10; + }; + class CUP_optic_MRad + { + price = 10; + }; + class CUP_optic_TrijiconRx01_desert + { + price = 10; + }; + class CUP_optic_TrijiconRx01_black + { + price = 10; + }; + class CUP_optic_AN_PVS_4 + { + price = 10; + }; + class CUP_acc_Glock17_Flashlight + { + price = 5; + }; + class CUP_acc_ANPEQ_15 + { + price = 5; + }; + class CUP_acc_ANPEQ_2 + { + price = 5; + }; + class CUP_acc_Flashlight + { + price = 5; + }; + class CUP_acc_Flashlight_wdl + { + price = 5; + }; + class CUP_acc_Flashlight_desert + { + price = 5; + }; + class CUP_acc_XM8_light_module + { + price = 5; + }; + class CUP_acc_ANPEQ_2_camo + { + price = 5; + }; + class CUP_acc_ANPEQ_2_desert + { + price = 5; + }; + class CUP_acc_ANPEQ_2_grey + { + price = 5; + }; + class CUP_acc_CZ_M3X + { + price = 5; + }; + class CUP_bipod_Harris_1A2_L + { + price = 0; + }; + class CUP_bipod_VLTOR_Modpod + { + price = 0; + }; + class CUP_Mxx_camo + { + price = 10; + }; + class CUP_Mxx_camo_half + { + price = 10; + }; + class CUP_SVD_camo_g + { + price = 10; + }; + class CUP_SVD_camo_g_half + { + price = 10; + }; + class CUP_SVD_camo_d + { + price = 10; + }; + class CUP_SVD_camo_d_half + { + price = 10; + }; + class PaintCanClear + { + price = 1; + }; + class PaintCanBlk + { + price = 1; + }; + class PaintCanBlu + { + price = 1; + }; + class PaintCanBrn + { + price = 1; + }; + class PaintCanGrn + { + price = 1; + }; + class PaintCanOra + { + price = 1; + }; + class PaintCanPur + { + price = 1; + }; + class PaintCanRed + { + price = 1; + }; + class PaintCanTeal + { + price = 1; + }; + class PaintCanYel + { + price = 1; + }; + class ItemDocument + { + price = 5; + }; + class ItemDocumentMission + { + price = 5; + }; + class ItemMixOil + { + price = 5; + }; + class emptyjar_epoch + { + price = 5; + }; + class jerrycan_epoch + { + price = 10; + }; + class jerrycanE_epoch + { + price = 5; + }; + class speargun_epoch + { + price = 75; + }; + class spear_magazine + { + price = 5; + tax = 0.9; + }; + class lighter_epoch + { + price = 50; + }; + class ItemFireExtinguisher + { + price = 50; + }; + class WoodLog_EPOCH + { + price = 2; + }; + class ItemRope + { + price = 5; + }; + class ItemStick + { + price = 1; + }; + class ItemRock + { + price = 1; + }; + class honey_epoch + { + price = 5; + }; + class FoodBioMeat + { + price = 4; + }; + class FoodMeeps + { + price = 50; + }; + class FoodSnooter + { + price = 5; + }; + class Kit_Garden + { + price = 40; + }; + class Poppy + { + price = 50; + }; + class Goldenseal + { + price = 25; + }; + class Pumpkin + { + price = 5; + }; + class Hemp + { + price = 25; + }; + class Sunflower + { + price = 20; + }; + class SeedPacket_GoldenSeal + { + price = 5; + }; + class SeedPacket_Hemp + { + price = 5; + }; + class SeedPacket_Poppy + { + price = 5; + }; + class SeedPacket_Pumpkin + { + price = 5; + }; + class SeedPacket_Sunflower + { + price = 5; + }; + class sardines_epoch + { + price = 2; + }; + class meatballs_epoch + { + price = 2; + }; + class scam_epoch + { + price = 4; + }; + class TacticalBacon + { + price = 5; + }; + class sweetcorn_epoch + { + price = 2; + }; + class ChickenCarcass_EPOCH + { + price = 1; + }; + class SnakeCarcass_EPOCH + { + price = 1; + }; + class RabbitCarcass_EPOCH + { + price = 1; + }; + class GoatCarcass_EPOCH + { + price = 1; + }; + class DogCarcass_EPOCH + { + price = 1; + }; + class SheepCarcass_EPOCH + { + price = 1; + }; + class CookedSheep_EPOCH + { + price = 5; + }; + class CookedGoat_EPOCH + { + price = 5; + }; + class SnakeMeat_EPOCH + { + price = 3; + }; + class CookedRabbit_EPOCH + { + price = 5; + }; + class CookedChicken_EPOCH + { + price = 3; + }; + class ItemTrout + { + price = 5; + }; + class ItemTroutCooked + { + price = 10; + }; + class ItemSeaBass + { + price = 6; + }; + class ItemSeaBassCooked + { + price = 12; + }; + class ItemTuna + { + price = 10; + }; + class ItemTunaCooked + { + price = 20; + }; + class FoodWalkNSons + { + price = 5; + }; + class ItemPowderMilk + { + price = 2; + }; + class ItemRicebox + { + price = 3; + }; + class ItemCereals + { + price = 3; + }; + class ItemVitamins + { + price = 25; + }; + class ItemBakedBeans + { + price = 3; + }; + class krypto_candy_epoch + { + price = 3; + }; + class bluburger_epoch + { + price = 3; + }; + class redburger_epoch + { + price = 3; + }; + class gyro_wrap_epoch + { + price = 3; + }; + class icecream_epoch + { + price = 2; + }; + class HotAxeSauce_epoch + { + price = 2; + }; + class ItemSodaOrangeSherbet + { + price = 4; + }; + class ItemSodaPurple + { + price = 5; + }; + class ItemSodaMocha + { + price = 8; + }; + class ItemSodaBurst + { + price = 4; + }; + class ItemSodaRbull + { + price = 5; + }; + class water_epoch + { + price = 5; + }; + class clean_water_epoch + { + price = 10; + }; + class ItemCanteen_Empty + { + price = 8; + }; + class ItemCanteen_Dirty + { + price = 10; + }; + class ItemCanteen_Clean + { + price = 12; + }; + class ItemBottlePlastic_Empty + { + price = 6; + }; + class ItemBottlePlastic_Dirty + { + price = 8; + }; + class ItemBottlePlastic_Clean + { + price = 10; + }; + class FAK + { + price = 3; + }; + class Soap_Epoch + { + price = 4; + }; + class Towelette + { + price = 1; + }; + class HeatPack + { + price = 2; + }; + class ColdPack + { + price = 2; + }; + class adrenaline_epoch + { + price = 10; + }; + class atropine_epoch + { + price = 10; + }; + class morphine_epoch + { + price = 10; + }; + class caffeinepills_epoch + { + price = 10; + }; + class orlistat_epoch + { + price = 10; + }; + class nanite_cream_epoch + { + price = 25; + }; + class nanite_gun_epoch + { + price = 100; + }; + class nanite_pills_epoch + { + price = 10; + }; + class iodide_pills_epoch + { + price = 20; + }; + class sr25_epoch + { + price = 50; + }; + class l85a2_epoch + { + price = 50; + }; + class l85a2_pink_epoch + { + price = 50; + }; + class l85a2_ugl_epoch + { + price = 50; + }; + class arifle_Katiba_F + { + price = 50; + }; + class arifle_Katiba_C_F + { + price = 50; + }; + class arifle_Katiba_GL_F + { + price = 75; + }; + class arifle_MXC_F + { + price = 50; + }; + class arifle_MX_F + { + price = 50; + }; + class arifle_MX_GL_F + { + price = 75; + }; + class arifle_MXM_F + { + price = 50; + }; + class arifle_SDAR_F + { + price = 50; + }; + class arifle_TRG21_F + { + price = 50; + }; + class arifle_TRG20_F + { + price = 50; + }; + class arifle_TRG21_GL_F + { + price = 75; + }; + class arifle_Mk20_F + { + price = 50; + }; + class arifle_Mk20C_F + { + price = 50; + }; + class arifle_Mk20_GL_F + { + price = 75; + }; + class arifle_Mk20_plain_F + { + price = 50; + }; + class arifle_Mk20C_plain_F + { + price = 50; + }; + class arifle_Mk20_GL_plain_F + { + price = 75; + }; + class SMG_01_F + { + price = 35; + }; + class SMG_02_F + { + price = 35; + }; + class SMG_03_TR_black { + price = 35; + }; + class SMG_03_TR_camo { + price = 35; + }; + class SMG_03_TR_khaki { + price = 35; + }; + class SMG_03_TR_hex { + price = 35; + }; + class SMG_03C_TR_black { + price = 35; + }; + class SMG_03C_TR_camo { + price = 35; + }; + class SMG_03C_TR_khaki { + price = 35; + }; + class SMG_03C_TR_hex { + price = 35; + }; + class SMG_03_black { + price = 35; + }; + class SMG_03_camo { + price = 35; + }; + class SMG_03_khaki { + price = 35; + }; + class SMG_03_hex { + price = 35; + }; + class SMG_03C_black { + price = 35; + }; + class SMG_03C_camo { + price = 35; + }; + class SMG_03C_khaki { + price = 35; + }; + class SMG_03C_hex { + price = 35; + }; + class hgun_PDW2000_F + { + price = 35; + }; + class arifle_MXM_Black_F + { + price = 50; + }; + class arifle_MX_GL_Black_F + { + price = 75; + }; + class arifle_MX_Black_F + { + price = 50; + }; + class arifle_MXC_Black_F + { + price = 50; + }; + class Rollins_F + { + price = 50; + }; + class 30Rnd_65x39_caseless_green + { + price = 3; + tax = 0.9; + }; + class 30Rnd_65x39_caseless_green_mag_Tracer + { + price = 4; + tax = 0.9; + }; + class 30Rnd_65x39_caseless_mag + { + price = 3; + tax = 0.9; + }; + class 30Rnd_65x39_caseless_mag_Tracer + { + price = 4; + tax = 0.9; + }; + class 20Rnd_556x45_UW_mag + { + price = 3; + tax = 0.9; + }; + class 30Rnd_556x45_Stanag + { + price = 3; + tax = 0.9; + }; + class 30Rnd_556x45_Stanag_Tracer_Red + { + price = 4; + tax = 0.9; + }; + class 30Rnd_556x45_Stanag_Tracer_Green + { + price = 4; + tax = 0.9; + }; + class 30Rnd_556x45_Stanag_Tracer_Yellow + { + price = 4; + tax = 0.9; + }; + class 30Rnd_45ACP_Mag_SMG_01 + { + price = 2; + tax = 0.9; + }; + class 30Rnd_45ACP_Mag_SMG_01_Tracer_Green + { + price = 3; + tax = 0.9; + }; + class 5Rnd_rollins_mag + { + price = 2; + tax = 0.9; + }; + + class NL_pvc_bb_mag + { + price = 20; + }; + class NL_shot_bb_mag + { + price = 20; + }; + class xbow_mag_bolt + { + price = 20; + }; + class xbow_mag_tranq + { + price = 20; + }; + class xbow_mag_exp + { + price = 20; + }; + class tranq_dart_mag + { + price = 5; + }; + + class UGL_FlareWhite_F + { + price = 2; + }; + class UGL_FlareGreen_F + { + price = 2; + }; + class UGL_FlareRed_F + { + price = 2; + }; + class UGL_FlareYellow_F + { + price = 2; + }; + class UGL_FlareCIR_F + { + price = 2; + }; + class 1Rnd_Smoke_Grenade_shell + { + price = 4; + }; + class 1Rnd_SmokeRed_Grenade_shell + { + price = 4; + }; + class 1Rnd_SmokeGreen_Grenade_shell + { + price = 4; + }; + class 1Rnd_SmokeYellow_Grenade_shell + { + price = 4; + }; + class 1Rnd_SmokePurple_Grenade_shell + { + price = 4; + }; + class 1Rnd_SmokeBlue_Grenade_shell + { + price = 4; + }; + class 1Rnd_SmokeOrange_Grenade_shell + { + price = 4; + }; + class 1Rnd_HE_Grenade_shell + { + price = 3; + }; + class 3Rnd_HE_Grenade_shell + { + price = 10; + }; + class 3Rnd_UGL_FlareWhite_F + { + price = 4; + }; + class 3Rnd_UGL_FlareGreen_F + { + price = 4; + }; + class 3Rnd_UGL_FlareRed_F + { + price = 4; + }; + class 3Rnd_UGL_FlareYellow_F + { + price = 4; + }; + class 3Rnd_UGL_FlareCIR_F + { + price = 4; + }; + class 3Rnd_Smoke_Grenade_shell + { + price = 3; + }; + class 3Rnd_SmokeRed_Grenade_shell + { + price = 3; + }; + class 3Rnd_SmokeGreen_Grenade_shell + { + price = 3; + }; + class 3Rnd_SmokeYellow_Grenade_shell + { + price = 3; + }; + class 3Rnd_SmokePurple_Grenade_shell + { + price = 3; + }; + class 3Rnd_SmokeBlue_Grenade_shell + { + price = 3; + }; + class 3Rnd_SmokeOrange_Grenade_shell + { + price = 3; + }; + class LMG_Mk200_F + { + price = 150; + }; + class arifle_MX_SW_F + { + price = 150; + }; + class LMG_Zafir_F + { + price = 150; + }; + class arifle_MX_SW_Black_F + { + price = 150; + }; + class srifle_DMR_02_F + { + price = 150; + }; + class srifle_DMR_02_camo_F + { + price = 150; + }; + class srifle_DMR_02_sniper_F + { + price = 150; + }; + class srifle_DMR_03_F + { + price = 150; + }; + class srifle_DMR_03_khaki_F + { + price = 150; + }; + class srifle_DMR_03_tan_F + { + price = 150; + }; + class srifle_DMR_03_multicam_F + { + price = 150; + }; + class srifle_DMR_03_woodland_F + { + price = 150; + }; + class srifle_DMR_03_spotter_F + { + price = 150; + }; + class srifle_DMR_04_Tan_F + { + price = 150; + }; + class srifle_DMR_05_blk_F + { + price = 150; + }; + class srifle_DMR_05_hex_F + { + price = 150; + }; + class srifle_DMR_05_tan_f + { + price = 150; + }; + class srifle_DMR_06_camo_F + { + price = 150; + }; + class srifle_DMR_06_olive_F + { + price = 150; + }; + class MMG_01_hex_F + { + price = 150; + }; + class MMG_01_tan_F + { + price = 150; + }; + class MMG_02_camo_F + { + price = 150; + }; + class MMG_02_black_F + { + price = 150; + }; + class MMG_02_sand_F + { + price = 150; + }; + class m249_EPOCH + { + price = 150; + }; + class m249Tan_EPOCH + { + price = 150; + }; + class m107Tan_EPOCH + { + price = 200; + }; + class m107_EPOCH + { + price = 200; + }; + class m16_EPOCH + { + price = 100; + }; + class m16Red_EPOCH + { + price = 125; + }; + class M14_EPOCH + { + price = 125; + }; + class M14Grn_EPOCH + { + price = 150; + }; + class m4a3_EPOCH + { + price = 100; + }; + class AKM_EPOCH + { + price = 100; + }; + + class pvcrifle_01_F + { + price = 100; + }; + class nl_Shotgun + { + price = 100; + }; + class nl_auto_xbow + { + price = 100; + }; + class hgun_Pistol_tranq_01 + { + price = 20; + }; + + // A2 Weapons + class a2_ak47s_gold_EPOCH + { + price = 100; + }; + class a2_AK107_EPOCH + { + price = 100; + }; + class a2_bizon_epoch + { + price = 100; + }; + class a2_dmr_epoch + { + price = 100; + }; + class a2_dmr_epoch_scoped + { + price = 100; + }; + class a2_fnfal_epoch + { + price = 100; + }; + class a2_G36_C_epoch + { + price = 100; + }; + class a2_Mg36_epoch + { + price = 100; + }; + class a2_leeenfield_epoch + { + price = 100; + }; + class a2_m110_epoch + { + price = 100; + }; + class a2_mk16_epoch + { + price = 100; + }; + class a2_mk17_epoch + { + price = 100; + }; + class a2_svd_epoch + { + price = 100; + }; + class a2_VSS_vintorez_epoch + { + price = 100; + }; + class a2_aks74un_EPOCH + { + price = 100; + }; + + class 30rnd_556_magazine + { + price = 5; + tax = 0.9; + }; + class 50Rnd_570x28_SMG_03{ + price = 5; + tax = 0.9; + }; + class 20rnd_762_magazine + { + price = 5; + tax = 0.9; + }; + class 30Rnd_762x39_Mag + { + price = 5; + tax = 0.9; + }; + class 200Rnd_556x45_M249 + { + price = 5; + tax = 0.9; + }; + class 200Rnd_65x39_cased_Box + { + price = 5; + tax = 0.9; + }; + class 100Rnd_65x39_caseless_mag + { + price = 3; + tax = 0.9; + }; + class 200Rnd_65x39_cased_Box_Tracer + { + price = 5; + tax = 0.9; + }; + class 100Rnd_65x39_caseless_mag_Tracer + { + price = 4; + tax = 0.9; + }; + class 150Rnd_762x51_Box + { + price = 4; + tax = 0.9; + }; + class 150Rnd_762x51_Box_Tracer + { + price = 5; + tax = 0.9; + }; + class 150Rnd_762x54_Box + { + price = 4; + tax = 0.9; + }; + class 150Rnd_762x54_Box_Tracer + { + price = 5; + tax = 0.9; + }; + class 150Rnd_93x64_Mag + { + price = 6; + tax = 0.9; + }; + + // A2 Mags + class Bizon_64Rnd_9x18 + { + price = 5; + tax = 0.9; + }; + class 20Rnd_762x51_DMR + { + price = 5; + tax = 0.9; + }; + class 20Rnd_762x51_FNFAL + { + price = 5; + tax = 0.9; + }; + class 30Rnd_556x45_G36 + { + price = 5; + tax = 0.9; + }; + class 10Rnd_303 + { + price = 5; + tax = 0.9; + }; + class 100Rnd_556x45_BetaCMag + { + price = 5; + tax = 0.9; + }; + class 10Rnd_762x54_SVD + { + price = 5; + tax = 0.9; + }; + class 10Rnd_9x39_SP5_VSS + { + price = 5; + tax = 0.9; + }; + + class Rangefinder + { + price = 4; + }; + class Laserdesignator + { + price = 4; + }; + class hgun_ACPC2_F + { + price = 20; + }; + class hgun_Rook40_F + { + price = 20; + }; + class hgun_P07_F + { + price = 20; + }; + class hgun_Pistol_heavy_01_F + { + price = 25; + }; + class hgun_Pistol_heavy_02_F + { + price = 25; + }; + class ruger_pistol_epoch + { + price = 40; + }; + class 1911_pistol_epoch + { + price = 6; + }; + class hgun_Pistol_Signal_F + { + price = 20; + }; + class Hatchet + { + price = 25; + }; + class MultiGun + { + price = 100; + }; + class MeleeSledge + { + price = 50; + }; + class MeleeSword + { + price = 1111; + }; + class Power_Sword + { + price = 1111; + }; + class MeleeRod + { + price = 100; + }; + class CrudeHatchet + { + price = 5; + }; + class MeleeMaul + { + price = 10; + }; + class WoodClub + { + price = 5; + }; + class Plunger + { + price = 15; + }; + class 16Rnd_9x21_Mag + { + price = 2; + tax = 0.9; + }; + class 30Rnd_9x21_Mag + { + price = 3; + tax = 0.9; + }; + class 9Rnd_45ACP_Mag + { + price = 2; + tax = 0.9; + }; + class 11Rnd_45ACP_Mag + { + price = 2; + tax = 0.9; + }; + class 6Rnd_45ACP_Cylinder + { + price = 2; + tax = 0.9; + }; + class 10rnd_22X44_magazine + { + price = 2; + tax = 0.9; + }; + class 9rnd_45X88_magazine + { + price = 2; + tax = 0.9; + }; + class 6Rnd_GreenSignal_F + { + price = 2; + }; + class 6Rnd_RedSignal_F + { + price = 2; + }; + class 6Rnd_BlueSignal_F + { + price = 2; + }; + class 6Rnd_PurpleSignal_F + { + price = 2; + }; + class 6Rnd_OrangeSignal_F + { + price = 2; + }; + class EnergyPack + { + price = 3; + tax = 0.9; + }; + class EnergyPackLg + { + price = 30; + tax = 0.9; + }; + class optic_Arco + { + price = 10; + }; + class optic_Hamr + { + price = 10; + }; + class optic_Aco + { + price = 10; + }; + class optic_ACO_grn + { + price = 10; + }; + class optic_Aco_smg + { + price = 10; + }; + class optic_ACO_grn_smg + { + price = 10; + }; + class optic_Holosight + { + price = 10; + }; + class optic_Holosight_smg + { + price = 10; + }; + class optic_SOS + { + price = 10; + }; + class optic_MRCO + { + price = 10; + }; + class optic_DMS + { + price = 10; + }; + class optic_Yorris + { + price = 10; + }; + class optic_MRD + { + price = 10; + }; + class optic_LRPS + { + price = 20; + }; + class optic_NVS + { + price = 30; + }; + class optic_Nightstalker + { + price = 50; + }; + class optic_tws + { + price = 20; + }; + class optic_tws_mg + { + price = 20; + }; + class optic_AMS + { + price = 10; + }; + class optic_AMS_khk + { + price = 10; + }; + class optic_AMS_snd + { + price = 10; + }; + class optic_KHS_blk + { + price = 10; + }; + class optic_KHS_hex + { + price = 10; + }; + class optic_KHS_old + { + price = 10; + }; + class optic_KHS_tan + { + price = 10; + }; + class bipod_01_F_snd + { + price = 0; + }; + class bipod_01_F_blk + { + price = 0; + }; + class bipod_01_F_mtp + { + price = 0; + }; + class bipod_02_F_blk + { + price = 0; + }; + class bipod_02_F_tan + { + price = 0; + }; + class bipod_02_F_hex + { + price = 0; + }; + class bipod_03_F_blk + { + price = 0; + }; + class bipod_03_F_oli + { + price = 0; + }; + class Elcan_epoch + { + price = 5; + }; + class Elcan_reflex_epoch + { + price = 10; + }; + class muzzle_snds_H + { + price = 5; + }; + class muzzle_snds_L + { + price = 5; + }; + class muzzle_snds_M + { + price = 5; + }; + class muzzle_snds_B + { + price = 5; + }; + class muzzle_snds_H_MG + { + price = 5; + }; + class muzzle_snds_acp + { + price = 5; + }; + class muzzle_snds_570 { + price = 5; + }; + class Heal_EPOCH + { + price = 3; + }; + class Defib_EPOCH + { + price = 5; + }; + class ItemDefibrillator { + price = 5; + }; + class Repair_EPOCH + { + price = 2; + }; + class muzzle_snds_338_black + { + price = 5; + }; + class muzzle_snds_338_green + { + price = 5; + }; + class muzzle_snds_338_sand + { + price = 5; + }; + class muzzle_snds_93mmg + { + price = 5; + }; + class muzzle_snds_93mmg_tan + { + price = 5; + }; + class muzzle_sr25S_epoch + { + price = 5; + }; + class PartOreGold + { + price = 70; + }; + class PartOreSilver + { + price = 7; + }; + class PartOre + { + price = 1; + }; + class ItemGoldBar + { + price = 100; + }; + class ItemSilverBar + { + price = 10; + }; + class ItemGoldBar10oz + { + price = 1000; + }; + class ItemSilverBar10oz + { + price = 100; + }; + class ItemTopaz + { + price = 25; + }; + class ItemOnyx + { + price = 30; + }; + class ItemSapphire + { + price = 50; + }; + class ItemAmethyst + { + price = 25; + }; + class ItemEmerald + { + price = 25; + }; + class ItemCitrine + { + price = 25; + }; + class ItemRuby + { + price = 75; + }; + class ItemQuartz + { + price = 5; + }; + class ItemJade + { + price = 100; + }; + class ItemGarnet + { + price = 25; + }; + class ItemCanvas + { + price = 10; + }; + class ItemSeedBag + { + price = 5; + }; + class ItemKiloHemp + { + price = 100; + }; + class PartPlankPack + { + price = 4; + }; + class CinderBlocks + { + price = 20; + }; + class MortarBucket + { + price = 20; + }; + class ItemScraps + { + price = 2; + }; + class ItemCorrugated + { + price = 8; + }; + class ItemCorrugatedLg + { + price = 25; + }; + class KitStudWall + { + price = 16; + }; + class KitJailWall + { + price = 56; + }; + class KitPlyThirdWall_EPOCH { + price = 18; + }; + class KitWoodQuarterFloor + { + price = 8; // price of 2 planks + }; + class KitWoodHalfFloor + { + price = 16; // price of 4 planks + }; + class KitWoodFloor + { + price = 32; // price of 8 planks + }; + class KitMetalQuarterFloor + { + price = 25; // price of 1 ItemCorrugatedLg + }; + class KitMetalHalfFloor + { + price = 50; // price of 2 ItemCorrugatedLg + }; + class KitMetalFloor + { + price = 100; // price of 4 ItemCorrugatedLg + }; + class KitCinderQuarterFloor + { + price = 40; //price of 1 CinderBlocks and 1 MortarBucket + }; + class KitCinderHalfFloor + { + price = 80; //price of 2 CinderBlocks and 2 MortarBucket + }; + class KitCinderFloor + { + price = 160; //price of 4 CinderBlocks and 4 MortarBucket + }; + class KitWoodStairs + { + price = 16; // price of 4 planks + }; + class KitWoodTower + { + price = 48; // price of 12 plank packs + }; + class KitMetalTower + { + price = 150; // price of 6 ItemCorrugatedLg + }; + class KitCinderTower + { + price = 200; //price of 5 CinderBlocks and 5 MortarBucket + }; + class KitWoodRamp + { + price = 24; // price of 6 planks + }; + class KitSnowman + { + price = 72; + }; + class KitSpikeTrap + { + price = 42; + }; + class KitMetalTrap + { + price = 46; + }; + class KitTankTrap + { + price = 25; + }; + class KitHesco3 + { + price = 120; + }; + class KitWoodLadder + { + price = 16; + }; + class KitFirePlace + { + price = 4; + }; + class KitTiPi + { + price = 12; + }; + class KitShelf + { + price = 24; + }; + class KitTentA + { + price = 50; + }; + class KitTentDome + { + price = 70; + }; + class KitFieldToilet + { + price = 66; + }; + class KitSandbagWall + { + price = 60; + }; + class KitSandbagWallLong + { + price = 120; + }; + class KitBurnBarrel + { + price = 116; + }; + class KitLightPole + { + price = 158; + }; + class KitPortableLight_Single + { + price = 185; + }; + class KitPortableLight_Double + { + price = 295; + }; + class KitScaffolding + { + price = 268; + }; + class KitSink + { + price = 76; + }; + class KitWatchTower + { + price = 72; + }; + class KitSunShade + { + price = 29; + }; + class KitBagBunker + { + price = 280; + }; + class KitBarGate + { + price = 44; + }; + class KitWaterPump + { + price = 196; + }; + class KitWorkbench + { + price = 8; + }; + class KitBarbedWire + { + price = 90; + }; + class KitWoodFoundation + { + price = 32; + }; + class KitFoundation + { + price = 80; + }; + class KitPlotPole + { + price = 250; + }; + class KitPlotPole_M + { + price = 350; + }; + class KitPlotPole_L + { + price = 450; + }; + class KitPlotPole_XL + { + price = 550; + }; + class KitPlotPole_XXL + { + price = 650; + }; + class KitSolarGen + { + price = 325; + }; + class KitSolarCharger + { + price = 325; + }; + class KitSolarChargerXL + { + price = 325; + }; + class BaseCam + { + price = 250; + }; + class BaseCamTerminal + { + price = 250; + }; + class KitCinderWall + { + price = 80; + }; + class ItemSolar + { + price = 75; + }; + class ItemCables + { + price = 50; + }; + class ItemBattery + { + price = 50; + }; + class Pelt_EPOCH + { + price = 1; + }; + class Venom_EPOCH + { + price = 10; + }; + class HandGrenade_Stone + { + price = 1; + }; + class SmokeShell + { + price = 2; + }; + class SmokeShellYellow + { + price = 2; + }; + class SmokeShellToxic + { + price = 10; + }; + class SmokeShellGreen + { + price = 2; + }; + class SmokeShellRed + { + price = 2; + }; + class SmokeShellPurple + { + price = 2; + }; + class SmokeShellOrange + { + price = 2; + }; + class SmokeShellBlue + { + price = 2; + }; + class Chemlight_green + { + price = 1; + }; + class Chemlight_red + { + price = 1; + }; + class Chemlight_yellow + { + price = 1; + }; + class Chemlight_blue + { + price = 1; + }; + class HandGrenade + { + price = 15; + }; + class MiniGrenade + { + price = 10; + }; + class DemoCharge_Remote_Mag + { + price = 40; + }; + class SatchelCharge_Remote_Mag + { + price = 75; + }; + class ATMine_Range_Mag + { + price = 50; + }; + class ClaymoreDirectionalMine_Remote_Mag + { + price = 50; + }; + class APERSMine_Range_Mag + { + price = 30; + }; + class APERSBoundingMine_Range_Mag + { + price = 50; + }; + class SLAMDirectionalMine_Wire_Mag + { + price = 40; + }; + class APERSTripMine_Wire_Mag + { + price = 30; + }; + class BarrelBomb_EPOCH_Remote_Mag + { + price = 80; + }; + class BarrelBomb2_EPOCH_Remote_Mag + { + price = 80; + }; + class B_AssaultPack_cbr + { + price = 10; + }; + class B_AssaultPack_dgtl + { + price = 10; + }; + class B_AssaultPack_khk + { + price = 10; + }; + class B_AssaultPack_mcamo + { + price = 10; + }; + class B_AssaultPack_ocamo + { + price = 10; + }; + class B_AssaultPack_rgr + { + price = 10; + }; + class B_AssaultPack_sgg + { + price = 10; + }; + class B_AssaultPack_blk + { + price = 10; + }; + class B_Carryall_cbr + { + price = 40; + }; + class B_Carryall_khk + { + price = 40; + }; + class B_Carryall_mcamo + { + price = 40; + }; + class B_Carryall_ocamo + { + price = 40; + }; + class B_Carryall_oli + { + price = 40; + }; + class B_Carryall_oucamo + { + price = 40; + }; + class B_FieldPack_blk + { + price = 15; + }; + class B_FieldPack_cbr + { + price = 15; + }; + class B_FieldPack_khk + { + price = 15; + }; + class B_FieldPack_ocamo + { + price = 15; + }; + class B_FieldPack_oli + { + price = 15; + }; + class B_FieldPack_oucamo + { + price = 15; + }; + class B_Kitbag_cbr + { + price = 25; + }; + class B_Kitbag_mcamo + { + price = 25; + }; + class B_Kitbag_rgr + { + price = 25; + }; + class B_Kitbag_sgg + { + price = 25; + }; + class B_Parachute + { + price = 25; + }; + class B_TacticalPack_blk + { + price = 20; + }; + class B_TacticalPack_mcamo + { + price = 20; + }; + class B_TacticalPack_ocamo + { + price = 20; + }; + class B_TacticalPack_oli + { + price = 20; + }; + class B_TacticalPack_rgr + { + price = 20; + }; + class smallbackpack_red_epoch + { + price = 22; + }; + class smallbackpack_green_epoch + { + price = 22; + }; + class smallbackpack_teal_epoch + { + price = 22; + }; + class smallbackpack_pink_epoch + { + price = 22; + }; + class U_RadiationSuit_M_uniform + { + price = 7; + }; + class U_RadiationSuit_F_uniform + { + price = 7; + }; + class U_O_FullGhillie_lsh + { + price = 7; + }; + class U_O_FullGhillie_sard + { + price = 7; + }; + class U_O_FullGhillie_ard + { + price = 7; + }; + class U_O_CombatUniform_ocamo + { + price = 5; + }; + class U_O_GhillieSuit + { + price = 5; + }; + class U_O_PilotCoveralls + { + price = 5; + }; + class U_O_Wetsuit + { + price = 5; + }; + class U_OG_Guerilla1_1 + { + price = 5; + }; + class U_OG_Guerilla2_1 + { + price = 5; + }; + class U_OG_Guerilla2_2 + { + price = 5; + }; + class U_OG_Guerilla2_3 + { + price = 5; + }; + class U_OG_Guerilla3_1 + { + price = 5; + }; + class U_OG_Guerilla3_2 + { + price = 5; + }; + class U_OG_leader + { + price = 5; + }; + class U_C_Poloshirt_stripped + { + price = 4; + }; + class U_C_Poloshirt_blue + { + price = 4; + }; + class U_C_Poloshirt_burgundy + { + price = 4; + }; + class U_C_Poloshirt_tricolour + { + price = 4; + }; + class U_C_Poloshirt_salmon + { + price = 4; + }; + class U_C_Poloshirt_redwhite + { + price = 4; + }; + class U_C_Poor_1 + { + price = 5; + }; + class U_C_WorkerCoveralls + { + price = 5; + }; + class U_C_Journalist + { + price = 5; + }; + class U_C_Scientist + { + price = 5; + }; + class U_OrestesBody + { + price = 5; + }; + class U_Wetsuit_uniform + { + price = 5; + }; + class U_Wetsuit_White + { + price = 5; + }; + class U_Wetsuit_Blue + { + price = 5; + }; + class U_Wetsuit_Purp + { + price = 5; + }; + class U_Wetsuit_Camo + { + price = 5; + }; + class U_Camo_uniform + { + price = 5; + }; + class U_ghillie1_uniform + { + price = 5; + }; + class U_ghillie2_uniform + { + price = 5; + }; + class U_ghillie3_uniform + { + price = 5; + }; + class U_CamoBlue_uniform + { + price = 5; + }; + class U_CamoBrn_uniform + { + price = 5; + }; + class U_CamoRed_uniform + { + price = 5; + }; + class U_CamoAloha_uniform + { + price = 5; + }; + class U_CamoBiker_uniform + { + price = 5; + }; + class U_CamoBubblegum_uniform + { + price = 5; + }; + class U_CamoLumberjack_uniform + { + price = 5; + }; + class U_CamoOutback_uniform + { + price = 5; + }; + class U_CamoPink_uniform + { + price = 5; + }; + class U_CamoPinkPolka_uniform + { + price = 5; + }; + class U_C_Driver_1 + { + price = 5; + }; + class U_C_Driver_2 + { + price = 5; + }; + class U_C_Driver_3 + { + price = 5; + }; + class U_C_Driver_4 + { + price = 5; + }; + class U_C_Driver_1_black + { + price = 5; + }; + class U_C_Driver_1_blue + { + price = 5; + }; + class U_C_Driver_1_green + { + price = 5; + }; + class U_C_Driver_1_red + { + price = 5; + }; + class U_C_Driver_1_white + { + price = 5; + }; + class U_C_Driver_1_yellow + { + price = 5; + }; + class U_C_Driver_1_orange + { + price = 5; + }; + class V_F0_EPOCH + { + price = 5; + }; + class V_F1_EPOCH + { + price = 5; + }; + class V_F2_EPOCH + { + price = 5; + }; + class V_F3_EPOCH + { + price = 5; + }; + class V_F4_EPOCH + { + price = 5; + }; + class V_F5_EPOCH + { + price = 5; + }; + class V_1_EPOCH + { + price = 5; + }; + class V_2_EPOCH + { + price = 5; + }; + class V_3_EPOCH + { + price = 5; + }; + class V_4_EPOCH + { + price = 5; + }; + class V_5_EPOCH + { + price = 5; + }; + class V_6_EPOCH + { + price = 5; + }; + class V_7_EPOCH + { + price = 5; + }; + class V_8_EPOCH + { + price = 5; + }; + class V_9_EPOCH + { + price = 5; + }; + class V_10_EPOCH + { + price = 5; + }; + class V_11_EPOCH + { + price = 5; + }; + class V_12_EPOCH + { + price = 5; + }; + class V_13_EPOCH + { + price = 5; + }; + class V_14_EPOCH + { + price = 5; + }; + class V_15_EPOCH + { + price = 5; + }; + class V_16_EPOCH + { + price = 5; + }; + class V_17_EPOCH + { + price = 5; + }; + class V_18_EPOCH + { + price = 5; + }; + class V_19_EPOCH + { + price = 5; + }; + class V_20_EPOCH + { + price = 5; + }; + class V_21_EPOCH + { + price = 5; + }; + class V_22_EPOCH + { + price = 5; + }; + class V_23_EPOCH + { + price = 5; + }; + class V_24_EPOCH + { + price = 5; + }; + class V_25_EPOCH + { + price = 5; + }; + class V_26_EPOCH + { + price = 5; + }; + class V_27_EPOCH + { + price = 5; + }; + class V_28_EPOCH + { + price = 5; + }; + class V_29_EPOCH + { + price = 5; + }; + class V_30_EPOCH + { + price = 5; + }; + class V_31_EPOCH + { + price = 5; + }; + class V_32_EPOCH + { + price = 5; + }; + class V_33_EPOCH + { + price = 5; + }; + class V_34_EPOCH + { + price = 5; + }; + class V_35_EPOCH + { + price = 5; + }; + class V_36_EPOCH + { + price = 5; + }; + class V_37_EPOCH + { + price = 5; + }; + class V_38_EPOCH + { + price = 5; + }; + class V_39_EPOCH + { + price = 5; + }; + class V_40_EPOCH + { + price = 5; + }; + class H_1_EPOCH + { + price = 3; + }; + class H_2_EPOCH + { + price = 3; + }; + class H_3_EPOCH + { + price = 3; + }; + class H_4_EPOCH + { + price = 3; + }; + class H_5_EPOCH + { + price = 3; + }; + class H_6_EPOCH + { + price = 3; + }; + class H_7_EPOCH + { + price = 3; + }; + class H_8_EPOCH + { + price = 3; + }; + class H_9_EPOCH + { + price = 3; + }; + class H_10_EPOCH + { + price = 3; + }; + class H_11_EPOCH + { + price = 3; + }; + class H_12_EPOCH + { + price = 3; + }; + class H_13_EPOCH + { + price = 3; + }; + class H_14_EPOCH + { + price = 3; + }; + class H_15_EPOCH + { + price = 3; + }; + class H_16_EPOCH + { + price = 3; + }; + class H_17_EPOCH + { + price = 3; + }; + class H_18_EPOCH + { + price = 3; + }; + class H_19_EPOCH + { + price = 3; + }; + class H_20_EPOCH + { + price = 3; + }; + class H_21_EPOCH + { + price = 3; + }; + class H_22_EPOCH + { + price = 3; + }; + class H_23_EPOCH + { + price = 3; + }; + class H_24_EPOCH + { + price = 3; + }; + class H_25_EPOCH + { + price = 3; + }; + class H_26_EPOCH + { + price = 3; + }; + class H_27_EPOCH + { + price = 3; + }; + class H_28_EPOCH + { + price = 3; + }; + class H_29_EPOCH + { + price = 3; + }; + class H_30_EPOCH + { + price = 3; + }; + class H_31_EPOCH + { + price = 3; + }; + class H_32_EPOCH + { + price = 3; + }; + class H_33_EPOCH + { + price = 3; + }; + class H_34_EPOCH + { + price = 3; + }; + class H_35_EPOCH + { + price = 3; + }; + class H_36_EPOCH + { + price = 3; + }; + class H_37_EPOCH + { + price = 3; + }; + class H_38_EPOCH + { + price = 3; + }; + class H_39_EPOCH + { + price = 3; + }; + class H_40_EPOCH + { + price = 3; + }; + class H_41_EPOCH + { + price = 3; + }; + class H_42_EPOCH + { + price = 3; + }; + class H_43_EPOCH + { + price = 3; + }; + class H_44_EPOCH + { + price = 3; + }; + class H_45_EPOCH + { + price = 3; + }; + class H_46_EPOCH + { + price = 3; + }; + class H_47_EPOCH + { + price = 3; + }; + class H_48_EPOCH + { + price = 3; + }; + class H_49_EPOCH + { + price = 3; + }; + class H_50_EPOCH + { + price = 3; + }; + class H_51_EPOCH + { + price = 3; + }; + class H_52_EPOCH + { + price = 3; + }; + class H_53_EPOCH + { + price = 3; + }; + class H_54_EPOCH + { + price = 3; + }; + class H_55_EPOCH + { + price = 3; + }; + class H_56_EPOCH + { + price = 3; + }; + class H_57_EPOCH + { + price = 3; + }; + class H_58_EPOCH + { + price = 3; + }; + class H_59_EPOCH + { + price = 3; + }; + class H_60_EPOCH + { + price = 3; + }; + class H_61_EPOCH + { + price = 3; + }; + class H_62_EPOCH + { + price = 3; + }; + class H_63_EPOCH + { + price = 3; + }; + class H_64_EPOCH + { + price = 3; + }; + class H_65_EPOCH + { + price = 3; + }; + class H_66_EPOCH + { + price = 3; + }; + class H_67_EPOCH + { + price = 3; + }; + class H_68_EPOCH + { + price = 3; + }; + class H_69_EPOCH + { + price = 3; + }; + class H_70_EPOCH + { + price = 3; + }; + class H_71_EPOCH + { + price = 3; + }; + class H_72_EPOCH + { + price = 3; + }; + class H_73_EPOCH + { + price = 3; + }; + class H_74_EPOCH + { + price = 3; + }; + class H_75_EPOCH + { + price = 3; + }; + class H_76_EPOCH + { + price = 3; + }; + class H_77_EPOCH + { + price = 3; + }; + class H_78_EPOCH + { + price = 3; + }; + class H_79_EPOCH + { + price = 3; + }; + class H_80_EPOCH + { + price = 3; + }; + class H_81_EPOCH + { + price = 3; + }; + class H_82_EPOCH + { + price = 3; + }; + class H_83_EPOCH + { + price = 3; + }; + class H_84_EPOCH + { + price = 3; + }; + class H_85_EPOCH + { + price = 3; + }; + class H_86_EPOCH + { + price = 3; + }; + class H_87_EPOCH + { + price = 3; + }; + class H_88_EPOCH + { + price = 3; + }; + class H_89_EPOCH + { + price = 3; + }; + class H_90_EPOCH + { + price = 3; + }; + class H_91_EPOCH + { + price = 3; + }; + class H_92_EPOCH + { + price = 3; + }; + class H_93_EPOCH + { + price = 3; + }; + class H_94_EPOCH + { + price = 5; + }; + class H_95_EPOCH + { + price = 5; + }; + class H_96_EPOCH + { + price = 5; + }; + class H_97_EPOCH + { + price = 5; + }; + class H_98_EPOCH + { + price = 5; + }; + class H_99_EPOCH + { + price = 5; + }; + class H_100_EPOCH + { + price = 5; + }; + class H_101_EPOCH + { + price = 5; + }; + class H_102_EPOCH + { + price = 5; + }; + class H_103_EPOCH + { + price = 5; + }; + class H_104_EPOCH + { + price = 3; + }; + class H_105_EPOCH + { + price = 3; + }; + class wolf_mask_epoch + { + price = 30; + }; + class pkin_mask_epoch + { + price = 30; + }; + class clown_mask_epoch + { + price = 30; + }; + class C_Offroad_01_EPOCH + { + price = 7500; + tax = 0.9; + }; + class C_Offroad_01_EPOCH1: C_Offroad_01_EPOCH{}; + class C_Offroad_01_EPOCH2: C_Offroad_01_EPOCH{}; + class C_Offroad_01_EPOCH3: C_Offroad_01_EPOCH{}; + class C_Offroad_01_EPOCH4: C_Offroad_01_EPOCH{}; + class C_Offroad_01_EPOCH5: C_Offroad_01_EPOCH{}; + class hoverboard_epoch_1 + { + price = 1000; + tax = 0.9; + }; + class hoverboard_epoch_bttf: hoverboard_epoch_1{}; + class hoverboard_epoch_a3: hoverboard_epoch_1{}; + class hoverboard_epoch_cargo + { + price = 1200; + tax = 0.9; + }; + class MBK_01_EPOCH + { + price = 1250; + tax = 0.9; + }; + class C_Quadbike_01_EPOCH + { + price = 2500; + tax = 0.9; + }; + class C_Hatchback_01_EPOCH + { + price = 7500; + tax = 0.9; + }; + class C_Hatchback_01_EPOCH1: C_Hatchback_01_EPOCH{}; + class C_Hatchback_01_EPOCH2: C_Hatchback_01_EPOCH{}; + class C_Hatchback_01_EPOCH3: C_Hatchback_01_EPOCH{}; + class C_Hatchback_01_EPOCH4: C_Hatchback_01_EPOCH{}; + class C_Hatchback_02_EPOCH + { + price = 10000; + tax = 0.9; + }; + class C_Hatchback_02_EPOCH1: C_Hatchback_02_EPOCH{}; + class C_Hatchback_02_EPOCH2: C_Hatchback_02_EPOCH{}; + class C_Hatchback_02_EPOCH3: C_Hatchback_02_EPOCH{}; + class C_Hatchback_02_EPOCH4: C_Hatchback_02_EPOCH{}; + class C_SUV_01_EPOCH + { + price = 7500; + tax = 0.9; + }; + class C_SUV_01_EPOCH1: C_SUV_01_EPOCH{}; + class C_SUV_01_EPOCH2: C_SUV_01_EPOCH{}; + class C_SUV_01_EPOCH3: C_SUV_01_EPOCH{}; + class C_SUV_01_EPOCH4: C_SUV_01_EPOCH{}; + class A2_Golf_EPOCH + { + price = 7500; + tax = 0.9; + }; + class A2_HMMWV_EPOCH + { + price = 7500; + tax = 0.9; + }; + class A2_HMMWV_load_EPOCH + { + price = 7500; + tax = 0.9; + }; + class A2_Lada_EPOCH + { + price = 7500; + tax = 0.9; + }; + class A2_SUV_EPOCH + { + price = 7500; + tax = 0.9; + }; + class A2_SUV_load_EPOCH + { + price = 7500; + tax = 0.9; + }; + class A2_SUV_armed_EPOCH + { + price = 10000; + tax = 0.9; + }; + class A2_UAZ_EPOCH + { + price = 7500; + tax = 0.9; + }; + class A2_UAZ_Open_EPOCH + { + price = 7500; + tax = 0.9; + }; + class A2_Ural_EPOCH + { + price = 7500; + tax = 0.9; + }; + class A2_Vodnik_EPOCH + { + price = 7500; + tax = 0.9; + }; + class A2_Volha_EPOCH + { + price = 7500; + tax = 0.9; + }; + class C_Rubberboat_EPOCH + { + price = 500; + tax = 0.9; + }; + class C_Rubberboat_02_EPOCH + { + price = 500; + tax = 0.9; + }; + class C_Rubberboat_03_EPOCH + { + price = 500; + tax = 0.9; + }; + class C_Rubberboat_04_EPOCH + { + price = 500; + tax = 0.9; + }; + class C_Van_01_box_EPOCH + { + price = 10000; + tax = 0.9; + }; + class C_Van_01_box_EPOCH1: C_Van_01_box_EPOCH{}; + class C_Van_01_box_EPOCH2: C_Van_01_box_EPOCH{}; + class C_Van_01_box_EPOCH3: C_Van_01_box_EPOCH{}; + class C_Van_01_box_EPOCH4: C_Van_01_box_EPOCH{}; + class C_Van_01_transport_EPOCH + { + price = 10000; + tax = 0.9; + }; + class C_Van_01_transport_EPOCH1: C_Van_01_transport_EPOCH{}; + class C_Van_01_transport_EPOCH2: C_Van_01_transport_EPOCH{}; + class C_Van_01_transport_EPOCH3: C_Van_01_transport_EPOCH{}; + class C_Van_01_transport_EPOCH4: C_Van_01_transport_EPOCH{}; + class C_Boat_Civil_01_EPOCH + { + price = 7500; + tax = 0.9; + }; + class C_Boat_Civil_01_police_EPOCH + { + price = 7500; + tax = 0.9; + }; + class C_Boat_Civil_01_rescue_EPOCH + { + price = 7500; + tax = 0.9; + }; + class B_Heli_Light_01_EPOCH + { + price = 25000; + tax = 0.9; + }; + class B_SDV_01_EPOCH + { + price = 10000; + tax = 0.9; + }; + class B_MRAP_01_EPOCH + { + price = 45000; + tax = 0.9; + }; + class B_MRAP_01_EPOCH1: B_MRAP_01_EPOCH{}; + class B_MRAP_01_EPOCH2: B_MRAP_01_EPOCH{}; + class B_MRAP_01_EPOCH3: B_MRAP_01_EPOCH{}; + class B_MRAP_01_EPOCH4: B_MRAP_01_EPOCH{}; + class O_MRAP_02_EPOCH + { + price = 45000; + tax = 0.9; + }; + class O_MRAP_02_EPOCH1: O_MRAP_02_EPOCH{}; + class O_MRAP_02_EPOCH2: O_MRAP_02_EPOCH{}; + class O_MRAP_02_EPOCH3: O_MRAP_02_EPOCH{}; + class O_MRAP_02_EPOCH4: O_MRAP_02_EPOCH{}; + class I_MRAP_03_EPOCH + { + price = 45000; + tax = 0.9; + }; + class I_MRAP_03_EPOCH1: I_MRAP_03_EPOCH{}; + class I_MRAP_03_EPOCH2: I_MRAP_03_EPOCH{}; + class I_MRAP_03_EPOCH3: I_MRAP_03_EPOCH{}; + class I_MRAP_03_EPOCH4: I_MRAP_03_EPOCH{}; + class B_G_Offroad_01_armed_EPOCH + { + price = 25000; + tax = 0.9; + }; + class B_G_Offroad_01_armed_EPOCH1: B_G_Offroad_01_armed_EPOCH{}; + class B_G_Offroad_01_armed_EPOCH2: B_G_Offroad_01_armed_EPOCH{}; + class B_G_Offroad_01_armed_EPOCH3: B_G_Offroad_01_armed_EPOCH{}; + class B_G_Offroad_01_armed_EPOCH4: B_G_Offroad_01_armed_EPOCH{}; + class B_Truck_01_mover_EPOCH + { + price = 10000; + tax = 0.9; + }; + class B_Truck_01_mover_EPOCH1: B_Truck_01_mover_EPOCH {}; + class B_Truck_01_mover_EPOCH2: B_Truck_01_mover_EPOCH {}; + class B_Truck_01_mover_EPOCH3: B_Truck_01_mover_EPOCH {}; + class B_Truck_01_mover_EPOCH4: B_Truck_01_mover_EPOCH {}; + class B_Truck_01_transport_EPOCH + { + price = 10000; + tax = 0.9; + }; + class B_Truck_01_transport_EPOCH1: B_Truck_01_transport_EPOCH {}; + class B_Truck_01_transport_EPOCH2: B_Truck_01_transport_EPOCH {}; + class B_Truck_01_transport_EPOCH3: B_Truck_01_transport_EPOCH {}; + class B_Truck_01_transport_EPOCH4: B_Truck_01_transport_EPOCH {}; + class B_Truck_01_covered_EPOCH + { + price = 10000; + tax = 0.9; + }; + class B_Truck_01_covered_EPOCH1: B_Truck_01_covered_EPOCH {}; + class B_Truck_01_covered_EPOCH2: B_Truck_01_covered_EPOCH {}; + class B_Truck_01_covered_EPOCH3: B_Truck_01_covered_EPOCH {}; + class B_Truck_01_covered_EPOCH4: B_Truck_01_covered_EPOCH {}; + class B_Truck_01_box_EPOCH + { + price = 10000; + tax = 0.9; + }; + class B_Truck_01_box_EPOCH1: B_Truck_01_box_EPOCH {}; + class B_Truck_01_box_EPOCH2: B_Truck_01_box_EPOCH {}; + class B_Truck_01_box_EPOCH3: B_Truck_01_box_EPOCH {}; + class B_Truck_01_box_EPOCH4: B_Truck_01_box_EPOCH {}; + class O_Truck_02_transport_EPOCH + { + price = 10000; + tax = 0.9; + }; + class O_Truck_02_transport_EPOCH1: O_Truck_02_transport_EPOCH {}; + class O_Truck_02_transport_EPOCH2: O_Truck_02_transport_EPOCH {}; + class O_Truck_02_transport_EPOCH3: O_Truck_02_transport_EPOCH {}; + class O_Truck_02_transport_EPOCH4: O_Truck_02_transport_EPOCH {}; + class O_Truck_02_covered_EPOCH + { + price = 10000; + tax = 0.9; + }; + class O_Truck_02_covered_EPOCH1: O_Truck_02_covered_EPOCH {}; + class O_Truck_02_covered_EPOCH2: O_Truck_02_covered_EPOCH {}; + class O_Truck_02_covered_EPOCH3: O_Truck_02_covered_EPOCH {}; + class O_Truck_02_covered_EPOCH4: O_Truck_02_covered_EPOCH {}; + class O_Truck_02_box_EPOCH + { + price = 10000; + tax = 0.9; + }; + class O_Truck_02_box_EPOCH1: O_Truck_02_box_EPOCH {}; + class O_Truck_02_box_EPOCH2: O_Truck_02_box_EPOCH {}; + class O_Truck_02_box_EPOCH3: O_Truck_02_box_EPOCH {}; + class O_Truck_02_box_EPOCH4: O_Truck_02_box_EPOCH {}; + class O_Truck_03_transport_EPOCH + { + price = 10000; + tax = 0.9; + }; + class O_Truck_03_transport_EPOCH1: O_Truck_03_transport_EPOCH {}; + class O_Truck_03_transport_EPOCH2: O_Truck_03_transport_EPOCH {}; + class O_Truck_03_transport_EPOCH3: O_Truck_03_transport_EPOCH {}; + class O_Truck_03_transport_EPOCH4: O_Truck_03_transport_EPOCH {}; + class O_Truck_03_covered_EPOCH + { + price = 10000; + tax = 0.9; + }; + class O_Truck_03_covered_EPOCH1: O_Truck_03_covered_EPOCH {}; + class O_Truck_03_covered_EPOCH2: O_Truck_03_covered_EPOCH {}; + class O_Truck_03_covered_EPOCH3: O_Truck_03_covered_EPOCH {}; + class O_Truck_03_covered_EPOCH4: O_Truck_03_covered_EPOCH {}; + class uh1h_Epoch + { + price = 22500; + tax = 0.9; + }; + class uh1h_armed_EPOCH + { + price = 30000; + tax = 0.9; + }; + class uh1h_armed_plus_EPOCH + { + price = 35000; + tax = 0.9; + }; + class a2_mi8_EPOCH + { + price = 22500; + tax = 0.9; + }; + class a2_ch47f_EPOCH + { + price = 22500; + tax = 0.9; + }; + class a2_ch47f_armed_EPOCH + { + price = 30000; + tax = 0.9; + }; + class a2_ch47f_armed_plus_EPOCH + { + price = 35000; + tax = 0.9; + }; + class C_Heli_Light_01_armed_EPOCH + { + price = 30000; + tax = 0.9; + }; + class C_Heli_Light_01_armed_plus_EPOCH + { + price = 35000; + tax = 0.9; + }; + class O_Heli_Light_02_unarmed_EPOCH + { + price = 25000; + tax = 0.9; + }; + class I_Heli_Transport_02_EPOCH + { + price = 25000; + tax = 0.9; + }; + class I_Heli_light_03_unarmed_EPOCH + { + price = 25000; + tax = 0.9; + }; + class C_Heli_Light_01_civil_EPOCH + { + price = 25000; + tax = 0.9; + }; + class C_Heli_Light_01_civil_2seat_EPOCH: C_Heli_Light_01_civil_EPOCH {}; + class C_Heli_Light_01_civil_4seat_EPOCH: C_Heli_Light_01_civil_EPOCH {}; + class O_Heli_Transport_04_EPOCH + { + price = 25000; + tax = 0.9; + }; + class O_Heli_Transport_04_bench_EPOCH + { + price = 25000; + tax = 0.9; + }; + class O_Heli_Transport_04_box_EPOCH + { + price = 25000; + tax = 0.9; + }; + class O_Heli_Transport_04_covered_EPOCH + { + price = 25000; + tax = 0.9; + }; + class B_Heli_Transport_03_unarmed_EPOCH + { + price = 25000; + tax = 0.9; + }; + class I_UAV_01_F + { + price = 50; + }; + class jetski_epoch + { + price = 500; + tax = 0.9; + }; + class ebike_epoch + { + price = 3500; + tax = 0.9; + }; + class mosquito_epoch + { + price = 1500; + tax = 0.9; + }; + class K01 + { + price = 300; + tax = 0.9; + }; + class K02 + { + price = 300; + tax = 0.9; + }; + class K03 + { + price = 300; + tax = 0.9; + }; + class K04 + { + price = 300; + tax = 0.9; + }; + class CUP_C_Fishing_Boat_Chernarus + { + price = 800; + tax = 0.9; + }; + class CUP_C_LR_Transport_CTK + { + price = 800; + tax = 0.9; + }; + class CUP_B_Zodiac_USMC + { + price = 800; + tax = 0.9; + }; + class CUP_C_Skoda_Red_CIV + { + price = 800; + tax = 0.9; + }; + class CUP_C_Skoda_White_CIV + { + price = 800; + tax = 0.9; + }; + class CUP_C_Skoda_Blue_CIV + { + price = 800; + tax = 0.9; + }; + class CUP_C_Skoda_Green_CIV + { + price = 800; + tax = 0.9; + }; + class CUP_C_SUV_CIV + { + price = 1500; + tax = 0.9; + }; + class CUP_B_HMMWV_Transport_USA + { + price = 2500; + tax = 0.9; + }; + class CUP_B_HMMWV_Unarmed_USA + { + price = 2500; + tax = 0.9; + }; + class CUP_C_SUV_TK + { + price = 2000; + tax = 0.9; + }; + class CUP_B_LR_Transport_CZ_D + { + price = 1100; + tax = 0.9; + }; + class CUP_C_Datsun_Covered + { + price = 800; + tax = 0.9; + }; + class CUP_C_Datsun_Plain + { + price = 800; + tax = 0.9; + }; + class CUP_C_Datsun_Tubeframe + { + price = 800; + tax = 0.9; + }; + class CUP_C_Datsun_4seat + { + price = 800; + tax = 0.9; + }; + class CUP_C_Datsun + { + price = 800; + tax = 0.9; + }; + class CUP_C_Golf4_green_Civ + { + price = 800; + tax = 0.9; + }; + class CUP_C_Golf4_red_Civ + { + price = 800; + tax = 0.9; + }; + class CUP_C_Golf4_blue_Civ + { + price = 800; + tax = 0.9; + }; + class CUP_C_Golf4_black_Civ + { + price = 800; + tax = 0.9; + }; + class CUP_C_Golf4_kitty_Civ + { + price = 800; + tax = 0.9; + }; + class CUP_C_Golf4_reptile_Civ + { + price = 800; + tax = 0.9; + }; + class CUP_C_Golf4_camodigital_Civ + { + price = 800; + tax = 0.9; + }; + class CUP_C_Golf4_camodark_Civ + { + price = 800; + tax = 0.9; + }; + class CUP_C_Golf4_camo_Civ + { + price = 800; + tax = 0.9; + }; + class CUP_B_M1030 + { + price = 500; + tax = 0.9; + }; + class CUP_C_Ural_Civ_03 + { + price = 1200; + tax = 0.9; + }; + class CUP_C_Ural_Open_Civ_03 + { + price = 1200; + tax = 0.9; + }; + class CUP_C_Ural_Civ_02 + { + price = 1200; + tax = 0.9; + }; + class CUP_B_TowingTractor_USMC + { + price = 800; + tax = 0.9; + }; + class CUP_C_C47_CIV + { + price = 1600; + tax = 0.9; + }; + class CUP_B_LR_Transport_CZ_W + { + price = 800; + tax = 0.9; + }; + class CUP_C_Golf4_white_Civ + { + price = 800; + tax = 0.9; + }; + class CUP_C_Golf4_whiteblood_Civ + { + price = 800; + tax = 0.9; + }; + class CUP_C_Golf4_yellow_Civ + { + price = 800; + tax = 0.9; + }; + class CUP_C_Octavia_CIV + { + price = 1600; + tax = 0.9; + }; + class CUP_C_Ural_Civ_01 + { + price = 1000; + tax = 0.9; + }; + class CUP_C_Ural_Open_Civ_01 + { + price = 1000; + tax = 0.9; + }; + class CUP_B_Ural_CDF + { + price = 1000; + tax = 0.9; + }; + class CUP_B_Ural_Open_CDF + { + price = 1000; + tax = 0.9; + }; + class CUP_C_Ural_Open_Civ_02 + { + price = 1000; + tax = 0.9; + }; + class CUP_B_HMMWV_Ambulance_USA + { + price = 1500; + tax = 0.9; + }; + class CUP_C_UAZ_Unarmed_TK_CIV + { + price = 1000; + tax = 0.9; + }; + class CUP_C_UAZ_Open_TK_CIV + { + price = 1000; + tax = 0.9; + }; + class CUP_B_UAZ_Unarmed_CDF + { + price = 1000; + tax = 0.9; + }; + class CUP_B_Ural_Empty_CDF + { + price = 1000; + tax = 0.9; + }; + class CUP_C_DC3_CIV + { + price = 2400; + tax = 0.9; + }; + class C_Boat_Transport_02_F + { + price = 1200; + tax = 0.9; + }; + class C_Scooter_Transport_01_F + { + price = 1200; + tax = 0.9; + }; + class C_Offroad_02_unarmed_F + { + price = 3500; + tax = 0.9; + }; + class I_C_Offroad_02_unarmed_F + { + price = 3500; + tax = 0.9; + }; + class B_T_LSV_01_unarmed_F + { + price = 4400; + tax = 0.9; + }; + class O_LSV_02_unarmed_F + { + price = 4300; + tax = 0.9; + }; + class O_T_LSV_02_unarmed_F + { + price = 4600; + tax = 0.9; + }; + class C_Plane_Civil_01_F + { + price = 5000; + tax = 0.9; + }; + class C_Plane_Civil_01_racing_F + { + price = 5000; + tax = 0.9; + }; + class B_CTRG_LSV_01_light_F + { + price = 4400; + tax = 0.9; + }; + class B_LSV_01_unarmed_F + { + price = 4400; + tax = 0.9; + }; + class B_T_VTOL_01_vehicle_blue_EPOCH + { + price = 10000; + tax = 0.9; + }; + class B_T_VTOL_01_infantry_olive_EPOCH: B_T_VTOL_01_vehicle_blue_EPOCH {}; + class O_T_VTOL_02_infantry_EPOCH + { + price = 10000; + tax = 0.9; + }; + class O_T_VTOL_02_vehicle_grey_EPOCH: O_T_VTOL_02_infantry_EPOCH {}; + class B_UavTerminal + { + price = 10; + }; + class O_UavTerminal + { + price = 10; + }; + class 500Rnd_127x99_mag + { + price = 500; + }; + class 500Rnd_127x99_mag_Tracer_Red + { + price = 500; + }; + class 500Rnd_127x99_mag_Tracer_Green + { + price = 500; + }; + class 500Rnd_127x99_mag_Tracer_Yellow + { + price = 500; + }; + class 200Rnd_127x99_mag + { + price = 200; + }; + class 200Rnd_127x99_mag_Tracer_Red + { + price = 200; + }; + class 200Rnd_127x99_mag_Tracer_Green + { + price = 200; + }; + class 200Rnd_127x99_mag_Tracer_Yellow + { + price = 200; + }; + class 100Rnd_127x99_mag + { + price = 100; + }; + class 100Rnd_127x99_mag_Tracer_Red + { + price = 100; + }; + class 100Rnd_127x99_mag_Tracer_Green + { + price = 100; + }; + class 100Rnd_127x99_mag_Tracer_Yellow + { + price = 100; + }; + class 2000Rnd_762x51_Belt + { + price = 1250; + }; + class 200Rnd_40mm_G_belt + { + price = 650; + }; + class 32Rnd_40mm_G_belt + { + price = 350; + }; + class 64Rnd_40mm_G_belt + { + price = 400; + }; + class 96Rnd_40mm_G_belt + { + price = 500; + }; + class 200Rnd_20mm_G_belt + { + price = 550; + }; + class 40Rnd_20mm_G_belt + { + price = 350; + }; + class 60Rnd_CMFlare_Chaff_Magazine + { + price = 30; + }; + class 120Rnd_CMFlare_Chaff_Magazine + { + price = 60; + }; + class 240Rnd_CMFlare_Chaff_Magazine + { + price = 120; + }; + class 192Rnd_CMFlare_Chaff_Magazine + { + price = 96; + }; + class 168Rnd_CMFlare_Chaff_Magazine + { + price = 84; + }; + class 300Rnd_CMFlare_Chaff_Magazine + { + price = 150; + }; + class SmokeLauncherMag + { + price = 50; + }; + class SmokeLauncherMag_boat + { + price = 50; + }; + class 200Rnd_65x39_Belt + { + price = 350; + }; + class 200Rnd_65x39_Belt_Tracer_Red + { + price = 350; + }; + class 200Rnd_65x39_Belt_Tracer_Green + { + price = 350; + }; + class 200Rnd_65x39_Belt_Tracer_Yellow + { + price = 350; + }; + class 1000Rnd_65x39_Belt + { + price = 650; + }; + class 1000Rnd_65x39_Belt_Tracer_Red + { + price = 650; + }; + class 1000Rnd_65x39_Belt_Green + { + price = 650; + }; + class 1000Rnd_65x39_Belt_Tracer_Green + { + price = 650; + }; + class 1000Rnd_65x39_Belt_Yellow + { + price = 650; + }; + class 1000Rnd_65x39_Belt_Tracer_Yellow + { + price = 650; + }; + class 2000Rnd_65x39_Belt + { + price = 1000; + }; + class 2000Rnd_65x39_Belt_Tracer_Red + { + price = 1000; + }; + class 2000Rnd_65x39_Belt_Green + { + price = 1000; + }; + class 2000Rnd_65x39_Belt_Tracer_Green + { + price = 1000; + }; + class 2000Rnd_65x39_Belt_Tracer_Green_Splash + { + price = 1000; + }; + class 2000Rnd_65x39_Belt_Yellow + { + price = 1000; + }; + class 2000Rnd_65x39_Belt_Tracer_Yellow + { + price = 1000; + }; + class 2000Rnd_65x39_Belt_Tracer_Yellow_Splash + { + price = 1000; + }; + class 8Rnd_82mm_Mo_shells + { + price = 350; + }; + class 8Rnd_82mm_Mo_Flare_white + { + price = 350; + }; + class 8Rnd_82mm_Mo_Smoke_white + { + price = 350; + }; + class 8Rnd_82mm_Mo_guided + { + price = 350; + }; + class 8Rnd_82mm_Mo_LG + { + price = 350; + }; + class 24Rnd_PG_missiles + { + price = 4000; + }; + class 12Rnd_PG_missiles + { + price = 2000; + }; + class 24Rnd_missiles + { + price = 3500; + }; + class 12Rnd_missiles + { + price = 1750; + }; + class 60Rnd_40mm_GPR_shells + { + price = 500; + }; + class 60Rnd_40mm_GPR_Tracer_Red_shells + { + price = 500; + }; + class 60Rnd_40mm_GPR_Tracer_Green_shells + { + price = 500; + }; + class 60Rnd_40mm_GPR_Tracer_Yellow_shells + { + price = 500; + }; + class 40Rnd_40mm_APFSDS_shells + { + price = 350; + }; + class 40Rnd_40mm_APFSDS_Tracer_Red_shells + { + price = 350; + }; + class 40Rnd_40mm_APFSDS_Tracer_Green_shells + { + price = 350; + }; + class 40Rnd_40mm_APFSDS_Tracer_Yellow_shells + { + price = 350; + }; + class 140Rnd_30mm_MP_shells + { + price = 750; + }; + class 140Rnd_30mm_MP_shells_Tracer_Red + { + price = 750; + }; + class 140Rnd_30mm_MP_shells_Tracer_Green + { + price = 750; + }; + class 140Rnd_30mm_MP_shells_Tracer_Yellow + { + price = 750; + }; + class 60Rnd_30mm_APFSDS_shells + { + price = 450; + }; + class 60Rnd_30mm_APFSDS_shells_Tracer_Red + { + price = 450; + }; + class 60Rnd_30mm_APFSDS_shells_Tracer_Green + { + price = 450; + }; + class 60Rnd_30mm_APFSDS_shells_Tracer_Yellow + { + price = 450; + }; + + // new male start + class U_C_Commoner1_1 + { + price = 7; + }; + class U_C_Poor_2 + { + price = 7; + }; + class U_C_HunterBody_grn + { + price = 7; + }; + class U_C_Poor_shorts_1 + { + price = 7; + }; + class U_C_Commoner_shorts + { + price = 7; + }; + class U_C_ShirtSurfer_shorts + { + price = 7; + }; + class U_C_TeeSurfer_shorts_1 + { + price = 7; + }; + class U_C_TeeSurfer_shorts_2 + { + price = 7; + }; + class U_NikosBody + { + price = 7; + }; + class U_NikosAgedBody + { + price = 7; + }; + class U_IG_Guerilla1_1 + { + price = 7; + }; + class U_IG_leader + { + price = 7; + }; + class U_IG_Guerilla2_1 + { + price = 7; + }; + class U_IG_Guerilla2_3 + { + price = 7; + }; + class U_IG_Guerilla2_2 + { + price = 7; + }; + class U_IG_Guerilla3_1 + { + price = 7; + }; + class U_IG_Guerrilla_6_1 + { + price = 7; + }; + class U_OG_Guerrilla_6_1 + { + price = 7; + }; + class U_I_CombatUniform + { + price = 7; + }; + class U_I_CombatUniform_shortsleeve + { + price = 7; + }; + class U_I_HeliPilotCoveralls + { + price = 7; + }; + class U_I_pilotCoveralls + { + price = 7; + }; + class U_I_OfficerUniform + { + price = 7; + }; + class U_I_Wetsuit + { + price = 7; + }; + class U_I_GhillieSuit + { + price = 7; + }; + class U_I_CombatUniform_tshirt + { + price = 7; + }; + class U_O_OfficerUniform_ocamo + { + price = 7; + }; + class U_O_SpecopsUniform_ocamo + { + price = 7; + }; + class U_O_CombatUniform_oucamo + { + price = 7; + }; + class U_Marshal + { + price = 7; + }; + class U_B_Protagonist_VR + { + price = 7; + }; + class U_O_Protagonist_VR + { + price = 7; + }; + class U_I_Protagonist_VR + { + price = 7; + }; + class U_I_FullGhillie_lsh + { + price = 7; + }; + class U_I_FullGhillie_sard + { + price = 7; + }; + class U_I_FullGhillie_ard + { + price = 7; + }; + class U_I_C_Soldier_Para_1_F + { + price = 7; + }; + class U_I_C_Soldier_Para_2_F + { + price = 7; + }; + class U_I_C_Soldier_Para_3_F + { + price = 7; + }; + class U_I_C_Soldier_Para_4_F + { + price = 7; + }; + class U_I_C_Soldier_Para_5_F + { + price = 7; + }; + class U_I_C_Soldier_Bandit_1_F + { + price = 7; + }; + class U_I_C_Soldier_Bandit_2_F + { + price = 7; + }; + class U_I_C_Soldier_Bandit_3_F + { + price = 7; + }; + class U_I_C_Soldier_Bandit_4_F + { + price = 7; + }; + class U_I_C_Soldier_Bandit_5_F + { + price = 7; + }; + class U_I_C_Soldier_Camo_F + { + price = 7; + }; + class U_O_T_Soldier_F + { + price = 7; + }; + class U_O_T_Officer_F + { + price = 7; + }; + class U_O_T_Sniper_F + { + price = 7; + }; + class U_O_T_FullGhillie_tna_F + { + price = 7; + }; + class U_O_V_Soldier_Viper_F + { + price = 7; + }; + class U_O_V_Soldier_Viper_hex_F + { + price = 7; + }; + class U_C_man_sport_1_F + { + price = 7; + }; + class U_C_man_sport_2_F + { + price = 7; + }; + class U_C_man_sport_3_F + { + price = 7; + }; + class U_C_Man_casual_1_F + { + price = 7; + }; + class U_C_Man_casual_2_F + { + price = 7; + }; + class U_C_Man_casual_3_F + { + price = 7; + }; + class U_C_Man_casual_4_F + { + price = 7; + }; + class U_C_Man_casual_5_F + { + price = 7; + }; + class U_C_Man_casual_6_F + { + price = 7; + }; + class U_C_IDAP_Man_cargo_F + { + price = 7; + }; + class U_C_IDAP_Man_jeans_F + { + price = 7; + }; + class U_C_IDAP_Man_TeeShorts_F + { + price = 7; + }; + class U_C_IDAP_Man_Tee_F + { + price = 7; + }; + class U_C_IDAP_Man_casual_F + { + price = 7; + }; + class U_C_IDAP_Man_shorts_F + { + price = 7; + }; + class U_C_ConstructionCoverall_Red_F + { + price = 7; + }; + class U_C_ConstructionCoverall_vrana_F + { + price = 7; + }; + class U_C_ConstructionCoverall_Black_F + { + price = 7; + }; + class U_C_ConstructionCoverall_Blue_F + { + price = 7; + }; + class U_C_Paramedic_01_F + { + price = 7; + }; + class U_C_Mechanic_01_F + { + price = 7; + }; + + // new male stop + + class U_JeansPatched1_uniform + { + price = 5; + }; + class U_JeansPatched2_uniform + { + price = 5; + }; + class U_JeansPatched3_uniform + { + price = 5; + }; + class U_JeansPatched4_uniform + { + price = 5; + }; + class U_JeansPatched5_uniform + { + price = 5; + }; + class U_JeansPatched6_uniform + { + price = 5; + }; + class U_JeansPatched7_uniform + { + price = 5; + }; + class U_JeansPatched8_uniform + { + price = 5; + }; + class U_JeansPatched9_uniform + { + price = 5; + }; + class U_JeansPatched10_uniform + { + price = 5; + }; + class U_JeansPatched11_uniform + { + price = 5; + }; + class U_JeansPatched12_uniform + { + price = 5; + }; + class U_JeansPatched13_uniform + { + price = 5; + }; + class U_JeansPatched14_uniform + { + price = 5; + }; + class U_JeansPatched15_uniform + { + price = 5; + }; + class U_JeansPatched16_uniform + { + price = 5; + }; + class U_JeansPatched17_uniform + { + price = 5; + }; + class U_JeansPatched18_uniform + { + price = 5; + }; + class U_JeansPatched19_uniform + { + price = 5; + }; + class U_JeansPatched20_uniform + { + price = 5; + }; + class U_JeansPatched21_uniform + { + price = 5; + }; + class U_JeansBlkBrn1_uniform + { + price = 5; + }; + class U_JeansBlkBrn2_uniform + { + price = 5; + }; + class U_JeansBlkBrn3_uniform + { + price = 5; + }; + class U_JeansBlkBrn4_uniform + { + price = 5; + }; + class U_JeansBlkBrn5_uniform + { + price = 5; + }; + class U_JeansBlkBrn6_uniform + { + price = 5; + }; + class U_JeansBlkBrn7_uniform + { + price = 5; + }; + class U_JeansBlkBrn8_uniform + { + price = 5; + }; + class U_JeansBlkBrn9_uniform + { + price = 5; + }; + class U_JeansBlkBrn10_uniform + { + price = 5; + }; + class U_JeansBlkBrn11_uniform + { + price = 5; + }; + class U_JeansBlkBrn12_uniform + { + price = 5; + }; + class U_JeansBlkBrn13_uniform + { + price = 5; + }; + class U_JeansBlkBrn14_uniform + { + price = 5; + }; + class U_JeansBlkBrn15_uniform + { + price = 5; + }; + class U_JeansBlkBrn16_uniform + { + price = 5; + }; + class U_JeansBlkBrn17_uniform + { + price = 5; + }; + class U_JeansBlkBrn18_uniform + { + price = 5; + }; + class U_JeansBlkBrn19_uniform + { + price = 5; + }; + class U_JeansBlkBrn20_uniform + { + price = 5; + }; + class U_JeansBlkBrn21_uniform + { + price = 5; + }; + class U_JeansArBrn1_uniform + { + price = 5; + }; + class U_JeansArBrn2_uniform + { + price = 5; + }; + class U_JeansArBrn3_uniform + { + price = 5; + }; + class U_JeansArBrn4_uniform + { + price = 5; + }; + class U_JeansArBrn5_uniform + { + price = 5; + }; + class U_JeansArBrn6_uniform + { + price = 5; + }; + class U_JeansArBrn7_uniform + { + price = 5; + }; + class U_JeansArBrn8_uniform + { + price = 5; + }; + class U_JeansArBrn9_uniform + { + price = 5; + }; + class U_JeansArBrn10_uniform + { + price = 5; + }; + class U_JeansArBrn11_uniform + { + price = 5; + }; + class U_JeansArBrn12_uniform + { + price = 5; + }; + class U_JeansArBrn13_uniform + { + price = 5; + }; + class U_JeansArBrn14_uniform + { + price = 5; + }; + class U_JeansArBrn15_uniform + { + price = 5; + }; + class U_JeansArBrn16_uniform + { + price = 5; + }; + class U_JeansArBrn17_uniform + { + price = 5; + }; + class U_JeansArBrn18_uniform + { + price = 5; + }; + class U_JeansArBrn19_uniform + { + price = 5; + }; + class U_JeansArBrn20_uniform + { + price = 5; + }; + class U_JeansArBrn21_uniform + { + price = 5; + }; + class U_JeansBlack1_uniform + { + price = 5; + }; + class U_JeansBlack2_uniform + { + price = 5; + }; + class U_JeansBlack3_uniform + { + price = 5; + }; + class U_JeansBlack4_uniform + { + price = 5; + }; + class U_JeansBlack5_uniform + { + price = 5; + }; + class U_JeansBlack6_uniform + { + price = 5; + }; + class U_JeansBlack7_uniform + { + price = 5; + }; + class U_JeansBlack8_uniform + { + price = 5; + }; + class U_JeansBlack9_uniform + { + price = 5; + }; + class U_JeansBlack10_uniform + { + price = 5; + }; + class U_JeansBlack11_uniform + { + price = 5; + }; + class U_JeansBlack12_uniform + { + price = 5; + }; + class U_JeansBlack13_uniform + { + price = 5; + }; + class U_JeansBlack14_uniform + { + price = 5; + }; + class U_JeansBlack15_uniform + { + price = 5; + }; + class U_JeansBlack16_uniform + { + price = 5; + }; + class U_JeansBlack17_uniform + { + price = 5; + }; + class U_JeansBlack18_uniform + { + price = 5; + }; + class U_JeansBlack19_uniform + { + price = 5; + }; + class U_JeansBlack20_uniform + { + price = 5; + }; + class U_JeansBlack21_uniform + { + price = 5; + }; + class thor_mask_epoch + { + price = 30; + }; + class iron_mask_epoch + { + price = 30; + }; + class hockey_mask_epoch + { + price = 30; + }; + class plague_mask_epoch + { + price = 30; + }; + class ghostface_mask_epoch + { + price = 30; + }; + class skull_mask_epoch + { + price = 30; + }; + class witch_mask_epoch + { + price = 30; + }; + class radiation_mask_epoch + { + price = 75; + }; + /////////////////////////////////////////////////////////////////////////////// + // Apex Items & Weapons + /////////////////////////////////////////////////////////////////////////////// + class hgun_Pistol_01_F { price = 65; }; + class hgun_P07_khk_F { price = 65; }; + class SMG_05_F { price = 150; }; + class LMG_03_F { price = 300; }; + class arifle_MX_khk_F { price = 150; }; + class arifle_MX_GL_khk_F { price = 150; }; + class arifle_MXC_khk_F { price = 135; }; + class arifle_MXM_khk_F { price = 150; }; + class srifle_LRR_tna_F { price = 185; }; + class srifle_GM6_ghex_F { price = 190; }; + class srifle_DMR_07_blk_F { price = 175; }; + class srifle_DMR_07_hex_F { price = 175; }; + class srifle_DMR_07_ghex_F { price = 175; }; + class arifle_AK12_F { price = 165; }; + class arifle_AK12_GL_F { price = 170; }; + class arifle_AKM_F { price = 140; }; + class arifle_AKM_FL_F { price = 140; }; + class arifle_AKS_F { price = 135; }; + class arifle_ARX_blk_F { price = 190; }; + class arifle_ARX_ghex_F { price = 190; }; + class arifle_ARX_hex_F { price = 190; }; + class arifle_CTAR_blk_F { price = 145; }; + class arifle_CTAR_hex_F { price = 145; }; + class arifle_CTAR_ghex_F { price = 145; }; + class arifle_CTAR_GL_blk_F { price = 145; }; + class arifle_CTARS_blk_F { price = 145; }; + class arifle_CTARS_ghex_F { price = 145; }; + class arifle_CTARS_hex_F { price = 145; }; + class arifle_SPAR_01_blk_F { price = 140; }; + class arifle_SPAR_01_khk_F { price = 140; }; + class arifle_SPAR_01_snd_F { price = 140; }; + class arifle_SPAR_01_GL_blk_F { price = 150; }; + class arifle_SPAR_01_GL_khk_F { price = 150; }; + class arifle_SPAR_01_GL_snd_F { price = 150; }; + class arifle_SPAR_02_blk_F { price = 155; }; + class arifle_SPAR_02_khk_F { price = 155; }; + class arifle_SPAR_02_snd_F { price = 155; }; + class arifle_SPAR_03_blk_F { price = 160; }; + class arifle_SPAR_03_khk_F { price = 160; }; + class arifle_SPAR_03_snd_F { price = 160; }; + class muzzle_snds_H_khk_F { price = 5; }; + class muzzle_snds_H_snd_F { price = 5; }; + class muzzle_snds_58_blk_F { price = 2; }; + class muzzle_snds_m_khk_F { price = 1; }; + class muzzle_snds_m_snd_F { price = 1; }; + class muzzle_snds_B_khk_F { price = 5; }; + class muzzle_snds_B_snd_F { price = 5; }; + class muzzle_snds_58_wdm_F { price = 2; }; + class muzzle_snds_65_TI_blk_F { price = 7; }; + class muzzle_snds_65_TI_hex_F { price = 7; }; + class muzzle_snds_65_TI_ghex_F { price = 7; }; + class muzzle_snds_H_MG_blk_F { price = 2; }; + class muzzle_snds_H_MG_khk_F { price = 2; }; + class optic_Arco_blk_F { price = 10; }; + class optic_Arco_ghex_F { price = 10; }; + class optic_DMS_ghex_F { price = 15; }; + class optic_Hamr_khk_F { price = 20; }; + class optic_ERCO_blk_F { price = 12; }; + class optic_ERCO_khk_F { price = 12; }; + class optic_ERCO_snd_F { price = 12; }; + class optic_SOS_khk_F { price = 20; }; + class optic_LRPS_tna_F { price = 30; }; + class optic_LRPS_ghex_F { price = 30; }; + class optic_Holosight_blk_F { price = 5; }; + class optic_Holosight_khk_F { price = 5; }; + class optic_Holosight_smg_blk_F { price = 5; }; + class bipod_01_F_khk { price = 0; }; + class 30Rnd_9x21_Mag_SMG_02 { price = 3;}; + class 30Rnd_9x21_Mag_SMG_02_Tracer_Red { price = 2; }; + class 30Rnd_9x21_Mag_SMG_02_Tracer_Yellow { price = 2; }; + class 30Rnd_9x21_Mag_SMG_02_Tracer_Green { price = 2; }; + class 30Rnd_580x42_Mag_F { price = 2; }; + class 30Rnd_580x42_Mag_Tracer_F { price = 2; }; + class 100Rnd_580x42_Mag_F { price = 2; }; + class 100Rnd_580x42_Mag_Tracer_F { price = 2; }; + class 20Rnd_650x39_Cased_Mag_F { price = 2; }; + class 10Rnd_50BW_Mag_F { price = 4; }; + class 150Rnd_556x45_Drum_Mag_F { price = 8; }; + class 150Rnd_556x45_Drum_Mag_Tracer_F { price = 8; }; + class 30Rnd_762x39_Mag_F { price = 3; }; + class 30Rnd_762x39_Mag_Green_F { price = 3; }; + class 30Rnd_762x39_Mag_Tracer_F { price = 3; }; + class 30Rnd_762x39_Mag_Tracer_Green_F { price = 3; }; + class 30Rnd_545x39_Mag_F { price = 2; }; + class 30Rnd_545x39_Mag_Green_F { price = 2; }; + class 30Rnd_545x39_Mag_Tracer_F { price = 2; }; + class 30Rnd_545x39_Mag_Tracer_Green_F { price = 2; }; + class 200Rnd_556x45_Box_F { price = 9; }; + class 200Rnd_556x45_Box_Red_F { price = 9; }; + class 200Rnd_556x45_Box_Tracer_F { price = 9; }; + class 200Rnd_556x45_Box_Tracer_Red_F { price = 9; }; + class 10Rnd_9x21_Mag { price = 2; }; + class B_Bergen_mcamo_F { price = 40; }; + class B_Bergen_dgtl_F { price = 40; }; + class B_Bergen_hex_F { price = 40; }; + class B_Bergen_tna_F { price = 40; }; + class B_AssaultPack_tna_F { price = 10; }; + class B_Carryall_ghex_F { price = 40; }; + class B_FieldPack_ghex_F { price = 12; }; + class B_ViperHarness_base_F { price = 25; }; + class B_ViperHarness_blk_F { price = 25; }; + class B_ViperHarness_ghex_F { price = 25; }; + class B_ViperHarness_hex_F { price = 25; }; + class B_ViperHarness_khk_F { price = 25; }; + class B_ViperHarness_oli_F { price = 25; }; + class B_ViperLightHarness_base_F { price = 20; }; + class B_ViperLightHarness_blk_F { price = 20; }; + class B_ViperLightHarness_ghex_F { price = 20; }; + class B_ViperLightHarness_hex_F { price = 20; }; + class B_ViperLightHarness_khk_F { price = 20; }; + class B_ViperLightHarness_oli_F { price = 20; }; + // A2 Backpacks + class Assault_Pack_Epoch { price = 30; }; + class Patrol_Pack_Epoch { price = 30; }; + class TK_RPG_Backpack_Epoch { price = 30; }; + class CZ_VestPouch_Epoch { price = 35; }; + class civil_assault_pack_Epoch { price = 35; }; + class S_Gunbag_Epoch { price = 35; }; + class ALICE_Pack_Epoch { price = 40; }; + class US_Backpack_Epoch { price = 40; }; + class CZ_Backpack_Epoch { price = 40; }; + class L_Gunbag_Epoch { price = 40; }; + + class I_UAV_01_backpack_F { price = 40; }; + class C_IDAP_UAV_06_backpack_F { price = 40; }; + class C_IDAP_UAV_06_antimine_backpack_F { price = 40; }; + class B_UAV_06_medical_backpack_F { price = 40; }; + + // MAD ARMA + class revolver01 { price = 55; }; + class VG_sawed_off_01 { price = 120; }; + class Devastator_01 { price = 180; }; + class in005_1Rnd_12Gauge_Pellets { price = 5; }; + class in005_1Rnd_12Gauge_Slug { price = 5; }; + class H_MM_Buzzard_Gasmask_01 { price = 65; }; + class H_MM_Helmet_01 { price = 75; }; + class V_MM_Vest_01 { price = 20; }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgReadingDocuments.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgReadingDocuments.hpp new file mode 100644 index 0000000..1900c5c --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgReadingDocuments.hpp @@ -0,0 +1,70 @@ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {"DirtySanchez"}; + @description = "Readable Document Message Configs"; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = ""; +*/ +class CfgReadingDocuments +{ + class ItemVehDoc1 + { + displayMessage[] = {"Max Speed, Terrain Coef, Gears and more were edited","Upgrade your vehicle's Speed and Offroad Performance"}; + }; + class KitVehicleUpgradeI_100_EPOCH: ItemVehDoc1{}; + class KitVehicleUpgradeI_200_EPOCH: ItemVehDoc1{}; + class KitVehicleUpgradeI_300_EPOCH: ItemVehDoc1{}; + class ItemVehDoc2 + { + displayMessage[] = {"Upgrade your vehicle's body, wheels and windows with armor strength"}; + }; + class KitVehicleUpgradeII_100_EPOCH: ItemVehDoc2{}; + class KitVehicleUpgradeII_200_EPOCH: ItemVehDoc2{}; + class KitVehicleUpgradeII_300_EPOCH: ItemVehDoc2{}; + class ItemVehDoc3 + { + displayMessage[] = {"Increase your vehicle's inventory capacity for items, magazines, weapons and more"}; + }; + class KitVehicleUpgradeIII_100_EPOCH: ItemVehDoc3{}; + class KitVehicleUpgradeIII_200_EPOCH: ItemVehDoc3{}; + class KitVehicleUpgradeIII_300_EPOCH: ItemVehDoc3{}; + class ItemVehDoc4 + { + displayMessage[] = {"Increase your fuel capacity for those long hauls across your favorite ISLANDS"}; + }; + class KitVehicleUpgradeIV_100_EPOCH: ItemVehDoc1{}; + class KitVehicleUpgradeIV_200_EPOCH: ItemVehDoc1{}; + class KitVehicleUpgradeIV_300_EPOCH: ItemVehDoc1{}; + class ItemDoc1 + { + displayMessage[] = {"It was a beautiful day on Johnny's block","While Johnny was watching his father take all he could","Daddy's Roommate by Will Michoite"}; + }; + class ItemDoc2 + { + displayMessage[] = {"An elaborate story on a small town kid with big town mommies, I mean tittied.","Heather has TWO Mommies by Leslea Newman and Diana Solza"}; + }; + class ItemDoc3 + { + displayMessage[] = {"Look its todays edition and OH crap you die today, nvm thats O'Tool whom died","Trade City Obituaries by Your Fellow Community Members and AI"}; + }; + class ItemDoc4 + { + displayMessage[] = {"As you open the manilla folder you see pictures of your mom..."}; + }; + class ItemDoc5 + { + displayMessage[] = {"First you have no liquor and then you get slapped by a woman. This is not your day..."}; + }; + class ItemDoc6 + { + displayMessage[] = {"Wooden Ramp for DUMMIES volume 3"}; + }; + class ItemDoc7 + { + displayMessage[] = {"Swap the Deck, a seductive tale so bad the author couldnt put his name on it!"}; + }; + class ItemDoc8 + { + displayMessage[] = {"'He Touch Me, He Touch Me NOT is Back' raves Cherno Shmerno!","#1 Bestseller throughout Arma 2 DayZ Epoch"}; + }; +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgRemoteExec.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgRemoteExec.hpp new file mode 100644 index 0000000..2647e4e --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgRemoteExec.hpp @@ -0,0 +1,376 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: Andrew Gregory + + Description: + RemoteExec whitelist for Epoch Survival gamemode. This also blacklists default A3 remoteExec commands. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgRemoteExec.hpp +*/ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {"Andrew Gregory"}; + @description = "RemoteExec whitelist for Epoch Survival gamemode. This also blacklists default A3 remoteExec commands."; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgRemoteExec.hpp"; +*/ +class CfgRemoteExec +{ + class Functions + { + mode = 1; + jip = 0; + class EPOCH_server_spawnLoot + { + allowedTargets=2; + jip = 0; + }; + class EPOCH_server_PaintVehicle + { + allowedTargets=2; + jip = 0; + }; + class EPOCH_server_PutCrypto + { + allowedTargets=2; + jip = 0; + }; + class EPOCH_server_SetFinalPlayerPos + { + allowedTargets=2; + jip = 0; + }; + class bis_fnc_reviveinitaddplayer + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_paycrypto + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_save_vehicles + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_saveBuilding + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_upgradeBUILD + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_removeBUILD + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_paintBUILD + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_maintBUILD + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_loadPlayer + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_checkPlayer + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_deadPlayer + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_destroyTrash + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_knockDownTree + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_mineRocks + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_lootAnimal + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_handle_say3D + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_handle_switchMove + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_client_bitePlayer + { + allowedTargets = 1; + jip = 0; + }; + class EPOCH_server_upgradeGroup + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_updatePlayerGroup + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_createGroup + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_deleteGroup + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_invitePlayer + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_lootContainer + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_revivePlayer + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_storeCrypto + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_tradeRequest + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_makeTrade + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_makeNPCTrade + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_takeCrypto + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_repairVehicle + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_fillVehicle + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_lockVehicle + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_equippedItem + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_lockStorage + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_packStorage + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_packJack + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_localCleanup + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_teleportPlayer + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_fillContainer + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_handle_sapperObjs + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_Server_createAirDrop + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_airDropCrate + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_Server_createObject + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_fnc_savePlayer + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_unpackBackpack + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_triggerAntagonist + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_deadPlayerDetonate + { + allowedTargets = 2; + jip = 0; + }; + class epoch_server_playersetvariable + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_spawn_vehicle + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_Server_missionComms + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_serverLootObject + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_makeMarker + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_removeMarker + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_makeSP + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_upgrade_vehicle + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_fnc_updatePlayerStats + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_client_updatePlayerStat + { + allowedTargets = 1; + jip = 0; + }; + class EPOCH_server_createTempGroup + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_invitePlayerTempGroup + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_updatePlayerTempGroup + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_deleteTempGroup + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_upgradeTempGroup + { + allowedTargets = 2; + jip = 0; + }; + class EPOCH_server_DefuseBomb + { + allowedTargets = 2; + jip = 0; + }; + }; + class Commands + { + mode = 0; + }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgSay3Dhandler.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgSay3Dhandler.hpp new file mode 100644 index 0000000..0333e93 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgSay3Dhandler.hpp @@ -0,0 +1,77 @@ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {}; + @description = "Custom Epoch config for say3d broadcasting to nearby players."; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgSay3Dhandler.hpp"; +*/ +class CfgSay3Dhandler +{ + class snake_bite0 + { + distance = 100; + }; + class cultist_nearby + { + distance = 100; + }; + class dog_bark + { + distance = 750; + }; + class dog_cry + { + distance = 600; + }; + class hed_cluck0 + { + distance = 600; + }; + class hed_cluck1 + { + distance = 600; + }; + class hed_cluck2 + { + distance = 600; + }; + class cultist_talk + { + distance = 30; + }; + class cultist_laugh + { + distance = 30; + }; + class cloak_death + { + distance = 30; + }; + class drone_alert0 + { + distance = 400; + }; + class sapper_alert0 + { + distance = 400; + }; + class sapper_groan0 + { + distance = 400; + }; + class sapper_groan1 + { + distance = 400; + }; + class sapper_groan2 + { + distance = 400; + }; + class sapper_explode + { + distance = 1000; + }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgServicePoint.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgServicePoint.hpp new file mode 100644 index 0000000..4e1eb26 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgServicePoint.hpp @@ -0,0 +1,363 @@ +class CfgServicePoint { + class Altis { + ServicePoints[] = { // Array of coords for ServicePoints +/* + {pos1}, + {pos2} + OR + { + pos1, + dist1, + {VehType_1,VehType_1,...}, + "MarkerText1" + }, + { + pos2, + dist2, + {VehType,VehType,...}, + "MarkerText2" + } +*/ + { // Kavala Pier + {3238,12907,0}, // Pos + 40, // max distance + {"Ship"}, // Vehicle Types for SP + "Service Point Ship" // Marker Text (Leave it Blank to disable Marker) + }, + { // Kavala Workshop + {3755,13472.5,0}, // Pos + 40, // max distance + {"Landvehicle","TANK"}, // Vehicle Types for SP + "Service Point Land" // Marker Text (Leave it Blank to disable Marker) + }, + { // Airfield Workshop + {14160,16533.5,0}, // Pos + 40, // max distance + {"Landvehicle","TANK"}, // Vehicle Types for SP + "Service Point Land" // Marker Text (Leave it Blank to disable Marker) + }, + { // Airfield Terminal + {14641.5,16754.5,0}, // Pos + 40, // max distance + {"AIR"}, // Vehicle Types for SP + "Service Point AIR" // Marker Text (Leave it Blank to disable Marker) + } + }; + }; + class Tanoa { + ServicePoints[] = { + { + {2157.79,3477.65,0}, // Pos + 40, // max distance + {"Landvehicle","Ship","AIR","Tank"}, // Vehicle Types for SP + "Service Point" // Marker Text + }, + { + {11731.5,3125.95,0}, // Pos + 40, // max distance + {"Landvehicle","Ship","AIR","Tank"}, // Vehicle Types for SP + "Service Point" // Marker Text + }, + { + {7008.93,7582.59,0}, // Pos + 40, // max distance + {"Landvehicle","Ship","AIR","Tank"}, // Vehicle Types for SP + "Service Point" // Marker Text + }, + { + {2326.28,13167.9,0}, // Pos + 40, // max distance + {"Landvehicle","Ship","AIR","Tank"}, // Vehicle Types for SP + "Service Point" // Marker Text + }, + { + {11805.8,13100.6,0}, // Pos + 40, // max distance + {"Landvehicle","Ship","AIR","Tank"}, // Vehicle Types for SP + "Service Point" // Marker Text + }, + { + {5525.8,10345.2,0}, // Pos + 40, // max distance + {"Landvehicle","Ship","AIR","Tank"}, // Vehicle Types for SP + "Service Point" // Marker Text + }, + { + {11916,2383.88,0}, // Pos + 40, // max distance + {"Landvehicle","Ship","AIR","Tank"}, // Vehicle Types for SP + "Service Point" // Marker Text + }, + { + {13562.4,12139.5,0}, // Pos + 40, // max distance + {"Landvehicle","Ship","AIR","Tank"}, // Vehicle Types for SP + "Service Point" // Marker Text + } + }; + }; + class Chernarus { // Array of coords for ServicePoints + ServicePoints[] = { + + }; + }; + ServicePointClasses[] = { // Array of Classnames where also are ServicePoints (not separat configurable for Vehicle types / distance) +// "Land_Pillar_Pier_F", +// "Land_CarService_F", +// "Land_fs_feed_F", +// "Land_fs_roof_F" + }; + PreventRepairs[] = { // These Hitpints will not be repaired, if damage >= value (Prevent from Duping Tires / Engines) + {"HitLFWheel",1}, // {"HitPoint",value} + {"HitLF2Wheel",1}, + {"HitLMWheel",1}, + {"HitLBWheel",1}, + {"HitRFWheel",1}, + {"HitRF2Wheel",1}, + {"HitRMWheel",1}, + {"HitRBWheel",1}, + {"HitEngine",1} + }; + ServicePointDist = 40; + refuel_updateInterval = 1; + refuel_amount = 0.1; + repairTime = 1.2; + repair_costs[] = { + {"Air",0}, + {"Tank",0}, + {"Ship",0}, + {"Landvehicle",0} + }; + refuel_costs[] = { + {"Air",0}, + {"Tank",0}, + {"Ship",0}, + {"Landvehicle",0} + }; + /* Get all Weapons and Turrets with "magazinesAllTurrets vehicle" -> https://community.bistudio.com/wiki/magazinesAllTurrets */ + class VehiclesAndAmmo { +/* + class VehicleType { + MagsTurrets[] = { + {"Ammoclass",{Turretpath},MaxMagsCount,PricePerMag,Bullets per mag (optional, if you want to reduce bullets per mag)}, + {"Ammoclass",{Turretpath},MaxMagsCount,PricePerMag,Bullets per mag (optional, if you want to reduce bullets per mag)} + }; + }; +*/ + + class a2_ch47f_armed_EPOCH { + MagsTurrets[] = { + {"200Rnd_65x39_Belt",{1},3,200}, + {"200Rnd_65x39_Belt",{2},3,200} + }; + }; + class a2_ch47f_armed_plus_EPOCH { + MagsTurrets[] = { + {"200Rnd_762x51_Belt",{0},3,200}, + {"200Rnd_762x51_Belt",{1},3,200} + }; + }; + class uh1h_armed_EPOCH { + MagsTurrets[] = { + {"200Rnd_65x39_Belt",{1},3,200}, + {"200Rnd_65x39_Belt",{2},3,200} + }; + }; + class uh1h_armed_plus_EPOCH { + MagsTurrets[] = { + {"200Rnd_762x51_Belt",{0},3,200}, + {"200Rnd_762x51_Belt",{1},3,200} + }; + }; + class C_Heli_Light_01_armed_EPOCH { + MagsTurrets[] = { + {"200Rnd_65x39_Belt",{-1},3,200} + }; + }; + class C_Heli_Light_01_armed_plus_EPOCH { + MagsTurrets[] = { + {"200Rnd_762x51_Belt",{-1},3,200} + }; + }; + class A2_SUV_armed_EPOCH { + MagsTurrets[] = { + {"200Rnd_762x51_Belt",{0},3,200} + }; + }; + class I_LT_01_cannon_F { + MagsTurrets[] = { + {"SmokeLauncherMag",{0},2,50}, + {"200Rnd_762x51_Belt_Yellow",{0},1,300} + }; + }; + class I_LT_01_scout_F { + MagsTurrets[] = { + {"SmokeLauncherMag",{0},2,50} + }; + }; + class I_C_Offroad_02_LMG_F { + MagsTurrets[] = { + {"200Rnd_556x45_Box_Tracer_F",{0},3,250} + }; + }; + class I_MRAP_03_hmg_F { + MagsTurrets[] = { + {"500Rnd_127x99_mag_Tracer_Red",{0},3,1500}, + {"200Rnd_127x99_mag_Tracer_Red",{0},3,600}, + {"SmokeLauncherMag",{1},2,50} + }; + }; + class O_MRAP_02_EPOCH1 { + MagsTurrets[] = { + {"SmokeLauncherMag",{-1},2,50} + }; + }; + class B_Heli_Transport_01_F { + MagsTurrets[] = { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150}, + {"2000Rnd_65x39_Belt_Tracer_Red",{1},1,800,1250}, + {"2000Rnd_65x39_Belt_Tracer_Red",{2},1,800,1250} + }; + }; + class B_G_Offroad_01_armed_F { + MagsTurrets[] = { + {"100Rnd_127x99_mag_Tracer_Yellow",{0},4,200} + }; + }; + class O_G_Offroad_01_armed_F : B_G_Offroad_01_armed_F {}; + class I_G_Offroad_01_armed_F : B_G_Offroad_01_armed_F {}; + class B_G_Offroad_01_armed_EPOCH : B_G_Offroad_01_armed_F {}; + class B_G_Offroad_01_armed_EPOCH1 : B_G_Offroad_01_armed_F {}; + class B_G_Offroad_01_armed_EPOCH2 : B_G_Offroad_01_armed_F {}; + class B_G_Offroad_01_armed_EPOCH3 : B_G_Offroad_01_armed_F {}; + class B_G_Offroad_01_armed_EPOCH4 : B_G_Offroad_01_armed_F {}; + class I_MRAP_03 { + MagsTurrets[] = { + {"SmokeLauncherMag",{0},1,150} + }; + }; + class I_MRAP_03_EPOCH { + MagsTurrets[] = { + }; + }; + class O_MRAP_02_F { + MagsTurrets[] = { + {"SmokeLauncherMag",{-1},1,150} + }; + }; + class B_LSV_01_armed_olive_F { + MagsTurrets[] = { + {"100Rnd_127x99_mag_Tracer_Red",{0},3,200}, + {"130Rnd_338_Mag",{1},3,260} + }; + }; + class B_LSV_01_armed_black_F : B_LSV_01_armed_olive_F {}; + class O_T_LSV_02_armed_black_F { + MagsTurrets[] = { + {"500Rnd_65x39_Belt_Tracer_Green_Splash",{0},3,500} + }; + }; + class O_T_LSV_02_armed_ghex_F : O_T_LSV_02_armed_black_F {}; + class B_SDV_01_EPOCH { + MagsTurrets[] = { + }; + }; + class B_Heli_Light_01_armed_F { + MagsTurrets[] = { + {"5000Rnd_762x51_Belt",{-1},1,1600,2000} + }; + }; + class B_Heli_Light_01_armed_EPOCH { + MagsTurrets[] = { + {"1000Rnd_762x51_Belt",{-1},1,1200} + }; + }; + class O_Heli_Light_02_unarmed_EPOCH { + MagsTurrets[] = { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + }; + }; + class O_Heli_Light_02_v2_F { + MagsTurrets[] = { + {"2000Rnd_65x39_Belt_Tracer_Green_Splash",{-1},1,1200}, + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + }; + }; + class B_Heli_Transport_01_EPOCH { + MagsTurrets[] = { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150}, + {"2000Rnd_65x39_Belt_Tracer_Red",{1},1,1200}, + {"2000Rnd_65x39_Belt_Tracer_Red",{2},1,1200} + }; + }; + class B_Heli_Transport_01_camo_EPOCH : B_Heli_Transport_01_EPOCH {}; + class I_Heli_Transport_02_F { + MagsTurrets[] = { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + }; + }; + class I_Heli_Transport_02_EPOCH : I_Heli_Transport_02_F {}; + class B_Heli_Transport_03_F { + MagsTurrets[] = { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150}, + {"2000Rnd_65x39_Belt_Tracer_Red",{1},1,1200}, + {"2000Rnd_65x39_Belt_Tracer_Red",{2},1,1200} + }; + }; + class B_Heli_Transport_03_black_F : B_Heli_Transport_03_F {}; + class B_Heli_Transport_03_unarmed_EPOCH { + MagsTurrets[] = { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + }; + }; + class I_Heli_light_03_unarmed_EPOCH { + MagsTurrets[] = { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + }; + }; + class O_Heli_Transport_04_box_EPOCH { + MagsTurrets[] = { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + }; + }; + class O_Heli_Transport_04_bench_EPOCH : O_Heli_Transport_04_box_EPOCH {}; + class O_Heli_Transport_04_covered_EPOCH : O_Heli_Transport_04_box_EPOCH {}; + class O_Heli_Transport_04_EPOCH : O_Heli_Transport_04_box_EPOCH {}; + class B_T_VTOL_01_vehicle_blue_F { + MagsTurrets[] = { + {"240Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + }; + }; + class B_T_VTOL_01_infantry_olive_F : B_T_VTOL_01_vehicle_blue_F {}; + class B_T_VTOL_01_infantry_blue_F : B_T_VTOL_01_vehicle_blue_F {}; + class O_T_VTOL_02_vehicle_F { + MagsTurrets[] = { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + }; + }; + class O_T_VTOL_02_vehicle_grey_F : O_T_VTOL_02_vehicle_F {}; + class O_T_VTOL_02_infantry_F : O_T_VTOL_02_vehicle_F {}; + class B_Heli_Attack_01_F { + MagsTurrets[] = { + {"240Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + }; + }; + class O_Heli_Attack_02_black_F { + MagsTurrets[] = { + {"192Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + }; + }; + class O_Heli_Attack_02_F : O_Heli_Attack_02_black_F {}; + class O_Boat_Armed_01_hmg_F { + MagsTurrets[] = { + {"SmokeLauncherMag_boat",{-1},1,100}, + {"200Rnd_127x99_mag_Tracer_Green",{1},3,300} + }; + }; + class mosquito_epoch_armedG { + MagsTurrets[] = { + {"3Rnd_MosquitoGrenade",{-1},1,60} + }; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgSnapChecks.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgSnapChecks.hpp new file mode 100644 index 0000000..38fb7c9 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgSnapChecks.hpp @@ -0,0 +1,74 @@ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {}; + @description = "Custom Epoch config for base building Snap check offsets"; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgSnapChecks.hpp"; +*/ +class CfgSnapChecks +{ + class Hesco3_EPOCH + { + nails[] = {{{1.6,0,-0.6},{1.6,0,-0.75}},{{-1.6,0,-0.6},{-1.6,0,-0.75}},{{0,0,-0.0307557},{1.8625,0,-0.0307557}},{{0,0,-0.0307557},{-1.8625,0,-0.0307557}}}; + }; + class WoodLargeWall_EPOCH + { + nails[] = {{{2.46932,0,0.120775},{2.46932,0,-0.190775}},{{-2.46932,0,0.120775},{-2.46932,0,-0.190775}},{{0,0,1.5},{2.76932,0,1.5}},{{0,0,1.5},{-2.76932,0,1.5}}}; + }; + class WoodWall1_EPOCH : WoodLargeWall_EPOCH {}; + class WoodWall2_EPOCH : WoodLargeWall_EPOCH {}; + class WoodWall3_EPOCH : WoodLargeWall_EPOCH {}; + class WoodWall4_EPOCH : WoodLargeWall_EPOCH {}; + class WoodLargeWallCor_EPOCH : WoodLargeWall_EPOCH {}; + class WoodLargeWallDoorway_EPOCH : WoodLargeWall_EPOCH {}; + class WoodLargeWallDoor_EPOCH : WoodLargeWall_EPOCH {}; + class WoodLargeWallDoorL_EPOCH : WoodLargeWall_EPOCH {}; + class CinderWallGarage_EPOCH : WoodLargeWall_EPOCH {}; + class CinderWallDoorwHatch_EPOCH : WoodLargeWall_EPOCH {}; + class CinderWall_EPOCH : WoodLargeWall_EPOCH {}; + class CinderWallHalf_EPOCH : WoodLargeWall_EPOCH {}; + class JailWall_EPOCH : WoodLargeWall_EPOCH {}; + class PlyThirdWall_EPOCH : WoodLargeWall_EPOCH + { + nails[] = {{{2.46932,0,0.120775},{2.46932,0,-0.190775}},{{-2.46932,0,0.120775},{-2.46932,0,-0.190775}},{{0,0,1},{2.76932,0,1}},{{0,0,1},{-2.76932,0,1}}}; + }; + class WoodFloor_Epoch + { + nails[] = {{{0,0,0.15},{2.8555,0,0.15}},{{0,0,0.15},{0,2.8555,0.15}},{{0,0,0.15},{-2.8555,0,0.15}},{{0,0,0.15},{0,-2.8555,0.15}},{{2.5555,0,0.15},{2.5555,0,-0.15}},{{-2.5555,0,0.15},{-2.5555,0,-0.15}},{{0,-2.5555,0.15},{0,-2.5555,-0.15}},{{0,2.5555,0.15},{0,2.5555,-0.15}}}; + }; + class WoodHalfFloor_EPOCH + { + nails[] = {{{0,0,0.15},{1.42775,0,0.15}},{{0,0,0.15},{0,2.8555,0.15}},{{0,0,0.15},{-1.42775,0,0.15}},{{0,0,0.15},{0,-2.8555,0.15}},{{1.12775,0,0.15},{1.12775,0,-0.15}},{{-1.12775,0,0.15},{-1.12775,0,-0.15}},{{0,-2.5555,0.15},{0,-2.5555,-0.15}},{{0,2.5555,0.15},{0,2.5555,-0.15}}}; + }; + class WoodQuarterFloor_EPOCH + { + nails[] = {{{0,0,0.15},{1.42775,0,0.15}},{{0,0,0.15},{0,1.42775,0.15}},{{0,0,0.15},{-1.42775,0,0.15}},{{0,0,0.15},{0,-1.42775,0.15}},{{1.12775,0,0.15},{1.12775,0,-0.15}},{{-1.12775,0,0.15},{-1.12775,0,-0.15}},{{0,-1.12775,0.15},{0,-1.12775,-0.15}},{{0,1.12775,0.15},{0,1.12775,-0.15}}}; + }; + class MetalFloor_EPOCH : WoodFloor_Epoch {}; + class CinderFloor_EPOCH : WoodFloor_Epoch {}; + class MetalHalfFloor_EPOCH : WoodHalfFloor_EPOCH {}; + class CinderHalfFloor_EPOCH : WoodHalfFloor_EPOCH {}; + class MetalQuarterFloor_EPOCH : WoodQuarterFloor_EPOCH {}; + class CinderQuarterFloor_EPOCH : WoodQuarterFloor_EPOCH {}; + class WoodStairs_EPOCH + { + nails[] = {{{0.1,0,0.05},{0.1,0,-0.2}},{{-0.1,0,0.05},{-0.1,0,-0.2}}}; + }; + class WoodStairs2_EPOCH : WoodStairs_EPOCH {}; + class WoodTower_EPOCH : WoodStairs_EPOCH {}; + class MetalTower_EPOCH : WoodStairs_EPOCH {}; + class CinderTower_EPOCH : WoodStairs_EPOCH {}; + class WoodRamp_EPOCH : WoodStairs_EPOCH {}; + class BaseCam_EPOCH + { + nails[] = { + {{0,0.15,-0.06},{0,0.3,0.04}}, + {{0,0.15,-0.06},{0,0.3,-0.16}}, + {{0,0.15,-0.06},{-0.1,0.3,-0.06}}, + {{0,0.15,-0.06},{0.1,0.3,-0.06}} + }; + }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgSwitchMovehandler.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgSwitchMovehandler.hpp new file mode 100644 index 0000000..d93bb16 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgSwitchMovehandler.hpp @@ -0,0 +1,29 @@ +/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {}; + @description = "Custom Epoch config for animation broadcasting to nearby players."; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgSwitchMovehandler.hpp"; +*/ +class CfgSwitchMovehandler +{ + class AovrPercMrunSrasWrflDf + { + distance = 1000; + }; + class epoch_unarmed_jump + { + distance = 1000; + }; + class AwopPercMstpSgthWnonDnon_throw + { + distance = 1000; + }; + class AmovPercMstpSnonWnonDnon_SaluteOut + { + distance = 1000; + }; +}; + +/*[[[end]]]*/ diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgTraderMissions.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgTraderMissions.hpp new file mode 100644 index 0000000..fdeb8b2 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgTraderMissions.hpp @@ -0,0 +1,411 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Mission configs and dialogs + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgTraderMissions.hpp +*/ + +class MissionList{ + traderMissionNames[] = {"Mission - Pikes Peak Express","Mission - Animal Control","Mission - Track a Raider","Mission - VIP Chauffeur","What's the time ?","Who is near by ?","What's New ?","What is your name ?"}; + traderMissionDisabled[] = {}; + traderMissionActiveNames[] = {"Intercept Package","","","VIP Capture"}; + traderMissionLongDesc[] = {"Deliver an important message to another trader.","I need a wild animal bringing back here.","Take control of an UAV and track down a bounty.","Deliver a person safely to another location.","ASk the trader the local time.","Find out information about nearby people.","Ask the trader for any news.","Find out the traders name."}; + traderMissionActiveLongDesc[] = {"Intercept a mission delivery and bring me the message.","","","Capture a VIP being driven."}; +}; + +class traderMissions { + + class MissionDelivery{ + author = "axeman"; + missionName = "Pikes Peak Express.";//Not used + + class welcome{ + condition = "(false)";//no longer used - button triggers mission + dialogue[] = {"Hi, Can you take this item to another trader town. You will be paid well.","I have an important message to get out, take it to any other trader camp for a reward ?"}; + dialogue2[] = {"I have added the document to your inventory.","It's in your gear. If you don't have enough room try again later."}; + item[] = {"ItemDocumentMission","ItemDocumentMission"}; + action = ""; + }; + + class accept{ + condition = "(false)";//Decided in code - change to true to default accept mission. + dialogue[] = {"Great, now get out of here.. I will keep an eye on you through a drone.","Head toward one of the traders further away. I have a UAV to monitor your progress. Don't let me down !"}; + dialogue2[] = {"You now have an implant that allows me to send you messages.","I will try and help you with messages during your mission if possible."}; + missionDeclined[] = {"Not interested then ? Ok, maybe another time.","Ok, so you have better things to do. I will wait for someone else."}; + crypto[] = {0,0}; + weapon[] = {"",""}; + magazine[] = {"",""}; + item[] = {"",""}; + action = ""; + }; + + class inmission1{ + condition = "(count (player nearEntities [[""Epoch_Male_F"",""Epoch_Female_F"",""C_man_hunter_1_F"",""Epoch_Female_Camo_F""], 150]) > 1)"; + dialogue[] = {"Look out, you have other survivors in the area.","Find a place to hide, UAV reports other survivors in your area."}; + dialogue2[] = {"",""}; + action = ""; + frequency = 560; + }; + + class inmission2{ + condition = "(count (player nearEntities [[""Epoch_Sapper_F"",""Alsatian_Random_EPOCH"",""Epoch_cloak_F"",""Fin_random_EPOCH""], 150]) > 0)"; + dialogue[] = {"You have something following you, watch your back..","Keep moving, you have something nearby."}; + dialogue2[] = {"",""}; + action = ""; + frequency = 560; + }; + + class inmission3{ + condition = "(false)"; + dialogue[] = {"",""}; + dialogue2[] = {"",""}; + action = ""; + frequency = 1024; + }; + + class completed{ + condition = "";//handled in code + dialogue[] = {"Well Done, you made it. Let me see the document.", "So, you made it then, congratulations. Now for the message ?"}; + dialogue2[] = {"Hmm, interesting news, here's your reward, thanks for your assistance.","That is good news, I guess I should pay you now."}; + action[] = {""}; + crypto[] = {100,150}; + weapon[] = {"arifle_MX_SW_Hamr_pointer_F","Hatchet"}; + magazine[] = {"100Rnd_65x39_caseless_mag_Tracer","hatchet_swing"}; + item[] = {"RabbitCarcass_EPOCH","ChickenCarcass_EPOCH"}; + }; + + class missioncheck{ + + class health{ + dialogue[] = {"You look hurt, I am going to inject some adrenaline using your implant.","Hang in there buddy.. Your implant is about to give you a boost."}; + dialogue2[] = {"",""}; + action = ""; + frequency = 60; + }; + + class characters{ + dialogue[] = {"The drone picks up a mild heat signature nearby, could be a body to loot","Have spotted a prone player near your location, might be worth investigating."}; + }; + + class itemlost{ + dialogue[] = {"Looks like you've lost the message, are you giving up on me ?","Don't leave that message lying around, it's essential that it arrives."}; + dialogue2[] = {"If you are thinking about taking the goods and running I would have a re-think.","I wouldn't run out on me now, the last person who tried didn't get very far !"}; + action = ""; + }; + + class passed{ + dialogue[] = {"So you're taking over this mission. Deliver this message to another trader for a reward.","New blood eh. This document needs delivering to a trader as soon as possible."}; + dialogue2[] = {"",""}; + action = "hint ""Mission Passed Action.."""; + }; + + class abandoned{ + condition = "(player distance _trader > 150)"; + dialogue[] = {"You running out with my gear..Not good, not good at all.","Take the gear and run eh ? You were supposed to be delivering a message !"}; + dialogue2[] = {"There's a price to pay for letting me down. Here it comes.","That's the last time you will cheat a trader. We don't take kindly to traitors."}; + delay = 60; + action = ""; + }; + + }; + + + }; + class MissionSapper{ + author = "axeman"; + missionName = "Animal Control.";//Not used + + class welcome{ + condition = "(false)";//no longer used - button triggers mission + dialogue[] = {"I need a loose animal in the area capturing. He is known to be a bit wild","A brave survivor I see.. You need to find me a Sapper."}; + dialogue2[] = {"Go out and start looting, when you attract the attention of a Sapper Lure him to my location, I will do the rest.","Lure a sapper to my location. Hint: You need to get dirty to attract one."}; + item[] = {"",""}; + action = ""; + }; + + class accept{ + condition = "(true)";//Decided in code - change to true to default accept mission. i.e. Doesn't require the player to be holding welcome item above e.g. + dialogue[] = {"Get out there and try and attract a sapper.","On your way then."}; + dialogue2[] = {"I have a UAV patrolling the area. I will keep my eye out for you.","I will be watching. Try not to get too close to that sapper."}; + missionDeclined[] = {""}; + crypto[] = {0,0}; + weapon[] = {"",""}; + magazine[] = {"",""}; + item[] = {"",""}; + action = ""; + }; + + class inmission1{ + condition = "((player distance _trader) < 60 && (_sapper distance _trader < 150))"; + dialogue[] = {"You need to get him close to me. I need to see the stitchings of his eyes.","I need him closer if I am to catch him. Come on you are nearly there !"}; + dialogue2[] = {"",""}; + action = ""; + frequency = 240; + }; + + class inmission2{ + condition = "(count (player nearEntities [[""Alsatian_Random_EPOCH"",""Epoch_cloak_F"",""Fin_random_EPOCH"",""Epoch_Male_F"",""Epoch_Female_F""], 250]) > 0)"; + dialogue[] = {"The UAV picked up a heat signature. Could be a person..","There is some.. thing in your area. Watch your back."}; + dialogue2[] = {"",""}; + action = ""; + frequency = 560; + }; + + class inmission3{ + condition = "(count (player nearEntities [[""Epoch_Sapper_F""], 250]) > 0)"; + dialogue[] = {"I think we have a target. The UAV picked up an unusual profile in your area.","Well done, you've found one. Now just lure him back to my location."}; + dialogue2[] = {"",""}; + action = ""; + frequency = 360; + }; + + class completed{ + condition = "";//handled in code + dialogue[] = {"Well Done, you made it. Get out of the way. I need to cage this animal.", "Great work, let me deal with this guy first."}; + dialogue2[] = {"You've been a great help, here is your reward. Now clear the area as I may release him soon.","I get a good price for these guys. Here is your cut, pleasure doing business."}; + action[] = {""}; + crypto[] = {100,150}; + weapon[] = {"Hatchet","hgun_P07_F"}; + magazine[] = {"hatchet_swing","16Rnd_9x21_Mag"}; + item[] = {"RabbitCarcass_EPOCH","ChickenCarcass_EPOCH"}; + }; + + class missioncheck{ + + class health{ + dialogue[] = {"You look hurt, I am going to inject some adrenaline using your implant.","Hang in there buddy.. Your implant is about to give you a boost."}; + dialogue2[] = {"",""}; + action = ""; + frequency = 60; + }; + + class characters{ + dialogue[] = {"The drone picks up a mild heat signature nearby, could be a body to loot","Have spotted a prone player near your location, might be worth investigating."}; + }; + + class itemlost{ + dialogue[] = {"Looks like you've lost the message, are you giving up on me ?","Don't leave that message lying around, it's essential that it arrives."}; + dialogue2[] = {"If you are thinking about taking the goods and running I would have a re-think.","I wouldn't run out on me now, the last person who tried didn't get very far !"}; + action = ""; + }; + + class passed{ + dialogue[] = {"So you're taking over this mission. Deliver this message to another trader for a reward.","New blood eh. This document needs delivering to a trader as soon as possible."}; + dialogue2[] = {"",""}; + action = ""; + }; + + class abandoned{ + condition = "(player distance _trader > 150)"; + dialogue[] = {"You running out with my gear..Not good, not good at all.","Take the gear and run eh ? You were supposed to be delivering a message !"}; + dialogue2[] = {"There's a price to pay for letting me down. Here it comes.","That's the last time you will cheat a trader. We don't take kindly to traitors."}; + delay = 60; + action = ""; + }; + + }; + + + }; + + class MissionUav{ + author = "axeman"; + missionName = "Bounty Hunter.";//Not used + + class welcome{ + condition = "(false)";//no longer used - button triggers mission + dialogue[] = {"I need to top up my coffers with some bounty. You are going to take control of a UAV and find a target for me.","How are your flying skills ? I need you to fly over nearby towns looking for a bounty."}; + dialogue2[] = {"I am giving you a Terminal Equip yourself with it.","Check your gear for the terminal. Equip yourself with it to start."}; + item[] = {"B_UavTerminal","B_UavTerminal"}; + action = ""; + }; + + class accept{ + condition = "(false)";//Decided in code - change to true to default accept mission. i.e. Doesn't require the player to be holding welcome item above e.g. + dialogue[] = {"Great, you are ready.I am preparing the UAV, it is outside. Once it is ready you can connect to it.","Splendid, you are a natural. Next, you will then need to connect to my UAV. Go look for it, I am preparing it for flight."}; + dialogue2[] = {"Once in control fly it around and get another player in you sights. Find a good spot to hide in during the mission.","Once you have control target another player in the UAV sights. You might want to find a quiet corner to operate from."}; + missionDeclined[] = {"Flying isn't for everyone. Come back when you have had some more practice eh ?","I guess you are just too busy right now. Come back later."}; + crypto[] = {0,0}; + weapon[] = {"",""}; + magazine[] = {"",""}; + item[] = {"",""}; + action = ""; + }; + + class inmission1{ + condition = "(count (getPos Epoch_mission_uav nearObjects[""Man"",250]) > 1)"; + dialogue[] = {"I think you have a target in the area. Keep looking !","The UAV is pinging back heat signatures. You are close, keep looking."}; + dialogue2[] = {"",""}; + action = ""; + frequency = 240; + }; + + class inmission2{ + condition = "(false)"; + dialogue[] = {"",""}; + dialogue2[] = {"",""}; + action = ""; + frequency = 560; + }; + + class inmission3{ + condition = "(false)"; + dialogue[] = {"",""}; + dialogue2[] = {"",""}; + action = ""; + frequency = 360; + }; + + class completed{ + condition = "";//handled in code + dialogue[] = {"That was some nice flying kid. Come back soon.", "Great work, was a pleasure working with you."}; + dialogue2[] = {"Here's an extra reward. Pick up what you need.","Here is a bit extra for your troubles.."}; + action[] = {""}; + crypto[] = {75,100}; + weapon[] = {"",""}; + magazine[] = {"",""}; + item[] = {"",""}; + }; + + class missioncheck{ + + class health{ + dialogue[] = {"You look hurt, I am going to inject some adrenaline using your implant.","Hang in there buddy.. Your implant is about to give you a boost."}; + dialogue2[] = {"",""}; + action = ""; + frequency = 60; + }; + + class characters{ + dialogue[] = {"The drone picks up a mild heat signature nearby, could be a body to loot","Have spotted a prone player near your location, might be worth investigating."}; + }; + + class itemlost{ + dialogue[] = {"Looks like you've lost the message, are you giving up on me ?","Don't leave that message lying around, it's essential that it arrives."}; + dialogue2[] = {"If you are thinking about taking the goods and running I would have a re-think.","I wouldn't run out on me now, the last person who tried didn't get very far !"}; + action = ""; + }; + + class passed{ + dialogue[] = {"So you're taking over this mission. Deliver this message to another trader for a reward.","New blood eh. This document needs delivering to a trader as soon as possible."}; + dialogue2[] = {"",""}; + action = ""; + }; + + class abandoned{ + condition = ""; + dialogue[] = {"Oh dear, smashing up my gear. Not good at all..","Hmm, do you think those UAVs grown on trees ?"}; + dialogue2[] = {"That's going to cost you, watch your back !","I am not happy about that ! Be more careful next time."}; + delay = 10; + action = ""; + }; + + }; + + + }; + + + class MissionDriver{ + author = "axeman"; + missionName = "The Generals Daughter."; + + class welcome{ + condition = "(false)"; + dialogue[] = {"I have an important delivery for you to make. She needs to arrive safely. Let me see if you need a GPS.","Can you drive ? My friend here needs a lift. Drop this person off to the general. I will make sure you have some equipment"}; + dialogue2[] = {"Take the generals daughter to the pick up point. There is a boat waiting so do not hang around.","This VIP must make it to the rendezvous. Wait for coordinates.. and make sure she gets there."}; + item[] = {"itemGPS","itemGPS"}; + action = ""; + }; + + class accept{ + condition = "(true)";//Decided in code - change to true to default accept mission. i.e. Doesn't require the player to be holding welcome item above e.g. + dialogue[] = {"",""}; + dialogue2[] = {"",""}; + missionDeclined[] = {"",""}; + crypto[] = {0,0}; + weapon[] = {"",""}; + magazine[] = {"",""}; + item[] = {"",""}; + action = ""; + }; + + class inmission1{ + condition = "(count (player nearEntities [[""Epoch_Male_F"",""Epoch_Female_F"",""C_man_hunter_1_F"",""Epoch_Female_Camo_F""], 150]) > 1)"; + dialogue[] = {"I think I saw someone.. Over there !","Was that a person ? I think there are survivors here."}; + dialogue2[] = {"",""}; + action = ""; + }; + + class inmission2{ + condition = "(count (player nearEntities [[""Epoch_Sapper_F"",""Alsatian_Random_EPOCH"",""Epoch_cloak_F"",""Fin_random_EPOCH""], 150]) > 0)"; + dialogue[] = {"I just spotted.. something. It could have been a dog ?","We need to keep moving ! I am sure I just saw some.. thing."}; + dialogue2[] = {"",""}; + action = ""; + }; + + class inmission3{ + condition = "(diag_tickTime - _missionTimer > 1200)"; + dialogue[] = {"Are we there yet ? If we take too long the boat will be gone.","Are you lost ? Daddy is not a patient man, can we hurry it up please."}; + dialogue2[] = {"",""}; + action = "_missionTimer = diag_tickTime"; + }; + + class completed{ + condition = ""; + dialogue[] = {"The General has sent us to collect his Daughter. Luckily for you she looks in good health.", "Nice work, you delivered her safely. Thankfully, or the General would not be happy."}; + dialogue2[] = {"Help yourself to supplies from our boat. Hurry, we are leaving shortly.","Our boat is laden with supplies. Take all you can carry as a reward for your good work."}; + action[] = {""}; + crypto[] = {75,100}; + weapon[] = {"arifle_MX_SW_Hamr_pointer_F","speargun_epoch"}; + magazine[] = {"100Rnd_65x39_caseless_mag_Tracer","spear_magazine"}; + item[] = {{"KitTiPi","ItemJade","wolf_mask_epoch","lighter_epoch"},{"KitPlotPole","KitShelf","pkin_mask_epoch","ItemGoldBar"}}; + }; + + class missioncheck{ + + class health{ + dialogue[] = {"You look hurt, I am not driving myself there.","You are bleeding ! Yuk, don't get blood on my seat."}; + dialogue2[] = {"Stop and find some medical supplies ?","Do you want to try and find a bandage or something ?"}; + action = ""; + frequency = 60; + }; + + class characters{ + dialogue[] = {"",""}; + }; + + class gotout{ + dialogue[] = {"Where are you going ?","Are you leaving me here ?"}; + dialogue2[] = {"Don't be long, I will wait here.","The heating is on, I am staying here and keeping warm !"}; + action = ""; + }; + + class passed{ + dialogue[] = {"",""}; + dialogue2[] = {"",""}; + action = ""; + }; + + class vehlost{ + condition = ""; + dialogue[] = {"Oh dear, that didn't go well. Maybe stop before driving into something next time ?","Nice driving, now what are going to do ?"}; + dialogue2[] = {"You need to find us another vehicle. I am not walking all the way there.","How are we going to get there now? You had best find another vehicle !"}; + delay = 10; + action = ""; + }; + + }; + + + }; + +}; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgVehicleUpgrades.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgVehicleUpgrades.hpp new file mode 100644 index 0000000..7921e42 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/Configs/CfgVehicleUpgrades.hpp @@ -0,0 +1,163 @@ +/* + @author = "Aaron Clark - https://EpochMod.com"; + @contributors[] = {"DirtySanchez","He-Man"}; + @description = "Vehicle Upgrade configs"; + @licence = "Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike"; + @github = "https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgItemInteractions.hpp"; +*/ +class CfgVehicleUpgrades +{ + class C_Hatchback_01_EPOCH + { + upgradeToVehicle[] = {"C_Hatchback_01_EPOCH1"}; + class C_Hatchback_01_EPOCH1 + { + ReqMaterials[] = {{1,"KitVehicleUpgradeI_200_EPOCH"}}; + }; + class C_Hatchback_02_EPOCH1: C_Hatchback_01_EPOCH1 {}; + class C_Offroad_01_EPOCH1: C_Hatchback_01_EPOCH1 {}; + class C_SUV_01_EPOCH1: C_Hatchback_01_EPOCH1 {}; + class B_MRAP_01_EPOCH1: C_Hatchback_01_EPOCH1 {}; + class O_MRAP_02_EPOCH1: C_Hatchback_01_EPOCH1 {}; + class I_MRAP_03_EPOCH1: C_Hatchback_01_EPOCH1 {}; + }; + class C_Hatchback_02_EPOCH: C_Hatchback_01_EPOCH { upgradeToVehicle[] = {"C_Hatchback_02_EPOCH1"}; }; + class C_Offroad_01_EPOCH: C_Hatchback_01_EPOCH { upgradeToVehicle[] = {"C_Offroad_01_EPOCH1"}; }; + class C_SUV_01_EPOCH: C_Hatchback_01_EPOCH { upgradeToVehicle[] = {"C_SUV_01_EPOCH1"}; }; + class B_MRAP_01_EPOCH: C_Hatchback_01_EPOCH { upgradeToVehicle[] = {"B_MRAP_01_EPOCH1"}; }; + class O_MRAP_02_EPOCH: C_Hatchback_01_EPOCH { upgradeToVehicle[] = {"O_MRAP_02_EPOCH1"}; }; + class I_MRAP_03_EPOCH: C_Hatchback_01_EPOCH { upgradeToVehicle[] = {"I_MRAP_03_EPOCH1"}; }; + + class C_Hatchback_01_EPOCH1 + { + upgradeToVehicle[] = {"C_Hatchback_01_EPOCH2"}; + class C_Hatchback_01_EPOCH2 + { + ReqMaterials[] = {{1,"KitVehicleUpgradeII_200_EPOCH"}}; + }; + class C_Hatchback_02_EPOCH2: C_Hatchback_01_EPOCH2 {}; + class C_Offroad_01_EPOCH2: C_Hatchback_01_EPOCH2 {}; + class C_SUV_01_EPOCH2: C_Hatchback_01_EPOCH2 {}; + class B_MRAP_01_EPOCH2: C_Hatchback_01_EPOCH2 {}; + class O_MRAP_02_EPOCH2: C_Hatchback_01_EPOCH2 {}; + class I_MRAP_03_EPOCH2: C_Hatchback_01_EPOCH2 {}; + }; + class C_Hatchback_02_EPOCH1: C_Hatchback_01_EPOCH1 { upgradeToVehicle[] = {"C_Hatchback_02_EPOCH2"}; }; + class C_Offroad_01_EPOCH1: C_Hatchback_01_EPOCH1 { upgradeToVehicle[] = {"C_Offroad_01_EPOCH2"}; }; + class C_SUV_01_EPOCH1: C_Hatchback_01_EPOCH1 { upgradeToVehicle[] = {"C_SUV_01_EPOCH2"}; }; + class B_MRAP_01_EPOCH1: C_Hatchback_01_EPOCH1 { upgradeToVehicle[] = {"B_MRAP_01_EPOCH2"}; }; + class O_MRAP_02_EPOCH1: C_Hatchback_01_EPOCH1 { upgradeToVehicle[] = {"O_MRAP_02_EPOCH2"}; }; + class I_MRAP_03_EPOCH1: C_Hatchback_01_EPOCH1 { upgradeToVehicle[] = {"I_MRAP_03_EPOCH2"}; }; + + class C_Hatchback_01_EPOCH2 + { + upgradeToVehicle[] = {"C_Hatchback_01_EPOCH3"}; + class C_Hatchback_01_EPOCH3 + { + ReqMaterials[] = {{1,"KitVehicleUpgradeIII_200_EPOCH"}}; + }; + class C_Hatchback_02_EPOCH3: C_Hatchback_01_EPOCH3 {}; + class C_Offroad_01_EPOCH3: C_Hatchback_01_EPOCH3 {}; + class C_SUV_01_EPOCH3: C_Hatchback_01_EPOCH3 {}; + class B_MRAP_01_EPOCH3: C_Hatchback_01_EPOCH3 {}; + class O_MRAP_02_EPOCH3: C_Hatchback_01_EPOCH3 {}; + class I_MRAP_03_EPOCH3: C_Hatchback_01_EPOCH3 {}; + }; + class C_Hatchback_02_EPOCH2: C_Hatchback_01_EPOCH2 { upgradeToVehicle[] = {"C_Hatchback_02_EPOCH3"}; }; + class C_Offroad_01_EPOCH2: C_Hatchback_01_EPOCH2 { upgradeToVehicle[] = {"C_Offroad_01_EPOCH3"}; }; + class C_SUV_01_EPOCH2: C_Hatchback_01_EPOCH2 { upgradeToVehicle[] = {"C_SUV_01_EPOCH3"}; }; + class B_MRAP_01_EPOCH2: C_Hatchback_01_EPOCH2 { upgradeToVehicle[] = {"B_MRAP_01_EPOCH3"}; }; + class O_MRAP_02_EPOCH2: C_Hatchback_01_EPOCH2 { upgradeToVehicle[] = {"O_MRAP_02_EPOCH3"}; }; + class I_MRAP_03_EPOCH2: C_Hatchback_01_EPOCH2 { upgradeToVehicle[] = {"I_MRAP_03_EPOCH3"}; }; + + class C_Hatchback_01_EPOCH3 + { + upgradeToVehicle[] = {"C_Hatchback_01_EPOCH4"}; + class C_Hatchback_01_EPOCH4 + { + ReqMaterials[] = {{1,"KitVehicleUpgradeIV_200_EPOCH"}}; + }; + class C_Hatchback_02_EPOCH4: C_Hatchback_01_EPOCH4 {}; + class C_Offroad_01_EPOCH4: C_Hatchback_01_EPOCH4 {}; + class C_SUV_01_EPOCH4: C_Hatchback_01_EPOCH4 {}; + class B_MRAP_01_EPOCH4: C_Hatchback_01_EPOCH4 {}; + class O_MRAP_02_EPOCH4: C_Hatchback_01_EPOCH4 {}; + class I_MRAP_03_EPOCH4: C_Hatchback_01_EPOCH4 {}; + }; + class C_Hatchback_02_EPOCH3: C_Hatchback_01_EPOCH3 { upgradeToVehicle[] = {"C_Hatchback_02_EPOCH4"}; }; + class C_Offroad_01_EPOCH3: C_Hatchback_01_EPOCH3 { upgradeToVehicle[] = {"C_Offroad_01_EPOCH4"}; }; + class C_SUV_01_EPOCH3: C_Hatchback_01_EPOCH3 { upgradeToVehicle[] = {"C_SUV_01_EPOCH4"}; }; + class B_MRAP_01_EPOCH3: C_Hatchback_01_EPOCH3 { upgradeToVehicle[] = {"B_MRAP_01_EPOCH4"}; }; + class O_MRAP_02_EPOCH3: C_Hatchback_01_EPOCH3 { upgradeToVehicle[] = {"O_MRAP_02_EPOCH4"}; }; + class I_MRAP_03_EPOCH3: C_Hatchback_01_EPOCH3 { upgradeToVehicle[] = {"I_MRAP_03_EPOCH4"}; }; + + class K01 + { + upgradeToVehicle[] = {"mosquito_epoch"}; + class mosquito_epoch + { + ReqMaterials[] = {{1,"ItemVehDocRara"},{2,"PaintCanOra"},{4,"ItemPipe"},{2,"jerrycan_epoch"}}; + }; + }; + class K02: K01 {}; + class K03: K01 {}; + class K04: K01 {}; + + class C_Offroad_01_EPOCH4 + { + upgradeToVehicle[] = {"C_Offroad_01_EPOCH5"}; + class C_Offroad_01_EPOCH5 + { + ReqMaterials[] = {{1,"ItemVehDocRara"},{1,"PaintCanBlu"},{1,"PaintCanRed"},{1,"CircuitParts"},{1,"ItemBattery"}}; + }; + }; + +/* +############ Examples ############ + +// Upgrade several M900 into Hummingbird or a Hellcat: + class C_Heli_light_01_red_F // Class to Upgrade ("C_Heli_light_01_red_F") + { + upgradeToVehicle[] = {"B_Heli_Light_01_EPOCH","I_Heli_light_03_unarmed_EPOCH"}; // What Classes can be upgraded to (Hummingbird + Hellcat) + class B_Heli_Light_01_EPOCH // Upgrade to: Hummingbird with "KitVehicleUpgradeII_200_EPOCH" + { + ReqMaterials[] = {{1,"KitVehicleUpgradeII_200_EPOCH"}}; + }; + class I_Heli_light_03_unarmed_EPOCH // Upgrade to: Hellcat with "KitVehicleUpgradeII_200_EPOCH" + { + ReqMaterials[] = {{1,"KitVehicleUpgradeII_200_EPOCH"}}; + }; + }; + class C_Heli_light_01_blue_F : C_Heli_light_01_red_F {}; // Upgrade "C_Heli_light_01_blue_F" to Hummingbird / Hellcat (same setting as for "C_Heli_light_01_red_F") + class C_Heli_light_01_ion_F : C_Heli_light_01_red_F {}; + class C_Heli_light_01_graywatcher_F : C_Heli_light_01_red_F {}; + class C_Heli_light_01_wasp_F : C_Heli_light_01_red_F {}; + class C_Heli_light_01_digital_F : C_Heli_light_01_red_F {}; + class C_Heli_light_01_vrana_F : C_Heli_light_01_red_F {}; + class C_Heli_light_01_speedy_F : C_Heli_light_01_red_F {}; + class C_Heli_light_01_jeans_F : C_Heli_light_01_red_F {}; + class C_Heli_light_01_light_F : C_Heli_light_01_red_F {}; + class C_Heli_light_01_shadow_F : C_Heli_light_01_red_F {}; + class C_Heli_light_01_furious_F : C_Heli_light_01_red_F {}; + class C_Heli_light_01_wave_F : C_Heli_light_01_red_F {}; + class C_Heli_light_01_sheriff_F : C_Heli_light_01_red_F {}; + + + +// Upgrade Offroader into an Ifrit or several Offroader Armed: + class C_Offroad_01_EPOCH // Class to Upgrade ("C_Offroad_01_EPOCH") + { + upgradeToVehicle[] = {{"O_G_Offroad_01_armed_F","I_G_Offroad_01_armed_F","B_G_Offroad_01_armed_F"},"O_MRAP_02_EPOCH"}; // What Classes can be upgraded to + class O_MRAP_02_EPOCH // Upgrade to: Ifrit with "KitVehicleUpgradeIV_200_EPOCH" + { + ReqMaterials[] = {{1,"KitVehicleUpgradeIV_200_EPOCH"}}; + }; + class O_G_Offroad_01_armed_F // Upgrade to: "Offroader Armed Brown" with "KitVehicleUpgradeIII_200_EPOCH" + { + ReqMaterials[] = {{1,"KitVehicleUpgradeIII_200_EPOCH"}}; + }; + class I_G_Offroad_01_armed_F : O_G_Offroad_01_armed_F {}; // Upgrade to: Offroader Armed Green (same needed material then for "O_G_Offroad_01_armed_F") + class B_G_Offroad_01_armed_F : O_G_Offroad_01_armed_F {}; // Upgrade to: Offroader Armed Grey (same needed material then for "O_G_Offroad_01_armed_F") + }; +*/ +}; \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/build.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/build.hpp new file mode 100644 index 0000000..ebdd628 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/build.hpp @@ -0,0 +1 @@ +build=826; diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/license.txt b/Server/mpmissions/epoch.Bornholm/epoch_config/license.txt new file mode 100644 index 0000000..35440e4 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/license.txt @@ -0,0 +1,9 @@ +Epoch Mod for Arma 3 +http://epochmod.com +by Epoch Mod Team +https://github.com/EpochModTeam/Epoch + +The contents of this pbo are under the following license: +http://www.bistudio.com/community/licenses/arma-public-license-share-alike + +Keep this file and file headers with attribution intact for proper use. \ No newline at end of file diff --git a/Server/mpmissions/epoch.Bornholm/epoch_config/sandbox_config.hpp b/Server/mpmissions/epoch.Bornholm/epoch_config/sandbox_config.hpp new file mode 100644 index 0000000..b5d44af --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/epoch_config/sandbox_config.hpp @@ -0,0 +1,105 @@ +/* + Epoch Mod Survival Gamemode + + Author: Epoch Mod Team - EpochMod.com + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/config.hpp +*/ +author = "Epoch Mod Team"; +class Header +{ + gameType = Survive; + minPlayers = 1; + maxPlayers = 200; +}; +respawn = "BASE"; +respawnDelay = 600; +respawnDialog = 0; +respawnButton = 0; +respawnOnStart = -1; +onPauseScript = "epoch_code\gui\scripts\Epoch_onPause.sqf"; +onLoadMission= "Epoch"; +OnLoadIntro = "Welcome to Epoch Mod"; +loadScreen = "\x\addons\a3_epoch_assets\pictures\loadScreen_ca.paa"; +OnLoadIntroTime = 0; +OnLoadMissionTime = 0; +onLoadName = "Epoch Mod"; +disabledAI = 1; +scriptedPlayer = 1; +disableChannels[]={{0,true,true},{1,false,true},{2,true,true},{6,true,true}}; // allow text only on side chat +enableItemsDropping = 0; +briefing = 0; +debriefing = 0; +enableDebugConsole = 0; +joinUnassigned = 0; +forceRotorLibSimulation = 1; +saving = 0; + +corpseManagerMode = 1; +corpseLimit = 10; +corpseRemovalMinTime = 1200; +corpseRemovalMaxTime = 3600; + +wreckManagerMode = 1; +wreckLimit = 2; +wreckRemovalMinTime = 60; +wreckRemovalMaxTime = 360; + +disableRandomization[] = {"All"}; + +unsafeCVL = 1; // Allows createVehicleLocal to be executed in Multiplayer + +showHUD[] = +{ + true, // Scripted HUD (same as showHUD command) + true, // Vehicle + soldier info + true, // Vehicle radar + true, // Vehicle compass + true, // Tank direction indicator + false, // Commanding menu + false, // Group Bar + true, // HUD Weapon Cursors + true // Vehicle display panels +}; + +#include "Configs\CfgServicePoint.hpp" +#include "Configs\CfgItemSort.hpp" +#include "Configs\CfgTraderMissions.hpp" +#include "Configs\CfgMissions.hpp" +#include "Configs\CfgMissionsTasks.hpp" +#include "Configs\cfgCrafting.hpp" +#include "Configs\cfgPricing.hpp" +#include "Configs\CfgDynamicHUD.hpp" +#include "Configs\CfgEPad.hpp" +#include "Configs\CfgPainting.hpp" + +#include "Configs\CfgEpochClient.hpp" + +#include "Configs\CfgMasterLoop.hpp" +#include "Configs\CfgBaseBuilding.hpp" +#include "Configs\CfgSnapChecks.hpp" +#include "Configs\CfgBuildingLootPos.hpp" +#include "Configs\CfgActionMenu\CfgActionMenu_core.hpp" +#include "Configs\CfgEpochConfiguration.hpp" +#include "Configs\CfgClientFunctions.hpp" +#include "Configs\CfgObjectInteractions.hpp" +#include "Configs\CfgItemInteractions.hpp" +#include "Configs\CfgSay3Dhandler.hpp" +#include "Configs\CfgSwitchMovehandler.hpp" +#include "Configs\CfgVehicleUpgrades.hpp" +#include "Configs\CfgReadingDocuments.hpp" +#include "Configs\CfgMarkerSets.hpp" + +// A3 specific configs +#include "Configs\CfgFunctions.hpp" +#include "Configs\CfgRemoteExec.hpp" +#include "Configs\CfgDisabledCommands.hpp" + +class CfgEpochBuild +{ + #include "build.hpp" +}; diff --git a/Server/mpmissions/epoch.Bornholm/mission.sqm b/Server/mpmissions/epoch.Bornholm/mission.sqm new file mode 100644 index 0000000..0a53072 --- /dev/null +++ b/Server/mpmissions/epoch.Bornholm/mission.sqm @@ -0,0 +1,6081 @@ +version=51; +class EditorData +{ + moveGridStep=1; + angleGridStep=0.2617994; + scaleGridStep=1; + autoGroupingDist=10; + toggles=1; + class ItemIDProvider + { + nextID=2; + }; + class Camera + { + pos[]={7542.4932,93.791428,15492.986}; + dir[]={-0.8989169,-0.17364819,-0.40223712}; + up[]={-0.15850332,0.98480779,-0.070925266}; + aside[]={-0.40844229,0,0.91278416}; + }; +}; +binarizationWanted=0; +addons[]= +{ + "A3_epoch_config", + "bornholm", + "a3_characters_f" +}; +randomSeed=12032465; +class ScenarioData +{ + author="[VB]AWOL"; +}; +class Mission +{ + class Intel + { + briefingName="Epoch Mod"; + timeOfChanges=28800; + startWeather=0; + startWind=0; + forecastWeather=0; + forecastWind=0; + forecastWaves=0; + forecastLightnings=0; + year=2035; + month=6; + day=24; + hour=12; + minute=0; + startFogDecay=0; + forecastFogDecay=0; + }; + class Entities + { + items=203; + class Item0 + { + dataType="Marker"; + position[]={10058.347,0,9015.8477}; + name="center"; + type="Empty"; + id=0; + }; + class Item1 + { + dataType="Marker"; + position[]={2404,0,16540}; + name="respawn_east"; + type="Empty"; + id=1; + }; + class Item2 + { + dataType="Marker"; + position[]={2404,0,16540}; + name="respawn_west"; + type="Empty"; + id=2; + }; + class Item3 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=4; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=3; + }; + class Item4 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=6; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=5; + }; + class Item5 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=8; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=7; + }; + class Item6 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=10; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=9; + }; + class Item7 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=12; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=11; + }; + class Item8 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=14; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=13; + }; + class Item9 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=16; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=15; + }; + class Item10 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=18; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=17; + }; + class Item11 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=20; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=19; + }; + class Item12 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=22; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=21; + }; + class Item13 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=24; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=23; + }; + class Item14 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=26; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=25; + }; + class Item15 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=28; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=27; + }; + class Item16 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=30; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=29; + }; + class Item17 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=32; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=31; + }; + class Item18 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=34; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=33; + }; + class Item19 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=36; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=35; + }; + class Item20 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=38; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=37; + }; + class Item21 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=40; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=39; + }; + class Item22 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=42; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=41; + }; + class Item23 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=44; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=43; + }; + class Item24 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=46; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=45; + }; + class Item25 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=48; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=47; + }; + class Item26 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=50; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=49; + }; + class Item27 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=52; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=51; + }; + class Item28 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=54; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=53; + }; + class Item29 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=56; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=55; + }; + class Item30 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=58; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=57; + }; + class Item31 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=60; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=59; + }; + class Item32 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=62; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=61; + }; + class Item33 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=64; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=63; + }; + class Item34 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=66; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=65; + }; + class Item35 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=68; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=67; + }; + class Item36 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=70; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=69; + }; + class Item37 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=72; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=71; + }; + class Item38 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=74; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=73; + }; + class Item39 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=76; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=75; + }; + class Item40 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=78; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=77; + }; + class Item41 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=80; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=79; + }; + class Item42 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=82; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=81; + }; + class Item43 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=84; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=83; + }; + class Item44 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=86; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=85; + }; + class Item45 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=88; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=87; + }; + class Item46 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=90; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=89; + }; + class Item47 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=92; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=91; + }; + class Item48 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=94; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=93; + }; + class Item49 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=96; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=95; + }; + class Item50 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=98; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=97; + }; + class Item51 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=100; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=99; + }; + class Item52 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=102; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=101; + }; + class Item53 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=104; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=103; + }; + class Item54 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=106; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=105; + }; + class Item55 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=108; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=107; + }; + class Item56 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=110; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=109; + }; + class Item57 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=112; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=111; + }; + class Item58 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=114; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=113; + }; + class Item59 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=116; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=115; + }; + class Item60 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=118; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=117; + }; + class Item61 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=120; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=119; + }; + class Item62 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=122; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=121; + }; + class Item63 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=124; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=123; + }; + class Item64 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=126; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=125; + }; + class Item65 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=128; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=127; + }; + class Item66 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=130; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=129; + }; + class Item67 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=132; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=131; + }; + class Item68 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=134; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=133; + }; + class Item69 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=136; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=135; + }; + class Item70 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=138; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=137; + }; + class Item71 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=140; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=139; + }; + class Item72 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=142; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=141; + }; + class Item73 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=144; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=143; + }; + class Item74 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=146; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=145; + }; + class Item75 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=148; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=147; + }; + class Item76 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=150; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=149; + }; + class Item77 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=152; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=151; + }; + class Item78 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=154; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=153; + }; + class Item79 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=156; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=155; + }; + class Item80 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=158; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=157; + }; + class Item81 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=160; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=159; + }; + class Item82 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=162; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=161; + }; + class Item83 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=164; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=163; + }; + class Item84 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=166; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=165; + }; + class Item85 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=168; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=167; + }; + class Item86 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=170; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=169; + }; + class Item87 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=172; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=171; + }; + class Item88 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=174; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=173; + }; + class Item89 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=176; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=175; + }; + class Item90 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=178; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=177; + }; + class Item91 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=180; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=179; + }; + class Item92 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=182; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=181; + }; + class Item93 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=184; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=183; + }; + class Item94 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=186; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=185; + }; + class Item95 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=188; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=187; + }; + class Item96 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=190; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=189; + }; + class Item97 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=192; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=191; + }; + class Item98 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=194; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=193; + }; + class Item99 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=196; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=195; + }; + class Item100 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=198; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=197; + }; + class Item101 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=200; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=199; + }; + class Item102 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=202; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=201; + }; + class Item103 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=204; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=203; + }; + class Item104 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=206; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=205; + }; + class Item105 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=208; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=207; + }; + class Item106 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=210; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=209; + }; + class Item107 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=212; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=211; + }; + class Item108 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=214; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=213; + }; + class Item109 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=216; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=215; + }; + class Item110 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=218; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=217; + }; + class Item111 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=220; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=219; + }; + class Item112 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=222; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=221; + }; + class Item113 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=224; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=223; + }; + class Item114 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=226; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=225; + }; + class Item115 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=228; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=227; + }; + class Item116 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=230; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=229; + }; + class Item117 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=232; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=231; + }; + class Item118 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=234; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=233; + }; + class Item119 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=236; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=235; + }; + class Item120 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=238; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=237; + }; + class Item121 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=240; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=239; + }; + class Item122 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=242; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=241; + }; + class Item123 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=244; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=243; + }; + class Item124 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=246; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=245; + }; + class Item125 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=248; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=247; + }; + class Item126 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=250; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=249; + }; + class Item127 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=252; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=251; + }; + class Item128 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=254; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=253; + }; + class Item129 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=256; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=255; + }; + class Item130 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=258; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=257; + }; + class Item131 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=260; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=259; + }; + class Item132 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=262; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=261; + }; + class Item133 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=264; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=263; + }; + class Item134 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=266; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=265; + }; + class Item135 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=268; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=267; + }; + class Item136 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=270; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=269; + }; + class Item137 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=272; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=271; + }; + class Item138 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=274; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=273; + }; + class Item139 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=276; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=275; + }; + class Item140 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=278; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=277; + }; + class Item141 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=280; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=279; + }; + class Item142 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=282; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=281; + }; + class Item143 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=284; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=283; + }; + class Item144 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=286; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=285; + }; + class Item145 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=288; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=287; + }; + class Item146 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=290; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=289; + }; + class Item147 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=292; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=291; + }; + class Item148 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=294; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=293; + }; + class Item149 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=296; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=295; + }; + class Item150 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=298; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=297; + }; + class Item151 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=300; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=299; + }; + class Item152 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=302; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=301; + }; + class Item153 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=304; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=303; + }; + class Item154 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=306; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=305; + }; + class Item155 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=308; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=307; + }; + class Item156 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=310; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=309; + }; + class Item157 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=312; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=311; + }; + class Item158 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=314; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=313; + }; + class Item159 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=316; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=315; + }; + class Item160 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=318; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=317; + }; + class Item161 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=320; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=319; + }; + class Item162 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=322; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=321; + }; + class Item163 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=324; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=323; + }; + class Item164 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=326; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=325; + }; + class Item165 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=328; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=327; + }; + class Item166 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=330; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=329; + }; + class Item167 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=332; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=331; + }; + class Item168 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=334; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=333; + }; + class Item169 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=336; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=335; + }; + class Item170 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=338; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=337; + }; + class Item171 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=340; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=339; + }; + class Item172 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=342; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=341; + }; + class Item173 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=344; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=343; + }; + class Item174 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=346; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=345; + }; + class Item175 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=348; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=347; + }; + class Item176 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=350; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=349; + }; + class Item177 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=352; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=351; + }; + class Item178 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=354; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=353; + }; + class Item179 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=356; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=355; + }; + class Item180 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=358; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=357; + }; + class Item181 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=360; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=359; + }; + class Item182 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=362; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=361; + }; + class Item183 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=364; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=363; + }; + class Item184 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=366; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=365; + }; + class Item185 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=368; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=367; + }; + class Item186 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=370; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=369; + }; + class Item187 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=372; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=371; + }; + class Item188 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=374; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=373; + }; + class Item189 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=376; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=375; + }; + class Item190 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=378; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=377; + }; + class Item191 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=380; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=379; + }; + class Item192 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=382; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=381; + }; + class Item193 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=384; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=383; + }; + class Item194 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=386; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=385; + }; + class Item195 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=388; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=387; + }; + class Item196 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=390; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=389; + }; + class Item197 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=392; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=391; + }; + class Item198 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=394; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=393; + }; + class Item199 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=396; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=395; + }; + class Item200 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=398; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=397; + }; + class Item201 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=400; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=399; + }; + class Item202 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={2404,0,16540}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=3; + class Attributes + { + isPlayable=1; + }; + id=402; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=401; + }; + }; +}; diff --git a/Server/mpmissions/epoch.Bornholm/treeView.txt b/Server/mpmissions/epoch.Bornholm/treeView.txt new file mode 100644 index 0000000..d189b62 Binary files /dev/null and b/Server/mpmissions/epoch.Bornholm/treeView.txt differ diff --git a/Server/restartserver_x64.bat b/Server/restartserver_x64.bat new file mode 100644 index 0000000..b1c4694 --- /dev/null +++ b/Server/restartserver_x64.bat @@ -0,0 +1,39 @@ +@echo off + +:: Turn off all firewall rules +echo Disabling firewall rules for this server +netsh advfirewall firewall delete rule name="a3Epoch" program="F:\GameServers\Arma3\arma3epoch\Epochserver_x64.exe" +timeout 2 + +:: MAKE SURE ALL TASKS ARE REALLY STOPPED +echo Making sure all instances of this server have stopped +taskkill /f /fi "status eq not responding" /im Epochserver_x64.exe +taskkill /f /im Epochserver_x64.exe +timeout 2 + +:: Rotate Logs and backup DB +echo Rotating logs and backing up DB +start "" "F:\GameServers\Arma3\arma3epoch\Tools\log-rotator.cmd" +timeout 2 + +:: RESTARTING THE ARMA 3 SERVER BE SURE TO EDIT THIS TO YOUR SERVER .EXE LOCATION -NOTE ALSO THIS IS WHERE YOU DEFINE WHERE YOU CONFIG.CFG IS +echo Starting ARMA 3 Server... +C:\Windows\System32\cmd.exe /C start "arma3" "F:\GameServers\Arma3\arma3epoch\Epochserver_x64.exe" "-mod=@Epoch;@bornholm;@CBA_A3;" "-serverMod=@EpochHive;" -config=F:\GameServers\Arma3\arma3epoch\sc\server.cfg -port=2302 -profiles=sc -cfg=F:\GameServers\Arma3\arma3epoch\sc\basic.cfg -name=sc -autoINIT -Loadmissiontomemory +echo ARMA 3 Server has started +timeout 60 + +:: THIS RUNS THE SERVER MONITOR FOR YOU SO YOU DON'T FORGET +echo Starting Server Monitor Loop +set ServerMonitorPath="C:\Epochserver" +cd /d %ServerMonitorPath% +start /min "" "servermonitor.bat" +echo Server Monitor has started. Have Fun +timeout 5 + +:: Turn On Firewall rule +timeout 10 +echo Turning on Firewall Rule to allow server network traffic +netsh advfirewall firewall add rule name="a3Epoch" dir=in action=allow program="F:\GameServers\Arma3\arma3epoch\Epochserver_x64.exe" enable=yes +echo Firewall is on and players can join +timeout 5 +@exit \ No newline at end of file diff --git a/Server/servermonitor.bat b/Server/servermonitor.bat new file mode 100644 index 0000000..9a8e4f4 --- /dev/null +++ b/Server/servermonitor.bat @@ -0,0 +1,23 @@ +@echo off +::IMPORTANT TO NAME IT SO WE CAN KILL IT +title servermonitor.bat +:start +C:\Windows\System32\tasklist /FI "IMAGENAME eq Epochserver_x64.exe" 2>NUL | C:\Windows\System32\find /I /N "Epochserver_x64.exe">NUL +if "%ERRORLEVEL%"=="0" goto loop +echo Server is not running, will be started now +start "" /min /wait "F:\GameServers\Arma3\arma3epoch\restartserver_x64.bat" +timeout 30 +echo Server started succesfully +exit +goto started +:loop +cls +echo Server is already running, running monitoring loop +:started +::THE 80 REFERS TO SECONDS AND HOW OFTEN IT WILL CHECK,YOU CAN SET IT TO WHATEVER YOU WANT. I JUST DONT WANT MY SERVER DOWN FOR MUCH LONGER THAN THAT! +::New error fault kill, will check for err fault and clear it and hopefully restart, a little more promise but no guarantee :) +taskkill /f /im WerFault.exe /fi "WINDOWTITLE eq Arma 3" +C:\Windows\System32\timeout /t 150 +C:\Windows\System32\tasklist /FI "IMAGENAME eq Epochserver_x64.exe" 2>NUL | C:\Windows\System32\find /I /N "Epochserver_x64.exe">NUL +if "%ERRORLEVEL%"=="0" goto loop +goto start \ No newline at end of file diff --git a/StageFilesToServer.bat b/StageFilesToServer.bat new file mode 100644 index 0000000..1738df0 --- /dev/null +++ b/StageFilesToServer.bat @@ -0,0 +1,34 @@ +rem @Echo Off + +f: +cd F:\GitRepo\Arma3_Repo\Server +set DEST=F:\GameServers\Arma3\arma3epoch\ + +REM A3EAI +copy /y .\@A3EAI\addons\*.pbo %DEST%\@A3EAI\addons + +REM epochHive +copy /y .\@epochhive\*.hpp %DEST%\@epochHive +copy /y .\@epochhive\EpochServer.ini %DEST%\@epochHive +copy /y .\@epochhive\addons\*.pbo %DEST%\@epochhive\addons + +REM @GMS +copy /y .\@GMS\addons\*.pbo %DEST%\@GMS\addons + +REM DB +copy /y .\DB\*redis* %DEST%\DB + +REM Mission File +copy /y .\mpmissions\epoch.Bornholm.pbo %DEST%\mpmissions + +REM SC +copy /y .\sc\*.* %DEST%\sc + +REM Tools +copy /y .\Tools\*.* %DEST%\Tools + +REM Server Monitor +copy /y .\restartserver_x64.bat %DEST% +copy /y .\servermonitor.bat %DEST% + +pause \ No newline at end of file